William Rowan Hamilton 在 1843 年发明了四元数(quaternions)。他努力推广四元数来描述三维空间,不过当时有很多数学家反对,认为四元数很邪恶。
不过在一个世纪之后,四元数在计算机工业界起死回生,包括计算机图形学、机器人等领域应用广泛。他描述三维旋转简洁、计算高效、也能避免数值误差。
除此之外,四元数在量子力学方面也有应用。
定义
四元数的定义和相关规则如下:
$$q=a+bi+cj+dk$$
其中 $a$、$b$、$c$、$d$ 是标量,而 $i$、$j$、$k$ 是虚数,并遵循以下规则:
$$i^2=-1,j^2=-1,k^2=-1,ijk=-1$$
$$ij=k,jk=i,ki=j$$
$$ji=-k,kj=-i,ik=-j$$
19 世纪末,Josiah Gibbs 提出 3 个虚数可以看做 3 维向量,避免包含那么多的虚数项。于是 $bi+cj+dk$ 变为 $q=a+b\vec{i}+c\vec{j}+d\vec{k}$ 的向量表示,其中 $\vec{i}$、$\vec{j}$、$\vec{k}$ 是单位笛卡尔向量。
目前,在计算机图形学中,一般用两种方式表达四元数:
$$\vec{q}=s,\vec{v}$$
$$\vec{q}=s+\vec{v}$$
其中 $s$ 是标量,$\vec{v}$ 是 3D 向量。
这里我们把四元数表示为标量和向量的组合,于是:
$$\vec{q}=s+\vec{v}=s+x\vec{i}+y\vec{j}+z\vec{k}$$
其中 $s$、$x$、$y$、$z$ 为标量。
后面我们会知道 $\vec{v}$ 用于表示旋转轴,而 $s$ 表示旋转角度。
公理
复数是实数的二维延伸,而四元数是复数的四维延伸。除了乘法以外,四元数与复数有相同的公理。
加法
交换律:$q_1+q_2=q_2+q_1$
结合律:$(q_1+q_2)+q_3=q_1+(q_2+q_3)$
乘法
结合律:$(q_1q_2)q_3=q_1(q_2q_3)$
交换律(不满足):$q_1q_2\neq q_2q_1$
加减
对于两个四元数(为了方便,此后向量不再加箭头号):
$$q_1=s_1+x_1i+y_1j+z_1k$$
$$q_2=s_2+x_2i+y_2j+z_2k$$
其加减法为:
$$q_1\pm q_2=(s_1\pm s_2)+(x_1\pm x_2)i+(y_1\pm y_2)j+(z_1\pm z_2)k$$
四元数相乘
结合一下运算规则:
$$i^2=-1,j^2=-1,k^2=-1,ijk=-1$$
$$ij=k,jk=i,ki=j$$
$$ji=-k,kj=-i,ik=-j$$
对于两个四元数:
$$q_1=s_1+v_1=s_1+x_1i+y_1j+z_1k$$
$$q_2=s_2+v_2=s_2+x_2i+y_2j+z_2k$$
相乘之后:
\begin{align*}
q_1q_2 &= s_1s_2-(x_1x_2+y_1y_2+z_1z_2)+s_1(x_2i+y_2j+z_2k)+s_2(x_1i+y_1j+z_1k)+(y_1z_2-y_2z_1)i+(z_1x_2-z_2x_1)j+(x_1y_2-x_2y_1)k\\
&= s_1s_2-v_1\cdot v_2+s_1v_2+s_2v_1+v_1\times v_2
\end{align*}
其中 $s_1s_2-v_1\cdot v_2$ 是标量,$s_1v_2+s_2v_1+v_1\times v_2$ 是向量。
由于 $v_1\times v_2$ 的存在,可以证实四元数乘法不满足交换律。
纯四元数
标量项为 0 的四元数称为纯四元数(pure quaternion):
$$q=0+v$$
对于两个纯四元数 $q_1=0+v_1$ 和 $q_2=0+v_2$,其乘积为:
$$q_1q_2=-v_1\cdot v_2+v_1\times v_2$$
进而可以发现,两个纯四元数的平方为:
$$
\begin{align*}
qq &= -v\cdot v+v\times v\\
&= -v\cdot v\\
&= -\left | v \right |^2
\end{align*}
$$
在 Hamilton 的时代,尤其物理学家对于这个负数结果很难接受,因而拒绝使用四元数而接受 Gibbs 等人的向量分析。
四元数的模
四元数的模(modulus)或范数(norm)写作 $\left | q \right |$ ,对于四元数 $q=s+xi+yj+zk$:
$$\left | q \right |=\sqrt{s^2+x^2+y^2+z^2}$$
四元数的模的几何意义是对空间的放缩系数。
单位四元数
单位四元数(unit quaternion)是模为 1 的四元数:
$$\left | q \right |=\sqrt{s^2+x^2+y^2+z^2}=1$$
单位四元数尤为重要,如果把它看作是几何变换的话,由于模为 1,所以放缩系数为 1,于是单位四元数它相当于一个描述三维空间的纯旋转动作。
任何四元数 $q$ 都可以规范为单位四元数 $\hat{q}$:
$$\hat{q}=$\frac{q}{\left | q \right |}$
共轭四元数
共轭四元数和共轭复数类似,对于某一四元数:
$$q=s+v=s+xi+yj+zk$$
其共轭四元数为:
$$q^*=s-v=s-xi-yj-zk$$
于是我们可以发现:
$$
\begin{align*}
qq^*&=(s+v)(s-v)\\
&=s^2+v\cdot v+sv-sv+v\times (-v) \\
&= s^2+x^2+y^2+z^2
\end{align*}
$$
其乘积是一个标量,进而可得:
$$qq^*=\left | q \right |^2\Leftrightarrow \left | q \right |=\sqrt{qq^*}$$
类似地,我们可以证明:$qq^*=q^*q$。
根据共轭四元数定义和乘法,我们还可以证得:$(q_1q_2)^*=q_2^*q_1^*$。
四元数的逆
$q^{-1}$ 是四元数 $q$ 的逆($q\neq 0$),满足:
$$qq^{-1}=q^{-1}q=1$$
根据定义,两边同乘 $q^*$,可得:
$$q^*qq^{-1}=q^*q^{-1}q=q^*$$
$$\Rightarrow q^*qq^{-1}=q^*$$
$$\Rightarrow \left | q \right |^2q^{-1}=q^*$$
$$\Rightarrow q^{-1}=\frac{q^*}{\left | q \right |^2} $$
显然,如果 $q$ 是单位四元数,即 $\left | q \right |=1$,那么:
$$q^{-1}=q^*$$
由于单位四元数可以表示旋转作用,那么单位四元数的逆就表示对这个旋转作用的抵消作用。关于四元数的更多几何意义推荐观看四元数的可视化。
参考
- Rotation Transforms for Computer Graphics by John Vince
- 四元数的可视化
- 【几何系列】复数基础与二维空间旋转
原文地址:https://www.cnblogs.com/noluye/p/12391719.html