使用构造函数计算两点之间的欧几里得距离

Posted

技术标签:

【中文标题】使用构造函数计算两点之间的欧几里得距离【英文标题】:Calculate Euclidean Distance Between Two Points Using Constructor 【发布时间】:2021-12-08 15:24:02 【问题描述】:

我正在编写一个 Java 程序,该程序使用以下构造函数实现 Point 数据类型:

点(双 x,双 y,双 z)

还有以下 API:

双距离到(点 q) 它返回 this 和 q 之间的欧几里得距离。 (x1, y1, z1) 和 (x2, y2, z2) 之间的欧几里得距离定义为 sqrt( (x1-x2)^2 + (y1-y2)^2) + (z1-z2)^2)。

String toString() – 它返回点的字符串表示。一个例子是 (2.3,4.5,3.0)。

在用于测试它的类中编写一个 main 方法。 它应该使用用户在命令行上提供的输入创建两个 Point 对象。 然后它应该打印出两个点,然后是它们的欧几里得距离 示例运行如下。

java点2.1 3.0 3.5 4 5.2 3.5

第一个点是(2.1,3.0,3.5)

第二点是(4.0,5.2,3.5)

他们的欧几里得距离是 2.90

程序无法编译,但我不知道为什么。我是编程新手,所以我按照在线和 Codecademy 的一些步骤尝试访问构造函数中的对象,但我认为我做错了。任何建议将不胜感激。

public class Point 
    double x1;
    double y1;
    double z1;
    double x2;
    double y2;
    double z2;
    
    public Point(double x, double y, double z)

        x1 = x;
        y1 = y;
        z1 = z;
        x2 = x;
        y2 = y;
        z2 = z;
    
    
    public double distanceTo(Point q)
    return Math.sqrt(Math.pow((x1-x2), 2.0) + Math.pow((y1-y2), 2.0) + Math.pow((z1-z2), 2.0));
    
    
    double x3 = x1-x2;
    double y3 = y1-y2;
    double z3 = z1-z2;

    public String toString() 
        return "(" + x3 + ", " + y3 + ", " + z3 + ")";
    
    
    public static void main (String[]args)
        
        Point pointOne = new Point(args[0]);
        Point pointTwo = new Point(args[1]);
        Point distance = new distanceTo();
        
        System.out.println("The first point is " + "(" + pointOne + ")");
        System.out.println("The second point is " + "(" + pointTwo + ")");
        System.out.println("Their Euclidean distance is " + distance);
    

【问题讨论】:

【参考方案1】:

有几点:

首先,您的 Point 类应该只需要一组变量。只需制作一组并构造两个点对象。

在 distanceTo() 方法中,通过执行 q.x1、q.y1 等访问其他点的坐标。

在main方法中,距离应该是pointOne到pointTwo的距离的两倍。 这是对我有用的代码

class Point 
    double x1;
    double y1;
    double z1;
    public Point(double x, double y, double z)
    //each point object only needs one x, y and z
        x1 = x;
        y1 = y;
        z1 = z;
    

    public double distanceTo(Point pointTwo)
        return Math.sqrt(Math.pow(pointTwo.x1-x1, 2.0) + Math.pow(pointTwo.y1-y1, 2.0) + Math.pow(pointTwo.z1-z1, 2.0));
        //formula is sqrt((p2.x-p1)^2 + (p2.y-p1.y)^2 + (p2.z - p1.z)^2
    


    public String toString() 
        return "(" + x1 + ", " + y1 + ", " + z1 + ")";
        //we don't need a diff set of variables here
    

    public static void main (String[]args)
        //make two diff points with coords
        Point pointOne = new Point(2.1, 3.0, 3.5);
        Point pointTwo = new Point(4.0,5.2, 3.5);
        double distance = pointOne.distanceTo(pointTwo);
        //uses point two as the parameter (x2, y2, z2 in formula)
        System.out.println("The first point is " + "(" + pointOne + ")");
        System.out.println("The second point is " + "(" + pointTwo + ")");
        System.out.println("Their Euclidean distance is " + distance);
    

【讨论】:

当我尝试编译我的代码时仍然遇到很多错误。我刚开始学习创建自己的数据类型,所以我有点迷茫。如果你能分享一些代码,那就太棒了! 好的,刚刚添加了我的代码,如果你需要解释,请告诉我。 感谢您的帮助!在我看到这篇文章之前,我最终弄清楚了代码。我们最终得到了几乎相同的结果。您的提示无疑帮助我完成了我的计划,非常感谢!

以上是关于使用构造函数计算两点之间的欧几里得距离的主要内容,如果未能解决你的问题,请参考以下文章

Pyspark上两点之间的欧几里得距离

两个坐标列表的欧几里得距离矩阵

java两点间距离公式

M-各种距离定义

[PTA]习题5-3 使用函数计算两点间的距离

[ CS231n ] 图像分类