跳到主要内容

四元数(Quaternion)

1. 起源​

在二维复平面上,点乘以单位复数就是表示旋转。

z′=z⋅eiθ=z(cos⁡θ+isin⁡θ)z' = z \cdot e^{i\theta} = z (\cos\theta + i\sin\theta)

那么,三维空间能不能照抄?

三维空间有三个旋转轴,很自然地会想:能不能引入三个虚数单位 i,j,ki, j, k,分别对应三个轴的旋转?

也就是说,我们希望构造一种数,形式为 a+bi+cj+dka + bi + cj + dk,其中 i2=j2=k2=−1i^2 = j^2 = k^2 = -1。

但问题立刻来了:ijij 等于什么?

  • ijij 不能是 11 或 −1-1,否则 ii 和 jj 就不是独立的了。
  • ijij 也不能是 ii 或 jj,否则两边消去后会推出矛盾。

规定 ij=kij = k,经过推导可得:

ij=k,jk=i,ki=j,ij=−jiij = k, \quad jk = i ,\quad ki = j, \quad ij = -ji

这就是 Hamilton 在 1843 年发现的四元数(Quaternion)。

四元数

四元数是形如 q=a+bi+cj+dkq = a + bi + cj + dk 的四维超复数,其中 a,b,c,d∈Ra, b, c, d \in \mathbb{R},虚数单位满足:

  1. i2=j2=k2=ijk=−1i^2 = j^2 = k^2 = ijk = -1
  2. ij=k,jk=i,ki=jij = k, jk = i, ki = j
  3. ij=−ji,jk=−kj,ki=−ikij = -ji, jk = -kj, ki = -ik

四元数可以表示为标量-向量形式:

q=(s,v)q = (s, \bm{v})

其中 s=as = a 是实部,v=(b,c,d)\bm{v} = (b, c, d) 是虚部向量。

2. 共轭与模长​

对于四元数 q=a+bi+cj+dkq = a + bi + cj + dk,其共轭定义为:

q∗=a−bi−cj−dkq^* = a - bi - cj - dk

用标量-向量形式写就是 (s,v)∗=(s,−v)(s, \bm{v})^* = (s, -\bm{v}),即保持实部不变,虚部取反。

模长定义为:

∣q∣=a2+b2+c2+d2|q| = \sqrt{a^2 + b^2 + c^2 + d^2}

和复数一样,qq∗=∣q∣2q q^* = |q|^2,因此四元数的逆为:

q−1=q∗∣q∣2q^{-1} = \frac{q^*}{|q|^2}

单位四元数是模长为 1 的四元数,即 ∣q∣=1|q| = 1。此时 q−1=q∗q^{-1} = q^*,求逆只需要取共轭,计算非常简单。

对于任意非零四元数 qq,可以通过归一化得到单位四元数:

q^=q∣q∣=qa2+b2+c2+d2\hat{q} = \frac{q}{|q|} = \frac{q}{\sqrt{a^2 + b^2 + c^2 + d^2}}

归一化后的四元数保持原四元数的方向(旋转信息),但模长变为 1,满足单位四元数的性质。

3. 乘法​

设 q1=a1+b1i+c1j+d1kq_1 = a_1 + b_1i + c_1j + d_1k,q2=a2+b2i+c2j+d2kq_2 = a_2 + b_2i + c_2j + d_2k,则:

q1q2=(a1+b1i+c1j+d1k)(a2+b2i+c2j+d2k)=a1a2−b1b2−c1c2−d1d2+(a1b2+b1a2+c1d2−d1c2)i+(a1c2−b1d2+c1a2+d1b2)j+(a1d2+b1c2−c1b2+d1a2)k\begin{aligned} q_1 q_2 =& (a_1 + b_1i + c_1j + d_1k)(a_2 + b_2i + c_2j + d_2k) \\ =& a_1 a_2 - b_1 b_2 - c_1 c_2 - d_1 d_2 \\ & + (a_1 b_2 + b_1 a_2 + c_1 d_2 - d_1 c_2)i \\ & + (a_1 c_2 - b_1 d_2 + c_1 a_2 + d_1 b_2)j \\ & + (a_1 d_2 + b_1 c_2 - c_1 b_2 + d_1 a_2)k \end{aligned}

