поиск точки на карте по двум координатам и расстояниям до нее

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

Имеются три точки на карте с известными координатами A(0,0) B(0,90) C(90,0)

и известны расстояния от них до точки D, вопрос как найти координаты этой точки. Как я понял, достаточно решить сферический треугольник ABD, а расстояние С использовать только для определения полюса. Но с расчетом этого возникли проблемы.

UPD привел задачу к решению треугольника ABC, по примеру https://www.math10.com/ru/vysshaya-matematika/sfericheskii-treugolnik/sfericheskii-treugolnik.html

A(0,0) B(0,90) C(?,?)
AC=8000; AB=10007; BC=4000;
a=1.255; b=1.571; c=0.628;

cos A= (cos a - cos b * cos c)/ sin b * sin c
(0.370-0*0.809)/1*0.587=0.630

не могу найти какому углу соотвествует этот косинус, и как можно получить bearing для вычисления координат? или я что-то сделал не правильно?


Ответы (1 шт):

Автор решения: MBo

Вам известны угловые длины сторон (расстояния, делённые на радиус Земли)

Примените сферическую теорему косинусов, чтобы найти внутренний угол при точке A

cos a = cos b ⋅ cos c + sin b ⋅ sin c ⋅ cos A

Отсюда (используя d, а не с, т.к. треугольник ABD)

A = arccos((cos a - cos b ⋅ cos d) / (sin b ⋅ sin d))
для AD=8000; AB=10007; BD=4000;
противолежащая вершине А сторона
a = BD / 6371 = 0.6278
b = AD / 6371 = 1.255
d = AB / 6371 = 1.571

A = arccos((cos a - cos b ⋅ cos d) / (sin b ⋅ sin d)) = 
    arccos((0.8093 - 0.3106 ⋅ 0) / (0.9505 ⋅ 1)) = 
    arccos(0.851) = 0.552 радиан = 31.68 градусов

Это и есть азимут из точки А (в данном случае сразу азимут, поскольку A и B на экваторе)

Затем используйте расстояние и азимут (A), чтобы определить координаты D, как показано здесь в разделе Destination point given distance and bearing from start point

φ2 = asin( sin φ1 ⋅ cos δ + cos φ1 ⋅ sin δ ⋅ cos θ )
λ2 = λ1 + atan2( sin θ ⋅ sin δ ⋅ cos φ1, cos δ − sin φ1 ⋅ sin φ2 )

where   φ is latitude, λ is longitude, θ is the bearing (clockwise from 
north), δ is the angular distance d/R; d being the distance travelled, 
R the earth’s radius

Lat = arcsin(sin φ1 ⋅ cos δ + cos φ1 ⋅ sin δ ⋅ cos θ) = 
      arcsin(0 * cos b + 1 * sin b * sin(0.552)) = 
      arcsin(0.9505 * 0.524) =  
      arcsin(0.4984) = 29.9 градусов (СШ или ЮШ)
и далее для Lon

Выбор полушария для D - да, как уже и сказали, по расстоянию от полюса

→ Ссылка