2016-11-15 36 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

相關問題