我注意到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