写成向量形式为:

(s1,v1)(s2,v2)=(s1s2−v1⋅v2,  s1v2+s2v1+v1×v2)(s_1, \bm{v}_1)(s_2, \bm{v}_2) = (s_1 s_2 - \bm{v}_1 \cdot \bm{v}_2,\; s_1 \bm{v}_2 + s_2 \bm{v}_1 + \bm{v}_1 \times \bm{v}_2)

四元数乘法性质

对于四元数 q1q_1、q2q_2、q3q_3有:

  1. 结合律: (q1q2)q3=q1(q2q3)(q_1q_2)q_3 = q_1(q_2q_3)
  2. 非交换性: q1q2≠q2q1q_1q_2 \neq q_2q_1(一般不满足交换律)
  3. 共轭反序律: (q2q1)∗=q1∗q2∗(q_2q_1)^* = q_1^* q_2^*
  4. 模的乘法性: ∣q1q2∣=∣q1∣∣q2∣|q_1q_2| = |q_1||q_2|(可由共轭反序律证明)

3.1 点积与乘法​

对于单位四元数 q1=(s1,v1)q_1 = (s_1, \bm{v}_1)和任意四元数 q2=(s2,v2)q_2 = (s_2, \bm{v}_2),那么:

q1⋅(q2q1)=s1(s2s1−v2⋅v1)+v1⋅(s2v1+s1v2+v2×v1)=s12s2−s1(v2⋅v1)+s2(v1⋅v1)+s1(v1⋅v2)+v1⋅(v2×v1)=s12s2+s2∣v1∣2=s2∣q1∣2=s2(当 ∣q1∣=1 时)\begin{aligned} q_1 \cdot (q_2 q_1) &= s_1(s_2 s_1 - \bm{v}_2 \cdot \bm{v}_1) + \bm{v}_1 \cdot (s_2 \bm{v}_1 + s_1 \bm{v}_2 + \bm{v}_2 \times \bm{v}_1) \\ &= s_1^2 s_2 - s_1(\bm{v}_2 \cdot \bm{v}_1) + s_2(\bm{v}_1 \cdot \bm{v}_1) + s_1(\bm{v}_1 \cdot \bm{v}_2) + \bm{v}_1 \cdot (\bm{v}_2 \times \bm{v}_1) \\ &= s_1^2 s_2 + s_2 |\bm{v}_1|^2 \\ &= s_2 |q_1|^2 \\ &= s_2 \quad (\text{当 } |q_1| = 1 \text{ 时}) \end{aligned} q1⋅(q1q2)=s1(s1s2−v1⋅v2)+v1⋅(s1v2+s2v1+v1×v2)=s12s2−s1(v1⋅v2)+s1(v1⋅v2)+s2(v1⋅v1)+v1⋅(v1×v2)=s12s2+s2∣v1∣2=s2(s12+∣v1∣2)=s2∣q1∣2=s2(当 ∣q1∣=1 时)\begin{aligned} q_1 \cdot (q_1 q_2) &= s_1(s_1 s_2 - \bm{v}_1 \cdot \bm{v}_2) + \bm{v}_1 \cdot (s_1 \bm{v}_2 + s_2 \bm{v}_1 + \bm{v}_1 \times \bm{v}_2) \\ &= s_1^2 s_2 - s_1(\bm{v}_1 \cdot \bm{v}_2) + s_1(\bm{v}_1 \cdot \bm{v}_2) + s_2(\bm{v}_1 \cdot \bm{v}_1) + \bm{v}_1 \cdot (\bm{v}_1 \times \bm{v}_2) \\ &= s_1^2 s_2 + s_2 |\bm{v}_1|^2 \\ &= s_2(s_1^2 + |\bm{v}_1|^2) \\ &= s_2 |q_1|^2 \\ &= s_2 \quad (\text{当 } |q_1| = 1 \text{ 时}) \end{aligned}
定理

对于单位四元数 q1q_1(即 ∣q1∣=1|q_1| = 1)和任意四元数 q2q_2,有:

q1⋅(q2q1)=q1⋅(q1q2)=Re{q2}q_1 \cdot (q_2 q_1) = q_1 \cdot (q_1 q_2) = \text{Re}\{q_2\}

4. 旋转​

借鉴二维旋转,那三维旋转最直观的想法是:p′=qpp' = qp,其中p=(0,v)p = (0, \bm{v})。但这有两个问题:

  1. 维度不匹配:结果的实部不一定为零,而向量应该是纯四元数(实部为零)。
  2. 模长不保持:∣qp∣=∣q∣∣p∣|qp| = |q||p|,如果 ∣q∣≠1|q| \neq 1,旋转会缩放向量。

Hamilton 的天才之处在于他发现了夹心乘法(sandwich product):

p′=qpq−1p' = qpq^{-1}

这个公式到底做了什么?

设旋转轴为单位向量 u\bm{u},旋转角为 θ\theta,则:

q=cos⁡θ2+usin⁡θ2q = \cos\frac{\theta}{2} + \bm{u}\sin\frac{\theta}{2}

为简化记号,令 c=cos⁡θ2c = \cos\frac{\theta}{2},s=sin⁡θ2s = \sin\frac{\theta}{2},则 q=(c,su)q = (c, s\bm{u})。

对于单位四元数,q−1=q∗=(c,−su)q^{-1} = q^* = (c, -s\bm{u})。

待旋转向量 v\bm{v} 表示为纯四元数 p=(0,v)p = (0, \bm{v})。

第一步:计算 qpqp

qp=(c,su)(0,v)=(c⋅0−su⋅v,  cv+0⋅su+su×v)=(−s(u⋅v),  cv+s(u×v))\begin{aligned} qp &= (c, s\bm{u})(0, \bm{v}) \\ &= (c \cdot 0 - s\bm{u} \cdot \bm{v},\; c\bm{v} + 0 \cdot s\bm{u} + s\bm{u} \times \bm{v}) \\ &= (-s(\bm{u} \cdot \bm{v}),\; c\bm{v} + s(\bm{u} \times \bm{v})) \end{aligned}

第二步:计算 (qp)q−1(qp)q^{-1}

qpq−1=(−s(u⋅v),  cv+s(u×v))(c,−su)\begin{aligned} qpq^{-1} &= (-s(\bm{u} \cdot \bm{v}),\; c\bm{v} + s(\bm{u} \times \bm{v}))(c, -s\bm{u}) \end{aligned}

先看标量部分:

标量=−sc(u⋅v)−(cv+s(u×v))⋅(−su)=−sc(u⋅v)+sc(v⋅u)+s2(u×v)⋅u=0\begin{aligned} \text{标量} &= -sc(\bm{u} \cdot \bm{v}) - (c\bm{v} + s(\bm{u} \times \bm{v})) \cdot (-s\bm{u}) \\ &= -sc(\bm{u} \cdot \bm{v}) + sc(\bm{v} \cdot \bm{u}) + s^2(\bm{u} \times \bm{v}) \cdot \bm{u} \\ &= 0 \end{aligned}

(u×v)⋅u=0(\bm{u} \times \bm{v}) \cdot \bm{u} = 0(叉积垂直于两个因子),所以标量部分为零,结果确实是纯四元数。

再看向量部分:

v′=−s(u⋅v)(−su)+c(cv+s(u×v))+(cv+s(u×v))×(−su)=s2(u⋅v)u+c2v+cs(u×v)−cs(v×u)−s2(u×v)×u\begin{aligned} \bm{v}' &= -s(\bm{u} \cdot \bm{v})(-s\bm{u}) + c(c\bm{v} + s(\bm{u} \times \bm{v})) + (c\bm{v} + s(\bm{u} \times \bm{v})) \times (-s\bm{u}) \\ &= s^2(\bm{u} \cdot \bm{v})\bm{u} + c^2\bm{v} + cs(\bm{u} \times \bm{v}) - cs(\bm{v} \times \bm{u}) - s^2(\bm{u} \times \bm{v}) \times \bm{u} \end{aligned}

