Самоучитель по 3dsmax 7

         

Осталось выяснить, как из этого кватерниона получить что-нибудь более привычное - скажем, матрицу поворота


Осталось выяснить, как из этого кватерниона получить что-нибудь более привычное - скажем, матрицу поворота. С одной стороны, вспомнив, как делается перевод в кватернионную форму для поворота на угол angle относительно оси (x,y,z), можно написать, что

q = [s,v],
angle = 2 * arccos(angle),
(x,y,z) = v / sin(angle/2),

и посчитать матрицу поворота на полученный угол относительно полученной оси. Но есть метод попроще, позволяющий получить матрицу непосредственно из кватерниона: q = [w,(x,y,z)], [ 1-2*(y*y+z*z) 2*(x*y-w*z) 2*(x*z+w*y) ] A = [ 2*(x*y+w*z) 1-2*(x*x-z*z) 2*(y*z-w*x) ] [ 2*(x*z-w*y) 2*(y*z+w*x) 1-2*(x*x-y*y) ].

Подведем итог. Для интерполяции ориентации объекта в какой-то момент времени с помощью кватернионов и сплайнов придется сделать почти то же самое, что и в случае "обычной" интерполяции чего-нибудь сплайнами (п.7.6). Различия же заключаются в следующем:

  • все повороты надо заранее перевести в кватернионную форму;

  • расчеты производных и интерполяция делаются по формулам, данным именно в этом пункте, а не по "обычным" для сплайнов;

  • из кватернионной формы результирующий поворот обычно надо перевести в привычную матричную.

Все остальное совпадает с планом действий при "обычной" сплайновой интерполяциии и изложено в пункте 7.6.

Содержание раздела