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