羅德里格斯旋轉公式及其推導
- 羅德里格斯(Rodrigues)旋轉公式及其推導
- 三維空間旋轉矩陣
- 羅德里格斯旋轉方程(Rodrigues)
- *叉積矩陣*
- *拉格朗日公式(向量三重積展開)*
- *羅德里格斯旋轉方程推導*
羅德里格斯(Rodrigues)旋轉公式及其推導
三維空間旋轉矩陣
計算機圖形學中,三維空間下繞不同坐標軸的旋轉矩陣如下(右手系逆時針):
繞X軸旋轉:
R
x
=
[
1
0
0
0
c
o
s
θ
?
sin
?
θ
0
s
i
n
θ
cos
?
θ
]
(1)
R_x = \left[ \begin{matrix} \ 1 & 0 & 0 \\ \ 0 &cos \theta & -\sin \theta \\ \ 0 &sin \theta& \cos \theta \end{matrix} \right] \tag{1}
Rx?=??? 1 0 0?0cosθsinθ?0?sinθcosθ????(1)
繞Y軸旋轉: R y = [ cos ? θ 0 sin ? θ 0 1 0 ? sin ? θ 0 cos ? θ ] (2) R_y= \left[ \begin{matrix} \cos \theta & 0 & \sin \theta \\ \ 0 & 1 & 0 \\ -\sin \theta & 0 & \cos \theta \end{matrix} \right] \tag{2} Ry?=???cosθ 0?sinθ?010?sinθ0cosθ????(2)
繞Z軸旋轉: R z = [ c o s θ ? sin ? θ 0 s i n θ cos ? θ 0 0 0 1 ] (3) R_z = \left[ \begin{matrix} \ cos \theta & -\sin \theta & 0 \\ \ sin \theta& \cos \theta & 0 \\ 0 & 0 & 1 \end{matrix} \right] \tag{3} Rz?=??? cosθ sinθ0??sinθcosθ0?001????(3)
可以看到,這三個旋轉矩陣,只有在三維空間下物體圍繞某一特定坐標軸旋轉的特殊情況下才能使用,從幾何角度來講,三維空間中任意一個旋轉(繞任意軸),都可以分解為繞X軸,Y軸,Z軸旋轉的復合,即對于任意旋轉軸
n
?
\vec{n}
n
,旋轉角
θ
\theta
θ:
R
(
n
?
,
θ
)
=
R
(
x
?
,
θ
x
)
?
R
(
y
?
,
θ
y
)
?
R
(
z
?
,
θ
z
)
?
.
(4)
R(\vec{n},\theta) = R(\vec{x},\theta x) * R(\vec{y},\theta y) * R(\vec{z},\theta z)\,.\tag{4}
R(n
,θ)=R(x
,θx)?R(y
?,θy)?R(z
,θz).(4)
然而,這樣分解與矩陣運算的計算量顯然是十分大的,
羅德里格斯旋轉方程(Rodrigues)
羅德里格斯旋轉公式,用于表示空間中任一向量
v
?
\vec{v}
v
,沿任一旋轉軸
k
?
\vec{k}
k
, 旋轉任一角度
θ
\theta
θ后,得到的結果:
v
?
r
o
t
=
v
?
cos
?
θ
+
(
1
?
cos
?
θ
)
(
k
?
?
v
?
)
?
k
?
+
sin
?
θ
?
k
?
×
v
?
(5)
\vec{v}_{rot} = \vec{v} \cos\theta + (1-\cos\theta)(\vec{k} \cdot\ \vec{v})\cdot \vec{k} + \sin\theta *\vec{k} \times \vec{v} \tag{5}
v
rot?=v
cosθ+(1?cosθ)(k
? v
)?k
+sinθ?k
×v
(5)
這個式子還不是很直觀,所以需要引入另外兩個公式來再推導兩步化簡:
叉積矩陣
~~~~~~~
關于
a
?
×
b
?
\vec{a} \times \vec{b}
a
×b
,有:
(
x
a
y
a
z
a
)
×
(
x
b
y
b
z
b
)
=
(
y
a
z
b
?
z
a
y
b
z
a
x
b
?
x
a
z
b
x
a
y
b
?
y
a
x
b
)
(6)
\begin{pmatrix} x_a \\y_a \\ z_a \end{pmatrix} \times \begin{pmatrix} x_b \\y_b \\ z_b \end{pmatrix}= \begin{pmatrix} y_az_b - z_ay_b \\z_ax_b - x_az_b \\ x_ay_b -y_ax_b \end{pmatrix}\tag{6}
???xa?ya?za?????×???xb?yb?zb?????=???ya?zb??za?yb?za?xb??xa?zb?xa?yb??ya?xb?????(6)
~~~~~~~
可以寫成矩陣形式:
(
y
a
z
b
?
z
a
y
b
z
a
x
b
?
x
a
z
b
x
a
y
b
?
y
a
x
b
)
=
(
0
?
z
a
y
a
z
a
0
?
x
a
?
y
a
x
a
0
)
?
(
x
b
y
b
z
b
)
(7)
\begin{pmatrix} y_az_b - z_ay_b \\z_ax_b - x_az_b \\ x_ay_b -y_ax_b \end{pmatrix} = \begin{pmatrix} 0&-z_a & y_a \\z_a &0&-x_a \\ -y_a &x_a &0 \end{pmatrix} \cdot \begin{pmatrix} x_b \\y_b \\ z_b \end{pmatrix}\tag{7}
???ya?zb??za?yb?za?xb??xa?zb?xa?yb??ya?xb?????=???0za??ya???za?0xa??ya??xa?0????????xb?yb?zb?????(7)
~~~~~~~
則可記
a
?
\vec{a}
a
的 " 叉積矩陣 " 為:
R
a
?
=
(
0
?
z
a
y
a
z
a
0
?
x
a
?
y
a
x
a
0
)
(8)
R_{\vec{a}} = \begin{pmatrix} 0&-z_a & y_a \\z_a &0&-x_a \\ -y_a &x_a &0 \end{pmatrix} \tag{8}
Ra
?=???0za??ya???za?0xa??ya??xa?0????(8)
~~~~~~~
對于任意向量
b
?
\vec{b}
b
, 有 :
a
?
×
b
?
=
R
a
?
?
b
?
(9)
\vec{a} \times \vec{b} = R_{\vec{a}} \cdot \vec{b}\tag{9}
a
×b
=Ra
??b
(9)
拉格朗日公式(向量三重積展開)
~~~~~~~
對于三個向量
a
?
b
?
c
?
\vec{a} ~\vec{b} ~\vec{c}
a
b
c
,向量的三重積定義為:
a
?
×
(
b
?
×
c
?
)
\vec{a} \times (\vec{b} \times \vec{c})
a
×(b
×c
)
~~~~~~~
值得注意的是,一般來說 :
a
?
×
(
b
?
×
c
?
)
≠
(
a
?
×
b
?
)
×
c
?
\vec{a} \times (\vec{b} \times \vec{c}) \neq(\vec{a} \times \vec{b}) \times \vec{c}
a
×(b
×c
)?=(a
×b
)×c
~~~~~~~
以下恒等式,稱作三重積展開或拉格朗日公式,對于任意向量
a
?
、
b
?
、
c
?
\vec{a}、\vec{b}、\vec{c}
a
、b
、c
均成立 :
a ? × ( b ? × c ? ) = ( a ? ? c ? ) b ? ? ( a ? ? b ? ) c ? (10) \vec{a} \times (\vec{b} \times \vec{c}) = (\vec{a} \cdot \vec{c}) ~\vec{b} -(\vec{a} \cdot \vec{b}) ~\vec{c}\tag{10} a ×(b ×c )=(a ?c ) b ?(a ?b ) c (10)
羅德里格斯旋轉方程推導

