假设我们在三维中有4个点(P1、P2、P3、P4(。如果这些点的坐标是用它们到第五个点P5(r1,r2,r3,r4(的欧氏距离给出的,那么如何计算P5的坐标?
在这篇文章中,唐·热巴的答案是完美的2-D。但是如何将其扩展到三维?
这是我的二维码:
static void localize(double[] P1, double[] P2, double[] P3, double r1, double r2, double r3)
{
double[] ex = normalize(difference(P2, P1));
double i = dotProduct(ex, difference(P3, P1));
double[] ey = normalize(difference(difference(P3, P1), scalarProduct(i, ex)));
double d = magnitude(difference(P2, P1));
double j = dotProduct(ey, difference(P3, P1));
double x = ((r1*r1) - (r2*r2) + (d*d)) / (2*d);
double y = (((r1*r1) - (r3*r3) + (i*i) + (j*j)) / (2*j)) - ((i*x) / j);
System.out.println(x + " " + y);
}
我想用签名重载函数
static void localize(double[] P1, double[] P2, double[] P3, double[] P4, double r1, double r2, double r3, double r4)
维基百科的三边化文章描述了答案。计算步骤为:
- e
- i=ex(P3-P1(
- e
- d="P2-P1">
- j=ey(P3-P1(
- x=(r12-r2<2>+d2(/2d
- y=(r12-r3<2>+i2+j2(/2j-ix/j
- z=±sqrt(r12-x2-y2(
您需要求解四个方程组(i=1..4,Di是到第i点的距离(
(X-Xi)^2+(Y-Yi)^2+(Z-Zi)^2=Di^2
可以求解三个方程组,并使用第四个方程组(从两个方程组中(选择合适的解。
这就是GPS的工作原理(时间延迟是指距离(。
在GPS接收机中,优化方法经常被使用,特别是当许多卫星可用并且代数解可能不稳定时。