Я физик, немного изучал программирование и встречал много людей, использующих кватернионы для вращения вместо того, чтобы писать что-то в матричной / векторной форме.
В физике есть очень веские причины, по которым мы не используем кватернионы (несмотря на странные истории, которые иногда рассказывают о Гамильтоне / Гиббсе и т. Д.). Физика требует, чтобы наши описания обладали хорошим аналитическим поведением (это имеет точно определенное значение, но в некоторых довольно технических аспектах, которые выходят далеко за рамки того, что преподается в обычных вводных классах, поэтому я не буду вдаваться в подробности). Оказывается, кватернионы не обладают таким хорошим поведением, поэтому они бесполезны, в отличие от векторов / матриц, поэтому мы их используем.
Однако, ограничиваясь жесткими поворотами и описаниями, которые не используют никаких аналитических структур, трехмерные вращения могут быть эквивалентно описаны в любом случае (или несколькими другими способами).
Как правило, нам просто нужно отображение точки 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 в полярных координатах (якобиан теряет ранг)), что означает, что это только локальная проблема и может быть решена переключением координат, вращением вне вырождения, или используя две перекрывающиеся системы координат.
Я менее уверен в числовых проблемах, так как я не знаю подробно, как оба из них (и любые альтернативы) будут реализованы. Я читал, что перенормировать кватернион проще, чем сделать это для матрицы вращения, но это верно только для общей матрицы; вращение имеет дополнительные ограничения, которые упрощают это (которые встроены в определение кватернионов) (на самом деле, это должно быть правдой, поскольку они имеют одинаковое количество степеней свободы).
Так в чем же причина использования кватернионов вместо векторов или других альтернатив?