本节简单介绍用矩阵来描述旋转。在二维平面上,复数无疑是描述旋转的最佳工具;然而推广到三维空间中,却要动用到“四元数”了。为了证明四元数的相关结论,我们需要三维旋转的矩阵描述。最一般的旋转运动为:绕某一根轴旋转θ角度。这样我们就需要三个参数来描述它:确定一根轴至少需要两个参数,确定角度需要一个参数。因此,如果要用“数”来描述三维空间的伸缩和旋转的话,“三元数”显然是不够的,完成这一目的至少需要四元数。这也从另外一个角度反映了三元数的不存在性。

矩阵方法
首先我们认识到,如果旋转轴是坐标轴之一,那么旋转矩阵将是最简单的,比如向量\boldsymbol{x}=(x_0,y_0,z_0)^{T}z轴逆时针旋转\theta角后的坐标就可以描述为
\begin{equation} \boldsymbol{R}_{\theta}\boldsymbol{x}\end{equation}
其中
\begin{equation}\label{xuanzhuanjuzhen} \boldsymbol{R}_{\theta}=\left[ \begin{array}{\cdot {20}{c}} \cos\theta&{ - \sin\theta}&0\\ \sin\theta & \cos\theta &0\\ 0&0&1 \end{array} \right] \end{equation}
如果旋转轴不是坐标轴,而是由单位列向量\boldsymbol{u}=(x_1,y_1,z_1)确定,那么同时就确定了与\boldsymbol{u}垂直的一个平面,在此平面上找到两个正交的单位列向量\boldsymbol{e}_1,\boldsymbol{e}_2,用\boldsymbol{e}_1,\boldsymbol{e}_2,\boldsymbol{u}就可以建立一个新直角坐标系(右手架),设在此坐标系之下原来的\boldsymbol{x}向量的坐标为\boldsymbol{\xi}=(\xi_1,\xi_2,\xi_3)^T,则
\begin{equation} \left[ \boldsymbol{e}_1,\boldsymbol{e}_2,\boldsymbol{u} \right] \boldsymbol{\xi}=\boldsymbol{x} \end{equation}
在新坐标系下描述旋转是方便的,它就是矩阵\eqref{xuanzhuanjuzhen}。绕\boldsymbol{u}轴逆时针旋转\theta角后,坐标为
\begin{equation} \boldsymbol{R}_{\theta} \boldsymbol{\xi}=\boldsymbol{R}_{\theta}\left[ \boldsymbol{e}_1,\boldsymbol{e}_2,\boldsymbol{u} \right]^{-1}\boldsymbol{x} \end{equation}
上面是在\boldsymbol{e}_1,\boldsymbol{e}_2,\boldsymbol{u}坐标系的坐标,变为我们最初的直角坐标系,那就是
\begin{equation}\label{xuanzhuan} \left[ \boldsymbol{e}_1,\boldsymbol{e}_2,\boldsymbol{u} \right]\boldsymbol{R}_{\theta}\left[ \boldsymbol{e}_1,\boldsymbol{e}_2,\boldsymbol{u} \right]^{-1}\boldsymbol{x} \end{equation}
\eqref{xuanzhuan}式就是旋转之后的坐标。它描述了三维空间中最一般的旋转。注意矩阵\left[ \boldsymbol{e}_1,\boldsymbol{e}_2,\boldsymbol{u} \right] 是一个正交矩阵,因此它的逆就是\left[ \boldsymbol{e}_1,\boldsymbol{e}_2,\boldsymbol{u} \right]^{-1}=\left[ \begin{array}{*{20}{c}}\boldsymbol{e}_1^T \\ \boldsymbol{e}_2^T \\ \boldsymbol{u}^{T}\end{array} \right],因此旋转后坐标为
\begin{equation}\label{xuanzhuanzuobiao3} \left[ \boldsymbol{e}_1,\boldsymbol{e}_2,\boldsymbol{u} \right]\boldsymbol{R}_{\theta}\left[ \begin{array}{\cdot {20}{c}}\boldsymbol{e}_1^T \\ \boldsymbol{e}_2^T \\ \boldsymbol{u}\end{array}\right]\boldsymbol{x} =\left[ \boldsymbol{e}_1,\boldsymbol{e}_2,\boldsymbol{u} \right]\boldsymbol{R}_{\theta}\left[ \begin{array}{\cdot {20}{c}}\boldsymbol{e}_1 \cdot \boldsymbol{x} \\ \boldsymbol{e}_2 \cdot \boldsymbol{x}\\ \boldsymbol{u} \cdot \boldsymbol{x}\end{array} \right] \end{equation}

剩下就是\boldsymbol{e}_1,\boldsymbol{e_2}的确定问题。如果无法很快找出满足条件的两个向量来,那么可以利用向量的叉积:
\begin{equation}\label{chaji} \boldsymbol{e}_1=\frac{\boldsymbol{u}\times\boldsymbol{x}}{|\boldsymbol{u}\times\boldsymbol{x}|},\boldsymbol{e}_2=\frac{\boldsymbol{u}\times(\boldsymbol{u}\times\boldsymbol{x})}{|\boldsymbol{u}\times(\boldsymbol{u}\times\boldsymbol{x})|}=\frac{(\boldsymbol{u}\cdot\boldsymbol{x})\boldsymbol{u}- \boldsymbol{x}}{|\boldsymbol{u}\times\boldsymbol{x}|} \end{equation}

