Трилатерация — это процесс нахождения центра области пересечения трех сфер. Центр и радиус каждой из трех сфер должны быть известны.
Давайте рассмотрим ваши три примера центральных точек P1 [-1,1], P2 [1,1] и P3 [-1,-1]. Первое требование состоит в том, чтобы P1' находилась в начале координат, поэтому давайте соответствующим образом скорректируем точки, добавив ко всем трем вектор смещения V [1,-1]:
P1' = P1 + V = [0, 0]
P2' = P2 + V = [2, 0]
P3' = P3 + V = [0,-2]
Примечание. Скорректированные точки обозначаются аннотацией ' (штрих).
P2' также должен лежать на оси x. В данном случае это уже происходит, поэтому корректировка не требуется.
Предположим, что радиус каждой сферы равен 2.
Теперь у нас есть 3 уравнения (данные) и 3 неизвестных (X, Y, Z точки центра пересечения).
Решите для P4'x:
x = (r1^2 - r2^2 + d^2) / 2d //(d,0) are coords of P2'
x = (2^2 - 2^2 + 2^2) / 2*2
x = 1
Решите для P4'ы:
y = (r1^2 - r3^2 + i^2 + j^2) / 2j - (i/j)x //(i,j) are coords of P3'
y = (2^2 - 2^2 + 0 + -2^2) / 2*-2 - 0
y = -1
Игнорируйте z для 2D-задач.
P4' = [1,-1]
Теперь мы переводим обратно в исходное координатное пространство, вычитая вектор смещения V:
P4 = P4' - V = [0,0]
Точка решения, P4, как и ожидалось, лежит в начале координат.
Во второй половине статьи описывается метод представления набора точек, где P1 не находится в начале координат или P2 не находится на оси X, чтобы они соответствовали этим ограничениям. Вместо этого я предпочитаю думать об этом как о переводе, но оба метода приведут к одному и тому же решению.
Редактировать: поворот P2 относительно оси X
Если P2' не лежит на оси x после перевода P1 в начало координат, мы должны выполнить поворот вида.
Во-первых, давайте создадим несколько новых векторов для примера: P1 = [2,3] P2 = [3,4] P3 = [5,2]
Помните, мы должны сначала перевести P1 в начало координат. Как всегда, вектор смещения V равен -P1. В этом случае V = [-2,-3]
P1' = P1 + V = [2,3] + [-2,-3] = [0, 0]
P2' = P2 + V = [3,4] + [-2,-3] = [1, 1]
P3' = P3 + V = [5,2] + [-2,-3] = [3,-1]
Чтобы определить угол поворота, мы должны найти угол между P2' и [1,0] (ось x).
Мы можем использовать равенство множественного произведения:
A dot B = ||A|| ||B|| cos(theta)
Когда B равно [1,0], это можно упростить: точка B всегда является просто компонентом X точки A, а ||B|| (величина B) всегда является умножением на 1 и поэтому может быть проигнорирована.
Теперь у нас есть Ах = ||А|| cos(theta), которое мы можем преобразовать в наше окончательное уравнение:
theta = acos(Ax / ||A||)
или в нашем случае:
theta = acos(P2'x / ||P2'||)
Мы вычисляем величину P2', используя ||A|| = sqrt(Ax + Ay + Az)
||P2'|| = sqrt(1 + 1 + 0) = sqrt(2)
Подключив это, мы можем решить для тета
theta = acos(1 / sqrt(2)) = 45 degrees
Теперь воспользуемся матрицей вращения, чтобы повернуть сцену на -45 градусов. Поскольку P2'y положителен, а матрица вращения вращается против часовой стрелки, мы будем использовать отрицательное вращение, чтобы выровнять P2 по оси x (если P2'y отрицательно, не отрицайте тета).
R(theta) = [cos(theta) -sin(theta)]
[sin(theta) cos(theta)]
R(-45) = [cos(-45) -sin(-45)]
[sin(-45) cos(-45)]
Мы будем использовать нотацию с двойным штрихом, '', для обозначения векторов, которые были одновременно перемещены и повернуты.
P1'' = [0,0] (no need to calculate this one)
P2'' = [1 cos(-45) - 1 sin(-45)] = [sqrt(2)] = [1.414]
[1 sin(-45) + 1 cos(-45)] = [0] = [0]
P3'' = [3 cos(-45) - (-1) sin(-45)] = [sqrt(2)] = [ 1.414]
[3 sin(-45) + (-1) cos(-45)] = [-2*sqrt(2)] = [-2.828]
Теперь вы можете использовать P1'', P2'' и P3'' для решения P4''. Примените обратное вращение к P4'', чтобы получить P4', затем обратное перемещение, чтобы получить P4, вашу центральную точку.
Чтобы отменить вращение, умножьте P4'' на R(-тета), в данном случае R(45). Чтобы отменить перевод, вычтите вектор смещения V, что аналогично добавлению P1 (при условии, что вы изначально использовали -P1 в качестве V).
person
Dan Bechard
schedule
23.04.2013