利用 v×u=−u×v\bm{v} \times \bm{u} = -\bm{u} \times \bm{v} 和向量三重积公式 (u×v)×u=−u×(u×v)=−[(u⋅v)u−v](\bm{u} \times \bm{v}) \times \bm{u} = -\bm{u} \times (\bm{u} \times \bm{v}) = -[(\bm{u} \cdot \bm{v})\bm{u} - \bm{v}](因为 ∣u∣=1|\bm{u}| = 1):

v′=s2(u⋅v)u+c2v+2cs(u×v)+s2((u⋅v)u−v)=2s2(u⋅v)u+(c2−s2)v+2cs(u×v)\begin{aligned} \bm{v}' &= s^2(\bm{u} \cdot \bm{v})\bm{u} + c^2\bm{v} + 2cs(\bm{u} \times \bm{v}) + s^2((\bm{u} \cdot \bm{v})\bm{u} - \bm{v}) \\ &= 2s^2(\bm{u} \cdot \bm{v})\bm{u} + (c^2 - s^2)\bm{v} + 2cs(\bm{u} \times \bm{v}) \end{aligned}

代回三角函数:

  • c2−s2=cos⁡2θ2−sin⁡2θ2=cos⁡θc^2 - s^2 = \cos^2\frac{\theta}{2} - \sin^2\frac{\theta}{2} = \cos\theta
  • 2cs=2cos⁡θ2sin⁡θ2=sin⁡θ2cs = 2\cos\frac{\theta}{2}\sin\frac{\theta}{2} = \sin\theta
  • 2s2=2sin⁡2θ2=1−cos⁡θ2s^2 = 2\sin^2\frac{\theta}{2} = 1 - \cos\theta

得到:

v′=(1−cos⁡θ)(u⋅v)u+cos⁡θ⋅v+sin⁡θ(u×v)\bm{v}' = (1 - \cos\theta)(\bm{u} \cdot \bm{v})\bm{u} + \cos\theta \cdot \bm{v} + \sin\theta(\bm{u} \times \bm{v})

这正是罗德里格斯旋转公式(Rodrigues' Rotation Formula)!

使用四元数计算旋转

绕单位轴 u\bm{u} 旋转角度 θ\theta 的步骤:

  1. 构造旋转四元数:q=cos⁡θ2+usin⁡θ2q = \cos\frac{\theta}{2} + \bm{u}\sin\frac{\theta}{2}
  2. 表示向量:p=(0,v)p = (0, \bm{v})(纯四元数)
  3. 夹心乘法:p′=qpq−1p' = qpq^{-1}(单位四元数时 q−1=q∗q^{-1} = q^*)
  4. 提取结果:p′=(0,v′)p' = (0, \bm{v}') 的虚部即为旋转后的向量

4.1 双覆盖​

设旋转四元数为 q=cos⁡θ2+usin⁡θ2q = \cos\frac{\theta}{2} + \bm{u}\sin\frac{\theta}{2},那么:

−q=−cos⁡θ2−usin⁡θ2=cos⁡θ+2π2+usin⁡θ+2π2-q = -\cos\frac{\theta}{2} - \bm{u}\sin\frac{\theta}{2} = \cos\frac{\theta + 2\pi}{2} + \bm{u}\sin\frac{\theta + 2\pi}{2}

也就是说,−q-q 相当于在 qq 的基础上多旋转了 2π2\pi(一整圈)。由于旋转 2π2\pi 后物体回到原位,所以 qq 和 −q-q 产生的旋转效果完全相同,这体现了四元数表示旋转的周期性。

双覆盖

每个三维旋转对应两个单位四元数:qq 和 −q-q,这称为双覆盖(double cover)。

4.2 组合旋转​

两个四元数相乘 q3=q2q1q_3 = q_2 q_1 那么:

q3pq3−1=(q2q1)p(q2q1)−1=(q2q1)p(q1−1q2−1)(逆的反序律)=q2(q1pq1−1)q2−1(结合律)\begin{aligned} q_3pq_3^{-1} &= (q_2 q_1) p (q_2 q_1)^{-1} \\ &= (q_2 q_1) p (q_1^{-1} q_2^{-1}) \quad \text{(逆的反序律)} \\ &= q_2 (q_1 p q_1^{-1}) q_2^{-1} \quad \text{(结合律)} \end{aligned}
组合旋转

