三維空間的旋轉
三維空間的旋轉
三維空間中兩個座標系之間的旋轉關係可以通過旋轉矩陣,旋轉向量(角軸),尤拉角,四元數表示。
1 旋轉矩陣
設某個單位正交基 ( e 1 , e 2 , e 3 ) (e_1, e_2, e_3) (e1,e2,e3)經過一次旋轉變成了 ( e 1 ′ , e 2 ′ , e 3 ′ ) (e_1^{'}, e_2^{'}, e_3^{'}) (e1′,e2′,e3′),那麼對於同一個向量 a \boldsymbol{a} a(注意該向量並沒有隨著座標系的旋轉而發生運動),它在兩個座標系下的座標為 ( a 1 , a 2 , a 3 ) T (a_1, a_2, a_3)^T (a1,a2,a3)T 和 ( a 1 ‘ , a 2 ‘ , a 3 ‘ ) T (a_1^{‘}, a_2^{‘}, a_3^{‘})^T (a1‘,a2‘,a3‘)T。根據座標系的定義,:
[ e 1 , e 2 , e 3 ] [ a 1 a 2 a 3 ] = [ e 1 ′ , e 2 ′ , e 3 ′ ] [ a 1 ′ a 2 ′ a 3 ′ ] ( 1 ) \begin{bmatrix} e_{1},e_{2},e_{3} \end{bmatrix}\begin{bmatrix} a_{1}\\ a_{2}\\ a_{3} \end{bmatrix}=\begin{bmatrix} e_{1}^{'} ,e_{2}^{'},e_{3}^{'} \end{bmatrix}\begin{bmatrix} a_{1}^{'}\\ a_{2}^{'}\\ a_{3}^{'} \end{bmatrix} (1) [e1,e2,e3]⎣⎡a1a2a3⎦⎤=[e1′,e2′,e3′]⎣⎡a1′a2′a3′⎦⎤(1)
為描述兩個座標之間的關係,(1)左右兩邊同時乘以 ( e 1 T , e 2 T , e 3 T ) T (e_1^T, e_2^T, e_3^T)^T (e1T,e2T,e3T)T,則有:
[ a 1 a 2 a 3 ] = [ e 1 T e 1 ′ e 1 T e 2 ′ e 1 T e 3 ′ e 2 T e 1 ′ e 2 T e 2 ′ e 1 T e 3 ′ e 3 T e 1 ′ e 3 T e 2 ′ e 3 T e 3 ′ ] [ a 1 ′ a 2 ′ a 3 ′ ] = R a ′ ( 2 ) \left[ \begin{array}{c} a_1\\a_2\\a_3 \end{array} \right]= \left[ \begin{array}{ccc} e_1^{T}e_1{'} & e_1^Te_2^{'} & e_1^Te_3^{'}\\ e_2^{T}e_1^{'} & e_2^Te_2^{'} & e_1^Te_3^{'}\\ e_3^{T}e_1^{'} & e_3^Te_2^{'} & e_3^Te_3^{'} \end{array} \right] \left[ \begin{array}{c} a_1^{'}\\a_2^{'}\\a_3^{'} \end{array} \right] = R\boldsymbol{a^{'}}(2) ⎣⎡a1a2a3⎦⎤=⎣⎡e1Te1′e2Te1′e3Te1′e1Te2′e2Te2′e3Te2′e1Te3′e1Te3′e3Te3′⎦⎤⎣⎡a1′a2′a3′⎦⎤=Ra′(2)
令: R = [ e 1 T e 1 ′ e 1 T e 2 ′ e 1 T e 3 ′ e 2 T e 1 ′ e 2 T e 2 ′ e 1 T e 3 ′ e 3 T e 1 ′ e 3 T e 2 ′ e 3 T e 3 ′ ] R= \left[\begin{array}{ccc} e_1^{T}e_1{'} & e_1^Te_2^{'} & e_1^Te_3^{'}\\ e_2^{T}e_1^{'} & e_2^Te_2^{'} & e_1^Te_3^{'}\\ e_3^{T}e_1^{'} & e_3^Te_2^{'} & e_3^Te_3^{'} \end{array}\right] R=⎣⎡e1Te1′e2Te1′e3Te1′e1Te2′e2Te2′e3Te2′e1Te3′e1Te3′e3Te3′⎦⎤(3)
矩陣
R
R
R描述了座標系之間的旋轉,稱為旋轉矩陣。
旋轉矩陣是行列式為1的正交矩陣,旋轉矩陣的集合定義如下:
S
O
(
n
)
=
{
R
∈
R
n
×
n
∣
R
R
T
=
I
,
d
e
t
(
R
)
=
I
}
(
4
)
SO(n) = \{R \in \mathbb{R}^{n\times n} | RR^T = I, det(R) = I \} (4)
SO(n)={R∈Rn×n∣RRT=I,det(R)=I}(4)
由於旋轉矩陣是正交陣,它的逆(即轉置)描述了一個相反的旋轉,則有
a
‘
=
R
−
1
a
=
R
T
a
\boldsymbol{a^{‘}} = R^{-1}\boldsymbol{a}=R^T\boldsymbol{a}
a‘=R−1a=RTa。顯然,
R
T
R^T
RT刻畫了一個相反的旋轉。
2 旋轉向量(角軸,李代數)
w
w
w
座標系的任意旋轉都可以用一個旋轉軸和旋轉角來刻畫。使用一個向量,其方向與旋轉軸一致,而長度等於旋轉角,這種向量稱為旋轉向量(角-軸)。
2.1旋轉向量和旋轉矩陣
假如一個旋轉軸為
n
n
n,角度為
θ
\theta
θ的旋轉,它對應的旋轉向量為
θ
\theta
θ
n
n
n,旋轉向量
w
=
n
θ
w=n\theta
w=nθ 到旋轉矩陣的轉換過程由羅德里格斯公式表明,轉換公式如下:
R
=
cos
θ
I
+
(
1
−
cos
θ
)
n
n
T
+
sin
θ
[
n
]
X
(
5
)
R=\cos \theta I+(1-\cos \theta )nn^{T}+\sin \theta\begin{bmatrix}n\end{bmatrix}_{X} (5)
R=cosθI+(1−cosθ)nnT+sinθ[n]X(5)
[ ] X \begin{bmatrix} &\end{bmatrix}_{X} []X:表示反對稱矩陣
[ W ] X = [ 0 − W 3 − W 2 W 3 0 − W 1 − W 2 W 1 0 ] ( 6 ) \begin{bmatrix} W\end{bmatrix}_{X}=\begin{bmatrix} 0&-W_{3}&-W_{2} \\ W_{3} &0& -W_{1}&\\-W_{2}& W_{1}&0 \end{bmatrix} (6) [W]X=⎣⎡0W3−W2−W30W1−W2−W10⎦⎤(6)
對於轉角 θ \theta θ,有:
t r ( R ) = c o s θ t r ( I ) + ( 1 − c o s θ ) t r ( n n T ) + s i n θ t r ( [ n ] × ) = 3 c o s θ + ( 1 − c o s θ ) = 1 + 2 c o s θ ( 7 ) tr(R) = cos\theta\ tr(I) + (1-cos\theta)tr(\boldsymbol{n}\boldsymbol{n}^T) + sin\theta\ tr([\boldsymbol{n}]_{\times})\\ = 3cos\theta + (1-cos\theta) = 1 + 2cos\theta (7) tr(R)=cosθ tr(I)+(1−cosθ)tr(nnT)+sinθ tr([n]×)=3cosθ+(1−cosθ)=1+2cosθ(7)
因此 θ = a r c c o s t r ( R ) − 1 2 \theta = arc\ cos\frac{tr(R) - 1}{2} θ=arc cos2tr(R)−1 (8)
計算轉軸
n
\boldsymbol{n}
n,由於旋轉軸上的向量在旋轉後不發生改變,有
R
n
=
n
R\boldsymbol{n} = \boldsymbol{n}
Rn=n。因此,轉軸
n
\boldsymbol{n}
n 是矩陣
R
R
R 特徵值為1對應的特徵向量。求解次方程,再歸一化,就得到了轉軸。
2.2 旋轉向量表示旋轉
對於三維空間點
p
=
[
x
y
z
]
p=\begin{bmatrix}x & y&z \end{bmatrix}
p=[xyz]
羅德里格斯旋轉公式:
p
r
o
t
=
p
c
o
s
θ
+
(
n
×
p
)
s
i
n
θ
+
n
(
n
⋅
p
)
(
1
−
c
o
s
θ
)
 
(
9
)
\boldsymbol{p}_{rot} = \boldsymbol{p}cos\theta + (\boldsymbol{n}\times \boldsymbol{p})sin\theta + \boldsymbol{n}(\boldsymbol{n} \cdot \boldsymbol{p})(1-cos\theta) \:(9)
prot=pcosθ+(n×p)sinθ+n(n⋅p)(1−cosθ)(9)
實際中,使用軸角表示法對三維點進行旋轉會分兩種情況:
∣
∣
w
∣
∣
||\boldsymbol{w}||
∣∣w∣∣ 相比0較大時。這個時候可以通過羅德里格斯旋轉公式計算
∣
∣
w
∣
∣
||\boldsymbol{w}||
∣∣w∣∣ 相比0較小時。根據羅德里格斯公式,
R
=
c
o
s
∣
∣
w
∣
∣
I
+
[
w
]
×
∣
∣
w
∣
∣
s
i
n
(
∣
∣
w
∣
∣
)
+
[
w
]
×
2
∣
∣
w
∣
∣
2
(
1
−
c
o
s
(
∣
∣
w
∣
∣
)
)
R = cos||\boldsymbol{w}||I + \frac{[\boldsymbol{w}]_{\times}}{||\boldsymbol{w}||} sin(||\boldsymbol{w}||) + \frac{[\boldsymbol{w}]_{\times}^2}{||\boldsymbol{w}||^2}(1 - cos(||\boldsymbol{w}||))
R=cos∣∣w∣∣I+∣∣w∣∣[w]×sin(∣∣w∣∣)+∣∣w∣∣2[w]×2(1−cos(∣∣w∣∣))
當
w
\boldsymbol{w}
w較小時,
c
o
s
(
∣
∣
w
∣
∣
)
≈
1
,
s
i
n
(
∣
∣
w
∣
∣
)
≈
∣
∣
w
∣
∣
cos(||\boldsymbol{w}||) \approx 1, sin(||\boldsymbol{w}||) \approx ||\boldsymbol{w}||
cos(∣∣w∣∣)≈1,sin(∣∣w∣∣)≈∣∣w∣∣。因此,
R
≈
I
+
[
w
]
×
R \approx I + [\boldsymbol{w}]_{\times}
R≈I+[w]×。於是,
R
p
=
p
+
[
w
]
×
p
R\boldsymbol{p} = \boldsymbol{p} + [\boldsymbol{w}]_{\times} \boldsymbol{p}
Rp=p+[w]×p
注: 對於李代數
w
=
θ
n
\boldsymbol{w} = \theta \boldsymbol{n}
w=θn,其中
n
\boldsymbol{n}
n為單位轉軸,因此
∣
∣
n
∣
∣
2
=
1
||\boldsymbol{n}||^2 = 1
∣∣n∣∣2=1,於是
∣
∣
w
∣
∣
2
=
θ
2
∣
∣
n
∣
∣
2
=
θ
2
||\boldsymbol{w}||^2 = \theta^2 ||\boldsymbol{n}||^2 = \theta^2
∣∣w∣∣2=θ2∣∣n∣∣2=θ2。因此,有
θ
=
∣
∣
w
∣
∣
\theta = ||\boldsymbol{w}||
θ=∣∣w∣∣
3 尤拉角
把旋轉分解成3次繞不同軸旋轉,每次旋轉的角度構成尤拉角。旋轉時,旋轉軸有先後順序,可以先繞X軸,再繞Y軸,最後繞Z軸,即XYZ軸的旋轉,同理可以定義ZYX,ZYX等。尤拉角在攝影測量中應用比較廣泛,常見的轉角系統有rpy角度系統(ZYX),OPK角度系統(XYZ)。
尤拉角的一個重大缺點是會碰到萬向鎖問題。
3.1 尤拉角和旋轉矩陣
opk角度系統
4 四元數
單位四元數可以表示三維空間的旋轉。
四元數:
q
=
(
c
,
v
)
=
(
q
0
,
q
1
,
q
2
,
q
3
)
=
q
0
+
q
1
i
+
q
2
j
+
q
3
k
\boldsymbol{q} = (c, \boldsymbol{v}) = (q_0, q_1, q_2, q_3) = q_0 + q_1\boldsymbol{i} + q_2\boldsymbol{j} + q_3\boldsymbol{k}
q=(c,v)=(q0,q1,q2,q3)=q0+q1i+q2j+q3k
三個虛部滿足以下關係式:
i
2
=
j
2
=
k
2
=
−
1
i
j
=
k
,
j
i
=
−
k
,
j
k
=
i
,
k
j
=
−
i
,
k
i
=
j
,
i
k
=
−
j
i^2 = j^2 = k^2 = -1\\ ij = k,\ ji = -k,\\ jk = i,\ kj = -i,\\ ki = j,\ ik = -j
i2=j2=k2=−1ij=k, ji=−k,jk=i, kj=−i,ki=j, ik=−j
4.1 四元數和旋轉向量
假設旋轉繞單位向量
n
=
(
n
x
,
x
y
,
n
z
)
T
\boldsymbol{n} = (n_x, x_y, n_z)^T
n=(nx,xy,nz)T 進行了角度為
θ
\theta
θ 的旋轉,則該旋轉的四元數定義為:
q = ( c o s θ 2 , n x s i n θ 2 , n y s i n θ 2 , n z s i n θ 2 ) T \boldsymbol{q} = (cos\frac{\theta}{2},\ n_xsin\frac{\theta}{2},\ n_ysin\frac{\theta}{2},\ n_zsin\frac{\theta}{2})^T q=(cos2θ, nxsin2θ, nysin2θ, nzsin2θ)T (9)
令 θ = θ + 2 π \theta = \theta + 2\pi θ=θ+2π,則 q = ( − c o s θ 2 , − n x sin θ 2 , − n y s i n θ 2 , − n z s i n θ 2 ) T = − q \boldsymbol{q} = (-cos\frac{\theta}{2}, -n_x\sin\frac{\theta}{2}, -n_ysin\frac{\theta}{2}, -n_zsin\frac{\theta}{2})^T = -\boldsymbol{q} q=(−cos2θ,−nxsin2θ,−nysin2θ,−nzsin2θ)T=−q。即 q \boldsymbol{q} q 和 − q -\boldsymbol{q} −q 表示同一個旋轉。
t h e t a = 2 a r c c o s q 0 , ( n x , n y , n z ) T = 1 s i n θ 2 ( q 1 , q 2 , q 3 ) T = 1 ∣ ∣ n ∣ ∣ ( q 1 , q 2 , q 3 ) T ( 10 ) theta = 2arc cos\ q_0,\\ (n_x, n_y, n_z)^T = \frac{1}{sin\frac{\theta}{2}} (q_1, q_2, q_3)^T = \frac{1}{||\boldsymbol{n}||} (q_1, q_2, q_3)^T(10) theta=2arccos q0,(nx,ny,nz)T=sin2θ1(q1,q2,q3)T=∣∣n∣∣1(q1,q2,q3)T(10)
4.2 四元數和旋轉矩陣
R = [ R 11 R 12 R 13 R 21 R 22 R 23 R 31 R 32 R 33 ] ( 11 ) R = \left[ \begin{array}{ccc} R_{11} & R_{12} & R_{13}\\ R_{21} & R_{22} & R_{23}\\ R_{31} & R_{32} & R_{33} \end{array} \right] (11) R=⎣⎡R11R21R31R12R22R32R13R23R33⎦⎤(11)
則旋轉矩陣到四元數的轉換如下:
q 0 = t r ( R ) + 1 2 , q 1 = R 23 − R 32 4 q 0 , q 2 = R 31 − R 13 4 q 0 , q 3 = R 12 − R 21 4 q 0 q_0 = \frac{\sqrt{tr(R) + 1}}{2},\ q_1 = \frac{R_{23} - R_{32}}{4q_0},\ q_2 = \frac{R_{31} - R_{13}}{4q_0},\ q_3 = \frac{R_{12} - R{21}}{4q_0} q0=2tr(R)+1, q1=4q0R23−R32, q2=4q0R31−R13, q3=4q0R12−R21 (12)
R = [ 1 − 2 q 2 2 − 2 q 3 2 2 q 1 q 2 − 2 q 0 q 3 2 q 1 q 3 + 2 q 0 q 2 2 q 1 q 2 + 2 q 0 q 3 1 − 2 q 1 2 − 2 3 2 2 q 2 q 3 − 2 q 0 q 1 2 q 1 q 3 − 2 q 0 q 2 2 q 2 q 3 + 2 q 0 q 1 1 − 2 q 1 2 − 2 q 2 2 ] ( 13 ) R=\begin{bmatrix} 1-2q_{2}^{2}-2q_{3}^{2} &2q_{1}q _{2}-2q_{0}q_{3} & 2q_{1}q_{3}+2q_{0}q_{2}\\ 2q_{1}q_{2}+2q_{0}q_{3}& 1-2q_{1}^{2} -2_{3}^{2}&2q_{2} q_{3}-2q_{0}q_{1}\\ 2q_{1}q_{3}-2q_{0}q_{2}&2q_{2}q_{3}+2q_{0}q_{1} & 1-2q_{1}^{2}-2q_{2}^{2} \end{bmatrix} (13) R=⎣⎡1−2q22−2q322q1q2+2q0q32q1q3−2q0q22q1q2−2q0q31−2q12−2322q2q3+2q0q12q1q3+2q0q22q2q3−2q0q11−2q12−2q22⎦⎤(13)
4.3 用四元數表示旋轉
假設一個三維空間點
p
=
[
x
y
z
]
∩
∈
R
3
p=\begin{bmatrix}x & y&z \end{bmatrix}\cap \in \mathbb{R}^{3}
p=[xyz]∩∈R3,三維點
p
p
p經過旋轉之後變成
p
′
p^{'}
p′
首先,把三維空間點用一個虛四元數來描述:
p
=
[
0
x
y
z
]
=
[
0
v
]
p=\begin{bmatrix} 0 &x &y &z \end{bmatrix}=\begin{bmatrix} 0 &v \end{bmatrix}
p=[0xyz]=[0v]
那麼旋轉後的點
p
′
p^{'}
p′表示為:
p
′
=
q
p
p
−
1
p^{'}=qpp^{-1}
p′=qpp−1 (14)
參考:
[1]: https://aibluefisher.github.io/2019/04/16/rotation/
[2]:視覺SLAM十四講 從理論到實踐
相關文章
- 三維空間中物體兩次旋轉之間的連續旋轉矩陣計算矩陣
- 三維空間座標系變換-旋轉矩陣矩陣
- 剛體在三維空間的旋轉-幾種表達方式
- 【CV】三維空間的旋轉問題(Rotation in 3D space)3D
- 三維座標系旋轉——旋轉矩陣到旋轉角之間的換算矩陣
- 三維空間變換中旋轉矩陣左乘與右乘的區別矩陣
- 空間旋轉矩陣怎麼表示矩陣
- 三維旋轉矩陣推導矩陣
- 大角度非迭代的空間座標旋轉C#實現C#
- 單像空間後方交會計算旋轉矩陣矩陣
- 三維旋轉矩陣 左乘和右乘分析矩陣
- Matlab三維空間座標圖繪製Matlab
- 二維旋轉矩陣推導矩陣
- 快影app怎麼旋轉影片?快影影片瞬間旋轉的方法教程APP
- 實景三維賦能國土空間智慧治理
- Numpy 高維空間中的軸
- 尤拉角和旋轉矩陣之間的轉換矩陣
- 三維旋轉矩陣的推導過程(以右手座標系為例)矩陣
- webgl濾鏡--旋轉的三原色Web
- 基於人工智慧的三維感測網空間定位技術人工智慧
- WebGIS 利用 WebGL 在 MapboxGL 上渲染 DEM 三維空間資料Web
- 優化三維空間定位法及C語言快捷實現優化C語言
- RxJava 沉思錄(二):空間維度RxJava
- 三個維度談遊戲服務,玩家的需求存在多大的價值空間?遊戲
- Pix4Dmapper空間三維模型的應用例項:GIS選址分析APP模型
- 2-色彩空間轉換
- iOS Tabbar中間新增凸起可旋轉按鈕iOStabBar
- 旋轉相簿
- 旋轉字串字串
- 將圖片旋轉(這裡不是旋轉imageView)View
- 三相電合成旋轉向量-動態圖
- cad旋轉的快捷鍵命令 cad旋轉方向怎麼調整
- 怎麼旋轉圖片?BenVista PhotoZoom Pro旋轉圖片的方法OOM
- 【Oculus Interaction SDK】(三)限制可操作物體的移動 / 旋轉
- AVL樹旋轉
- (五)旋轉影像
- LeetCode:旋轉影像LeetCode
- ICCV2021 | 重新思考視覺transformers的空間維度視覺ORM