Следовательно, задача сводится к пересечению линии со сферой, что легко.
Вот подробности. Входными данными являются точки P1 = (lat1, lon1) и P2 = (lat2, lon2) на поверхности земли, рассматриваемые как сфера, и два соответствующих радиуса r1 и r2.
Преобразовать (широта, долгота) в (x, y, z) геоцентрические координаты. Как обычно, потому что мы можем выбрать единицы измерения, в которых Земля имеет единичный радиус,
x = cos(lon) cos(lat)
y = sin(lon) cos(lat)
z = sin(lat).
В этом примере P1 = (-90,234036 градусов, 37,673442 градусов) имеет геоцентрические координаты x1 = (-0,00323306, -0,7915, 0,61116) и P2 = (-90,953669 градусов, 36,109997 градусов) имеет геоцентрические координаты x2 = (-0,0134475, -0. 0,589337).
Преобразуйте радиусы r1 и r2 (которые измеряются вдоль сферы) в углы вдоль сферы. По определению, одна морская миля (NM) составляет 1/60 градуса дуги (что равно pi / 180 * 1/60 = 0,0002908888 радиан). Поэтому, как углы,
r1 = 107.5 / 60 Degree = 0.0312705 radian
r2 = 145 / 60 Degree = 0.0421788 radian
Геодезический круг радиуса r1 вокруг x1 является пересечением поверхности Земли с евклидовой сферы радиуса греха (r1) с центром в Cos (r1) * x1.
Плоскость, определяемая пересечением сферы радиуса sin (r1) вокруг cos (r1) * x1 и земной поверхности, перпендикулярна x1 и проходит через точку cos (r1) x1, откуда ее уравнение равно x.x1 = cos (r1) («.» представляет обычное скалярное произведение ); аналогично для другого самолета. На пересечении этих двух плоскостей будет уникальная точка x0, представляющая собой линейную комбинацию x1 и x2. Запись x0 = a x1 + b * x2, два плоских уравнения
cos(r1) = x.x1 = (a*x1 + b*x2).x1 = a + b*(x2.x1)
cos(r2) = x.x2 = (a*x1 + b*x2).x2 = a*(x1.x2) + b
Используя тот факт, что x2.x1 = x1.x2, который я напишу как q, решение (если оно существует) дается
a = (cos(r1) - cos(r2)*q) / (1 - q^2),
b = (cos(r2) - cos(r1)*q) / (1 - q^2).
В текущем примере я вычисляю a = 0,973503 и b = 0,0260194.
Очевидно, нам нужно q ^ 2! = 1. Это означает, что x1 и x2 не могут быть ни одной, ни антиподальной точкой.
Теперь все остальные точки на линии пересечения двух плоскостей отличаются от x0 некоторым кратным вектора n, взаимно перпендикулярного обеим плоскостям. Крестовый продукт
n = x1~Cross~x2
выполняет задание, если n отлично от нуля: еще раз, это означает, что x1 и x2 не совпадают и не диаметрально противоположны. (Мы должны позаботиться о том, чтобы вычислить перекрестное произведение с высокой точностью, поскольку оно включает в себя вычитания с большим количеством отмен, когда x1 и x2 находятся близко друг к другу.) В этом примере n = (0.0272194, -0.00631254, -0.00803124) ,
Поэтому мы ищем до двух точек вида x0 + t * n, которые лежат на поверхности земли: их длина равна 1. Эквивалентно, их квадратная длина равна 1:
1 = squared length = (x0 + t*n).(x0 + t*n) = x0.x0 + 2t*x0.n + t^2*n.n = x0.x0 + t^2*n.n
Член с x0.n исчезает, потому что x0 (будучи линейной комбинацией x1 и x2) перпендикулярен n. Два решения легко
t = sqrt((1 - x0.x0)/n.n)
и его негатив. Еще раз требуется высокая точность, потому что когда x1 и x2 близки, x0.x0 очень близко к 1, что приводит к некоторой потере точности с плавающей запятой. В этом примере t = 1,07509 или t = -1,07509. Поэтому две точки пересечения равны
x0 + t*n = (0.0257661, -0.798332, 0.601666)
x0 - t*n = (-0.0327606, -0.784759, 0.618935)
Наконец, мы можем преобразовать эти решения обратно в (широта, долгота), преобразовав геоцентрические (x, y, z) в географические координаты:
lon = ArcTan(x,y)
lat = ArcTan(Sqrt[x^2+y^2], z)
Для долготы используйте обобщенный арктангенс, возвращающий значения в диапазоне от -180 до 180 градусов (в вычислительных приложениях эта функция принимает в качестве аргументов как x, так и y, а не только отношение y / x; иногда ее называют «ATan2»).
Я получаю два решения (-88.151426, 36.989311) и (-92.390485, 38.238380), показанные на рисунке желтыми точками.
На осях отображаются геоцентрические (x, y, z) координаты. Серый участок - это часть земной поверхности от -95 до -87 градусов по долготе, от 33 до 40 градусов по широте (отмечена одной градусной сеткой). Земная поверхность была сделана частично прозрачной, чтобы показать все три сферы. Правильность вычисленных решений очевидна тем, как желтые точки находятся на пересечениях сфер.