三维旋转中的欧拉角、旋转矩阵、旋转向量

1. 欧拉角

2. 旋转向量

三维旋转也可以通过轴角表表示(旋转向量)来描述,不同于欧拉角采取多次旋转的方式来找到目标方向,轴角表达式是找到一根旋转轴,只通过绕这根轴旋转一次就可以得到目标方向。

我们用\begin{bmatrix} x\\ y\\ z \end{bmatrix}来表示旋转轴,用\theta来表示旋转角度,那么轴角表示(axis,angle) = \begin{pmatrix} \begin{bmatrix} x\\ y\\ z \end{bmatrix} &,\theta \end{pmatrix}

实际上,当我们想描述旋转轴时,不必在乎它的长度,只要知道它的方向就行,所以这里我们用单位向量e来表示旋转轴,又因为单位向量的性质\sqrt{e_x^2+e_y^2+e_z^2} =1,所以我们只需要两个参数就可以描述旋转轴。

把旋转向量写成矩阵的形式:

R = \begin{bmatrix} R_x\\ R_y\\ R_z \end{bmatrix} = \begin{bmatrix} \theta \cdot e_x\\ \theta \cdot e_y\\ \theta \cdot e_z \end{bmatrix}

那么实际上,当给定旋转向量(三个参数:R_x,R_y,R_z)的时候,我们可以得到\theta

\theta = \sqrt{R_x^2+R_y^2+R_z^2}=\sqrt{(\theta e_x)^2+(\theta e_y)^2+(\theta e_z)^2}=\sqrt{\theta^2((e_x)^2+(e_y)^2+(e_z)^2)}

旋转向量R的方向和单位向量e一样,模长为\theta,所以当我们得到R的时候,就得到了旋转轴和旋转角。旋转轴也叫欧拉轴(Euler axis),旋转向量也叫做欧拉向量(Euler vector)。

根据罗德里格旋转公式(这是计算三维空间中一个向量绕旋转轴旋转给定角度以后得到的新向量的计算公式),这个公式使用原向量,旋转轴及它们叉积表示出旋转以后的向量。一个向量p绕旋转轴旋转给定角度\theta以后得到的新向量p',通过下面的公式得到:

p^{'} = cos\theta \cdot p+(1-cos\theta)(p \cdot r)r + sin\theta \cdot r \times p

其中r 是旋转向量的单位向量。

这个变换关系看上去很简洁,但是运算起来十分复杂,那么能不能把旋转向量变成旋转矩阵呢?答案是可以的。

3. 旋转矩阵

p' = \textbf{R}p

\textbf{R} = Ecos\theta +(1-cos\theta)\begin{pmatrix} e_x\\ e_y\\ e_z \end{pmatrix}(e_x,e_y,e_z)+sin\theta\begin{pmatrix} 0 & -e_z & e_y\\ e_z& 0 & -e_x\\ -e_y& e_x &0 \end{pmatrix}

其中E是单位矩阵, 

这里先介绍几个概念:叉乘,斜对称矩阵(也叫反对称矩阵)。

叉乘在3D图像学中非常有用,可以通过两个向量的叉乘,生成第三个垂直于a,b所在共同平面的法向量,从而构建X、Y、Z坐标系。

两个向量的叉乘可以转换成向量与矩阵相乘,比如当 

b = (x_2,y_2,z_2)

b = (x_2,y_2,z_2)

a \times b = \begin{vmatrix} i & j & k\\ x_1 & y_1 & z_1 \\ x_2& y_2 & z_2 \end{vmatrix}=\begin{bmatrix} 0 & -z_1 & y_1 \\ z_1 & 0 & -x_1\\ -y_1& x_1 & 0 \end{bmatrix}\begin{bmatrix} x_2\\ y_2\\ z_2 \end{bmatrix} 

其中i = (1,0,0), j=(0,1,0), k=(0,0,1)

其中A= \begin{bmatrix} 0 & -z_1&y_1 \\ z_1& 0& -x_1\\ -y_1& x_1 &0 \end{bmatrix}是斜对称矩阵,即A= - A^T,且主对角线的元素都为0。

那么在旋转向量的公式里,r\times p可以变成r的斜对称矩阵与p相乘。

罗德里格旋转公式(矩阵形式): 对旋转轴的斜对称矩阵\hat{w}和旋转角\theta相乘后做指数映射得到旋转矩阵。

4. Reference

[1] https://www.guyuehome.com/33289

[2] https://baike.baidu.com/item/%E7%BD%97%E5%BE%B7%E9%87%8C%E6%A0%BC%E6%97%8B%E8%BD%AC%E5%85%AC%E5%BC%8F/18878562?fr=aladdin (罗德里格旋转公式的百度百科,其中推导了如何根据旋转轴和旋转角得到旋转后的新向量)

[3] https://blog.csdn.net/mightbxg/article/details/79363699

[4] https://zhuanlan.zhihu.com/p/115276808

[5] https://www.cnblogs.com/21207-iHome/p/9216719.html (旋转变换的指数形式推导)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值