Что такое кватернион?

50

Что такое кватернионы и как они работают? Кроме того, какие преимущества вы получаете, используя три точки на плоскости 2D? Наконец, когда считается хорошей практикой использовать кватернионы?

SirMathhman
источник
Исторически я думаю, что кватернионы были первыми, а затем точечные и перекрестные произведения были получены из кватернионов.
2
Я нашел эту анимационную статью очень информативной: acko.net/blog/animate-your-way-to-glory-pt2/#quaternions
AShelly
В чистой математике я считаю, что кватернионы - это 3 комплексные числа, такие как i² = j² = k² = ijk
Vinz243
Кватернионы - лучший способ плавно интерполировать вращения. Простая интерполяция матриц вращения не работает, потому что вы не всегда получите матрицу вращения в результате. Интерполяция углов Эйлера не приводит к плавному вращению. Таким образом, для анимации вращений, как это требуется в компьютерной графике или робототехнике, кватернионы - это путь. И есть полезное, но как-то не так часто используемое расширение, называемое двойными кватернионами, которое позволяет представлять преобразование и вращение
Тобиас Б.

Ответы:

43

Математически кватернион - это комплексное число с 4 измерениями. Но в разработке игр кватернионы часто используются для описания вращения в трехмерном пространстве с помощью кодирования:

  1. ось вращения (в виде трехмерного вектора)
  2. как далеко повернуть вокруг этой оси

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

Альтернативный способ описания поворотов заключается в описании того, как далеко повернуть вокруг 3 фиксированных осей 'x, y и z (также называемых углами Эйлера), для которых требуется только 3 числа вместо 4 и, как правило, он более интуитивно понятен в использовании. Тем не менее, углы Эйлера подвержены проблеме, называемой карданной блокировкой : когда вы поворачиваете на 90 ° вокруг одной оси, две другие оси становятся эквивалентными. С кватернионами эта проблема не возникает.

Другой способ выразить вращение в трехмерном пространстве - использовать матрицу преобразования 4x4 . Но с помощью матрицы преобразования вы можете не только вращать, но и масштабировать, переводить и наклонять. Когда вам нужно только вращение, матрица будет излишней, а кватернион - гораздо более быстрым и простым решением.

Эта проблема актуальна только в трехмерном пространстве. В 2-мерном пространстве у вас есть только одна ось вращения. Любое вращение может быть выражено одним числом с плавающей точкой или одним комплексным числом, поэтому у вас нет этой проблемы. В то время как теоретически вы можете выразить вращение на 2d плоскости с кватернионом, где ось указывает на плоскость (или из нее), обычно это перебор.

Philipp
источник
6
Блокировка карданного подвеса не является проблемой в кватернионах, если вы начинаете с кватернионов и заканчиваете кватернионами, блокировка карданного подвеса устанавливается, когда у вас есть шаг, который преобразуется в углы Эйлера или обратно.
фрик с трещоткой
2
Кватернионы - это не ось + угол, это 3 комплексных числа и шкала.
транзистор09
11
@ транзистор09 ты веришь, что вы оба правы? Трехкомпонентная мнимая часть единичного кватерниона может быть интерпретирована как единичный вектор вдоль оси вращения, масштабированный по синусу половины угла поворота. Действительная часть единицы кватерниона - это косинус половины угла поворота. Таким образом, вы правы, что это не совсем формат угловой оси, но это правда, что компоненты кватерниона можно интерпретировать как ось и (нелинейную) меру того, как далеко повернуть вокруг этой оси.
DMGregory
2
Можно также упомянуть, какое преимущество имеют кватернионы перед матрицей вращения: они быстрее объединяются. При объединении вращений умножение двух кватернионов требует меньше операций, чем умножение матриц.
Восстановите Монику
3
На самом деле, в двумерном пространстве комплексные числа являются точным аналогом. Умножьте 2D-точку на комплексное число, и вы повернули его - фактически, оно точно такое же, как и обычное вращение sin / cos (что должно быть очевидно, если вы достаточно хорошо понимаете комплексные числа). Это можно немного использовать, но в конце концов, 2D-графика не так уж и интенсивна сегодня, поэтому она не принесет вам особых улучшений, если вы не очень удобны в использовании комплексных чисел (что большинство людей определенно не считают нужным). - о чем свидетельствует невероятно плохой кватернионный код: D).
Луаан
13

Это должно добавить к ответу @ Philipp.

Кроме того, какие преимущества вы получаете, используя три точки на плоскости 2D?

Вам не нужны кватернионы, если все, что вас интересует, это вращение на плоскости, то есть вокруг оси z. В этом случае все, что вам нужно, это угол рыскания, и вы можете использовать тот факт, что последовательные повороты вокруг оси z коммутируют. Таким образом, вы можете применять свои повороты в любом порядке.

Ситуация меняется, если вы вращаетесь на плоскости, которая не является плоскостью XY. Это вращение эквивалентно вращению вокруг произвольной трехмерной оси. Теперь у вас есть два варианта:

  • поверните плоскость в 3D так, чтобы она совпадала с плоскостью XY, затем поверните назад и преобразуйте назад, или

  • для начала подумайте о том, что вы вращаетесь в 3D.

Второй вариант проще кодировать. Как сказал @Philipp, кватернионы избегают блокировки карданного подвеса (если вы избегаете промежуточных RPY или преобразований ось / угол).

Наконец, когда считается хорошей практикой использовать кватернионы?

Всякий раз, когда есть 3D-вращения, хорошей практикой является использование кватернионов.

Например:

  • В Qt . Кваты облегчают интерполяцию между вращениями, как в функции Slerp .

  • ROS использует их для трансформации поз робота.

  • В пуле динамика двигателя

  • Для очень сложного применения, смотрите здесь для их использования в классической трехмерной механике.

PKG
источник
« Всякий раз, когда есть 3D вращения, хорошей практикой является использование кватернионов». только немного слишком сильный. Почти всегда лучше; Есть ситуации, когда уместны альтернативы. (Как пример несовершенства, n-й корень кватерниона многозначен)
Якк
1
Кватернионы - это товар, который нужно использовать, и боль в реализации. Вы можете обойтись без них, если знаете о карданном замке.
Hatoru Hansou