我注意到Point2D.Distance實際上返回的結果不同於使用畢達哥拉斯定理手動計算兩點之間的距離。Java Point2D.Distance與畢達哥拉斯定理不同?
(565.0,575.0)和(25.0,185.0)之間的距離在數學上爲665.4。使用距離計算時,返回的值是666.108。
有沒有這方面的技術說明?
編輯:我的道歉,大家。我在自己的計算中遇到了一個錯誤。經過這麼短暫的睡眠,我正在尋找機器中的幽靈。對不起,浪費你的時間。
我注意到Point2D.Distance實際上返回的結果不同於使用畢達哥拉斯定理手動計算兩點之間的距離。Java Point2D.Distance與畢達哥拉斯定理不同?
(565.0,575.0)和(25.0,185.0)之間的距離在數學上爲665.4。使用距離計算時,返回的值是666.108。
有沒有這方面的技術說明?
編輯:我的道歉,大家。我在自己的計算中遇到了一個錯誤。經過這麼短暫的睡眠,我正在尋找機器中的幽靈。對不起,浪費你的時間。
我可以確認正確的距離爲666,108099 ...
你應該檢查你的定理和積分:P (和疑問,相信機...)
值由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);
}
我很抱歉地說,但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
算了算。我也有666.108
。我懷疑你在某個地方犯了一個數學錯誤。
讓我們假設一個三角形ABC
,這樣AC
定義了點之間的距離。
我們需要另外兩個方面:
AB
是575-185=390
BC
是565-25 =540
390
平方的152100
540
平方是291600
將這些加在一起給出443700
這個的平方根是666.108
的Java確實似乎是正確的。也許你有一個舍入錯誤?請參閱此處:http://www.wolframalpha.com/input/?i=distance+between+(565.0,+575.0)+and+(25.0,+185.0) – sinned
請分享這兩種方法的代碼。 – SlowAndSteady