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

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

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

\ \mathbf{q} = (s, \vec{v}), \quad s=a, \quad \vec{v} = (b,c,d),

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

\ \mathbf{q_1 q_2} = (s_1, \vec{v_1})(s_2, \vec{v_2})
= (s_1 s_2 - \vec{v_1}\cdot\vec{v_2}, \;\; s_1\vec{v_2} + s_2\vec{v_1} + \vec{v_1}\times\vec{v_2}).

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

\ \vec{v_1}\times\vec{v_2} = {\mathbf{q_1 q_2 - q_2 q_1} \over 2}.

Поворот точки навколо осі в 3-вимірному просторі[ред.ред. код]

Покажемо що результатом повороту вектора \ \vec{v} на кут \ \alpha відносно осі \ \vec{u} (одиничний вектор) буде: \mathbf{v}' = \mathbf{q v q^{-1}}, де

\mathbf{v} = (0, \;\; \vec{v}) — чисто векторний кватерніон,
\mathbf{u} = (0, \;\; \vec{u}) — чисто векторний кватерніон,
\mathbf{q} = \left(\cos \frac{\alpha}{2}, \;\; \vec{u} \sin \frac{\alpha}{2} \right), \qquad
|\mathbf{q}|= 1, \quad \mathbf{q^{-1} = \mathbf{q^*}}.

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

\mathbf{q} = \cos \frac{\alpha}{2} + \mathbf{u} \cdot \sin \frac{\alpha}{2} .

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

\ \mathbf{uvu} = (\vec{u} \times \vec{v}) \times \vec{u} - (\vec{u} \cdot \vec{v}) \vec{u} = \vec{v} - 2\vec{u}(\vec{u} \cdot \vec{v}).

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

\mathbf{v}' =
\left( \cos \frac{\alpha}{2} + \mathbf{u} \sin \frac{\alpha}{2} \right)
\; \mathbf{v} \;
\left( \cos \frac{\alpha}{2} - \mathbf{u} \sin \frac{\alpha}{2} \right)
\begin{matrix}
\mathbf{v}' &=& - \mathbf{uvu} \sin^2 \frac{\alpha}{2} &+& \mathbf{v} \cos^2 \frac{\alpha}{2} &+& (\mathbf{uv-vu}) \sin \frac{\alpha}{2} \cos \frac{\alpha}{2} \\

&=& (2 \vec{u} (\vec{u} \cdot \vec{v}) - \vec{v}) \sin^2 \frac{\alpha}{2} &+& \vec{v} \cos^2 \frac{\alpha}{2} &+& (\vec{u} \times \vec{v}) (2 \sin \frac{\alpha}{2} \cos \frac{\alpha}{2}) \\

&=& \vec{u} (\vec{u} \cdot \vec{v}) (2 \sin^2 \frac{\alpha}{2}) &+& \vec{v} (\cos^2 \frac{\alpha}{2} - \sin^2 \frac{\alpha}{2}) &+& (\vec{u} \times \vec{v}) \sin\alpha \\

&=& \vec{u} (\vec{u} \cdot \vec{v}) (1 - \cos \alpha) &+& \vec{v} \cos \alpha &+& (\vec{u} \times \vec{v}) \sin\alpha \\

&=& \vec{u} (\vec{u} \cdot \vec{v}) &+& (\vec{v} - \vec{u} (\vec{u} \cdot \vec{v})) \cos \alpha &+& (\vec{u} \times \vec{v}) \sin\alpha \\

&=& \vec{v}_{\|} &+& \vec{v}_{\bot} \cos \alpha &+& (\vec{u} \times \vec{v}_{\bot}) \sin\alpha,
\end{matrix}

де \vec{v}_{\|} та \vec{v}_{\bot} компоненти вектора \vec{v} паралельні і перпендикулярні до \vec{u} відповідно:

  • \vec{v} = \vec{v}_{\|} + \vec{v}_{\bot}
  • \vec{u} \; \| \; \vec{v}_{\|}
  • \vec{u} \; \bot \; \vec{v}_{\bot}.

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

Кількість операцій[ред.ред. код]

Обчислення результату двох поворотів
Зберігання Множення Додавання
Матриця повороту \mathbf{R = R_2 R_1} 9 27 18
Кватерніон \mathbf{q = q_2 q_1} 4 16 12
Обчислення повороту точки
Зберігання Множення Додавання
Матриця повороту \mathbf{v' = R v} 9 9 6
Кватерніон \mathbf{v' = q v q^{-1}} 4 15 12

Матриця повороту[ред.ред. код]

Докладніше у статті Матриця повороту
  • Поворотові за допомогою одиничного кватерніона \ \mathbf{q} = a + bi + cj + dk відповідає наступна матриця повороту
\mathbf{R} = \begin{pmatrix}
1-2(c^2+d^2) &2bc-2ad      &2ac+2bd     \\
2ad+2bc      &1-2(b^2+d^2) &2cd-2ab     \\
2bd-2ac      &2ab+2cd      &1-2(b^2+c^2)\\
\end{pmatrix}.
  • Якщо представимо кватерніон у вигляді \mathbf{q} = \left(\cos \frac{\alpha}{2}, \;\; \vec{u} \sin \frac{\alpha}{2} \right), \quad \vec{u} = (x,y,z); тоді
\mathbf{R}_\vec{u}(\alpha) = \bold{uu}^T + (I - \bold{uu}^T)\cos\alpha + \big[\bold{u}\big]_{\times}\sin\alpha.

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

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


\mathbf{v}' = 
\mathbf{u} (\mathbf{u} \cdot \mathbf{v}) (1 - \cos\alpha) + 
\mathbf{v} \cos\alpha +
(\mathbf{u} \times \mathbf{v})\sin\alpha.

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