Кватерніони і повороти простору

Матеріал з testwiki
Перейти до навігації Перейти до пошуку

Кватерніон  𝐪=a+bi+cj+dk можна представити у вигляді пари скаляра та 3-вимірного вектора:

 𝐪=(s,v),s=a,v=(b,c,d),

множення кватерніонів буде виражатись через скалярний та векторний добутки 3-вимірних векторів:

 𝐪𝟏𝐪𝟐=(s1,v1)(s2,v2)=(s1s2v1v2,s1v2+s2v1+v1×v2).

Виразимо векторний добуток через добуток кватерніонів:

 v1×v2=𝐪𝟏𝐪𝟐𝐪𝟐𝐪𝟏2.

Поворот точки навколо осі в 3-вимірному просторі

Покажемо що результатом повороту вектора  v на кут  α відносно осі  u (одиничний вектор) буде: 𝐯=𝐪𝐯𝐪𝟏, де

𝐯=(0,v) — чисто векторний кватерніон,
𝐮=(0,u) — чисто векторний кватерніон,
𝐪=(cosα2,usinα2),|𝐪|=1,𝐪𝟏=𝐪*.

Перепишемо останній кватерніон в іншій формі:

𝐪=cosα2+𝐮sinα2;
𝐪𝟏=cosα2𝐮sinα2.

Спершу обчислимо необхідний нам вираз (використали властивість подвійного векторного добутку):

 𝐮𝐯𝐮=(u×v)×u(uv)u=v2u(uv).

Обчислимо добуток:

𝐯=(cosα2+𝐮sinα2)𝐯(cosα2𝐮sinα2)
𝐯=𝐮𝐯𝐮sin2α2+𝐯cos2α2+(𝐮𝐯𝐯𝐮)sinα2cosα2=(2u(uv)v)sin2α2+vcos2α2+(u×v)(2sinα2cosα2)=u(uv)(2sin2α2)+v(cos2α2sin2α2)+(u×v)sinα=u(uv)(1cosα)+vcosα+(u×v)sinα=u(uv)+(vu(uv))cosα+(u×v)sinα=v+vcosα+(u×v)sinα,

де v та v компоненти вектора v паралельні і перпендикулярні до u відповідно:

  • v=v+v
  • uv
  • uv.

Кожен з трьох доданків є ортогональним до двох інших.

Кількість операцій

Обчислення результату двох поворотів
Зберігання Множення Додавання
Матриця повороту 𝐑=𝐑𝟐𝐑𝟏 9 27 18
Кватерніон 𝐪=𝐪𝟐𝐪𝟏 4 16 12
Обчислення повороту точки
Зберігання Множення Додавання
Матриця повороту 𝐯=𝐑𝐯 9 9 6
Кватерніон 𝐯=𝐪𝐯𝐪𝟏 4 15 12

Матриця повороту

Шаблон:Докладніше

  • Поворотові за допомогою одиничного кватерніона  𝐪=a+bi+cj+dk відповідає наступна матриця повороту
𝐑=(12(c2+d2)2bc2ad2ac+2bd2ad+2bc12(b2+d2)2cd2ab2bd2ac2ab+2cd12(b2+c2)).
  • Якщо представимо кватерніон у вигляді 𝐪=(cosα2,usinα2),u=(x,y,z); тоді
𝐑u(α)=𝐮𝐮T+(I𝐮𝐮T)cosα+[𝐮]×sinα.

Доданки ідентичні доданкам із формули отриманої через кватерніони.

Для спрощення обчислень, зведемо подібні доданки та вернемось до векторної форми (формула повороту Родрігеса):

𝐯=𝐮(𝐮𝐯)(1cosα)+𝐯cosα+(𝐮×𝐯)sinα.

Перший та другий доданки вже не є обов'язково ортогональними.