一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第11天,点击查看活动详情。
旋转的轴角描述法
选定一个旋转轴
注意,这个旋转轴必须是经过坐标系的原点(0,0,0),方向可以随意, 长度不影响结果。
绕轴旋转
我们一般说的旋转的正方向就是指逆时针方向,也就是说,不特别指定的话,旋转就是指逆时针旋转。
一个例子
比如说,我们有一个向量(1,0,0), 绕着一个轴(0,1,0), 旋转90°。
我们可以看出这个轴就是Y轴。
在坐标系是右手坐标系的情况下:

我们可以得知,旋转后的坐标是(0,−1,0)。
轴角描述的四个要素
我们可以看出,规定一个旋转轴需要三个数字,规定一个旋转角度需要一个数字,这一共就是四个数字:
- 旋转轴:(x,y,z)
- 旋转角度:α
难不成这就是大名鼎鼎的四元数(quaternion)
。
当然,不是
!不急,下面慢慢讲。
四元数概念
定义
有任意四个数,a,b,c,d∈R, 那么
- q=a+bi+cj+dk 则是四元数
其中, i2=j2=k2=ijk=−1,
i、j、k 是虚数单位。
四元数加减法
加减法很简单,四个数对应相加减即可:
令
q1=a1+b1i+c1j+d1k
q2=a2+b2i+c2j+d2k
则
q1+q2=(a1+a2)+(b1+b2)i+(c1+c2)j+(d1+d2)k
q1−q2=(a1−a2)+(b1−b2)i+(c1−c2)j+(d1−d2)k
四元数数乘
所谓数乘,就是一个数字乘以一个四元数:
现有m和一个四元数q=a+bi+cj+dk
则 mq=ma+mbi+mcj+mdk
两个四元数相乘
令
q1=a1+b1i+c1j+d1k
q2=a2+b2i+c2j+d2k
q1q2 = ?
按照小学学的知识可以一步一步算出来:
q1q2=
(a1a2−b1b2−c1c2−d1d2)+
(b1a2+a1b2−d1c2+c1d2)i+
(c1a2+d1b2+a1c2−b1d2)j+
(d1a2−c1b2+b1c2+a1d2)k
注意, 四元数相乘,不满足交换律也就是说
q1q2=q2q1
一个四元数的逆
假设 q1q2=1, 那么 q1和q2互逆,并有以下记法:
q1的逆是q1−1。
一个四元数的共轭
定义:q=a+bi+cj+dk 的共轭是
a−bi−cj−dk
并有如下记法:
q的共轭记作:q∗
四元数代表旋转
先把轴角描述法的要素列出来:
旋转轴:(u,v,w)、旋转角度:α、 还有一个初始向量(x,y,z)
我们利用上面这些要素,来构造两个四元数:
v=xi+yj+zk
q=cos(21α)+sin(21α)ui+sin(21α)vj+sin(21α)wk
那么做如下的计算:
r=qvq∗=qvq−1
此时 r 是一个四元数,并且 只有ijk三项有值,第一项为0.
我们把ijk三项的系数拿出来(ri,rj,rk), 此时这个新的向量就是 初始向量(x,y,z) 绕着旋转轴:(u,v,w)逆时针旋转了 α之后得到的。