Почему кватернионы используются для вращений? - PullRequest
95 голосов
/ 19 января 2012

Я - физик, изучал программирование и сталкивался со многими людьми, использующими кватернионы для вращения вместо того, чтобы писать что-то в матричной / векторной форме.

В физике есть очень веские причины, по которым мы не используем кватернионы (несмотря на странную историю, которая иногда рассказывается о Гамильтоне / Гиббсе / и т. Д.).Физика требует, чтобы у наших описаний было хорошее аналитическое поведение (это имеет точно определенное значение, но в некоторых довольно технических аспектах они выходят далеко за рамки того, чему учат в обычных вступительных классах, поэтому я не буду вдаваться в подробности).Оказывается, кватернионы не имеют такого хорошего поведения, и поэтому они бесполезны, а векторы / матрицы имеют, поэтому мы используем их.

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

Как правило, мы просто хотим отобразить точку 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 в полярных координатах (якобиан теряет ранг)), что означает, что это только локальная проблема, и может быть решена путем переключения координат, вращающихся из вырождения,или используя две перекрывающиеся системы координат.

Я менее уверен насчет числовых вопросов, так как я не знаю подробно, как оба из них (и любые альтернативы) будут реализованы.Я читал, что перенормировать кватернион проще, чем сделать это для матрицы вращения, но это верно только для общей матрицы;вращение имеет дополнительные ограничения, которые упрощают это (которые встроены в определение кватернионов) (на самом деле это должно быть верно, поскольку они имеют одинаковое количество степеней свободы).

Так в чем причина использования кватернионов над векторами или других альтернатив?

Ответы [ 7 ]

51 голосов
/ 19 января 2012

Блокировка карданного подвеса является одной из причин, хотя, как вы говорите, это проблема только углов Эйлера, и ее легко решить. Углы Эйлера все еще используются, когда речь идет о памяти, так как вам нужно хранить только 3 числа.

Для кватернионов по сравнению с матрицей вращения 3x3 кватернион имеет преимущество в размере (4 скаляра против 9) и скорости (умножение кватернионов намного быстрее, чем умножение матриц 3x3).

Обратите внимание, что все этих представлений вращений используются на практике. Углы Эйлера используют меньше всего памяти; матрицы используют больше памяти, но не страдают от блокировки карданного подвеса и обладают хорошими аналитическими свойствами; и кватернионы достигают хорошего баланса обоих, будучи легкими, но свободными от карданного замка.

33 голосов
/ 19 января 2012

В физике есть очень веские причины, по которым мы не используем кватернионы (несмотря на странную историю, которая иногда рассказывается о Гамильтоне / Гиббсе / и т. Д.). Физика требует, чтобы у наших описаний было хорошее аналитическое поведение (это имеет точно определенное значение, но в некоторых довольно технических аспектах они выходят далеко за рамки того, чему учат в обычных вступительных классах, поэтому я не буду вдаваться в подробности). Оказывается, кватернионы не обладают таким хорошим поведением, и поэтому они бесполезны, как и векторы / матрицы, поэтому мы используем их.

Ну, я тоже физик. А в некоторых ситуациях кватернионы просто качаются! Сферическая гармоника например. У вас два атома рассеиваются, обмениваются электронами: что такое орбитальный перенос спина? С кватернионами это просто умножение, то есть суммирование показателей базовых функций SH, выраженных в виде кватернионов. (Вставить многочлены Лежандра в кватернионные обозначения немного утомительно).

Но я согласен, они не универсальный инструмент, и особенно в механике твердого тела их было бы очень громоздко использовать. И все же процитируем, как Бертран Рассел отвечает на вопрос ученика, сколько математики нужно знать физику: «Как можно больше!»

В любом случае: почему мы любим кватернионы в компьютерной графике? Потому что они обладают рядом привлекательных свойств. Сначала можно красиво интерполировать их, что важно, если вы анимируете вращающиеся объекты, например конечности вокруг сустава. С кватернионом это просто скалярное умножение и нормализация. Выражение этого с помощью матрицы требует оценки sin и cos, а затем построения матрицы вращения. Тогда умножение вектора на кватернион все еще дешевле, чем полное умножение вектора на матрицу, и еще дешевле, если потом добавить перевод. Если вы рассматриваете систему скелетной анимации для человеческого персонажа, где нужно оценить много перемещений / вращений для большого количества вершин, это окажет огромное влияние.

