目前为止,我们还不知道四元数怎么描述三维旋转,我们只是知道了怎么在三维空间里表示四元数的单位超球。接下来,我们只关注$w=0$的单位四元数,这在上一节我们说了,在三维上也映射为一个单位圆。

还记得一开始我们说四元数的功能吗?它可以表示一种状态,但更多时候表示一种旋转操作。也就是说,设三维向量为$p$,表示旋转操作的四元数为$q$,则有$q\cdot p$来表示对三维向量的旋转操作。

但是,一个四维的怎么能降维对三维向量进行旋转呢?

四元数单位化简写

我们表示一个三维旋转需要一个旋转轴加旋转角度,这恰好符合四元数对四个参数的需求 已知:

  • 旋转角度:$θ$
  • 旋转轴(单位向量):$\vec{u}=(u_x,u_y,u_z)$,满足 $   u   =1$
  • 四元数通常写成:$q=w+xi+yj+zk$,其中 $w$ 是实部,$(x,y,z)$ 是虚部向量

则有: \(q\left(\frac{\theta}{2}, \vec{u}\right) = \cos\left(\frac{\theta}{2}\right) + \sin\left(\frac{\theta}{2}\right)(u_x i + u_y j + u_z k)\) 也就是: \(q = \cos\frac{\theta}{2} + \left(\sin\frac{\theta}{2}\cdot u_x\right)i + \left(\sin\frac{\theta}{2}\cdot u_y\right)j + \left(\sin\frac{\theta}{2}\cdot u_z\right)k\)

类比一下二维旋转$e^{i\theta}=\cos{\theta}+\sin{\theta}i$,会发现单位四元数的简化表示其实把$i$换成了$i\ j\ k$ 我们先不考虑为什么这里是$\frac{\theta}{2}$,下面会解释的

四元数的旋转

四元数旋转三维向量时会先将三维向量$p=\left(\displaylines{x\y\z}\right)$升维成$p=\left(\displaylines{0\x\y\z}\right)$

[!attention] 为啥要升维 我们之前替代了三元数乘法不存在良定义,除非你引进第三个量$k$,也就是升为到四维,这样乘法就可以算了,而这个乘法也就包括了数乘,点乘和叉乘

之后,我们进行四元数的乘法运算$q\cdot p$,得到一个新的四元数$p=q(\frac{\theta}{2},\vec{u})pq^{-1}(\frac{\theta}{2},\vec{u})=(0,x,y,z)$ ok这式子非常奇怪,一个好端端的$q\cdot p$哪来这么多东西? 正常来说,$q\cdot p$就够了,但是你知道这一个操作会把好好的一个三维向量拉进四维,但是你还是需要一个三维向量啊!浅显来说,我们还需要一个逆操作,就是在后面再乘一个$q^{-1}$来抵消前面的操作。

当然,这样做还有一个好处,就是抵消了位移和形变,使得其就是一个单纯的纯旋转操作。至于为什么,我们需要先知道点乘和叉乘

点乘和叉乘

其实相当好理解,这在我们高中学物理单位制的时候就出现了很多,因为你会发现有一些有时候两个向量出来之后还是一个向量,这和点乘的性质不符。当然,你得明确这个乘法是针对于两个向量来说的,下面我们令其为$\vec{A},\vec{B}$

点乘(内积) 得到一个 标量(一个数字),告诉你两个向量在同一方向上有多少“重叠”。 这个的公式我们高中就学过了,这里不做赘述

叉乘(外积、向量积) 得到一个新的向量,它垂直于原来的两个向量,其大小与它们形成的平行四边形的面积有关。

  • $∣A×B∣=∣A∣∣B∣sinθ$
  • $\vec{A} \times \vec{B} = \begin{vmatrix}\hat{i} & \hat{j} & \hat{k} \a_x & a_y & a_z \b_x & b_y & b_z\end{vmatrix}$ 这里的$\hat{i}\hat{j}\hat{k}$是三维笛卡尔坐标系中的单位基向量。分别为$(1,0,0)(0,1,0)(0,0,1)$
  • 反交换律:$\vec{A}×\vec{B}=−\vec{B}×\vec{A}$(顺序很重要!)。
  • 当两个向量平行(同向或反向)时($θ=0°$或$180°$),叉乘结果为 零向量
  • 当两个向量垂直时($θ=90°$),叉乘结果的模最大

四元数包含实数虚数部分,实数实数运算是点乘虚数矢量计算叉积利用叉积就能表示方向的变化,从而四元数的乘法可以表示为\(q_1q_2=(w_1w_2,叉乘部分)\) 因此对原向量$\vec{v}$做四元数乘积,除了叉积完成了旋转的变化,还有点积产生了不应该的拉伸分量。 因此使用双乘法,$q\vec{p}q^{-1}$,通过乘以q逆反向抵消拉伸分量。

同时,因为乘了两遍$q$,所以要把其转的角度表示为$\frac{\theta}{2}$