1

3 次元に 4 つの点 (P1、P2、P3、P4) があるとします。これらの点の座標が 5 番目の点 P5 (r1、r2、r3、r4) までのユークリッド距離で与えられている場合、P5 の座標を計算するにはどうすればよいですか?

この投稿では、Don Reba の回答が2 - D に最適です。しかし、それを 3 次元に拡張するにはどうすればよいでしょうか。

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)
4

2 に答える 2

2

ウィキペディアのトライラテリエーションの記事で答えが説明されています。計算手順は次のとおりです。

  1. e x = (P2 - P1) / ‖P2 - P1‖</li>
  2. i = e x (P3 - P1)
  3. e y = (P3 - P1 - i · e x ) / ‖P3 - P1 - i · e x ‖</li>
  4. d = ‖P2 - P1‖</li>
  5. j = ey (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 )
于 2014-05-02T05:01:04.013 に答える
0

4 つの連立方程式を解く必要があります (i=1..4、Di は i 番目の点までの距離です)。

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

3 つの連立方程式を解き、4 番目を使用して適切な解を (2 つから) 選択することができます。

これが GPS のしくみです (時間の遅延は距離によって異なります)。

GPS 受信機では、特に多くの衛星が利用可能で代数解が不安定な場合に、最適化手法が頻繁に使用されます。

于 2014-05-01T03:18:59.480 に答える