По большей части, большинство из нас, может просто по памяти воспроизвести матрицу вращения в плоскости. Но как получить матрицу вращения вокруг 3-мерного вектора? Попробуем разобраться.
Для начала освежим сведения об эквивалентности перехода от мнимых единиц кватернионов к векторам и их основные свойства.
Если есть векторная часть кватерниона
a=ia1+ja2+ka3
то она отображается в вектор
a=(a1a2a3)
Скалярное произведение
(a,b)=a1b1+a2b2+a3b3
Векторное произведение
[a,b]=(a3b2−a2b3a1b3−a3b1a2b1−a1b2)
У них используем свойства, что если векторы a и b ортогональны друг другу, то их скалярное произведение равно 0. А также то, что результат векторного произведения a и b ортогонален и a и b одновременно:
([a,b],a)=0
([a,b],b)=0
Векторное произведение сонаправленных векторов при этом имеет не произвольный любой результат, а равно нулю.
Скалярное произведение в рассматриваемом случае коммутативно:
(a,b)=(b,a)
И векторное антикоммутативно:
[a,b]=−[b,a]
Теперь рассмотрим кватернионное вращение на угол α:
x′=eα/2xe−α/2
Здесь α - вектор вращения (векторная часть кватерниона):
α=iα1+jα2+kα3
Экспонента от кватерниона α/2 равна:
eα/2=cosα/2+iα1+jα2+kα3√α21+α22+α23sinα/2
Здесь мы вынесли 1/2 из числителя и знаменателя дроби и сократили. При этом полагаем что α не ноль и не бесконечность. В случае если α=0 экспонента равна 1:
e0/2=1
В случае же бесконечности α=∞ результат неопределен в силу периодичности функций cos и sin.
В силу того, что выражение
iα1+jα2+kα3√α21+α22+α23
имеет величину 1, обозначим её для краткости через a:
a=iα1+jα2+kα3√α21+α22+α23
|a|2=1
Итого, общее преобразование вращения можем записать как:
x′=(cosα/2+asinα/2)x(cosα/2−asinα/2)
Поскольку и a и x есть трехмерные векторы, раскроем это выражение уже переходя от кватернионов к векторам, учитывая что произведение в кватернионах эквивалентно произведению в векторах:
ab=−(a,b)+[a,b]
Первое умножение:
x′=(cosα/2−(a,x)sinα/2+[a,x]sinα/2)(cosα/2−asinα/2)
Второе умножение:
x′=cosα/2x+(x,a)cosα/2sinα/2−−[x,a]cosα/2sinα/2−(a,x)sinα/2cosα/2++a(a,x)sin2α/2+[a,x]sinα/2cosα/2++([a,x],a)sin2α/2−[[a,x],a]sin2α/2
Здесь величина
([a,x],a)
равна 0 в силу свойств векторного произведения.
Двойное векторное произведение раскрывается до выражения:
[[a,x],a]=−a(x,a)+x(a,a)
В силу коммутативности скалярного произведения величина
(x,a)cosα/2sinα/2−(a,x)sinα/2cosα/2
также равна нулю.
Немного сократим и используя формулу из тригонометрии:
2sinα/2cosα/2=sinα
И учтем, что x(a,a)=x в силу того что (a,a)=|a|2=1
Итого, промежуточный результат упрощений:
x′=xcos2α/2+[a,x]sinα+a(a,x)sin2α/2++a(x,a)sin2α−xsin2α/2
Теперь учтем, что
cos2α/2−sin2α/2=cosα
и что
2sin2α/2=1−cosα
И в итоге получаем:
x′=xcosα+[a,x]sinα++a(a,x)(1−cosα)
Все три слагаемых есть линейные формы от компонент вектора x, значит в итоге значение x′ есть произведение суммы трех матриц на вектор x или одной матрицы, которая есть сумма этих трех.
Первое слагаемое дает:
(100010001)cosα(x1x2x3)
Второе слагаемое дает:
(0−a3a2a30−a1−a2a10)sinα(x1x2x3)
и третье слагаемое дает:
(a1a1a1a2a1a3a2a1a2a2a2a3a3a1a3a2a3a3)(1−cosα)(x1x2x3)
Здесь α - абсолютная величина угла вращения и a - единичный вектор направления оси вращения.
Комментариев нет:
Отправить комментарий