Я - физик, изучал программирование и сталкивался со многими людьми, использующими кватернионы для вращения вместо того, чтобы писать что-то в матричной / векторной форме.
В физике есть очень веские причины, по которым мы не используем кватернионы (несмотря на странную историю, которая иногда рассказывается о Гамильтоне / Гиббсе / и т. Д.).Физика требует, чтобы у наших описаний было хорошее аналитическое поведение (это имеет точно определенное значение, но в некоторых довольно технических аспектах они выходят далеко за рамки того, чему учат в обычных вступительных классах, поэтому я не буду вдаваться в подробности).Оказывается, кватернионы не имеют такого хорошего поведения, и поэтому они бесполезны, а векторы / матрицы имеют, поэтому мы используем их.
Однако, ограничены жесткими поворотами и описаниями, которые не используютлюбые аналитические структуры, трехмерные повороты могут быть эквивалентно описаны в любом случае (или несколькими другими способами).
Как правило, мы просто хотим отобразить точку X = (x, y, z) в новую точку X'= (x', y ', z') при условии ограничения, что X 2 = X ' 2 .И есть много вещей, которые делают это.
Наивный способ - просто нарисовать треугольники, которые это определяет, и использовать тригонометрию, или использовать изоморфизм между точкой (x, y, z) и вектором (x, y, z) и функцией f (X) = X 'и матрица MX = X', либо используя кватернионы, либо проецируя компоненты старого вектора вдоль нового, используя другой метод (x, y, z) T . (A, b, c) (x ', y', z ') и т. д.
С математической точки зрения все эти описания эквивалентны в этом случае (как теорема).Все они имеют одинаковое количество степеней свободы, одинаковое количество ограничений и т. Д.
Так почему кватернионы кажутся предпочтительными по сравнению с векторами?
Обычные причины, которые я вижу, - отсутствие карданного замкаили числовые проблемы.
Аргумент без блокировки карданного подвеса кажется странным, поскольку это только проблема углов Эйлера.Это также только координатная задача (так же, как особенность при r = 0 в полярных координатах (якобиан теряет ранг)), что означает, что это только локальная проблема, и может быть решена путем переключения координат, вращающихся из вырождения,или используя две перекрывающиеся системы координат.
Я менее уверен насчет числовых вопросов, так как я не знаю подробно, как оба из них (и любые альтернативы) будут реализованы.Я читал, что перенормировать кватернион проще, чем сделать это для матрицы вращения, но это верно только для общей матрицы;вращение имеет дополнительные ограничения, которые упрощают это (которые встроены в определение кватернионов) (на самом деле это должно быть верно, поскольку они имеют одинаковое количество степеней свободы).
Так в чем причина использования кватернионов над векторами или других альтернатив?