Я бы тоже делал через матрицы поворота.
Для удобства считаем, что Северный полюс -- это верхняя точка сферы. Дистанцию нужно предварительно пересчитать в угол
между начальной и конечной точкой с вершиной в центре сферы. Тогда из задачи исчезают расстояния, остаются только углы.
Вводим декартов базис
,
,
(векторы строим из центра сферы), причем
направлен в точку на пересечении экватора и нулевого меридиана (500 км на юг от города Аккра, Гана, Африка
);
направлен в точку на пересечении экватора и меридиана 90° в.д. (1500 км на запад от Сингапура);
направлен на Северный полюс.
Пусть
-- долгота начальной точки,
-- широта начальной точки,
-- азимут (отсчитываемый от севера на восток),
-- угол, соответствующий дистанции.
Теперь я сделаю четыре поворота базиса. Я указываю ось, вокруг которой делаю поворот, и угол поворота. Положительным считается поворот против часовой стрелки, если указанная ось вращения смотрит на наблюдателя.
Вокруг оси
на угол
Вокруг оси
на угол
Вокруг оси
на угол
Вокруг оси
на угол
Понятно, каждый раз поворот делается вокруг оси, получившейся в результате предыдущих поворотов, а не вокруг оси самого исходного базиса.
Утверждается, что в результате ось
будет показывать на конечную точку.
При каждом повороте был использован один из четырех параметров, и притом простейшим образом. Остается составить и перемножить четыре матрицы.