2016-11-15 63 views
0

我注意到Point2D.Distance实际上返回的结果不同于使用毕达哥拉斯定理手动计算两点之间的距离。Java Point2D.Distance与毕达哥拉斯定理不同?

(565.0,575.0)和(25.0,185.0)之间的距离在数学上为665.4。使用距离计算时,返回的值是666.108。

有没有这方面的技术说明?

编辑:我的道歉,大家。我在自己的计算中遇到了一个错误。经过这么短暂的睡眠,我正在寻找机器中的幽灵。对不起,浪费你的时间。

+1

的Java确实似乎是正确的。也许你有一个舍入错误?请参阅此处:http://www.wolframalpha.com/input/?i=distance+between+(565.0,+575.0)+and+(25.0,+185.0) – sinned

+1

请分享这两种方法的代码。 – SlowAndSteady

回答

1

我可以确认正确的距离为666,108099 ...

你应该检查你的定理和积分:P (和疑问,相信机...)

1

值由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); 
} 
1

我很抱歉地说,但Point2D.Distance是正确的。你可能在你的计算为

V1(X1,Y1)错误=(565.0,575.0)

V2(x2,y2)=(25.0,185.0)

的距离的平方根:(ABS(X1-X2))^ 2 +(ABS(Y1-Y2))^ 2

而这个值恰好收率666,10809933523552675465753614979

1

算了算。我也有666.108。我怀疑你在某个地方犯了一个数学错误。

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

我们需要另外两个方面:

AB575-185=390

BC565-25 =540

390平方的152100

540平方是291600

将这些加在一起给出443700 这个的平方根是666.108

2

Wolfram Alpha和Java不能同时出错。

enter image description here