本地化用距离对其他三个点的点在3-d(Localizing a point using distan

2019-10-20 01:31发布

假设我们有在3-d(P1,P2,P3,P4)4分。 如果这些点的坐标与他们的欧几里得距离给第五点P5(R1,R2,R3,R4),如何计算P5的坐标?

在这个帖子中,回答唐里巴是完美的2-d。 但我怎么把它扩展到3 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)

Answer 1:

维基百科trilateriation 文章介绍了答案。 计算步骤是:

  1. E X =(P2 - P1)/‖P2 - P1‖
  2. I = E X(P3 - P1)
  3. E Y =(P3 - P1 - I·E X)/‖P3 - P1 - I·E X‖
  4. d =‖P2 - P1‖
  5. J = E Y(P3 - P1)
  6. X =(R 1 2 - R 2 2 + d 2)/ 2D
  7. Y =(R 1 2 - R 3 2 + I 2 + J 2)/ 2J - IX / J
  8. Z =±SQRT(R 1 2 - X 2 - Y 2)


Answer 2:

您需要解决四个方程的系统(I = 1..4,Di为距离第Ith点)

(X-Xi)^2+(Y-Yi)^2+(Z-Zi)^2=Di^2

它可以解决三个方程的系统,并使用第四选择合适的溶液(从两个)。

这是GPS的工作原理(其中时间延迟是距离)。

在GPS接收器的优化方法中经常使用,尤其是当许多卫星都可以和代数的解决方案可能是不稳定的。



文章来源: Localizing a point using distances to three other points in 3-D