v' = q-[0,V]q-1. (1.57)

При этом если q = [cos 0, и sin 0], то поворот осуществляется вокруг оси, задаваемой вектором и на угол 29.

Последовательность поворотов соответствует произведению кватернионов, задающих эти повороты.

p{q[0,v]q'iyp-l=(pq)[0,v]ipqy1. (1.58)

Из этого следует, что для поворота вектора на угол 9 вокруг вектора и следует использовать следующий кватернион:

(1.59)

Обратите внимание, что как кватернион <? = [и\ у], так и кватернион q = [-и-, - у] соответствуют одному и тому же повороту.

Координаты и их преобразования

Для заданного единичного кватерниона ц можно построить матрицу 3x3, соответствующую данному повороту.

'1-2(у2 + г2) 2{ху-ъг) 2{хг + щ) " М{а)= 2(ху + н>г) 1-2(д:2 + г2) 2{уг-м»х) . (1.60)

2(хг-ыу) 2(уг + ых) 1-2(л:2 + у2)

Также можно по заданной ортогональной матрице М построить соответствующий кватернион. Для этого из (1.57) достаточно выразить (и-, х, у, г) через элементы матрицы.

Для этого заметим, что сумма диагональных элементов матрицы (ее след) ггМ всегда равна Зи>2, откуда легко находится величина и>.

Далее производится вычитание элементов, симметричных относительно главной диагонали, друг из друга для получения мнимой части кватерниона, например т1Л-тгл=-Аш- (1.61) Отсюда легко находится величина г.

Таким образом, для определения кватерниона по ортогональной матрице можно использовать следующие формулы:

Для корректного применения формул (1.59) требуется, чтобы и>*0. Обычно из соображений численной устойчивости требуют, чтобы |и>|>е. Если это не выполнено, то считаем и> = 0. Тогда

(1.63)

в силу того, что строящийся кватернион является единичным. Отсюда находится х и проверяется выполнение условия |л:| > е . Если оно выполнено, то

(1.64)

В противном случае считаем w = х = у = 0, z = 1 .

Часто возникает задача плавного перехода от одной ориентации к другой. Если обе эти ориентации заданы при помощи кватернионов, то для получения промежуточных ориентации удобно использовать так называемую сферическую интерполяцию кватернионов (slerp).


⇐ Предыдущая| |Следующая ⇒