Что такое кватернионы и как они работают? Кроме того, какие преимущества вы получаете, используя три точки на плоскости 2D? Наконец, когда считается хорошей практикой использовать кватернионы?
mathematics
terminology
SirMathhman
источник
источник
Ответы:
Математически кватернион - это комплексное число с 4 измерениями. Но в разработке игр кватернионы часто используются для описания вращения в трехмерном пространстве с помощью кодирования:
Обратите внимание, что эта информация кодируется с помощью синусов и косинусов внутри кватерниона, поэтому в общем случае не следует пытаться явно задавать или читать внутренние компоненты кватерниона (xyzw) по отдельности. Так легко ошибиться и получить бессмысленный результат. Математическая библиотека кватернионов обычно предоставляет функции для работы с кватернионами (например, преобразование их в и из углов Эйлера или осевого угла), что обеспечивает правильность математики и побочное преимущество, облегчающее чтение и понимание вашего кода.
Альтернативный способ описания поворотов заключается в описании того, как далеко повернуть вокруг 3 фиксированных осей 'x, y и z (также называемых углами Эйлера), для которых требуется только 3 числа вместо 4 и, как правило, он более интуитивно понятен в использовании. Тем не менее, углы Эйлера подвержены проблеме, называемой карданной блокировкой : когда вы поворачиваете на 90 ° вокруг одной оси, две другие оси становятся эквивалентными. С кватернионами эта проблема не возникает.
Другой способ выразить вращение в трехмерном пространстве - использовать матрицу преобразования 4x4 . Но с помощью матрицы преобразования вы можете не только вращать, но и масштабировать, переводить и наклонять. Когда вам нужно только вращение, матрица будет излишней, а кватернион - гораздо более быстрым и простым решением.
Эта проблема актуальна только в трехмерном пространстве. В 2-мерном пространстве у вас есть только одна ось вращения. Любое вращение может быть выражено одним числом с плавающей точкой или одним комплексным числом, поэтому у вас нет этой проблемы. В то время как теоретически вы можете выразить вращение на 2d плоскости с кватернионом, где ось указывает на плоскость (или из нее), обычно это перебор.
источник
Это должно добавить к ответу @ Philipp.
Вам не нужны кватернионы, если все, что вас интересует, это вращение на плоскости, то есть вокруг оси z. В этом случае все, что вам нужно, это угол рыскания, и вы можете использовать тот факт, что последовательные повороты вокруг оси z коммутируют. Таким образом, вы можете применять свои повороты в любом порядке.
Ситуация меняется, если вы вращаетесь на плоскости, которая не является плоскостью XY. Это вращение эквивалентно вращению вокруг произвольной трехмерной оси. Теперь у вас есть два варианта:
поверните плоскость в 3D так, чтобы она совпадала с плоскостью XY, затем поверните назад и преобразуйте назад, или
для начала подумайте о том, что вы вращаетесь в 3D.
Второй вариант проще кодировать. Как сказал @Philipp, кватернионы избегают блокировки карданного подвеса (если вы избегаете промежуточных RPY или преобразований ось / угол).
Всякий раз, когда есть 3D-вращения, хорошей практикой является использование кватернионов.
Например:
В Qt . Кваты облегчают интерполяцию между вращениями, как в функции Slerp .
ROS использует их для трансформации поз робота.
В пуле динамика двигателя
Для очень сложного применения, смотрите здесь для их использования в классической трехмерной механике.
источник