Еще один приятный побочный эффект использования кватернионов заключается в том, что любое преобразование по своей природе ортонормировано. С матрицами перевода необходимо повторно ортонормировать каждую пару шагов анимации из-за ошибок округления чисел.

23 голосов
/ 19 января 2012

Аргумент без блокировки карданного подвеса кажется странным, поскольку это только проблема углов Эйлера.Это также только координатная задача (так же, как особенность при r = 0 в полярных координатах (якобиан теряет ранг)), что означает, что это только локальная проблема, и может быть решена путем переключения координат, вращающихся из вырождения,или используя две перекрывающиеся системы координат.

Многие 3D-приложения любят использовать углы Эйлера для определения ориентации объекта.В частности, для симуляторов полета они представляют собой теоретически полезный способ хранения ориентации способом, который легко модифицируется.

Вам также следует помнить, что такие вещи, как «переключение координат, поворот из вырождения илииспользование двух перекрывающихся систем координат "все требуют усилий.Усилие означает код.И код означает производительность.Потеря производительности, когда у вас нет , не очень хорошая вещь для многих 3D-приложений.В конце концов, что должно быть достигнуто всеми этими уловками, если только использование кватернионов даст вам все, что вам нужно.

Я менее уверен насчет числовых вопросов, так как я не знаю вподробно, как оба из них (и любые альтернативы) будут реализованы.Я читал, что перенормировать кватернион проще, чем сделать это для матрицы вращения, но это верно только для общей матрицы;вращение имеет дополнительные ограничения, которые упрощают это (которые встроены в определение кватернионов) (на самом деле это должно быть верно, поскольку они имеют одинаковое количество степеней свободы).

Численные проблемы возникают при работе с несколькими последовательными поворотами ориентации.Представьте, что у вас есть объект в космосе.И каждый раз, вы применяете небольшое изменение рыскания к нему.После каждого изменения нужно заново нормализовать ориентацию;в противном случае возникнут проблемы с точностью и все испортится.

Если вы используете матрицы, каждый раз, когда вы умножаете матрицу, вы должны повторно ортонормировать матрицу.Матрица, которую вы ортонормируете, не является пока матрицей вращения, поэтому я не был бы слишком уверен в этой простой ортонормировке.Однако я могу быть уверен в этом:

Это будет не так быстро, как нормализация вектора 4D.Вот что кватернионы используют для нормализации после последовательных вращений.

Нормализация кватернионов обходится дешево.Даже специализированная нормализация матрицы вращения не будет стоить , как дешево.Опять же, производительность имеет значение.

Есть еще одна проблема, с которой матрицы не справляются легко: интерполяция между двумя различными ориентациями.

При работе с трехмерным персонажем у вас часто есть ряд преобразований, определяющихрасположение каждой кости в персонаже.Эта иерархия костей представляет персонажа в определенной позе.

В большинстве систем анимации для вычисления позы для персонажа в конкретный момент времени выполняется интерполяция между преобразованиями.Это требует интерполяции соответствующих преобразований.

Интерполяция двух матриц ... нетривиальна.По крайней мере, если вы хотите что-то похожее на матрицу вращения в конце.В конце концов, цель интерполяции - создать нечто среднее между двумя преобразованиями.

Для кватернионов все, что вам нужно, - это 4-мерный lerp, за которым следует нормализация.Вот и все: возьмите два кватерниона и линейно интерполируйте компоненты.Нормализовать результат.

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

6 голосов
/ 27 апреля 2013

Мнение: кватернионы хороши.

Матрица вращения: Незначительный недостаток : Умножение матриц в ~ 2 раза медленнее, чем кватернионов. Незначительное преимущество : Умножение матрицы на вектор происходит в ~ 2 раза быстрее и больше. Огромный недостаток : нормализация! Грам-Шмит асимметричен, что не дает точного ответа более высокого порядка при выполнении дифференциальных уравнений. Более сложные методы очень сложны и дороги.