对于旋转四元数 q1q_1 和 q2q_2,令 q3=q2q1q_3 = q_2 q_1,则 q3q_3 表示先执行 q1q_1 旋转,再执行 q2q_2 旋转的复合旋转。

5. 球面线性插值(Slerp)​

5.1 二维:单位圆 S1S^1​

两个点 P1=(cos⁡θ1,sin⁡θ1)P_1 = (\cos\theta_1, \sin\theta_1) 和 P2=(cos⁡θ2,sin⁡θ2)P_2 = (\cos\theta_2, \sin\theta_2),它们的夹角 ϕ=θ2−θ1\phi = \theta_2 - \theta_1。

通过点积可以求出夹角:

cos⁡ϕ=cos⁡θ1cos⁡θ2+sin⁡θ1sin⁡θ2\cos\phi = \cos\theta_1\cos\theta_2 + \sin\theta_1\sin\theta_2

圆弧插值很简单,直接对角度线性插值:θ(t)=θ1+tϕ\theta(t) = \theta_1 + t\phi,然后代回得到点 (cos⁡θ(t),sin⁡θ(t))(\cos\theta(t), \sin\theta(t))。

利用三角恒等式展开:

cos⁡θ(t)=cos⁡(θ1+tϕ)=cos⁡θ1cos⁡(tϕ)−sin⁡θ1sin⁡(tϕ)\cos\theta(t) = \cos(\theta_1 + t\phi) = \cos\theta_1\cos(t\phi) - \sin\theta_1\sin(t\phi)

提示

如果是极坐标表示的,那直接能得到ϕ\phi,如果是点坐标,则需要使用arccos⁡\arccos反算ϕ\phi。

5.2 三维:单位球面 S2S^2​

单位球面上的点用球坐标表示,但更重要的是两点之间的关系。设球面上有两个单位向量 v1\bm{v}_1 和 v2\bm{v}_2,它们的夹角 ϕ\phi 满足:

cos⁡ϕ=v1⋅v2\cos\phi = \bm{v}_1 \cdot \bm{v}_2

球面上两点间的最短路径是大圆弧(过球心的平面与球面的交线)。

v1\bm{v}_1 和 v2\bm{v}_2 张成一个过原点的平面,大圆弧就在这个平面上。以 v1\bm{v}_1 作为该圆的一个基向量,现在求另一个正交基。

将 v2\bm{v}_2 分解为平行于 v1\bm{v}_1 和垂直于 v1\bm{v}_1 的两个分量:

v2=(v2⋅v1)v1+v2⊥=cos⁡ϕ⋅v1+v2⊥\bm{v}_2 = (\bm{v}_2 \cdot \bm{v}_1)\bm{v}_1 + \bm{v}_2^\perp = \cos\phi \cdot \bm{v}_1 + \bm{v}_2^\perp

垂直分量为:

v2⊥=v2−cos⁡ϕ⋅v1\bm{v}_2^\perp = \bm{v}_2 - \cos\phi \cdot \bm{v}_1

其模长为 ∣v2⊥∣=1−cos⁡2ϕ=sin⁡ϕ|\bm{v}_2^\perp| = \sqrt{1 - \cos^2\phi} = \sin\phi,归一化得到第二个基:

u=v2−cos⁡ϕ⋅v1sin⁡ϕ\bm{u} = \frac{\bm{v}_2 - \cos\phi \cdot \bm{v}_1}{\sin\phi}

现在大圆弧上任意一点可以用这两个基表示:

v(t)=cos⁡(tϕ)v1+sin⁡(tϕ)u\bm{v}(t) = \cos(t\phi)\bm{v}_1 + \sin(t\phi)\bm{u}

代入 u\bm{u}:

v(t)=cos⁡(tϕ)v1+sin⁡(tϕ)v2−cos⁡ϕ⋅v1sin⁡ϕ\bm{v}(t) = \cos(t\phi)\bm{v}_1 + \sin(t\phi)\frac{\bm{v}_2 - \cos\phi \cdot \bm{v}_1}{\sin\phi}

整理:

