Вы устали преобразовывать координаты в трёхмерном пространстве с помощью матриц вращений и прочих кватернионов? Я прекрасно Вас понимаю, и сам провёл не один час своей жизни за этим утомительным занятием. Но, похоже, Вашим и моим мучениям пришёл конец – мне удалось обнаружить простой и наглядный метод, позволяющий значительно упростить эту непростую задачу.
Собственно говоря, для начала обратим внимание на всем известную декартову систему координат (лично я по старой привычке называю её «нормальной»). Она, как известно, связана с экваториальными координатами светил простыми соотношениями:

А вот и изображение для наглядности:

Пока всё знакомо, правда?
А теперь переходим к тому, что, собственно, и представляет из себя новизну. Допустим, у нас есть декартовы координаты, и по ним нужно вычислить экваториальные или даже эклиптические координаты. Что обычно происходит? Скучная и кропотливая работа, в которой многие делают ошибки – добро пожаловать к расчётам с функцией tan2 c большим количеством условий. Однажды мне всё это надоело, а точнее, я устал от этого, и я придумал способ, с помощью которого, зная всего три значения X, Y и Z, можно безошибочно определить углы экваториальной или эклиптической систем с помощью следующего алгоритма:

Не торопитесь снисходительно улыбаться и мысленно похлопывать меня по плечу: дескать, фантазёр ты, приятель, куда тут без tan2… Но я многократно проводил подобные расчёты в Excel, и метод действительно прекрасно работает, каким бы странным это ни казалось на первый взгляд. Не нужно только забывать переводить градусы в радианы, а радианы в градусы там, где это необходимо. Взгляните сами:
α | δ | X | Y | Z | α* | δ* |
0 | 30 | 0.866 | 0.000 | 0.5 | 0 | 30 |
30 | 30 | 0.750 | 0.433 | 0.5 | 30 | 30 |
60 | 30 | 0.433 | 0.750 | 0.5 | 60 | 30 |
90 | 30 | 0.000 | 0.866 | 0.5 | 90 | 30 |
120 | 30 | -0.433 | 0.750 | 0.5 | 120 | 30 |
150 | 30 | -0.750 | 0.433 | 0.5 | 150 | 30 |
180 | 30 | -0.866 | 0.000 | 0.5 | 180 | 30 |
210 | 30 | -0.750 | -0.433 | 0.5 | 210 | 30 |
240 | 30 | -0.433 | -0.750 | 0.5 | 240 | 30 |
270 | 30 | 0.000 | -0.866 | 0.5 | 270 | 30 |
300 | 30 | 0.433 | -0.750 | 0.5 | 300 | 30 |
330 | 30 | 0.750 | -0.433 | 0.5 | 330 | 30 |
360 | 30 | 0.866 | 0.000 | 0.5 | 360 | 30 |
Что происходит дальше? Мне нужно найти эклиптические координаты, то есть перейти к системе координат, которая всё ещё является декартовой, но уже «повёрнутой» (опять же по привычке называю её именно так).
Осуществить это будет совершенно не сложно.
Выполним преобразование декартовых векторов, используя известные формулы.
Преобразование эклиптических координат в экваториальные координаты:

Преобразование экваториальных координат в эклиптические координаты:

Когда получаем в итоге тройку декартовых эклиптических координат, просто обращаемся к алгоритму, описанному выше, и получаем эклиптические координаты светила λ и β (вместо α и δ). Вот, собственно говоря, и всё. Заинтересовались? А теперь попробуйте сами и убедитесь.