Ось (угол = длина оси) Незначительное преимущество : Маленький. Умеренный недостаток : Умножение и применение к вектору выполняется медленно с помощью trig. Умеренный недостаток : Сингулярность северного полюса при длине = 2 * пи, поскольку все направления осей ничего не делают. Дополнительный код (и отладка) для автоматического масштабирования, когда он приближается к 2pi.

5 голосов
/ 14 февраля 2013

Как правило, мы просто хотим отобразить точку X = (x, y, z) на новую точку X '= (x', y ', z') с учетом ограничения, что X ^ 2 = X ' ^ 2. И есть много вещей, которые делают это.

Мы абсолютно не просто хотим этого. Есть очень важная тонкость, которую многие люди пропускают . Конструкция, о которой вы говорите (нарисуйте треугольники, используйте триг и т. Д.), Будет правильно вращать один вектор в другой. Но есть бесконечно много вращений, которые будут делать это. В частности, я могу прийти после того, как вы выполните вращение, а затем повернуть всю систему вокруг вектора X '. Это не изменит положение X 'на всех. Комбинация вашего вращения и моего эквивалентна другому единственному вращению (поскольку вращения образуют группу ). В общем, вы должны быть в состоянии представить любое такое вращение.

Оказывается, вы можете сделать это только с вектором. (Это представление угла поворота оси .) Но объединить повороты в представлении угла оси сложно. Кватернионы облегчают это, наряду со многими другими вещами. По сути, кватернионы обладают всеми преимуществами других представлений, и ни одного из недостатков. (Хотя я признаю, что могут быть конкретные приложения, для которых может быть лучше другое представление.)

3 голосов
/ 13 июля 2015

Следует иметь в виду, что все свойства, связанные с вращением, на самом деле не являются свойствами кватернионов: они являются свойствами Параметрирования Эйлера-Родрига , который является фактической структурой из 4 элементов, используемой для описания3D вращение.

Их связь с кватернионами обусловлена ​​работой Кейли "О некоторых результатах, связанных с кватернионами", где автор наблюдает корреляцию между умножением кватернионов и комбинацией параметризаций Эйлера-Родрига.Это позволило применять аспекты теории кватернионов к представлению вращений и особенно к интерполяции между ними.

Вы можете прочитать статью здесь: https://archive.org/details/collmathpapers01caylrich.Но в то время не было никакой связи между кватернионами и вращением, и Кэли был довольно удивлен, обнаружив:

На самом деле, именно такие формулы приведены для такого преобразования М. Олинде Родригес Лиувиллем., ТВ, "Des lois géométriques qui risgissent les déplacements d'un système solide [...]" (или Comb. Math. Journal, т. III. с. 224 [6]).Было бы интересно априори объяснять появление здесь этих коэффициентов.

Однако в кватернионах нет ничего, что могло бы принести какую-либо пользу вращению.Кватернионы не избегают карданных замков;Параметризации Эйлера-Родрига делают.Очень немногие компьютерные программы, которые выполняют ротацию, действительно могут реализовать типы кватернионов, которые представляют собой сложные математические значения первого класса.К сожалению, неправильное понимание роли кватернионов, похоже, куда-то просочилось, что привело к тому, что немало студентов-графиков, ставших в тупик, изучали детали сложной математики с множеством мнимых констант, а затем были сбиты с толку, почему это решает проблемы с вращением.

3 голосов
/ 19 января 2012

Обычные причины, которые я вижу, - это не блокировка трюков и не числовые проблемы.

И это веские причины.

Как вы уже, кажется, понимаете, кватернионы кодируютодно вращение вокруг произвольной оси, в отличие от трех последовательных вращений в 3-пространстве Эйлера.Это делает кватернионы невосприимчивыми к подвесу карданного подвеса .

Кроме того, некоторые формы интерполяции становятся удобными и простыми, например SLERP .

... или с использованием двух перекрывающихся систем координат.

С точки зрения производительности, почему ваше решение лучше?

Я мог бы продолжить, но кватернионы - только один из возможных инструментов для использования.Если они не соответствуют вашим потребностям, не используйте их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...