~~~~~~~
如上圖所示,描述了一個空間中的向量
v
?
\vec{v}
v
,沿旋轉軸
k
?
\vec{k}
k
(單位向量), 逆時針旋轉了
θ
\theta
θ角度到
v
?
r
o
t
\vec{v}_{rot}
v
rot?的幾何關系,
~~~~~~~
在
v
?
與
k
?
\vec{v} 與 \vec{k}
v
與k
組成的平面上,
v
?
\vec{v}
v
可以分解為:與
k
?
\vec{k}
k
垂直的分量
v
⊥
?
\vec{v_{\perp}}
v⊥?
?和與
k
?
\vec{k}
k
平行的分量
v
∥
?
\vec{v_{\parallel}}
v∥?
?,有:
v
?
=
v
∥
?
+
v
⊥
?
v
?
r
o
t
=
v
?
r
o
t
∥
+
v
?
r
o
t
⊥
(11)
\vec{v} = \vec{v_{\parallel}} + \vec{v_{\perp}} \tag{11} ~~ \vec{v}_{rot} = \vec{v}_{rot\parallel} + \vec{v}_{rot\perp}
v
=v∥?
?+v⊥?
? v
rot?=v
rot∥?+v
rot⊥?(11)
~~~~~~~
其中,易得:
v
∥
?
=
(
v
?
?
k
?
)
?
k
?
(12)
\vec{v_{\parallel}} = (\vec{v} \cdot \vec{k}) * \vec{k}\tag{12}
v∥?
?=(v
?k
)?k
(12)
~~~~~~~
則,由(11)式:
v
⊥
?
=
v
?
?
v
∥
?
=
v
?
?
(
v
?
?
k
?
)
?
k
?
(13)
\vec{v_{\perp}} = \vec{v} - \vec{v_{\parallel}} = \vec{v} - (\vec{v} \cdot \vec{k}) * \vec{k}\tag{13}
v⊥?
?=v
?v∥?
?=v
?(v
?k
)?k
(13)
~~~~~~~
由 (10)式拉格朗日公式:
v
?
?
(
v
?
?
k
?
)
?
k
?
=
(
k
?
?
k
?
)
?
v
?
?
(
k
?
?
v
?
)
?
k
?
=
k
?
×
(
v
?
×
k
)
?
(14)
\vec{v} - (\vec{v} \cdot \vec{k}) * \vec{k} = (\vec{k} \cdot \vec{k}) *\vec{v} - (\vec{k} \cdot \vec{v}) * \vec{k} = \vec{k} \times(\vec{v}\times \vec{k)}\tag{14}
v
?(v
?k
)?k
=(k
?k
)?v
?(k
?v
)?k
=k
×(v
×k)
?(14)
~~~~~~~
則:
v
⊥
?
=
k
?
×
(
v
?
×
k
)
?
=
?
k
?
×
(
k
?
×
v
)
?
(15)
\vec{v_{\perp}} = \vec{k} \times(\vec{v}\times \vec{k)} = -\vec{k} \times(\vec{k}\times \vec{v)}\tag{15}
v⊥?
?=k
×(v
×k)
?=?k
×(k
×v)
?(15)
~~~~~~~
根據幾何關系,平行于旋轉軸的分量在旋轉時不會改變其幅度和方向,因此有:
v
?
r
o
t
∥
=
v
?
∥
(16)
\vec{v}_{rot\parallel} = \vec{v}_{\parallel} \tag{16}
v
rot∥?=v
∥?(16)
~~~~~~~
解旋轉后的垂直分量,由圖中的幾何關系可得
v
?
r
o
t
⊥
\vec{v}_{rot\perp}
v
rot⊥?可以分解為
k
?
×
v
?
\vec{k} \times \vec{v}
k
×v
和
v
?
⊥
\vec{v}_{\perp}
v
⊥?方向上兩個分量相加,即
v
?
r
o
t
⊥
=
v
?
r
o
t
⊥
?
k
?
×
v
?
∣
k
?
×
v
?
∣
+
v
?
r
o
t
⊥
?
v
?
⊥
∣
v
?
⊥
∣
=
sin
?
θ
?
(
k
?
×
v
?
)
+
cos
?
θ
?
v
?
⊥
(17)
\begin{aligned} \vec{v}_{rot\perp} = \vec{v}_{rot\perp} \cdot \frac{\vec{k} \times \vec{v}}{ \vert \vec{k} \times \vec{v} \vert}+ \vec{v}_{rot\perp} \cdot \frac{\vec{v}_{\perp}}{\vert\vec{v}_{\perp\vert}} = \sin\theta * (\vec{k} \times \vec{v}) + \cos\theta * \vec{v}_{\perp} \tag{17} \end{aligned}
v
rot⊥?=v
rot⊥??∣k
×v
∣k
×v
?+v
rot⊥??∣v
⊥∣?v
⊥??=sinθ?(k
×v
)+cosθ?v
⊥??(17)
~~~~~~~
將(12)(16)(17)式代入,有:
v
?
r
o
t
=
v
?
∥
+
cos
?
θ
?
(
v
?
?
v
?
∥
)
+
sin
?
θ
?
(
k
?
×
v
?
)
=
cos
?
θ
v
?
+
(
1
?
cos
?
θ
)
v
?
∥
+
sin
?
θ
(
k
?
×
v
?
)
=
v
?
cos
?
θ
+
(
1
?
cos
?
θ
)
(
k
?
?
v
?
)
?
k
?
+
sin
?
θ
?
k
?
×
v
?
=
式
5
\begin{aligned} \vec{v}_{rot}&= \vec{v}_{\parallel} + \cos\theta * (\vec{v} - \vec{v}_{\parallel}) + \sin\theta * (\vec{k} \times \vec{v})\\&=\cos\theta\vec{v} + (1 - \cos\theta)\vec{v}_\parallel + \sin\theta(\vec{k} \times \vec{v})\\&=\vec{v} \cos\theta + (1-\cos\theta)(\vec{k} \cdot\ \vec{v})\cdot \vec{k} + \sin\theta *\vec{k} \times \vec{v}&=式5 \end{aligned}
v
rot??=v
∥?+cosθ?(v
?v
∥?)+sinθ?(k
×v
)=cosθv
+(1?cosθ)v
∥?+sinθ(k
×v
)=v
cosθ+(1?cosθ)(k
? v
)?k
+sinθ?k
×v
?=式5?
~~~~~~~
此式還可繼續化簡,變成矩陣形式:
v
?
r
o
t
=
v
?
cos
?
θ
+
(
1
?
cos
?
θ
)
(
k
?
?
v
?
)
?
k
?
+
sin
?
θ
?
k
?
×
v
?
=
v
?
?
v
?
+
v
?
cos
?
θ
+
(
1
?
cos
?
θ
)
(
k
?
?
v
?
)
?
k
?
+
sin
?
θ
?
k
?
×
v
?
=
v
?
?
(
1
?
cos
?
θ
)
v
?
+
(
1
?
cos
?
θ
)
(
k
?
?
v
?
)
?
k
?
+
sin
?
θ
?
k
?
×
v
?
=
v
?
+
(
1
?
cos
?
θ
)
(
(
k
?
?
v
?
)
k
?
?
(
k
?
?
k
?
)
v
?
)
+
sin
?
θ
?
k
?
×
v
?
=
v
?
+
sin
?
θ
k
?
×
v
?
+
(
1
?
cos
?
θ
)
k
?
×
(
k
?
×
v
?
)
\begin{aligned} \vec{v}_{rot} &= \vec{v} \cos\theta + (1-\cos\theta)(\vec{k} \cdot\ \vec{v})\cdot \vec{k} + \sin\theta *\vec{k} \times \vec{v} \\&= \vec{v} - \vec{v} + \vec{v} \cos\theta + (1-\cos\theta)(\vec{k} \cdot\ \vec{v})\cdot \vec{k} + \sin\theta *\vec{k} \times \vec{v} \\&= \vec{v} - (1-\cos\theta)\vec{v} +(1-\cos\theta)(\vec{k} \cdot\ \vec{v})\cdot \vec{k} + \sin\theta *\vec{k} \times \vec{v}\\&=\vec{v} + (1-\cos\theta)((\vec{k}\cdot\vec{v})\vec{k} - (\vec{k}\cdot\vec{k})\vec{v}) + \sin\theta *\vec{k} \times \vec{v} \\&=\vec{v}+\sin\theta\vec{k}\times\vec{v}+ (1-\cos\theta)\vec{k}\times(\vec{k}\times\vec{v}) \end{aligned}
v
rot??=v
cosθ+(1?cosθ)(k
? v
)?k
+sinθ?k
×v
=v
?v
+v
cosθ+(1?cosθ)(k
? v
)?k
+sinθ?k
×v
=v
?(1?cosθ)v
+(1?cosθ)(k
? v
)?k
+sinθ?k
×v
=v
+(1?cosθ)((k
?v
)k
?(k
?k
)v
)+sinθ?k
×v
=v
+sinθk
×v
+(1?cosθ)k
×(k
×v
)?
~~~~~~~
設
k
?
\vec{k}
k
的叉積矩陣為
R
k
?
R_{\vec{k}}
Rk
?,有:
v
?
r
o
t
=
v
?
+
sin
?
θ
R
k
?
?
v
?
+
(
1
?
cos
?
θ
)
R
k
?
?
R
k
?
?
v
?
=
(
I
+
sin
?
θ
R
k
?
+
(
1
?
cos
?
θ
)
R
k
?
2
)
?
v
?
=
M
v
?
\begin{aligned} \vec{v}_{rot} &= \vec{v} + \sin\theta R_{\vec{k}} * \vec{v} + (1-\cos\theta) R_{\vec{k}} *R_{\vec{k}} * \vec{v} \\&=(I + \sin\theta R_{\vec{k}} + (1-\cos\theta) R_{\vec{k}}^2) * \vec{v}\\&=M\vec{v} \end{aligned}
v
rot??=v
+sinθRk
??v
+(1?cosθ)Rk
??Rk
??v
=(I+sinθRk
?+(1?cosθ)Rk
2?)?v
=Mv
?
~~~~~~~
其中:
M
=
I
+
sin
?
θ
R
k
?
+
(
1
?
cos
?
θ
)
R
k
?
2
M = I + \sin\theta R_{\vec{k}} + (1-\cos\theta) R_{\vec{k}}^2
M=I+sinθRk
?+(1?cosθ)Rk
2?
~~~~~~~
為三維空間中任意向量繞軸
k
?
\vec{k}
k
逆時針旋轉
θ
\theta
θ角度的旋轉矩陣,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/273717.html
標籤:其他
上一篇:解決IDEA:Failed to locate the winutils binary in the hadoop binary path
