В ответе на SO 389211 достаточно сферической тригонометрии. Копирую и модифицирую то, что я там написал:
Рассмотрим сферический треугольник с углами A , B , C в вершинах и сторонах a , b , c напротив этих вершин (то есть сторона a составляет от B до C и т. Д.).
Применяя это к задаче, мы можем назвать две заданные точки B и C , и мы создадим прямоугольный сферический треугольник с прямым углом в A .
Рассмотрим эту диаграмму:
+ C
/|
/ |
a / | b
| / |
|X/ |
|/ |
B +------+ A
c
Вам дают две точки B и C , и вы хотите определить угол X = 90º - B. Сторона c равно разности по долготе, Δλ; сторона b равна разности широт, Δφ; угол A равен 90º, поэтому sin A = 1 и cos A = 0. Чтобы определить X, нам нужно значение B дано b , c и A .
Рассматривая проблему из первых принципов, нам нужны два основных уравнения сферической тригонометрии:
Формула синуса:
sin A sin B sin C
----- = ----- = -----
sin a sin b sin c
Формула косинуса:
cos a = cos b . cos c + sin b . sin c . cos A
Поэтому я считаю, что уравнение для a имеет вид:
cos a = cos Δλ . cos Δφ + sin Δλ . sin Δφ . cos 90º
a = arccos (cos Δλ . cos Δφ)
Учитывая a , b и A , мы можем использовать формулу синуса для определения B :
sin a sin b
----- = ----
sin A sin B
Или
sin b . sin A
sin B = -------------
sin a
Или, поскольку A = 90º, sin A = 1, а sin B = sin (90º-X) = cos X:
sin b
cos X = -----
sin a
Скорее, я подозреваю, что, если я склоняюсь к этому (или вы склоняете к этому свой разум), вы можете придумать ответ, который не предполагает использования arccos с последующим грехом.