v(t)=cos⁡(tϕ)sin⁡ϕ−sin⁡(tϕ)cos⁡ϕsin⁡ϕv1+sin⁡(tϕ)sin⁡ϕv2\bm{v}(t) = \frac{\cos(t\phi)\sin\phi - \sin(t\phi)\cos\phi}{\sin\phi}\bm{v}_1 + \frac{\sin(t\phi)}{\sin\phi}\bm{v}_2

利用正弦差角公式 sin⁡(A−B)=sin⁡Acos⁡B−cos⁡Asin⁡B\sin(A - B) = \sin A\cos B - \cos A\sin B:

v(t)=sin⁡(ϕ−tϕ)sin⁡ϕv1+sin⁡(tϕ)sin⁡ϕv2=sin⁡((1−t)ϕ)sin⁡ϕv1+sin⁡(tϕ)sin⁡ϕv2\bm{v}(t) = \frac{\sin(\phi - t\phi)}{\sin\phi}\bm{v}_1 + \frac{\sin(t\phi)}{\sin\phi}\bm{v}_2 = \frac{\sin((1-t)\phi)}{\sin\phi}\bm{v}_1 + \frac{\sin(t\phi)}{\sin\phi}\bm{v}_2

这就是球面线性插值公式。

5.3 四维:单位超球面 S3S^3​

单位四元数构成四维空间中的单位超球面 S3S^3。

两个单位四元数 q1q_1 和 q2q_2 的夹角同样由点积给出:

cos⁡ϕ=q1⋅q2=a1a2+b1b2+c1c2+d1d2\cos\phi = q_1 \cdot q_2 = a_1a_2 + b_1b_2 + c_1c_2 + d_1d_2

超球面上的最短路径同样是大圆弧,插值公式与三维形式完全一致:

q(t)=sin⁡((1−t)ϕ)sin⁡ϕq1+sin⁡(tϕ)sin⁡ϕq2q(t) = \frac{\sin((1-t)\phi)}{\sin\phi}q_1 + \frac{\sin(t\phi)}{\sin\phi}q_2

四元数插值在四维超球面 S3S^3 上进行,但我们关心的是三维旋转空间 SO(3)SO(3) 中的效果。

四元数 q1q_1 到 q2q_2 的相对旋转可以用 qΔq_\Delta 表示:

q2=qΔq1⇒qΔ=q2q1−1q_2 = q_\Delta q_1 \quad \Rightarrow \quad q_\Delta = q_2 q_1^{-1}

qΔq_\Delta 的实部为 cos⁡Δθ2\cos\frac{\Delta\theta}{2},其中 Δθ\Delta\theta 是相对旋转角。而四元数点积恰好给出:

q1⋅q2=cos⁡ϕ=cos⁡Δθ2q_1 \cdot q_2 = \cos\phi = \cos\frac{\Delta\theta}{2}

因此 ϕ=Δθ2\phi = \frac{\Delta\theta}{2},即四元数空间中的夹角 ϕ\phi 是实际相对旋转角的一半。

这意味着:

  • 当 ϕ=π2\phi = \frac{\pi}{2} 时,实际旋转角 Δθ=π\Delta\theta = \pi(180°)
  • 当 q1⋅q2<0q_1 \cdot q_2 < 0 时,ϕ>π2\phi > \frac{\pi}{2},实际旋转角 Δθ>π\Delta\theta > \pi,物体没有走最短的的旋转路径

这就是为什么插值前必须检查符号:确保 ϕ≤π2\phi \leq \frac{\pi}{2},即 Δθ≤π\Delta\theta \leq \pi,走最短旋转路径。

相对旋转四元数 qΔ=q2q1−1q_\Delta = q_2 q_1^{-1} 描述了从 q1q_1 到 q2q_2 的旋转。设:

q1=w1+v1,q2=w2+v2q_1 = w_1 + \bm{v}_1, \quad q_2 = w_2 + \bm{v}_2

由于 q1q_1 是单位四元数,q1−1=q1∗=w1−v1q_1^{-1} = q_1^* = w_1 - \bm{v}_1。计算 qΔq_\Delta:

qΔ=q2q1∗=(w2+v2)(w1−v1)q_\Delta = q_2 q_1^* = (w_2 + \bm{v}_2)(w_1 - \bm{v}_1)

