数学基础---四元数
四元数(Quaternion)是1843年由爱尔兰数学家威廉·罗恩·哈密顿(William Rowan Hamilton)发明的数学工具,最初用于解决三维空间中旋转表示的“维度困境”——它通过4个参数(1个实部+3个虚部)描述三维旋转,既规避了欧拉角的“万向锁”问题,又比旋转矩阵(9个参数)更简洁。
我们在三维空间中看到的单位球代表着四维超球在球极投影到我们空间中时不变的那部分
一、四元数的数学定义与本质
1. 基础定义:实部与虚部的组合
四元数是复数的“三维扩展”,但不同于复数仅有1个虚单位i(满足i²=-1),四元数引入了3个正交的虚单位i、j、k,其标准形式为:
q=q0+q1i+q2j+q3k\mathbf{q} = q_0 + q_1\mathbf{i} + q_2\mathbf{j} + q_3\mathbf{k} q=q0+q1i+q2j+q3k
其中:
- 实部:q0q_0q0( scalar part ),对应旋转的“角度信息”;
- 虚部:q1i+q2j+q3kq_1\mathbf{i} + q_2\mathbf{j} + q_3\mathbf{k}q1i+q2j+q3k( vector part ),可视为三维向量q⃗=[q1,q2,q3]T\vec{q} = [q_1, q_2, q_3]^Tq=[q1,q2,q3]T,对应旋转的“轴信息”;
- 虚单位规则:i2=j2=k2=ijk=−1\mathbf{i}^2 = \mathbf{j}^2 = \mathbf{k}^2 = \mathbf{ijk} = -1i2=j2=k2=ijk=−1,且乘法不满足交换律(如ij=k\mathbf{ij} = \mathbf{k}ij=k,但ji=−k\mathbf{ji} = -\mathbf{k}ji=−k)。
为了简化表示,四元数常写成“实部+向量”的紧凑形式:q=[q0,q⃗]T\mathbf{q} = [q_0, \vec{q}]^Tq=[q0,q]T 或 q=(q0,q1,q2,q3)\mathbf{q} = (q_0, q_1, q_2, q_3)q=(q0,q1,q2,q3)。
2. 核心分类:单位四元数是旋转的“载体”
并非所有四元数都能表示旋转——只有“单位四元数”(Unit Quaternion) 具备旋转表示能力,其定义为“模长(Norm)等于1的四元数”。
四元数的模长计算如下:
∥q∥=q02+q12+q22+q32\|\mathbf{q}\| = \sqrt{q_0^2 + q_1^2 + q_2^2 + q_3^2} ∥q∥=q02+q12+q22+q32
单位四元数需满足 ∥q∥=1\|\mathbf{q}\| = 1∥q∥=1,此时其几何意义可明确对应三维旋转:
- 实部 q0=cos(θ/2)q_0 = \cos(\theta/2)q0=cos(θ/2),其中θ\thetaθ是绕旋转轴的旋转角度;
- 虚部向量 q⃗=n⃗⋅sin(θ/2)\vec{q} = \vec{n} \cdot \sin(\theta/2)q=n⋅sin(θ/2),其中n⃗=[nx,ny,nz]T\vec{n} = [n_x, n_y, n_z]^Tn=[nx,ny,nz]T是单位旋转轴向量(满足∥n⃗∥=1\|\vec{n}\|=1∥n∥=1)。
这一对应关系是四元数与旋转绑定的核心,也是后续所有应用的数学基础。
二、四元数的核心运算:从基础到旋转逻辑
四元数的运算规则是理解其应用的关键,尤其是“非交换乘法”,直接决定了旋转组合的顺序逻辑。
1. 基础运算:加法与数乘
-
加法:同维度分量相加,满足交换律和结合律:
若 q1=[q10,q11,q12,q13]\mathbf{q}_1 = [q_{10}, q_{11}, q_{12}, q_{13}]q1=[q10,q11,q12,q13],q2=[q20,q21,q22,q23]\mathbf{q}_2 = [q_{20}, q_{21}, q_{22}, q_{23}]q2=[q20,q21,q22,q23],则
q1+q2=[q10+q20,q11+q21,q12+q22,q13+q23]\mathbf{q}_1 + \mathbf{q}_2 = [q_{10}+q_{20}, q_{11}+q_{21}, q_{12}+q_{22}, q_{13}+q_{23}] q1+q2=[q10+q20,q11+q21,q12+q22,q13+q23] -
数乘:标量与每个分量相乘,满足分配律:
若kkk为实数,则
kq=[kq0,kq1,kq2,kq3]k\mathbf{q} = [kq_0, kq_1, kq_2, kq_3] kq=[kq0,kq1,kq2,kq3]
2. 关键运算:哈密顿积(旋转组合的核心)
四元数的乘法称为“哈密顿积(Hamilton Product)”,是其区别于复数的核心特征,不满足交换律,直接对应“旋转的先后顺序”。
对于两个四元数 q1=[q10,q⃗1]\mathbf{q}_1 = [q_{10}, \vec{q}_1]q1=[q10,q1] 和 q2=[q20,q⃗2]\mathbf{q}_2 = [q_{20}, \vec{q}_2]q2=[q20,q2],其哈密顿积公式为:
q1⊗q2=[q10q20−q⃗1⋅q⃗2,q10q⃗2+q20q⃗1+q⃗1×q⃗2]\mathbf{q}_1 \otimes \mathbf{q}_2 = \left[ q_{10}q_{20} - \vec{q}_1 \cdot \vec{q}_2,\ q_{10}\vec{q}_2 + q_{20}\vec{q}_1 + \vec{q}_1 \times \vec{q}_2 \right] q1⊗q2=[q10q20−q1⋅q2, q10q2+q20q1+q1×q2]
其中:
- q⃗1⋅q⃗2\vec{q}_1 \cdot \vec{q}_2q1⋅q2 是向量点积(结果为标量);
- q⃗1×q⃗2\vec{q}_1 \times \vec{q}_2q1×q2 是向量叉积(结果为三维向量)。
工程意义:若q1\mathbf{q}_1q1表示“先绕轴n⃗1\vec{n}_1n1转θ1\theta_1θ1”,q2\mathbf{q}_2q2表示“再绕轴n⃗2\vec{n}_2n2转θ2\theta_2θ2”,则总旋转对应的四元数为 qtotal=q2⊗q1\mathbf{q}_{total} = \mathbf{q}_2 \otimes \mathbf{q}_1qtotal=q2⊗q1(注意顺序:后旋转的四元数在左)。这是因为四元数旋转本质是“共轭变换”,顺序会直接影响结果。
3. 特殊运算:共轭、逆与规范化
这三个运算直接服务于旋转的“逆操作”和“数值稳定性”。
-
共轭四元数:将虚部符号取反,记为q∗\mathbf{q}^*q∗:
q∗=[q0,−q1,−q2,−q3]=[q0,−q⃗]\mathbf{q}^* = [q_0, -q_1, -q_2, -q_3] = [q_0, -\vec{q}] q∗=[q0,−q1,−q2,−q3]=[q0,−q]
几何意义:共轭四元数对应“原旋转的逆旋转”(绕同一轴转−θ-\theta−θ)。 -
逆四元数:满足 q⊗q−1=q−1⊗q=[1,0,0,0]\mathbf{q} \otimes \mathbf{q}^{-1} = \mathbf{q}^{-1} \otimes \mathbf{q} = [1, 0, 0, 0]q⊗q−1=q−1⊗q=[1,0,0,0](单位元),计算式为:
q−1=q∗∥q∥2\mathbf{q}^{-1} = \frac{\mathbf{q}^*}{\|\mathbf{q}\|^2} q−1=∥q∥2q∗
对于单位四元数,因∥q∥=1\|\mathbf{q}\|=1∥q∥=1,故q−1=q∗\mathbf{q}^{-1} = \mathbf{q}^*q−1=q∗,极大简化了逆旋转计算。 -
规范化:将非单位四元数转换为单位四元数(保证旋转表示的有效性),公式为:
q^=q∥q∥=[q0∥q∥,q1∥q∥,q2∥q∥,q3∥q∥]\hat{\mathbf{q}} = \frac{\mathbf{q}}{\|\mathbf{q}\|} = \left[ \frac{q_0}{\|\mathbf{q}\|}, \frac{q_1}{\|\mathbf{q}\|}, \frac{q_2}{\|\mathbf{q}\|}, \frac{q_3}{\|\mathbf{q}\|} \right] q^=∥q∥q=[∥q∥q0,∥q∥q1,∥q∥q2,∥q∥q3]
工程必要性:数值计算中(如IMU姿态融合),四元数的模长可能因误差累积偏离1,需定期规范化以保证旋转精度。
三、四元数与三维旋转:从表示到转换
四元数的核心价值是“高效表示三维旋转”,需掌握其与“轴角”“旋转矩阵”“欧拉角”的转换关系——这是工程应用中数据交互的基础。
1. 轴角→四元数:旋转的“初始化”
“轴角(Axis-Angle)”是最直观的旋转表示(绕单位轴n⃗\vec{n}n转θ\thetaθ),其转换为单位四元数的公式直接源于四元数的几何意义:
q=[cos(θ/2),nxsin(θ/2),nysin(θ/2),nzsin(θ/2)]\mathbf{q} = \left[ \cos(\theta/2),\ n_x \sin(\theta/2),\ n_y \sin(\theta/2),\ n_z \sin(\theta/2) \right] q=[cos(θ/2), nxsin(θ/2), nysin(θ/2), nzsin(θ/2)]
示例:绕x轴转90°(θ=π/2\theta=\pi/2θ=π/2,n⃗=[1,0,0]\vec{n}=[1,0,0]n=[1,0,0]),则q=[cos(π/4),sin(π/4),0,0]=[2/2,2/2,0,0]\mathbf{q} = [\cos(\pi/4), \sin(\pi/4), 0, 0] = [\sqrt{2}/2, \sqrt{2}/2, 0, 0]q=[cos(π/4),sin(π/4),0,0]=[2/2,2/2,0,0]。
2. 四元数→旋转矩阵:与线性代数的衔接
旋转矩阵(3×3)是线性代数中表示旋转的标准工具,四元数转换为旋转矩阵的公式如下(q\mathbf{q}q为单位四元数):
R(q)=[1−2q22−2q322q1q2−2q0q32q1q3+2q0q22q1q2+2q0q31−2q12−2q322q2q3−2q0q12q1q3−2q0q22q2q3+2q0q11−2q12−2q22]R(\mathbf{q}) = \begin{bmatrix} 1-2q_2^2-2q_3^2 & 2q_1q_2-2q_0q_3 & 2q_1q_3+2q_0q_2 \\ 2q_1q_2+2q_0q_3 & 1-2q_1^2-2q_3^2 & 2q_2q_3-2q_0q_1 \\ 2q_1q_3-2q_0q_2 & 2q_2q_3+2q_0q_1 & 1-2q_1^2-2q_2^2 \end{bmatrix} R(q)=1−2q22−2q322q1q2+2q0q32q1q3−2q0q22q1q2−2q0q31−2q12−2q322q2q3+2q0q12q1q3+2q0q22q2q3−2q0q11−2q12−2q22
作用:当需要用矩阵乘法实现“点的旋转”时(如3D模型顶点变换),可将四元数转为旋转矩阵,再通过Rv⃗R\vec{v}Rv计算旋转后的点v⃗\vec{v}v。
3. 四元数→欧拉角:与直观操作的衔接
欧拉角(如Roll-Pitch-Yaw,即滚转-俯仰-偏航)是人类直观理解的旋转(如飞机姿态),但存在万向锁问题。单位四元数转换为Z-Y-X顺序欧拉角(Yaw: ψ\psiψ,Pitch: θ\thetaθ,Roll: ϕ\phiϕ)的公式为:
{ϕ=arctan2(2(q0q1+q2q3),1−2(q12+q22))θ=arcsin(2(q0q2−q3q1))ψ=arctan2(2(q0q3+q1q2),1−2(q22+q32))\begin{cases} \phi = \arctan2(2(q_0q_1 + q_2q_3), 1-2(q_1^2 + q_2^2)) \\ \theta = \arcsin(2(q_0q_2 - q_3q_1)) \\ \psi = \arctan2(2(q_0q_3 + q_1q_2), 1-2(q_2^2 + q_3^2)) \end{cases} ⎩⎨⎧ϕ=arctan2(2(q0q1+q2q3),1−2(q12+q22))θ=arcsin(2(q0q2−q3q1))ψ=arctan2(2(q0q3+q1q2),1−2(q22+q32))
注意:欧拉角的顺序(如Z-Y-X、X-Y-Z)会改变转换公式,工程中需明确“旋转顺序”。
4. 四元数旋转点:共轭变换的应用
若要将三维点v⃗=[x,y,z]T\vec{v} = [x, y, z]^Tv=[x,y,z]T绕单位四元数q\mathbf{q}q表示的旋转轴/角度旋转,需先将v⃗\vec{v}v转换为“纯虚四元数”v=[0,x,y,z]\mathbf{v} = [0, x, y, z]v=[0,x,y,z],再通过共轭变换计算旋转后的点:
v′=q⊗v⊗q−1\mathbf{v}' = \mathbf{q} \otimes \mathbf{v} \otimes \mathbf{q}^{-1} v′=q⊗v⊗q−1
旋转后的点v⃗′\vec{v}'v′对应v′\mathbf{v}'v′的虚部(实部为0)。
工程优势:相比旋转矩阵(9次乘法+6次加法),四元数旋转(15次乘法+10次加法)在低算力设备(如嵌入式机器人)上更高效。
旋转矩阵:需要存储 9 个浮点数(3x3 矩阵),占用内存是四元数的 2.25 倍;
四元数:仅需存储 4 个浮点数(x,y,z,w),且满足 x²+y²+z²+w²=1 的约束(可通过归一化维护)。
四、四元数的插值:平滑旋转的关键
在动画、机器人轨迹规划等场景中,需要在两个旋转姿态间实现“平滑过渡”,四元数的球面线性插值(SLERP) 是解决这一问题的最优方案。
1. 为什么不用线性插值(LERP)?
若直接对两个单位四元数q1\mathbf{q}_1q1和q2\mathbf{q}_2q2做线性插值(q(t)=(1−t)q1+tq2\mathbf{q}(t) = (1-t)\mathbf{q}_1 + t\mathbf{q}_2q(t)=(1−t)q1+tq2),会导致:
- 插值结果的模长偏离1(需重新规范化);
- 旋转角速度不均匀(视觉或运动上出现“卡顿”)。
根本原因:四元数的空间是“四维单位球面”,线性插值会偏离球面,而SLERP则在球面上保持均匀插值。
2. SLERP的原理与公式
SLERP的核心是“在四维单位球面上,沿q1\mathbf{q}_1q1和q2\mathbf{q}_2q2之间的最短圆弧插值”,公式为:
q(t)=sin((1−t)ω)sinωq1+sin(tω)sinωq2\mathbf{q}(t) = \frac{\sin((1-t)\omega)}{\sin\omega} \mathbf{q}_1 + \frac{\sin(t\omega)}{\sin\omega} \mathbf{q}_2 q(t)=sinωsin((1−t)ω)q1+sinωsin(tω)q2
其中:
- t∈[0,1]t \in [0,1]t∈[0,1]:插值参数(t=0t=0t=0时为q1\mathbf{q}_1q1,t=1t=1t=1时为q2\mathbf{q}_2q2);
- ω\omegaω:q1\mathbf{q}_1q1与q2\mathbf{q}_2q2的夹角,由点积计算:cosω=q1⋅q2=q10q20+q11q21+q12q22+q13q23\cos\omega = \mathbf{q}_1 \cdot \mathbf{q}_2 = q_{10}q_{20} + q_{11}q_{21} + q_{12}q_{22} + q_{13}q_{23}cosω=q1⋅q2=q10q20+q11q21+q12q22+q13q23。
优化细节:若cosω<0\cos\omega < 0cosω<0(表示圆弧大于180°),需将q2\mathbf{q}_2q2取反(−q2\mathbf{-q}_2−q2),因为q\mathbf{q}q与−q\mathbf{-q}−q表示同一旋转,取反后可沿更短圆弧插值。
五、四元数的优缺点与工程应用
1. 核心优势:为何替代欧拉角与旋转矩阵?
| 对比维度 | 四元数(单位) | 欧拉角 | 旋转矩阵 |
|---|---|---|---|
| 参数数量 | 4 | 3 | 9 |
| 万向锁问题 | 无 | 有(特定角度) | 无 |
| 插值平滑性 | 优(SLERP) | 差(易卡顿) | 差(需矩阵插值) |
| 旋转组合效率 | 高(15次乘法) | 中(依赖转换) | 低(27次乘法) |
| 数值稳定性 | 高(需规范化) | 低(万向锁) | 中(需正交化) |
核心结论:四元数是“存储效率”“无万向锁”“平滑插值”的最优平衡。
2. 主要缺点:工程中需规避的问题
- 不直观性:四元数的4个参数无法直接对应人类理解的“角度”,需转换为欧拉角或轴角才能解读;
- 符号冗余:q\mathbf{q}q与−q\mathbf{-q}−q表示同一旋转(如[0.707,0.707,0,0][0.707, 0.707, 0, 0][0.707,0.707,0,0]与[−0.707,−0.707,0,0][-0.707, -0.707, 0, 0][−0.707,−0.707,0,0]均表示绕x轴转90°),需在数据传输中统一规则;
- 数值漂移:长时间计算(如IMU融合)会导致模长偏离1,需定期规范化(通常每帧或每周期执行)。
3. 典型工程应用场景
- 计算机图形学:3D模型(如游戏角色、动画角色)的姿态旋转与平滑过渡,依赖SLERP实现流畅动画;
- 机器人学:机器人末端执行器的姿态控制、IMU(惯性测量单元)的姿态融合(如无人机、自动驾驶车的姿态估计);
- 航空航天:飞行器(飞机、卫星)的姿态表示与控制,需无万向锁的高精度旋转描述;
- VR/AR设备:头显、手柄的姿态跟踪,通过四元数实时更新设备在三维空间中的位置,保证虚拟与现实的对齐。
四元数的本质是“用四维数学工具解决三维旋转问题”,其核心价值在于:以少量参数(4个)实现无万向锁的旋转表示,同时支持高效的组合与平滑插值。
这个视频可以快速直观地对四元数有个理解快速理解四元数
这个视频详细清晰的可视化了四元数,有耐心的可以观看四元数的可视化
最好推荐大佬联合做的可交互的一个讲解,非常的牛!交互四元数旋转讲解
