有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java Point2D。距离与毕达哥拉斯定理不同?

我注意到了那个点。距离实际上返回的结果与使用毕达哥拉斯定理手动计算两点之间的距离不同

(565.0575.0)和(25.0185.0)之间的距离在数学上是665.4。使用距离计算此值时,返回值为666.108

对此有什么技术解释吗

编辑:各位,我道歉。我自己的计算有一个错误。睡了这么少觉,我在机器里找鬼。很抱歉浪费你的时间


共 (5) 个答案

  1. # 1 楼答案

    算出来了。我也得到了666.108。我怀疑你在什么地方犯了一个数学错误

    让我们假设一个三角形ABC,这样AC定义了点之间的距离

    我们需要另外两方面:

    AB575-185=390

    BC565-25 =540

    390的平方是152100

    540的平方是291600

    把这些加在一起就得到了443700 这个的平方根是666.108

  2. # 2 楼答案

    Wolfram Alpha和Java不能同时出错

    enter image description here

  3. # 3 楼答案

    我可以确认正确的距离是666108099

    你应该检查你的定理和微积分:p (如有疑问,请相信机器…)

  4. # 4 楼答案

    Point2D.distance()返回的值是小数点后三位的正确数学结果

    此代码说明了计算:

         double s = Point2D.distance( 565.0, 575.0, 25.0, 185.0 );
         System.out.println( s ); // 666.1080993352356
         System.out.println();
    
         double dx = Math.abs( 25.0 - 565 ); 
         double dy = Math.abs( 575.0 - 185.0);
         System.out.println("|x2 - x1| = " + dx );  // |x2 - x1| = 540.0
         System.out.println("|y2 - y1| = " + dy );  // |y2 - y1| = 390.0
    
         System.out.println("sqrt(dx*dx + dy*dy) = " + Math.sqrt( dx*dx + dy*dy ));
         // sqrt(dx*dx + dy*dy) = 666.1080993352356
    

    Point2D.distance()的实现相当容易阅读:

    public static double distance(double x1, double y1,
                                  double x2, double y2)
    {
        x1 -= x2;
        y1 -= y2;
        return Math.sqrt(x1 * x1 + y1 * y1);
    }
    
  5. # 5 楼答案

    我很抱歉地说,但是。距离是正确的。您可能在计算时出错了

    V1(x1,y1)=(565.0575.0)

    V2(x2,y2)=(25.0185.0)

    距离是:(abs(x1-x2))^2+(abs(y1-y2))^2的平方根

    这个值正好产生66610809335235522675465753614979