旋转矩阵更容易理解与记忆的推导,从2D到3D

摘要

旋转矩阵更容易理解与记忆的推导,从2D到3D


声明:本文推导适用于右手坐标系。
旋转角度说明:本文说的绕x轴旋转 θ \theta 度指的是顺着x轴负方向看过去,逆时针旋转 θ \theta 度。若想获得顺时针旋转的旋转矩阵,只需要把 θ \theta 改为 θ -\theta 即可。(个人觉得3D空间中要想准确描述旋转而不造成混淆,至少要说明三点:旋转轴,朝向,在该朝向下是顺时针还是逆时针旋转。)

2D旋转矩阵

2D旋转矩阵推导公式网上都有,不再赘述。参考这里,有
在这里插入图片描述
由上述推导可得2D空间中,从X轴向Y轴旋转 θ \theta 度的旋转矩阵为:
[ X Y ] = [ c o s θ s i n θ s i n θ c o s θ ] [ X Y ] \begin{bmatrix} X' \\ Y' \end{bmatrix}= \begin{bmatrix} cos\theta & -sin\theta \\ sin\theta & cos\theta \end{bmatrix} \begin{bmatrix} X \\ Y \end{bmatrix}
注意:上述公式相当于3D空间中,绕Z轴旋转 θ \theta 度的公式,即顺着Z轴负方向看过去逆时针旋转 θ \theta 度。也相当于把X轴旋转向Y轴的公式。
后面的3D旋转矩阵全都以此为基础变形,无非是移动一下元素位置。

3D旋转矩阵

绕Z轴旋转 θ \theta 度的公式

由2D旋转矩阵直接可得,不作推导:
[ X Y Z ] = [ c o s θ s i n θ 0 s i n θ c o s θ 0 0 0 1 ] [ X Y Z ] \begin{bmatrix} X' \\ Y' \\ Z' \end{bmatrix}= \begin{bmatrix} cos\theta & -sin\theta & 0 \\ sin\theta & cos\theta & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} X \\ Y \\ Z \end{bmatrix}

绕Y轴旋转 θ \theta 度的公式

可根据2D旋转矩阵直接变形得到,过程如下:
根据我们的规定,绕Y轴旋转表示逆着Y轴正方向逆时针旋转,根据右手坐标系可知,相当于从Z轴旋转向X轴,根据2D旋转矩阵,可得
[ Z X ] = [ c o s θ s i n θ s i n θ c o s θ ] [ Z X ] \begin{bmatrix} Z' \\ X' \end{bmatrix}= \begin{bmatrix} cos\theta & -sin\theta \\ sin\theta & cos\theta \end{bmatrix} \begin{bmatrix} Z \\ X \end{bmatrix}
扩展到3D旋转矩阵,为
[ Z X Y ] = [ c o s θ s i n θ 0 s i n θ c o s θ 0 0 0 1 ] [ Z X Y ] \begin{bmatrix} Z' \\ X' \\ Y' \end{bmatrix}= \begin{bmatrix} cos\theta & -sin\theta & 0 \\ sin\theta & cos\theta & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} Z \\ X \\ Y \end{bmatrix}
调整一下右边坐标顺序,公式变形为
[ Z X Y ] = [ s i n θ 0 c o s θ c o s θ 0 s i n θ 0 1 0 ] [ X Y Z ] \begin{bmatrix} Z' \\ X' \\ Y' \end{bmatrix}= \begin{bmatrix} -sin\theta & 0 & cos\theta \\ cos\theta & 0 & sin\theta \\ 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} X \\ Y \\ Z \end{bmatrix}
再调整一下左边坐标顺序,公式变形为
[ X Y Z ] = [ c o s θ 0 s i n θ 0 1 0 s i n θ 0 c o s θ ] [ X Y Z ] \begin{bmatrix} X' \\ Y' \\ Z' \end{bmatrix}= \begin{bmatrix} cos\theta & 0 & sin\theta \\ 0 & 1 & 0 \\ -sin\theta & 0 & cos\theta \end{bmatrix} \begin{bmatrix} X \\ Y \\ Z \end{bmatrix}

绕X轴旋转 θ \theta 度的公式

同理,也可从2D旋转矩阵直接变形得到
[ X Y Z ] = [ 1 0 0 0 c o s θ s i n θ 0 s i n θ c o s θ ] [ X Y Z ] \begin{bmatrix} X' \\ Y' \\ Z' \end{bmatrix}= \begin{bmatrix} 1 & 0 & 0 \\ 0 & cos\theta & -sin\theta \\ 0 & sin\theta & cos\theta \end{bmatrix} \begin{bmatrix} X \\ Y \\ Z \end{bmatrix}

相关/参考链接

旋转矩阵公式推导
旋转矩阵推导 | 推荐读这个,首先它清楚的定义了顺时针旋转到底是怎么转,只有定义清楚了,旋转才不会混淆。