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