叉积的好处是明显的,将\eqref{chaji}代入\eqref{xuanzhuanzuobiao3},得到
\begin{equation}\label{juzhenxuanzhuanhuajian} \begin{aligned} &\left[ \frac{\boldsymbol{u}\times\boldsymbol{x}}{|\boldsymbol{u}\times\boldsymbol{x}|},\frac{(\boldsymbol{u}\cdot\boldsymbol{x})\boldsymbol{u}- \boldsymbol{x}}{|\boldsymbol{u}\times\boldsymbol{x}|},\boldsymbol{u} \right]\boldsymbol{R}_{\theta}\left[ \begin{array}{\cdot {20}{c}}0 \\ \frac{(\boldsymbol{u} \cdot \boldsymbol{x})^2-\boldsymbol{x}^2}{|\boldsymbol{u}\times\boldsymbol{x}|}\\ \boldsymbol{u} \cdot \boldsymbol{x}\end{array} \right]\\ =&\left[ \frac{\boldsymbol{u}\times\boldsymbol{x}}{|\boldsymbol{u}\times\boldsymbol{x}|},\frac{(\boldsymbol{u}\cdot\boldsymbol{x})\boldsymbol{u}- \boldsymbol{x}}{|\boldsymbol{u}\times\boldsymbol{x}|},\boldsymbol{u} \right]\left[ \begin{array}{\cdot {20}{c}} |\boldsymbol{u}\times \boldsymbol{x}| \sin\theta \\ -|\boldsymbol{u}\times \boldsymbol{x}|\cos\theta \\ \boldsymbol{u} \cdot \boldsymbol{x}\end{array} \right]\\ =&\left(\boldsymbol{u}\times\boldsymbol{x} \right)\sin\theta-\left[(\boldsymbol{u}\cdot\boldsymbol{x})\boldsymbol{u}- \boldsymbol{x}\right]\cos\theta+(\boldsymbol{u}\cdot\boldsymbol{x})\boldsymbol{u}\\ =&\left(\boldsymbol{u}\times\boldsymbol{x} \right)\sin\theta+\left[(\boldsymbol{u}\times\boldsymbol{x})\times\boldsymbol{u}\right]\cos\theta+(\boldsymbol{u}\cdot\boldsymbol{x})\boldsymbol{u} \end{aligned} \end{equation}
这被称为Rodrigues旋转公式,它是用向量描述三维空间旋转最简单的形式。写成最后的形式是因为它有明显的几何意义,事实上可以完全不用矩阵的分析,只是利用几何方法和向量叉积就可以推导出\eqref{juzhenxuanzhuanhuajian}的最后一式来。另外如果\boldsymbol{x} \perp \boldsymbol{u}(事实上在实际应用中,这一条件并不算苛刻。),那么坐标旋转公式将会相当简单:
\begin{equation} (\boldsymbol{u}\times\boldsymbol{x})\sin\theta +\boldsymbol{x}\cos\theta \end{equation}

几何方法

旋转示意图

旋转示意图

已知单位向量\boldsymbol{u}是旋转轴,求向量\boldsymbol{x}绕轴\boldsymbol{u}逆时针旋转\theta角之后的坐标。我们用\boldsymbol{u}\boldsymbol{x}作叉积\boldsymbol{e}_1=\boldsymbol{u}\times\boldsymbol{x},得到一个与\boldsymbol{u}\boldsymbol{x}都垂直的向量;再做叉积\boldsymbol{e}_2=(\boldsymbol{u}\times\boldsymbol{x})\times\boldsymbol{u},得到一个与\boldsymbol{u}\boldsymbol{x}\boldsymbol{u}共面的向量,且这个向量与\boldsymbol{u}\times\boldsymbol{x}等长,与\boldsymbol{u}\boldsymbol{u}\times\boldsymbol{x}都垂直。

注意到
(\boldsymbol{u}\times\boldsymbol{x})\times\boldsymbol{u}=\boldsymbol{x}-(\boldsymbol{u}\cdot\boldsymbol{x})\boldsymbol{u}
也就是说向量\boldsymbol{x}在平面\boldsymbol{e}_1 ,\boldsymbol{e}_2上的投影就是\boldsymbol{e}_2,而在\boldsymbol{u}轴上的投影是(\boldsymbol{u}\cdot\boldsymbol{x})\boldsymbol{u},要注意旋转的时候只有在\boldsymbol{e}_1 ,\boldsymbol{e}_2平面、也就是旋转平面上的分量有变化,描述旋转平面上的变换是简单的,它只不过是
\boldsymbol{e}_2 \cos\theta +\boldsymbol{e}_1\sin\theta

再加上\boldsymbol{u}轴的分量(\boldsymbol{u}\cdot\boldsymbol{x})\boldsymbol{u}就得到了旋转后的坐标,也就是
\left(\boldsymbol{u}\times\boldsymbol{x} \right)\sin\theta+\left[(\boldsymbol{u}\times\boldsymbol{x})\times\boldsymbol{u}\right]\cos\theta+(\boldsymbol{u}\cdot\boldsymbol{x})\boldsymbol{u}
这样我们就重新得到了\eqref{juzhenxuanzhuanhuajian}

转载到请包括本文地址:https://spaces.ac.cn/archives/2224

更详细的转载事宜请参考:《科学空间FAQ》

如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。

如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!

如果您需要引用本文,请参考:

苏剑林. (Dec. 28, 2013). 《矩阵描述三维空间旋转 》[Blog post]. Retrieved from https://spaces.ac.cn/archives/2224

@online{kexuefm-2224,
        title={矩阵描述三维空间旋转},
        author={苏剑林},
        year={2013},
        month={Dec},
        url={\url{https://spaces.ac.cn/archives/2224}},
}