Loading [MathJax]/jax/output/CommonHTML/jax.js

четверг, 6 января 2022 г.

Как вывести матрицу 3-мерного вращения?

По большей части, большинство из нас, может просто по памяти воспроизвести матрицу вращения в плоскости. Но как получить матрицу вращения вокруг 3-мерного вектора? Попробуем разобраться.

Для начала освежим сведения об эквивалентности перехода от мнимых единиц кватернионов к векторам и их основные свойства.

Если есть векторная часть кватерниона a=ia1+ja2+ka3 то она отображается в вектор a=(a1a2a3) Скалярное произведение (a,b)=a1b1+a2b2+a3b3 Векторное произведение [a,b]=(a3b2a2b3a1b3a3b1a2b1a1b2) У них используем свойства, что если векторы 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α/2asinα/2) Поскольку и a и x есть трехмерные векторы, раскроем это выражение уже переходя от кватернионов к векторам, учитывая что произведение в кватернионах эквивалентно произведению в векторах: ab=(a,b)+[a,b] Первое умножение: x=(cosα/2(a,x)sinα/2+[a,x]sinα/2)(cosα/2asinα/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α/2sin2α/2=cosα и что 2sin2α/2=1cosα И в итоге получаем: x=xcosα+[a,x]sinα++a(a,x)(1cosα) Все три слагаемых есть линейные формы от компонент вектора x, значит в итоге значение x есть произведение суммы трех матриц на вектор x или одной матрицы, которая есть сумма этих трех.

Первое слагаемое дает: (100010001)cosα(x1x2x3) Второе слагаемое дает: (0a3a2a30a1a2a10)sinα(x1x2x3) и третье слагаемое дает: (a1a1a1a2a1a3a2a1a2a2a2a3a3a1a3a2a3a3)(1cosα)(x1x2x3) Здесь α - абсолютная величина угла вращения и a - единичный вектор направления оси вращения.

Комментариев нет:

Отправить комментарий