矩阵描述三维空间旋转
By 苏剑林 | 2013-12-28 | 83488位读者 |本节简单介绍用矩阵来描述旋转。在二维平面上,复数无疑是描述旋转的最佳工具;然而推广到三维空间中,却要动用到“四元数”了。为了证明四元数的相关结论,我们需要三维旋转的矩阵描述。最一般的旋转运动为:绕某一根轴旋转$\theta$角度。这样我们就需要三个参数来描述它:确定一根轴至少需要两个参数,确定角度需要一个参数。因此,如果要用“数”来描述三维空间的伸缩和旋转的话,“三元数”显然是不够的,完成这一目的至少需要四元数。这也从另外一个角度反映了三元数的不存在性。
矩阵方法
首先我们认识到,如果旋转轴是坐标轴之一,那么旋转矩阵将是最简单的,比如向量$\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://kexue.fm/archives/2224
更详细的转载事宜请参考:《科学空间FAQ》
如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。
如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!
如果您需要引用本文,请参考:
苏剑林. (Dec. 28, 2013). 《矩阵描述三维空间旋转 》[Blog post]. Retrieved from https://kexue.fm/archives/2224
@online{kexuefm-2224,
title={矩阵描述三维空间旋转},
author={苏剑林},
year={2013},
month={Dec},
url={\url{https://kexue.fm/archives/2224}},
}
January 20th, 2014
事实上,旋转(包括高维空间的旋转)变换等价于正交矩阵左乘。
普遍的旋转也可以这样处理吗?请指教~
我说的旋转是绕指定轴旋转某个角度。
January 22nd, 2014
你的矩阵是三维空间里,z坐标不变,x、y绕z轴旋转是吧。普遍的旋转可以想象成,是把坐标轴进行了某种旋转或移动,实际是用相似矩阵进行了基变换。
更正一下,是的,任意维度的任意旋转等价于detA=+1的正交矩阵,即special orthogonal group,标准正交群。
当detA=-1时,在旋转的同时会有一个“反射”(2维平面里是个关于某直线的对称)
另:注册不用密码,登陆用密码是咋的?
我理解你的意思了,也知道怎么做了,谢谢你的指出。不过我总觉得矩阵描述计算量过大。另一方面,并不容易从旋转对应的矩阵中看出旋转轴、旋转角度(这个应该不算难)来,私认为这种方法不是特别直观。
另:email没收到密码吗?
我测试过了,你在本站注册后就已经处于登录状态了,然后在本站顶部有个进入后台的链接,里边显示了自动生成的默认密码,你可以在里边更改密码。
January 22nd, 2014
看你的文章,似乎偏微分方程、矩阵分析应该是熟悉的吧?
January 22nd, 2014
应该可以请教你微分方程的东西,既然流形都熟悉,那更好了呵呵。
January 22nd, 2014
证明就不写了。命题成立的话,绕任意轴矩阵的计算应该也不难。
January 27th, 2014
邮箱没收到密码。另外,这个可能你感兴趣。http://baike.baidu.com/link?url=Wk3R8NiZJZ_Sa32vk6zLVs7cUVt96YmMXQBGQL7s1-AarVzg1xkeR-5hesZPHfhX
欧拉角的百度百科。转动表示跟运动群、角动量、章动等有关系,我水平有限,刚刚知道。可能班门弄斧了,笑纳呵呵,春节愉快!
谢谢你的资料。
你在本站注册后就已经处于登录状态了,然后在本站顶部有个进入后台的链接,里边显示了自动生成的默认密码,你可以在里边更改密码。或者你告诉我账号,我把密码修改后发给你。
欧拉角在理论力学中的刚体运动部分我也看到过,但是总感觉欧拉角不够方便,它应该就相当于球坐标吧。有需要时会用到它的。
January 27th, 2014
矩阵描述应该更方便用计算机运算才是
从最优的角度来讲,最方便的应该是四元数了~
August 1st, 2014
这个结果也是正确
August 1st, 2014
http://bbs.emath.ac.cn/thread-5190-1-1.html这个论坛很多困难问题
我经常去看的,论坛上的282842712474就是我的号。
August 27th, 2015
在四维空间,这个旋转公式是什么样的?公式推出来我用用