展开四元数乘法:

qΔ=w2w1−w2v1+w1v2−v2v1q_\Delta = w_2w_1 - w_2\bm{v}_1 + w_1\bm{v}_2 - \bm{v}_2\bm{v}_1

其中 v2v1=−v2⋅v1+v2×v1=−v1⋅v2−v1×v2\bm{v}_2\bm{v}_1 = -\bm{v}_2 \cdot \bm{v}_1 + \bm{v}_2 \times \bm{v}_1 = -\bm{v}_1 \cdot \bm{v}_2 - \bm{v}_1 \times \bm{v}_2,代入得:

qΔ=(w1w2+v1⋅v2)+(w1v2−w2v1+v1×v2)q_\Delta = (w_1w_2 + \bm{v}_1 \cdot \bm{v}_2) + (w_1\bm{v}_2 - w_2\bm{v}_1 + \bm{v}_1 \times \bm{v}_2)

qΔq_\Delta 的实部为 w1w2+v1⋅v2=q1⋅q2=cos⁡Δθ2w_1w_2 + \bm{v}_1 \cdot \bm{v}_2 = q_1 \cdot q_2 = \cos\frac{\Delta\theta}{2},虚部为:

vec⁡(qΔ)=w1v2−w2v1+v1×v2=ksin⁡Δθ2\operatorname{vec}(q_\Delta) = w_1\bm{v}_2 - w_2\bm{v}_1 + \bm{v}_1 \times \bm{v}_2 = \bm{k}\sin\frac{\Delta\theta}{2}

因此,旋转轴 k\bm{k} 为:

k=w1v2−w2v1+v1×v2sin⁡Δθ2\bm{k} = \frac{w_1\bm{v}_2 - w_2\bm{v}_1 + \bm{v}_1 \times \bm{v}_2}{\sin\frac{\Delta\theta}{2}}

其中 sin⁡Δθ2=1−(q1⋅q2)2=∣vec⁡(qΔ)∣\sin\frac{\Delta\theta}{2} = \sqrt{1 - (q_1 \cdot q_2)^2} = |\operatorname{vec}(q_\Delta)|。

特殊情况:

  • 当 Δθ≈0\Delta\theta \approx 0 时,sin⁡Δθ2≈0\sin\frac{\Delta\theta}{2} \approx 0,旋转轴不确定(两四元数几乎相同),此时退化为线性插值 q(t)=(1−t)q1+tq2q(t) = (1-t)q_1 + tq_2,然后归一化
  • 当 Δθ=π\Delta\theta = \pi 时,sin⁡Δθ2=1\sin\frac{\Delta\theta}{2} = 1,k=vec⁡(qΔ)\bm{k} = \operatorname{vec}(q_\Delta)
四元数球面线性插值

给定两个单位四元数 q1q_1 和 q2q_2,夹角 ϕ=arccos⁡(q1⋅q2)\phi = \arccos(q_1 \cdot q_2),插值公式为:

Slerp⁡(q1,q2,t)=sin⁡((1−t)ϕ)sin⁡ϕq1+sin⁡(tϕ)sin⁡ϕq2,t∈[0,1]\operatorname{Slerp}(q_1, q_2, t) = \frac{\sin((1-t)\phi)}{\sin\phi}q_1 + \frac{\sin(t\phi)}{\sin\phi}q_2, \quad t \in [0, 1]

特点:

  • 保持单位模长:∣q(t)∣=1|q(t)| = 1
  • 角速度恒定:沿超球面大圆弧匀速移动
  • 端点精确:q(0)=q1q(0) = q_1,q(1)=q2q(1) = q_2

注意事项:

  1. 符号问题:qq 和 −q-q 表示同一个旋转,但插值路径不同。如果 q1⋅q2<0q_1 \cdot q_2 < 0,应将 q2q_2 取反,确保走最短路径。

  2. 除零问题:当 ϕ≈0\phi \approx 0 时,sin⁡ϕ≈0\sin\phi \approx 0,公式出现除零。此时退化为线性插值 q(t)=(1−t)q1+tq2q(t) = (1-t)q_1 + tq_2,然后归一化。