Локализация точки с использованием расстояний до трех других точек в 3D

Предположим, что у нас есть 4 точки в 3D (P1, P2, P3, P4). Если координаты этих точек даны с их евклидовыми расстояниями до пятой точки P5 (r1, r2, r3, r4), как вычислить координаты P5?

В этом сообщении ответ Дон Реба идеально подходит для 2D. Но как мне расширить его до 3D?

Вот мой код для 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)

person padawan    schedule 01.05.2014    source источник


Ответы (2)


В статье о трехлатерации Википедии описан ответ. Этапы расчета:

  1. ex = (P2 – P1) / ‖P2 – P1‖
  2. я = еx(P3 - P1)
  3. ey = (P3 - P1 - i · ex) / ‖P3 - P1 - i · ex
  4. d = ‖P2 - P1‖
  5. j = ey(P3 - P1)
  6. x = (r12 - r22 + d2) / 2д
  7. y = (r12 - r32 + i2 + j 2) / 2j - ix / j
  8. z = ±sqrt(r12 - x2 - y2)
person Don Reba    schedule 02.05.2014
comment
Это потрясающе. Но что-то не так. Разве мне не нужно 4 координаты для вычисления пятой? Здесь используются только три точки. - person padawan; 04.05.2014
comment
Точка и расстояние определяют сферу в пространстве. Пересечение 2-х сфер есть окружность. Пересечение 3 сфер составляет 2 точки. Вы можете использовать четвертую, чтобы выбрать одну из двух точек. - person Don Reba; 05.05.2014
comment
Не могли бы вы проверить мой код и сказать мне, правда ли это? Я не получаю координаты, которые мне нужны. Возможно, я перепутал некоторые операции (точечный продукт против скалярного произведения) - person padawan; 08.05.2014

Вам нужно решить систему из четырех уравнений (i=1..4, Di - расстояние до i-й точки)

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

Можно решить систему из трех уравнений и использовать четвертое, чтобы выбрать правильное решение (из двух).

Так работает GPS (время задержки соответствует расстоянию).

В приемниках GPS часто используются методы оптимизации, особенно когда доступно много спутников и алгебраическое решение может быть нестабильным.

person MBo    schedule 01.05.2014
comment
Это правда. Но мне нужно написать программу, чтобы сделать это. Итак, решить это уравнение не получится :/ - person padawan; 01.05.2014