3D旋轉矩陣的推導

w8ed發表於2019-09-16

2D中的旋轉

假設只繞原點旋轉,則可以通過一個引數 θ \theta θ來描述旋轉量。
假設逆時針為正方向,下圖展示了基向量 p p p, q q q繞原點旋轉 θ \theta θ度之後得到的新的基向量 p ′ p' p q ′ q' q,其值為
p ′ = [ cos ⁡ θ , sin ⁡ θ ] q ′ = [ − sin ⁡ θ , cos ⁡ θ ] \begin{aligned} & p' = [\cos \theta, \sin \theta]\\ &q' = [-\sin \theta, \cos \theta] \end{aligned} p=[cosθ,sinθ]q=[sinθ,cosθ]
3D旋轉矩陣的推導
得到旋轉後的基向量的值,就可以構造2D旋轉矩陣:
R ( θ ) = [ p ′ q ′ ] = [ cos ⁡ θ sin ⁡ θ − sin ⁡ θ cos ⁡ θ ] \bf R(\theta) = \left[ \begin{matrix} p'\\ q' \end{matrix} \right] = \left[ \begin{matrix} \cos \theta & \sin \theta\\ -\sin \theta & \cos \theta \end{matrix} \right] R(θ)=[pq]=[cosθsinθsinθcosθ]


3D中繞座標軸的旋轉

繞z軸的旋轉矩陣

3D旋轉矩陣的推導

求出旋轉後的基向量,可得到繞z軸的旋轉矩陣:

R z ( θ ) = [ p ′ q ′ r ′ ] = [ cos ⁡ θ sin ⁡ θ 0 − sin ⁡ θ cos ⁡ θ 0 0 0 1 ] \bf R_z(\theta) = \left[ \begin{matrix} p'\\ q'\\ r' \end{matrix} \right] = \left[ \begin{matrix} \cos \theta & \sin \theta & 0\\ -\sin \theta & \cos \theta & 0\\ 0& 0 & 1 \end{matrix} \right] Rz(θ)=pqr=cosθsinθ0sinθcosθ0001

注意:如果刪除矩陣的最後一行和最後一列,就會得到上面的2D旋轉矩陣。

繞x軸的旋轉矩陣

3D旋轉矩陣的推導

R x ( θ ) = [ p ′ q ′ r ′ ] = [ 1 0 0 0 cos ⁡ θ sin ⁡ θ 0 − sin ⁡ θ cos ⁡ θ ] \bf R_x(\theta) = \left[ \begin{matrix} p'\\ q'\\ r' \end{matrix} \right] = \left[ \begin{matrix} 1& 0 & 0 \\ 0 & \cos \theta & \sin \theta \\ 0 & -\sin \theta & \cos \theta \\ \end{matrix} \right] Rx(θ)=pqr=1000cosθsinθ0sinθcosθ

繞y軸的旋轉矩陣

3D旋轉矩陣的推導

R y ( θ ) = [ p ′ q ′ r ′ ] = [ cos ⁡ θ 0 − sin ⁡ θ 0 1 0 sin ⁡ θ 0 cos ⁡ θ ] \bf R_y(\theta) = \left[ \begin{matrix} p'\\ q'\\ r' \end{matrix} \right] = \left[ \begin{matrix} \cos \theta & 0& -\sin \theta \\ 0& 1 & 0 \\ \sin \theta &0 & \cos \theta \\ \end{matrix} \right] Ry(θ)=pqr=cosθ0sinθ010sinθ0cosθ


參考資料:3D數學基礎:圖形與遊戲開發 p88-p91

相關文章