Quaternion 是爱尔兰数学家威廉·哈密顿在1843年发明的一种数学概念,是复数的自然推广。
- 复数将实数轴扩展到了二维平面
- 而四元数则将复数系扩展到了四维空间
一种数学上的代数结构,用于在三维空间中表示旋转和方向。
- 欧拉角描述旋转的结果
- 四元数描述旋转的过程
一、基本定义
一个四元数 可以表示为一个有序实数组 ,或者更常见的形式:
q=w+xi+yj+zk \end{align}$$ 其中 $w, x, y, z$ 是实数,而 $i, j, k$ 是三个**虚数单位**。 - $w$ 被称为四元数的**实部**或**标量部**。 - $v = (x, y, z)$ 被称为**虚部**或**向量部**。[^1] 实数轴和三个虚轴都相互垂直,符合右手定则: $$\begin{align} i^{2}=j^{2}=k^{2}=ijk=-1 \\ \end{align}$$ 由这个核心规则可以推导出它们之间的乘法关系:单位四元数的乘法表示四维空间的双旋转 $$\begin{gathered} ij=k,jk=i,ki=j \\ ji=-k,kj=-i,ik=-j \end{gathered}$$  以虚数 $i$ 为例,$i$ 的作用相当于将 $jk$ 平面上的向量逆时针旋转 $90^{\circ}$ $$ij=k,ik=-j,i(-j)=-k,i(-k)=j$$ 而 $i$ 如果作用于 $i$ 本身,则进入实数范围 $i^{2}=-1$ 对于四元数中一般的单位向量 $v$,$v$ 左乘,相当于将与 $v$ 垂直的平面逆时针旋转 $90^{\circ}$,而将沿着 $v$ 的分量将进入实数范围,跑出三维虚空间 $$q=\cos\theta+v\sin\theta\quad\quad q^{-1}=\cos\theta-v\sin\theta$$ 任意一个向量在三维空间中绕向量 $v$ 旋转 $2\theta$ 角:$x'=qxq^{-1}$ ### 二、基本运算 设有两个四元数 $q_1 = w_1 + x_1i + y_1j + z_1k$ 和 $q_2 = w_2 + x_2i + y_2j + z_2k$。 **加法**: 各分量相加 $$q_1 + q_2 = (w_1+w_2) + (x_1+x_2)i + (y_1+y_2)j + (z_1+z_2)k$$ **乘法**: 利用分配律和虚数单位的乘法规则展开。如果用向量部表示 $q_1 = (w_1, \vec{v_1})$ 和 $q_2 = (w_2, \vec{v_2})$,乘法可以更紧凑地表示为:(其中 $\cdot$ 是点积,$\times$ 是叉积) $$ q_1 q_2 = (w_1w_2 - \vec{v_1} \cdot \vec{v_2}, w_1\vec{v_2} + w_2\vec{v_1} + \vec{v_1} \times \vec{v_2}) $$ **共轭 (Conjugate)**: 将虚部取反 $$ q^* = w - xi - yj - zk $$ **范数 (Norm)**: 定义为 $$|q| = \sqrt{w^2 + x^2 + y^2 + z^2} \quad |q_1 q_2| = |q_1||q_2|。$$ **逆 (Inverse)**: 对于非零四元数 $q$,其逆为 $$ q^{-1} = \frac{q^*}{|q|^2} $$ ### 三、用四元数表示旋转 [[复数#1.乘除法\|复数乘除法]]的几何意义是来描述二维的旋转,乘以一个复数,复数的模表示伸缩,复数的角度表示顺时针的旋转角度:如果想要将一个向量 $x+iy$ 顺时针旋转 $\theta$ 角,只需要乘以模为 1 的向量 $\cos\theta+i\sin\theta$,得到旋转后的向量 $(\cos\theta+i\sin\theta)(x+iy)$ 四元数描述三维的旋转类似,向量 $p=(x_{1}i,y_{1}j,z_{1}k)$, 四元数 $q=w_{0}+x_{0}i+y_{0}j+z_{0}k$ $$\begin{align} qpq^{-1}=(w_{0}+x_{0}i+y_{0}j+z_{0}k)(x_{1}i,y_{1}j,z_{1}k)(w_{0}-x_{0}i-y_{0}j-z_{0}k) \end{align}$$ 这是四元数最重要的应用。三维空间中的一个旋转操作可以通过一个**单位四元数 (Unit Quaternion)** 来表示。单位四元数是指范数为 1 的四元数,即 $|q|=1$。 一个绕单位向量轴 $\vec{u} = (u_x, u_y, u_z)$ 旋转角度 $\theta$ 的操作,可以由以下单位四元数 $q$ 表示: $$ q = \left( \cos\frac{\theta}{2}, \sin\frac{\theta}{2} \vec{u} \right) = \cos\frac{\theta}{2} + \left(u_x\sin\frac{\theta}{2}\right)i + \left(u_y\sin\frac{\theta}{2}\right)j + \left(u_z\sin\frac{\theta}{2}\right)k $$ 要将这个旋转应用于空间中的一个点(或向量) $\vec{p} = (p_x, p_y, p_z)$,我们首先将 $\vec{p}$ 表示为一个纯四元数(实部为 0) $p = 0 + p_xi + p_yj + p_zk$。 旋转后的点 $p'$ 通过以下“三明治”乘法计算得到: $$ p' = q p q^{-1} $$ 计算结果 $p'$ 的实部将为 0,其虚部就是旋转后的向量坐标。 直观化展示:https://eater.net/quaternions ### 四、优点与应用 与欧拉角和旋转矩阵相比,使用四元数表示旋转有几个关键优势: 1. **避免万向节死锁 (Gimbal Lock)**: 这是欧拉角表示法的一个致命缺陷,而四元数不存在这个问题。 2. **计算效率高**: 四元数乘法比矩阵乘法需要更少的计算量。 3. **存储紧凑**: 只需要 4 个浮点数,而 $3 \times 3$ 旋转矩阵需要 9 个。 4. **平滑插值**: 可以使用**球面线性插值 (Slerp)** 在两个旋转之间进行平滑、自然的插值,这在动画和机器人轨迹规划中非常有用。 由于这些优势,四元数被广泛应用于: - [[计算机图形学\|计算机图形学]]和游戏引擎 (如 Unity, Unreal Engine) - 机器人学和无人机姿态控制 - 航空航天器导航 四元数在计算机图形学、机器人学、航天器姿态控制等领域有广泛应用,因为它们可以方便地进行**旋转的插值**(Slerp)和避免[[万向节锁\|万向节锁]](Gimbal Lock)问题。 ### 五、与李群的关系 所有单位四元数的集合在四元数乘法下构成一个[[群\|群]],这个群同构于[[酉群#五、特殊酉群\|特殊酉群]] $SU(2)$。存在一个 2 对 1 的满[[群同态\|群同态]]从单位四元数群(或 $SU(2)$)到三维旋转群[[正交群#四、特殊正交群\|特殊正交群]] $SO(3)$。这揭示了三维旋转与量子力学中自旋 1/2 粒子(由 $SU(2)$ 描述)的深刻数学联系。 [^1]: Vector 的名词在此首次提出,不过现代意义主要指[[向量\|向量]]