Math 使用到三维中其他三个点的距离定位点

Math 使用到三维中其他三个点的距离定位点,math,geometry,trilateration,Math,Geometry,Trilateration,假设我们在3-D中有4个点(P1、P2、P3、P4)。 如果这些点的坐标与它们到第五个点P5(r1、r2、r3、r4)的欧几里德距离一起给出,如何计算P5的坐标 在文章中,的答案对于二维来说是完美的。但我如何将它扩展到三维呢 以下是我的2D代码: static void localize(double[] P1, double[] P2, double[] P3, double r1, double r2, double r3) { double[] ex = n

假设我们在3-D中有4个点(P1、P2、P3、P4)。 如果这些点的坐标与它们到第五个点P5(r1、r2、r3、r4)的欧几里德距离一起给出,如何计算P5的坐标

在文章中,的答案对于二维来说是完美的。但我如何将它扩展到三维呢

以下是我的2D代码:

    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)

你们需要解四个方程组(i=1..4,Di是到第i个点的距离)

可以解三个方程组,并使用第四个方程组从两个方程组中选择合适的解

这就是GPS的工作原理(时间延迟是指距离)


在GPS接收机中,经常使用优化方法,特别是当许多卫星可用且代数解可能不稳定时。

维基百科三边测量描述了答案。计算步骤如下:

  • ex=(P2-P1)/“P2-P1”
  • i=ex(P3-P1)
  • ey=(P3-P1-i·ex)/“P3-P1-i·ex”
  • d=“P2-P1”
  • j=ey(P3-P1)
  • x=(r12-r22+d2)/2d
  • y=(r12-r32+i2+j2)/2j-ix/j
  • z=±sqrt(r12-x2-y2)

  • 这是真的。但是我需要写一个程序来做这个。所以,“解这个方程”不起作用:/这是完美的。但有些事情是不对的。我不需要4个坐标来计算第五个吗?这里只使用三个点。一个点和一个距离定义了空间中的球体。两个球体的交点是一个圆。3个球体的交点为2点。你可以用第四个来选择两点中的一点。你能检查一下我的代码并告诉我这是不是真的吗?我没有得到我需要的坐标。我可能混淆了一些操作(点积与标量积)
    (X-Xi)^2+(Y-Yi)^2+(Z-Zi)^2=Di^2