Кратчайшее из возможных заключений: кватернион - это просто сокращение матрицы вращения.В то время как матрица 4x4 требует 16 отдельных значений, кватернион может представлять точно такое же вращение в 4.
Для математически наклонных я полностью осознаю, что вышеупомянутое супер упрощено.
Чтобы получить немного больше подробностей, давайте обратимся к статье Википедии :
Единичные кватернионы обеспечивают удобную математическую запись для представления ориентации и поворота объектов втри измерения.По сравнению с углами Эйлера их проще составить и избежать проблемы блокировки карданного подвеса.По сравнению с матрицами вращения они более численно устойчивы и могут быть более эффективными
Из этого вступительного абзаца неясно, что кватернион не только удобен, но и уникален.Если у вас есть определенная ориентация объекта, крутящаяся на любом количестве осей, существует один уникальный кватернион, который представляет эту ориентацию.
Опять же, для математически наклонного, мой комментарий уникальности выше предполагает правильностьвращениеСуществует эквивалентный левый кватернион, который вращается в противоположном направлении вокруг противоположной оси.
В целях простого объяснения это является чем-то вроде различия без разницы.
Если вы хотите создать простой кватернион, представляющий вращение вокруг оси, вот несколько коротких шагов, которые доставят вас туда:
- Выберите вашу ось вращения
v = {x, y, z}
.Просто для вежливости, пожалуйста, выберите единичный вектор: если он еще не имеет длины 1, разделите все компоненты на длину v. - Выберите угол поворота, который вы хотите повернуть вокруг этой оси, иназовите это
theta
. - Эквивалент кватернионов в эквивалентных единицах можно вычислить, используя приведенный ниже пример кода:
Конструкция кватернионов:
q = { cos(theta/2.0), // This is the angle component
sin(theta/2.0) * x, // Remember, angle is in radians, not degrees!
sin(theta/2.0) * y, // These capture the axis of rotation
sin(theta/2.0) * z};
Обратите внимание на эти деления подва: они гарантируют, что в повороте нет путаницы.В случае матрицы нормального вращения поворот на 90 градусов вправо аналогичен повороту на 270 градусов влево. Кватернионы, эквивалентные этим двум поворотам, различны: нельзя смешивать одно с другим.
РЕДАКТИРОВАТЬ: отвечая на вопрос в комментариях:
Давайте упростим задачу, установив следующую систему координат:
- Выберите центр экрана в качестве источника (мы 'вращается вокруг этого).
- Ось X направлена вправо
- Ось Y направлена вверх (вверху экрана)
- Ось Z направлена за пределы экрана наваше лицо (образуя красивую правую систему координат).
Итак, если у нас есть пример объекта (скажем, стрелка), который начинается с указания вправо (положительная ось х).Если мы переместим мышь вверх от оси x, мышь предоставит нам положительный x и положительный y.Итак, прорабатывая последовательность шагов:
double theta = Math.atan2(y, x);
// Remember, Z axis = {0, 0, 1};
// pseudo code for the quaternion:
q = { cos(theta/2.0), // This is the angle component
sin(theta/2.0) * 0, // As you can see, the zero components are ignored
sin(theta/2.0) * 0, // Left them in for clarity.
sin(theta/2.0) * 1.0};