注册 登录
重磅消息:开通VIP会员,获取平台所有项目,永久使用,详细请咨询QQ:3376762016
远程服务部署安装,售后服务,请加QQ1:3376762016,QQ2:3597230140(即将满员),QQ3:1399491757(已满)
查看: 1006|回复: 0
打印 上一主题 下一主题

求两个求点和线距离

[复制链接]

该用户从未签到

3518

主题

3532

帖子

66万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
668946
QQ
跳转到指定楼层
楼主
发表于 2020-10-27 18:43:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
import java.util.Scanner;

public class Point {
        
        private double x;
        
        private double y;

        
        public static void main(String[] args) throws Throwable{
                try(Scanner s = new Scanner(System.in)){
                        System.out.println("请输入点a的坐标。");
                        Point p1 = new Point(s.nextDouble(), s.nextDouble());
                        System.out.println("请输入点b的坐标。");
                        Point p2 = new Point(s.nextDouble(), s.nextDouble());
                        System.out.printf("点a的位置: %s%n", p1);
                        System.out.printf("点a到原点的距离: %.2f%n", p1.getDistance());
                        p1.move(1, 1);
                        System.out.printf("点a移动后的位置: %s%n", p1);
                        System.out.printf("点b的位置: %s%n", p2);
                        System.out.printf("点a与b的距离: %.2f%n", p1.getDistance(p2));
                        System.out.printf("点a和b一样吗?: %s%n", p1.isSamePosition(p2));
                }
        }

        public Point(double x, double y) {
                this.x=x;
                this.y=y;
        }

        public boolean isSamePosition(Point p2) {
                return this==p2;
        }

        public double getDistance() {
                return Math.sqrt(x*x+y*y);
        }

        public double getDistance(Point p2) {
                double sum=Math.sqrt((p2.x-this.x)*(p2.x-this.x)+(p2.y-this.y)*(p2.y-this.y));
                return sum;
        }

        public void move(double dx, double dy) {
                this.x=this.x+dx;
                this.y=this.y+dy;
        }
        
        public String toString() {
                return "["+this.x+","+this.y+"]";
        }

        public double getX() {
                return x;
        }

        public void setX(double x) {
                this.x = x;
        }

        public double getY() {
                return y;
        }

        public void setY(double y) {
                this.y = y;
        }

        
}


请输入点a的坐标。
3 4
请输入点b的坐标。
5 6
点a的位置: [3.0,4.0]
点a到原点的距离: 5.0
点a移动后的位置: [4.0,5.0]
点b的位置: [5.0,6.0]
点a与b的距离: 1.41
点a和b一样吗?: false




import java.util.Scanner;

public class Line {
        private Point p1,p2;
        public static void main(String[] args) throws Throwable{
                try(Scanner s = new Scanner(System.in)){
                        System.out.println("请按x1 y1 x2 y2的顺序输入线段的坐标。");
                        Point p1 = new Point(s.nextDouble(), s.nextDouble());
                        Point p2 = new Point(s.nextDouble(), s.nextDouble());
                        System.out.println("请按x y的顺序输入点的坐标。");
                        Point p3 = new Point(s.nextDouble(), s.nextDouble());
                        Line l = new Line(p1, p2);
                        System.out.printf("线段: %s%n", l);
                        System.out.printf("线段的长度: %.2f%n", l.getLength());
                        l.move(1, 1);
                        System.out.printf("移动后的线段: %s%n", l);
                        System.out.printf("点%s在线段%s上吗?: %s%n", p3, l, l.isOn(p3));
                }
        }

        public Line(Point p1, Point p2) {
                this.p1=p1;
                this.p2=p2;
        }

        public double getLength() {
                double sum=Math.sqrt((p2.getX()-p1.getX())*(p2.getX()-p1.getX())+(p2.getY()-p1.getY())*(p2.getY()-p1.getY()));
               
                return sum;
        }

        public void move(int dx, int dy) {
                p1.setX(p1.getX()+dx);
                p1.setY(p1.getY()+dy);
               
                p2.setX(p2.getX()+dx);
               
                p2.setY(p2.getY()+dy);
               
               
        }

        public boolean isOn(Point p) {
               
                boolean pdline = (p.getX() - p1.getX()) * (p1.getY() - p2.getY()) == (p1.getX() - p2.getX())
                                * (p.getY() - p1.getY());
               

                return pdline;
        }

        public String toString() {
               
                return "["+p1.getX()+","+p1.getY()+"]->["+p2.getX()+","+p2.getY()+"]";
        }
       
}

请按x1 y1 x2 y2的顺序输入线段的坐标。
0 0 2 4
请按x y的顺序输入点的坐标。
2 3
线段: [0.0,0.0]->[2.0,4.0]
线段的长度: 4.47
移动后的线段: [1.0,1.0]->[3.0,5.0]
点[2.0,3.0]は线段[1.0,1.0]->[3.0,5.0]上吗?: true





分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
java无忧网(http://www.javawyw.com),专业提供Java大作业,小作业,课程设计,毕业设计源码,答辩辅导,作业排错,bug修复,专业解答,远程部署运行项目等服务
本网站所有源码,保证能运行!
QQ:1399491757
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回列表 返回顶部