Формула повороту Родрігеса

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

У теорії тривимірних обертань, формула повороту Родрігеса (названа на честь Олінда Родрігеса) — дієвий алгоритм для обертання вектора у просторі, по заданих осі та куту.

Якщо \mathbf{v} — вектор у \mathbb{R}^3 і \mathbf{k} — одиничний вектор, що описує вісь обертання, навколо якої ми хочемо повернути \mathbf{v} на кут \theta, то формула Родрігеса має вигляд:


\mathbf{v}_\mathrm{rot} = \mathbf{v} \cos\theta + (\mathbf{k} \times \mathbf{v})\sin\theta
  + \mathbf{k} (\mathbf{k} \cdot \mathbf{v}) (1 - \cos\theta).

Виведення[ред.ред. код]

Формула обертання Родрігеса обертає v на кут θ навколо осі z через розкладання його на складові паралельні і перпендикулярні до z, і, обертаючи тільки перпендикулярну складову

Для певної осі обертання z, яка представлена одиничним вектором k = (kX, kY, kZ), і вектором v = (vX, vY, vZ), який ми хочемо повернути, вектор

 \mathbf{v}_z = (\mathbf{k} \cdot \mathbf{v}) \mathbf{k}

є складовою v паралельною до z, також відомою як проекція вектора v на k, і вектор

\mathbf{v}_x = \mathbf{v} - \mathbf{v}_z  = \mathbf{v} - (\mathbf{k} \cdot \mathbf{v}) \mathbf{k}

є проекцією v на площину xy ортогональну до z, відомою як відкидання вектора.

Зауважте, що ми вибрали систему відліку xyz, в якій z вісь вирівняна з віссю повороту, а x вісь з відкиданням вектора v від k. Це спрощує демонстрацію, бо це має на увазі, що v лежить у площині xz і його складова vy є нулем. Однак, xyz не збігається з XYZ в якій вектори v, k, vx і vz представлені. Наприклад, v = (vX, vY, vZ) ≠ (vx, vy, vz). Інакше кажучи, формула Родрігеса незалежна від орієнтації в просторі системи відліку XYZ у якій v і k представлені.

Далі

\mathbf{w} = \mathbf{k}\times\mathbf{v}.

Зауважимо, що vx і w мають одну й ту саму довжину. За визначенням векторного добутку, довжина w становить:

|\mathbf{w}| = |\mathbf{k} \times \mathbf{v}| = |\mathbf{k}| \, |\mathbf{v}| \sin \varphi \

де φ позначає кут між z і v. з того, що k має одиничну довжину,

|\mathbf{w}| = |\mathbf{k} \times \mathbf{v}| = |\mathbf{v}| \sin \varphi.

Це збігається з довжиною vx, обрахованою тригонометрично так:

|\mathbf{v}_x| = |\mathbf{v}| \cos(\pi/2-\varphi) = |\mathbf{v}| \sin \varphi.

Отже w можна розглядати як копію vx обернуту на 90° навколо z. Використовуючи тригонометрію, ми можемо повернути vx на θ навколо z, щоб отримати vx rot. Його два компоненти щодо x і y є vxcosθ і wsinθ, відповідно. Таким чином,


\begin{align}
  \mathbf{v}_{x\ \mathrm{rot}} &= \mathbf{v}_x\cos\theta + \mathbf{w}\sin\theta\\
                               &= (\mathbf{v} - (\mathbf{k} \cdot \mathbf{v}) \mathbf{k})\cos\theta
                                 + (\mathbf{k} \times \mathbf{v})\sin\theta.
\end{align}

vx rot також можна записати як проекцію на xy (або відкидання від z) вектора, який ми повертаємо vrot. Тому що поворот навколо z не зачіпає vz, другий компонент vrot (тобто проекція на z) збігається з vz. Отже,


\begin{align}
  \mathbf{v}_{\mathrm{rot}} &= \mathbf{v}_{x\ \mathrm{rot}} + \mathbf{v}_{z\ \mathrm{rot}} \\
                            &= \mathbf{v}_{x\ \mathrm{rot}} + \mathbf{v}_z \\
                            &= (\mathbf{v} - (\mathbf{k} \cdot \mathbf{v}) \mathbf{k}) \cos\theta
                               + (\mathbf{k} \times \mathbf{v})\sin\theta + (\mathbf{k} \cdot \mathbf{v}) \mathbf{k} \\
                            &= \mathbf{v} \cos\theta + (\mathbf{k} \times \mathbf{v})\sin\theta
                               + \mathbf{k} (\mathbf{k} \cdot \mathbf{v}) (1 - \cos\theta),
\end{align}

як і вимагалось.

Матричний запис[ред.ред. код]

Через представлення v і k як вектори-стовпці і визначення матриці [\mathbf{k}]_\times як матриці векторного добутку для \mathbf{k}, тобто,

 [\mathbf{k}]_\times \mathbf{v} = \mathbf{k}\times\mathbf{v} = 
\left[\begin{array}{ccc}
0 & -k_3 & k_2 \\
k_3 & 0 & -k_1 \\
-k_2 & k_1 & 0
\end{array}\right]\mathbf{v}
,

Формулу Родрігеса можна записати так:


\begin{align}
    \mathbf{v}_{\mathrm{rot}} &= \mathbf{v} \cos\theta + ([\mathbf{k}]_\times \mathbf{v}) \sin\theta 
                                  + \mathbf{k} (\mathbf{k}^\mathsf{T} \mathbf{v}) (1 - \cos\theta) \\
                              &= \mathbf{v} \cos\theta + [\mathbf{k}]_\times \mathbf{v} \sin\theta 
                                  + \mathbf{k} \mathbf{k}^\mathsf{T} \mathbf{v} (1 - \cos\theta).
\end{align}

Використовуючи розклад потрійного векторного добутку, це можна записати як:


\begin{align}
    \mathbf{v}_{\mathrm{rot}}&=([\mathbf{k}]_{\times}\mathbf{v})\sin\theta
                           +(\mathbf{k}(\mathbf{k}^\mathsf{T} \mathbf{v})-\mathbf{v}(\mathbf{k}\cdot\mathbf{k}))
                             (1-\cos\theta)+\mathbf{v}(\mathbf{k}^\mathsf{T} \mathbf{k}) \\
                            &=\mathbf{v}+([\mathbf{k}]_{\times}\mathbf{v})\sin\theta
                             +([\mathbf{k}]_{\times}[\mathbf{k}]_{\times}\mathbf{v})(1-\cos\theta).
\end{align}

бо \mathbf{k}^\mathsf{T} \mathbf{k}=1 для нормалізованого вектора.

Кватерніони і формула повороту[ред.ред. код]

Якщо ми хочемо повернути \mathbf{v} на кут \theta навколо \mathbf{k}, тоді ми можемо записати це як кватерніон q = (\cos(\theta/2), \sin(\theta/2)). Це одиничний кватерніон.

Тоді p_{rot} = q v q ^ {-1}, що після виконання множень переходить у формулу повороту Родрігеса.

Див. також[ред.ред. код]