Википедия дает довольно подробное обсуждение алгебры здесь:
http://en.wikipedia.org/wiki/Trilateration
Первый шаг, который на самом деле не описан в записи в Википедии, - преобразовать ваши координаты широты / долготы в декартовы:
x0 = cos( lon0 ) * cos( lat0 ) , y0 = sin( lon0 ) * cos( lat0 ) , z0 = sin( lat0 )
x1 = cos( lon1 ) * cos( lat0 ) , y1 = sin( lon1 ) * cos( lat1 ) , z1 = sin( lat1 )
x2 = cos( lon2 ) * cos( lat0 ) , y2 = sin( lon2 ) * cos( lat2 ) , z2 = sin( lat2 )
(Для простоты расчетов я выдумал, поэтому мы работаем в единицах "радиусов Земли", а не в километрах)
За ваши данные я получаю
p0 p1 p2
X -0.420442596 -0.420430618 -0.42040255
Y -0.67380418 -0.673826567 -0.673825967
Z 0.607631426 0.607614889 0.607634975
Следующим шагом, который описан в статье в Википедии, является упрощение координат путем перевода точек так, чтобы p0 находилось в начале координат, а затем вращение так, чтобы p1 находился на оси X, а p2 находился в XY. самолет.
Для перевода просто вычтите p0 из p1 и p2:
p0a p1a p2a
X 0 1.19779E-05 4.00462E-05
Y 0 -2.23864E-05 -2.17865E-05
Z 0 -1.65372E-05 3.5486E-06
Вращение не намного сложнее. p1b получает (x, y) = (d, 0), где d - просто расстояние от начала координат до p1a (теорема Пифагора)
Для p2b нам нужно разделить p2a на две составляющие: одну, параллельную p1a (которая идет по нашей оси x), и одну, перпендикулярную к p1a (которая идет по нашей оси y в системе координат "b").
Для этого нам понадобится единичный вектор в направлении p1a, который равен просто p1a * (1 / d). Возьмите скалярное произведение этого единичного вектора (назовите его p1a_hat, если хотите) с p2a, и это координата X для p2b. Статья в Википедии называет это значение «я»
Теперь координата Y проста. Длина от начала координат до p2 не может измениться при преобразовании координат. Поэтому вычислите длину p2a, используя теорему Пифагора, а затем используйте теорему Пифагора «назад», чтобы получить координату Y для p2b, чтобы длина была одинаковой. Это переменная, которую Википедия называет «J». (Обратите внимание, что я оставлю вам двусмысленность, чтобы выяснить, является ли J положительным или отрицательным).
Теперь у вас есть три переменные d, I и J, которые статья Wikipedia использует для расчета. Теперь вы можете перевести их обратно в километры, умножив на радиус Земли. Вы должны быть в состоянии сделать остальную часть расчета отсюда
(Кстати, Википедия дает другой расчет для преобразования координат. Мне нравится избегать триггера, где это возможно).