Pull to refresh

Comments 8

Э... В чём новизна-то? Все давно знают этот подход, это один из первых вариантов преобразования, которые пишет новичок. Уже потом он узнаёт про arctan2, который позволяет не считать корень, не проверять особые случаи и реализован в сопроцессоре начиная с 8087. А потом узнаёт, что преобразовывать в сферическую систему координат вообще не надо, и в виде векторов и матриц (или кватернионов) всё гораздо проще.

Могу я поинтересоваться в какой книге описан алгоритм, в котором углы преобразуются в углы, а не в тангенсы или синусы?
К тому же, меня прельстил высокий потенциал для понимания сути процесса именно матричных поворотов пространства. Одно дело выучить формулу, другое - уметь её вывести.

Прошу прощения, я был невнимателен и сконцентрировался на основной (и самой сложной) части преобразования – от декартовых координат к сферическим.

И, соответственно, говорил именно про формулу этого преобразования, выводимую новичком. Он может выбрать любую из обратных тригонометрических функций. Это позже узнает, какие решения принято использовать для этой задачи (и в идеале – почему).

У арккосинуса, кстати, есть ещё один недостаток: крайне нехорошее поведение в районе ±1 (производная стремится к нулю), там большая погрешность. arctan2 лишён этого недостатка.

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

ЗЫ: Стремление вывести формулы самостоятельно всячески поддерживаю. Лучше их понять, чем запомнить (лично мне и легче тоже).

Я прошелся в околополярном районе, где X и Y близки к нулю. И всё работает как часы. Буду благодарен Вам, если Вы укажете такие X и Y, при которых начинается "крайне нехорошее поведение" и вылезает погрешность, т.е. фокус с преобразованием Альфа и Дельта в X,Y,Z и обратно не приведет к исходным Альфа и Дельта.

Y около 0, X около 1. Погрешность в 10-м знаке X после запятой даст вам погрешность в пятом знаке альфа.

Может, конечно, в вашей задаче это и неважно. Но лучше такого избегать, если бесплатно :-) (а atan2(Y,X) – это не то что бесплатно, это даже дешевле, чем if + корень + деление + арккосинус).

Кватернионы в экселе действительно считать сложновато. Но если взять более подходящий инструмент, то и считать самому ничего не придётся — можно просто перемножать кватернионы и всё. А то, что арктангенс можно выразить через арккосинус — мягко говоря, не новость.

А что нового-то?
У Пфлегера и Монтенбрука вычисления через матрицы через всю книгу шли ещё с первого издания книги.

Вариацию этой задачи я иногда использую на собеседованиях\тестах на позицию "Computational scientist". Как пример, чего делать не стоит. Квадратный корень, потеря точности при использовании acos (как уже упомянуто в одной из веток комментариев) - классические примеры того, чего нужно избегать при реализации численных алгоритмов.

Sign up to leave a comment.

Articles