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θ]
得到旋转后的基向量的值,就可以构造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(θ)=[p′q′]=[cosθ−sinθsinθcosθ]
3D中绕坐标轴的旋转
绕z轴的旋转矩阵
求出旋转后的基向量,可得到绕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(θ)=⎣⎡p′q′r′⎦⎤=⎣⎡cosθ−sinθ0sinθcosθ0001⎦⎤
注意:如果删除矩阵的最后一行和最后一列,就会得到上面的2D旋转矩阵。
绕x轴的旋转矩阵
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(θ)=⎣⎡p′q′r′⎦⎤=⎣⎡1000cosθ−sinθ0sinθcosθ⎦⎤
绕y轴的旋转矩阵
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(θ)=⎣⎡p′q′r′⎦⎤=⎣⎡cosθ0sinθ010−sinθ0cosθ⎦⎤
参考资料:3D数学基础:图形与游戏开发 p88-p91