Comments 8
Э... В чём новизна-то? Все давно знают этот подход, это один из первых вариантов преобразования, которые пишет новичок. Уже потом он узнаёт про arctan2, который позволяет не считать корень, не проверять особые случаи и реализован в сопроцессоре начиная с 8087. А потом узнаёт, что преобразовывать в сферическую систему координат вообще не надо, и в виде векторов и матриц (или кватернионов) всё гораздо проще.
Могу я поинтересоваться в какой книге описан алгоритм, в котором углы преобразуются в углы, а не в тангенсы или синусы?
К тому же, меня прельстил высокий потенциал для понимания сути процесса именно матричных поворотов пространства. Одно дело выучить формулу, другое - уметь её вывести.
Прошу прощения, я был невнимателен и сконцентрировался на основной (и самой сложной) части преобразования – от декартовых координат к сферическим.
И, соответственно, говорил именно про формулу этого преобразования, выводимую новичком. Он может выбрать любую из обратных тригонометрических функций. Это позже узнает, какие решения принято использовать для этой задачи (и в идеале – почему).
У арккосинуса, кстати, есть ещё один недостаток: крайне нехорошее поведение в районе ±1 (производная стремится к нулю), там большая погрешность. arctan2 лишён этого недостатка.
Само вычисление через промежуточные декартовы координаты кажется абсолютно естественным, в голову бы не пришло выписывать одни синусы через другие.
ЗЫ: Стремление вывести формулы самостоятельно всячески поддерживаю. Лучше их понять, чем запомнить (лично мне и легче тоже).
Я прошелся в околополярном районе, где X и Y близки к нулю. И всё работает как часы. Буду благодарен Вам, если Вы укажете такие X и Y, при которых начинается "крайне нехорошее поведение" и вылезает погрешность, т.е. фокус с преобразованием Альфа и Дельта в X,Y,Z и обратно не приведет к исходным Альфа и Дельта.
А что нового-то?
У Пфлегера и Монтенбрука вычисления через матрицы через всю книгу шли ещё с первого издания книги.
Вариацию этой задачи я иногда использую на собеседованиях\тестах на позицию "Computational scientist". Как пример, чего делать не стоит. Квадратный корень, потеря точности при использовании acos
(как уже упомянуто в одной из веток комментариев) - классические примеры того, чего нужно избегать при реализации численных алгоритмов.
Оригинальный способ взаимного преобразования эклиптических и экваториальных координат