Отказ от ответственности: я профессиональный программист игр и использую кватернионы большинство дней, но они близки к черной магии для меня. Я относительно дома с математикой, но воображаемые числа всегда смущали меня. Я склонен относиться к четвертям как к полезным и в итоге меняю умножения более одного раза. Я пытаюсь рассуждать о них, как если бы я использовал матрицы с ограниченным успехом.
Так или иначе ....
Что сбивает меня с толку, так это следующее. Когда я хочу повернуть объект вокруг его локальной оси, я умножаю его вращение на кватернион, представляющий вращение, которое я хочу применить. Следовательно, это вращение в локальном пространстве.
Теперь, если я хочу повернуть его вокруг оси в мировом пространстве, мои рассуждения будут таковы: возьмите вращение в мировом пространстве как кватернион. Умножьте обратное вращение моего объекта на этот кватернион. Это принесет вращение моего мира в локальном пространстве. Умножьте мое вращение на этот новый кватернион. то есть: newRot = oldRot * (обратный oldRot * worldRot)
Однако, что мне нужно сделать, это newRot = oldRot * (обратный oldRot * worldRot) * oldRot.
Почему мне после умножения с обратным кватом все еще нужно умножать на свой собственный кват перед его применением? Я знаю, что должна быть совершенно веская причина, но я не могу найти выход из нее, и это чертовски неприятно для меня. Я пробовал различные часто задаваемые вопросы и еще много чего, но большинство углубляется в математику, делая это менее понятным для меня.
Кто-нибудь, кто может объяснить это мне, как будто мне 5 лет?
источник
I try to reason about them like I would with matrices
- тогда вы на правильном пути. Если вы понимали, как вращаться вокруг осей объекта и осей мира, используя матрицы, вы можете сделать то же самое, используя кватернионы. Порядок умножения одинаков для матриц и кватернионов.Ответы:
Кватернионы ассоциативны:
Вы упоминаете, что ваше решение:
что так же, как:
что так же, как:
что на самом деле возвращает вас к тому, что на самом деле происходит:
Порядок применения меняется, вот и все. Возвращаясь к матрицам, когда вы применяете объектную матрицу к матрице преобразования и сохраняете ее как новую объектную матрицу, это ваше локальное пространственное преобразование. Когда вы применяете матрицу преобразования к матрице объектов и сохраняете ее, это ваше мировое преобразование. Все дело в порядке подачи заявки и не более того.
источник