У теорії тривимірних обертань , формула повороту Родрігеса (названа на честь Олінда Родрігеса (інші мови) ) — дієвий алгоритм для обертання вектора у просторі, за заданими віссю та кутом.
Якщо
v
{\displaystyle \mathbf {v} }
— вектор у
R
3
{\displaystyle \mathbb {R} ^{3}}
і
k
{\displaystyle \mathbf {k} }
— одиничний вектор , що описує вісь обертання, навколо якої ми хочемо повернути
v
{\displaystyle \mathbf {v} }
на кут
θ
{\displaystyle \theta }
, то формула Родрігеса має вигляд:
v
r
o
t
=
v
cos
θ
+
(
k
×
v
)
sin
θ
+
k
(
k
⋅
v
)
(
1
−
cos
θ
)
.
{\displaystyle \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 ), який ми хочемо повернути, вектор
v
z
=
(
k
⋅
v
)
k
{\displaystyle \mathbf {v} _{z}=(\mathbf {k} \cdot \mathbf {v} )\mathbf {k} }
є складовою v паралельною до z , також відомою як проєкція вектора v на k , і вектор
v
x
=
v
−
v
z
=
v
−
(
k
⋅
v
)
k
{\displaystyle \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 і його складова v y є нулем. Однак, xyz не збігається з XYZ в якій вектори v , k , v x і v z представлені. Наприклад, v = (vX , vY , vZ ) ≠ (vx , vy , vz ). Інакше кажучи, формула Родрігеса незалежна від орієнтації в просторі системи відліку XYZ у якій v і k представлені.
Далі
w
=
k
×
v
{\displaystyle \mathbf {w} =\mathbf {k} \times \mathbf {v} }
.
Зауважимо, що v x і w мають одну й ту саму довжину. За визначенням векторного добутку , довжина w становить:
|
w
|
=
|
k
×
v
|
=
|
k
|
|
v
|
sin
φ
{\displaystyle |\mathbf {w} |=|\mathbf {k} \times \mathbf {v} |=|\mathbf {k} |\,|\mathbf {v} |\sin \varphi \ }
де φ позначає кут між z і v .
з того, що k має одиничну довжину,
|
w
|
=
|
k
×
v
|
=
|
v
|
sin
φ
.
{\displaystyle |\mathbf {w} |=|\mathbf {k} \times \mathbf {v} |=|\mathbf {v} |\sin \varphi .}
Це збігається з довжиною v x , обрахованою тригонометрично так:
|
v
x
|
=
|
v
|
cos
(
π
/
2
−
φ
)
=
|
v
|
sin
φ
.
{\displaystyle |\mathbf {v} _{x}|=|\mathbf {v} |\cos(\pi /2-\varphi )=|\mathbf {v} |\sin \varphi .}
Отже w можна розглядати як копію v x обернуту на 90° навколо z. Використовуючи тригонометрію, ми можемо повернути v x на θ навколо z , щоб отримати v x rot . Його два компоненти щодо x і y є v x cosθ і w sinθ, відповідно. Таким чином,
v
x
r
o
t
=
v
x
cos
θ
+
w
sin
θ
=
(
v
−
(
k
⋅
v
)
k
)
cos
θ
+
(
k
×
v
)
sin
θ
.
{\displaystyle {\begin{aligned}\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{aligned}}}
v x rot також можна записати як проєкцію на xy вектора, який ми повертаємо, v rot . Тому що поворот навколо z не зачіпає v z , другий компонент v rot (тобто проєкція на z ) збігається з v z . Отже,
v
r
o
t
=
v
x
r
o
t
+
v
z
r
o
t
=
v
x
r
o
t
+
v
z
=
(
v
−
(
k
⋅
v
)
k
)
cos
θ
+
(
k
×
v
)
sin
θ
+
(
k
⋅
v
)
k
=
v
cos
θ
+
(
k
×
v
)
sin
θ
+
k
(
k
⋅
v
)
(
1
−
cos
θ
)
,
{\displaystyle {\begin{aligned}\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{aligned}}}
як і вимагалось.
Представивши v і k у вигляді вектор-стовпців і
k
{\displaystyle \mathbf {k} }
як матрицю векторного добутку
[
k
]
×
{\displaystyle [\mathbf {k} ]_{\times }}
, тобто,
[
k
]
×
v
=
k
×
v
=
[
0
−
k
3
k
2
k
3
0
−
k
1
−
k
2
k
1
0
]
v
{\displaystyle [\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} }
,
Формулу Родрігеса можна записати так:
v
r
o
t
=
v
cos
θ
+
(
[
k
]
×
v
)
sin
θ
+
k
(
k
T
v
)
(
1
−
cos
θ
)
=
v
cos
θ
+
[
k
]
×
v
sin
θ
+
k
k
T
v
(
1
−
cos
θ
)
.
{\displaystyle {\begin{aligned}\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{aligned}}}
Використовуючи розклад потрійного векторного добутку , це можна записати як:
v
r
o
t
=
(
[
k
]
×
v
)
sin
θ
+
(
k
(
k
T
v
)
−
v
(
k
⋅
k
)
)
(
1
−
cos
θ
)
+
v
(
k
T
k
)
=
v
+
(
[
k
]
×
v
)
sin
θ
+
(
[
k
]
×
[
k
]
×
v
)
(
1
−
cos
θ
)
.
{\displaystyle {\begin{aligned}\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{aligned}}}
бо
k
T
k
=
1
{\displaystyle \mathbf {k} ^{\mathsf {T}}\mathbf {k} =1}
для нормалізованого вектора.
Остаточно, матриця повороту така:
R
=
I
+
(
sin
θ
)
[
k
]
×
+
(
1
−
cos
θ
)
[
k
]
×
[
k
]
×
.
{\displaystyle \mathbf {R} =\mathbf {I} +(\sin \theta )[\mathbf {k} ]_{\times }+(1-\cos \theta )[\mathbf {k} ]_{\times }[\mathbf {k} ]_{\times }~.}
Якщо ми хочемо повернути
v
{\displaystyle \mathbf {v} }
на кут
θ
{\displaystyle \theta }
навколо
k
{\displaystyle \mathbf {k} }
, тоді ми можемо записати це як кватерніон
q
=
(
cos
(
θ
/
2
)
,
sin
(
θ
/
2
)
)
.
{\displaystyle q=(\cos(\theta /2),\sin(\theta /2)).}
Це одиничний кватерніон.
Тоді
p
r
o
t
=
q
v
q
−
1
{\displaystyle p_{rot}=qvq^{-1}}
, що після виконання множень переходить у формулу повороту Родрігеса.