Кватернионы и матрицы преобразования - PullRequest
2 голосов
/ 20 декабря 2009

Скажите, если я ошибаюсь.

Я начинаю использовать кватернионы. Используя матрицу вращения 4 x 4 (как в OpenGL), я могу вычислить матрицу вида модели, умножив текущий вид модели на матрицу вращения. Матрица вращения получена из кватерниона.

Кватернион - это вектор направления (даже не нормированный) и угол поворота. Результирующее вращение зависит от модуля вектора направления и компонента кватерниона.

Но почему я должен использовать кватернионы вместо обозначения оси / угла Эйлера? Последний проще визуализировать и управлять ...

Вся информация, которую я нашел, может быть синтезирована с помощью этой прекрасной статьи:

http://en.wikipedia.org/wiki/Rotation_representation

Ответы [ 6 ]

4 голосов
/ 20 декабря 2009

Почему лучше использовать кватернионы, объясняется в статье.

  • Более компактный, чем представление DCM, и менее подверженный ошибкам округления
  • Элементы кватернионов непрерывно изменяются по единичной сфере в R4 (обозначается S3) при изменении ориентации, избегая прерывистых скачков (присущих трехмерным параметризациям), это часто называют блокировкой карданного подвеса.
  • Выражение DCM через кватернионные параметры не включает тригонометрических функций
  • Простое объединение двух отдельных вращений, представленных в виде кватернионов, с использованием произведения кватернионов
4 голосов
/ 20 декабря 2009

В отличие от углов Эйлера, кватернионы не страдают от карданного замка .

2 голосов
/ 20 декабря 2009

Я не согласен с тем, что кватернионы легче визуализировать, но основная причина их использования заключается в том, что легко объединять вращения без "матричного ползучести".

2 голосов
/ 20 декабря 2009

Кватернионы обычно используются для простоты расчета - гораздо проще (и быстрее) выполнять такие вещи, как составление преобразований при использовании кватернионов. Чтобы процитировать ссылку на Википедию, на которую вы ссылались,

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

Они также не страдают от общей проблемы оси / угла, карданный замок .

1 голос
/ 20 декабря 2009

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

Исправления к OP: вектор представляет собой ось вращения, а не направление, а компонент вращения - это косинус полуугольника, а не сам угол.

0 голосов
/ 20 декабря 2009
  • Как уже упоминалось, кватернионы не страдают от gimble lock .
  • Для данного поворота существует ровно одно нормированное кватернионное представление.
    • Может быть несколько, казалось бы, не связанных значений оси / угла, которые приводят к одному и тому же повороту.
  • Кватернионные вращения легко комбинируются.
    • Чрезвычайно сложно вычислить обозначение оси / угла, которое представляет собой совокупность двух других вращений оси / угла.
  • Числа с плавающей запятой имеют более высокую степень точности при представлении значений от 0,0 до 1,0.

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

...