三维空间刚体运动

2026/6/12 · 离散数学

基础向量运算

在三维空间中,刚体运动的描述离不开基础的向量运算。

1 内积 (Inner Product)

对于两个实向量 a,bR3\mathbf{a}, \mathbf{b} \in \mathbb{R}^3,其内积定义为:

ab=aTb=abcosθab\mathbf{a} \cdot \mathbf{b} = \mathbf{a}^T \mathbf{b} = |\mathbf{a}| |\mathbf{b}| \cos \theta_{\mathbf{a}\mathbf{b}}

内积主要用于描述两个向量之间的夹角关系。

2 外积 (Outer Product)

向量的外积结果是一个同时垂直于这两个向量的新向量。在坐标表示中,外积可以转化为矩阵与向量的乘法:

a×b=[0a3a2a30a1a2a10]bab\mathbf{a} \times \mathbf{b} =\begin{bmatrix}0 & -a_3 & a_2 \\a_3 & 0 & -a_1 \\-a_2 & a_1 & 0\end{bmatrix}\mathbf{b} \triangleq \mathbf{a}^{\wedge} \mathbf{b}

其中 a\mathbf{a}^{\wedge} 被称为反对称矩阵,\wedge称为反对称符号,这种映射关系在描述旋转运动中至关重要。

3 旋转矩阵与特殊正交群SO(3)SO(3)

从线性代数而言,a=Ra\mathbf{a} = R \mathbf{a}' 表示坐标 a\mathbf{a}' 通过 RR 变换为坐标 a\mathbf{a}

两个标准正交基的乘积还是标准正交基,因此旋转矩阵 RR 是正交矩阵,并且旋转矩阵的行列式必为 11RR^\top 表示一个旋转 RR 的反旋转。反之,行列式为 11 的正交矩阵也是一个旋转矩阵。

nn 维旋转矩阵的集合定义如下:

SO(n)={RRn×nRR=I, det(R)=1}SO(n) = \{ R \in \mathbb{R}^{n \times n} \mid R R^\top = I,\ \det(R) = 1 \}

SO(n)SO(n) 表示特殊正交群 (Special Orthogonal Group)。

SO(3)SO(3) 是三维空间的旋转。通过旋转矩阵,可以直接讨论坐标系间的变换而不用再从基开始讨论。

3.1 旋转矩阵的数学推导

旋转矩阵 RR 描述了三维空间中两组单位正交基 {e1,e2,e3}\{e_1, e_2, e_3\}{e1,e2,e3}\{e'_1, e'_2, e'_3\} 之间的变换关系。对于同一个向量,其在两组基下的坐标分别为 aaaa',则有:

a=(e1,e2,e3)[a1a2a3]=(e1,e2,e3)[a1a2a3]\mathbf{a} = (e_1, e_2, e_3) \begin{bmatrix} a_1 \\ a_2 \\ a_3 \end{bmatrix} = (e'_1, e'_2, e'_3) \begin{bmatrix} a'_1 \\ a'_2 \\ a'_3 \end{bmatrix}

通过两边左乘基向量的转置,可以导出坐标变换关系:

(a1a2a3)=(e1e1e1e2e1e3e2e1e2e2e2e3e3e1e3e2e3e3)(a1a2a3)Ra\begin{pmatrix} a_1 \\ a_2 \\ a_3 \end{pmatrix} = \begin{pmatrix} \mathbf{e}_1^\top \mathbf{e}_1' & \mathbf{e}_1^\top \mathbf{e}_2' & \mathbf{e}_1^\top \mathbf{e}_3' \\ \mathbf{e}_2^\top \mathbf{e}_1' & \mathbf{e}_2^\top \mathbf{e}_2' & \mathbf{e}_2^\top \mathbf{e}_3' \\ \mathbf{e}_3^\top \mathbf{e}_1' & \mathbf{e}_3^\top \mathbf{e}_2' & \mathbf{e}_3^\top \mathbf{e}_3' \end{pmatrix} \begin{pmatrix} a_1' \\ a_2' \\ a_3' \end{pmatrix} \triangleq R \, \mathbf{a}'

a=Ra\mathbf{a} = R\mathbf{a}'

此时,旋转矩阵 RR 的每一个元素实际上是两组基向量之间的内积(方向余弦),因此 RR 也被称为方向余弦矩阵

3.2 关键性质

  • 正交性:旋转矩阵是单位正交阵,满足 RRT=IRR^T = I。这意味着其逆矩阵等于其转置(R1=RTR^{-1} = R^T),在物理上表示一个反向旋转
  • 行列式约束:旋转矩阵的行列式必为 1(detR=1\det R = 1)。
  • 特殊正交群SO(3)SO(3):三维空间旋转矩阵的集合构成了特殊正交群: SO(3)={RR3×3RRT=I,det(R)=1}SO(3) = \{R \in \mathbb{R}^{3 \times 3} | RR^T = I, \det(R) = 1\}

4 欧式变换与特殊欧式群SE(3)SE(3)

3.1 欧式变换的定义

在三维空间中,刚体的运动通常由旋转平移两部分组成,这种组合变换被称为欧式变换。 对于空间中的一个向量 aa,经过一次旋转 RR 和一次平移 tt 后,其在目标坐标系下的坐标 aa' 表示为: a=Ra+ta' = Ra + t 其中 tt 为平移向量。需要注意的是,虽然旋转本身是线性的,但旋转加平移的多次复合变换并不满足简单的线性关系,这在处理连续运动时会带来计算上的不便。

例:

  • 向量 a\mathbf{a} 经过一次旋转 R1R_1 和一次平移 t1t_1 后,得到 b\mathbf{b},再经过一次旋转 R2R_2 和一次平移 t2t_2 后由 b\mathbf{b} 得到 c\mathbf{c},即b=R1a+t1,c=R2b+t2,\mathbf{b} = R_1 \mathbf{a} + t_1, \quad \mathbf{c} = R_2 \mathbf{b} + t_2, 于是,由 aa 得到 cc 的变换过程为 c=R2(R1a+t1)+t2.c = R_2 (R_1 a + t_1) + t_2.

3.2 齐次坐标与变换矩阵

为了将旋转和平移统一在同一个线性运算框架下,引入了齐次坐标 (Homogeneous Coordinates)

  • 齐次化处理:在一个三维向量的末尾增加一个维度并取值为 1,将其变为四维向量。
  • 变换矩阵 TT:通过齐次坐标,可以将欧式变换写成一个 4×44 \times 4 的矩阵形式: [a1]=[Rt0T1][a1]T[a1]\begin{bmatrix} a' \\ 1 \end{bmatrix} = \begin{bmatrix} R & t \\ 0^T & 1 \end{bmatrix} \begin{bmatrix} a \\ 1 \end{bmatrix} \triangleq T \begin{bmatrix} a \\ 1 \end{bmatrix} 此时,多次变换可以简化为矩阵的乘法。例如,向量 aa 经过 T1T_1 变到 bb,再经过 T2T_2 变到 cc,其过程可表示为 c=T2T1ac = T_2 T_1 a

3.3 特殊欧式群 SE(3)

变换矩阵 TT 的集合构成了特殊欧式群 (Special Euclidean Group),定义为: SE(3)={T=[Rt0T1]R4×4RSO(3),tR3}SE(3) = \left\{ T = \begin{bmatrix} R & t \\ 0^T & 1 \end{bmatrix} \in \mathbb{R}^{4 \times 4} \mid R \in SO(3), t \in \mathbb{R}^3 \right\} 该群中的元素具有以下性质:

  • 逆变换TT 的逆矩阵描述了一个相反的变换,其闭式解为: T1=[RTRTt0T1]T^{-1} = \begin{bmatrix} R^T & -R^T t \\ 0^T & 1 \end{bmatrix}
  • 行列式约束:变换矩阵 TT 的行列式也必须为 1

3.4 自由度与冗余性

欧式变换在描述空间运动时存在明显的参数冗余:

  • 自由度 (DOF):三维空间的欧式变换实际上只有 6 个自由度(3 个旋转自由度 + 3 个平移自由度)。
  • 参数量:变换矩阵 TT 使用了 16 个元素来描述这 6 个自由度。旋转矩阵用9个元素来描述3个旋转自由度
  • 计算挑战:这种冗余性加上行列式为 1 的约束,使得在实际的优化求解(如视觉里程计或无人机姿态解算)中,直接对矩阵 TT 进行更新会变得非常困难。

简化表达方法

1 旋转向量与轴角表示 (Axis-Angle)

1.1 基本定义

三维空间中的任意旋转都可以描述为绕着某一个单位向量 nn 旋转一个具体的角度 θ\theta。为了实现更紧凑的描述,可以定义一个三维向量 ϕ\phi,其方向与旋转轴一致,长度等于旋转角,这种表示方法被称为旋转向量(或轴角表示): ϕ=θn\phi = \theta n 其中,θ\theta 表示旋转角度,nn 表示单位旋转轴向量。这种表示方式正好为三维,完美对应了旋转的 3 个自由度。

1.2 罗德里格斯公式 (Rodrigues’ Formula)

罗德里格斯公式定义了从旋转向量到旋转矩阵 RR 的转换关系: R=cosθI+(1cosθ)nnT+sinθnR = \cos\theta I + (1 - \cos\theta)nn^T + \sin\theta n^{\wedge} 在该公式中,II 为单位矩阵,nn^{\wedge} 为单位旋转轴 nn 对应的反对称矩阵。

1.3 旋转矩阵到旋转向量的转换

若已知旋转矩阵 RR,可以通过以下方式反向求得旋转角 θ\theta 和旋转轴 nn

  • 求解旋转角 θ\theta:利用旋转矩阵的迹 (Trace) 与角度的关系: tr(R)=3cosθ+1cosθ=1+2cosθ    θ=arccostr(R)12\text{tr}(R) = 3\cos\theta + 1 - \cos\theta = 1 + 2\cos\theta \implies \theta = \arccos\frac{\text{tr}(R) - 1}{2}通过计算矩阵主对角线元素之和,可以快速确定旋转角度。
  • 求解单位旋转轴 nn:由于旋转轴在旋转过程中保持不动,因此 nn 是矩阵 RR 对应于特征值为 1 的特征向量,满足: (RI)n=0,n2=1(R - I)n = 0, \quad \|n\|_2 = 1即通过求解旋转矩阵的特征值来获取单位旋转向量。

    或同右乘nn可得Rn=nRn=n

1.4 优缺点与特性

  • 紧凑性:旋转向量仅用 3 个量描述 3 自由度的旋转,消除了旋转矩阵(9 个量)的计算冗余。
  • 奇异性:轴角表示存在奇异性问题。例如,旋转 3030^\circ 与旋转 390390^\circ(即 30+36030^\circ + 360^\circ)的轴角表示是完全相同的。
  • 直观性不足:尽管相比矩阵更紧凑,但旋转矩阵与轴角对于三维空间的旋转而言,在视觉直观性上均不如欧拉角。

轴角表示法通过旋转向量 ϕ\phi 实现了对三维旋转最精简的数学刻画。它是连接旋转矩阵(线性代数表达)与四元数(高效计算表达)的关键环节。虽然其在描述特定连续旋转时存在奇异性,且直观性较差,但其无冗余的特性使其在机器人运动学解算及计算机视觉优化算法中得到了广泛应用。

2 欧拉角表示法 (Euler Angles)

2.1 基本定义

欧拉角是一种简单且直观的旋转表示法,它直接将空间旋转分解为围绕三个坐标轴的连续旋转。通常表示为三个角度的集合,如 (θx,θy,θz)(\theta_x, \theta_y, \theta_z)

2.2 基本轴旋转矩阵

当旋转仅围绕单一坐标轴发生时,其旋转矩阵具有以下闭式表达(保证旋转轴方向的坐标分量不变):

  • 绕 Z 轴旋转 θ\thetaRz(θ)=[cosθsinθ0sinθcosθ0001]R_z(\theta) = \begin{bmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{bmatrix}
  • 绕 X 轴旋转 θ\thetaRx(θ)=[1000cosθsinθ0sinθcosθ]R_x(\theta) = \begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos\theta & -\sin\theta \\ 0 & \sin\theta & \cos\theta \end{bmatrix}
  • 绕 Y 轴旋转 θ\thetaRy(θ)=[cosθ0sinθ010sinθ0cosθ]R_y(\theta) = \begin{bmatrix} \cos\theta & 0 & \sin\theta \\ 0 & 1 & 0 \\ -\sin\theta & 0 & \cos\theta \end{bmatrix}

2.3 常见序列:Yaw-Pitch-Roll

在无人机及航空航天系统中,最常用的欧拉角定义是 Yaw-Pitch-Roll(偏航-俯仰-滚转)。该序列通常对应于绕 Z、旋转后的 Y、旋转后的 X 轴进行旋转。

2.4 优缺点与局限性

  • 直观性:欧拉角非常符合人类对空间运动的直觉描述,易于理解和设定。
  • 万向锁与奇异性:欧拉角存在著名的万向锁 (Gimbal Lock) 问题。例如,当俯仰角达到 ±90\pm 90^\circ 时,第一次旋转和第三次旋转将使用同一个轴,导致丢失一个自由度,进而产生奇异性问题。

例: 飞机笔直向上爬升(俯仰 90°)。这时想让机头向左偏(偏航)——实际上只会导致飞机绕自身轴线滚转,而不是真正的水平转向。你无法单独实现偏航或单独实现滚转,因为这两个运动已经“锁”在了一起。但这不是真的机械卡死,而是数学上表示姿态的参数失效——本来需要三个角度唯一确定姿态,在奇异点处有无穷多种角度组合对应同一个物理姿态,导致计算和控制出问题。

欧拉角通过分步旋转的方式为刚体运动提供了最感性的描述,是工程应用中人机交互的首选。然而,万向锁导致的数学奇异性使其在需要处理全姿态连续运动(如特技飞行或机器人关节控制)的底层数值计算中存在天然缺陷。因此,在复杂的姿态解算任务中,研究者通常会转向更稳健的四元数表示。

3 四元数表示法 (Quaternions)

3.1 前序知识

在深入四元数之前,理解复数在二维平面中如何描述旋转是理解其设计逻辑的关键源头。

  • 向量的复数表示:复数 a+bia+bi 可以唯一地表示复平面上的一个向量 (a,b)(a,b)
  • 乘法即旋转:单位复数的乘法在几何上对应于旋转操作。
    • 90度旋转示例:将向量 (a,b)(a,b) 乘以虚数单位 ii,得到 (a+bi)i=ai+bi2=b+ai(a+bi) \cdot i = ai + bi^2 = -b + ai,这在坐标系中相当于将原向量逆时针旋转了 90 度。
    • 通用旋转 (θ\theta):若要将复平面上的向量旋转 θ\theta 角,只需给它乘以 eiθ=cosθ+isinθe^{i\theta} = \cos\theta + i\sin\theta。这是一个单位长度的复数。
  • 结论:在二维情况下,旋转可以通过单位复数的乘法描述。

3.2 四元数的定义与代数性质

类似于复数在二维旋转中的应用,四元数是描述三维空间旋转的直接推广。

  • 代数定义:一个四元数 qq 由一个实部 ss 和三个虚部 v=(x,y,z)T\mathbf{v} = (x, y, z)^T 组成: q=w+xi+yj+zkq = w + xi + yj + zk
  • 向量表示法:为了简化表达,常记为 q=[s,v]Tq = [s, \mathbf{v}]^T,其中 s=wRs = w \in \mathbb{R}v=(x,y,z)TR3\mathbf{v} = (x, y, z)^T \in \mathbb{R}^3
  • 哈密顿算元规则:其虚部单位满足以下核心运算规则: {ij=k,ji=kjk=i,kj=iki=j,ik=ji2=1,j2=1,k2=1\begin{cases} ij = k, ji = -k \\ jk = i, kj = -i \\ ki = j, ik = -j \\ i^2 = -1, j^2 = -1, k^2 = -1 \end{cases}
  • 特殊分类
    • 虚四元数(纯虚四元数):当实部 s=0s = 0 时。
    • 实四元数:当虚部向量 v=0\mathbf{v} = 0 时。
  • 优势:四元数描述方式既紧凑(仅需 4 个参数),又彻底规避了欧拉角中的万向锁问题。

3.3 四元数的基本运算

给定两个四元数 qa=[sa,va]Tq_a = [s_a, \mathbf{v}_a]^Tqb=[sb,vb]Tq_b = [s_b, \mathbf{v}_b]^T,其基本运算定义如下:

  • 加减法qa±qb=[sa±sb,va±vb]Tq_a \pm q_b = [s_a \pm s_b, \mathbf{v}_a \pm \mathbf{v}_b]^T
  • 乘法:遵循虚部单位运算规则,结果为: qaqb=[sasbvaTvbsavb+sbva+va×vb]q_a q_b = \begin{bmatrix} s_a s_b - \mathbf{v}_a^T \mathbf{v}_b \\ s_a \mathbf{v}_b + s_b \mathbf{v}_a + \mathbf{v}_a \times \mathbf{v}_b \end{bmatrix}

    若是代数计算则qaqb=sasbvaTvb+savb+sbva+va×vbq_a q_b = s_a s_b - \mathbf{v}_a^T \mathbf{v}_b + s_a \mathbf{v}_b + s_b \mathbf{v}_a + \mathbf{v}_a \times \mathbf{v}_b

  • 模长与共轭
    • 模长 q=s2+v22\|q\| = \sqrt{s^2 + \|\mathbf{v}\|_2^2},满足 qaqb=qaqb\|q_a q_b\| = \|q_a\| \|q_b\|
    • 共轭 q=[s,v]Tq^* = [s, -\mathbf{v}]^T,且 qq=qq=[s2+vTv,0]T=q2qq^* = q^*q = [s^2 + \mathbf{v}^T \mathbf{v}, \mathbf{0}]^T = \|q\|^2
  • 逆运算q1=q/q2q^{-1} = q^* / \|q\|^2 对于单位四元数(模长为 1),其逆等于其共轭 q1=qq^{-1} = q^*。同时满足 (qaqb)1=qb1qa1(q_a q_b)^{-1} = q_b^{-1} q_a^{-1}

3.4 旋转的代数操作描述

在三维空间中利用四元数进行旋转需要执行以下步骤:

  1. 点向量参数化:将待旋转的三维点 P(x,y,z)P(x, y, z) 表示为一个虚四元数(实部为 0): p=[0,x,y,z]T\mathbf{p} = [0, x, y, z]^T
  2. 单位四元数构造:若要描述绕单位向量 n\mathbf{n} 逆时针旋转 θ\theta 角,对应的单位四元数为: q=[cosθ2,nTsinθ2]Tq = [\cos\frac{\theta}{2}, \mathbf{n}^T\sin\frac{\theta}{2}]^T
  3. 夹心乘法运算:旋转后的点 p\mathbf{p}' 通过下式得出: p=qpq1\mathbf{p}' = q\mathbf{p}q^{-1} 该运算的结果 p\mathbf{p}' 仍是一个虚四元数,其虚部即为旋转后点的三维坐标。

2、3的证明放在最后,先当已知结论

3.5 四元数乘法的矩阵化与转换推导

四元数乘法可以映射为 4×44 \times 4 的矩阵乘法。

  • 矩阵化符号:定义算子 qq^\odotqq^\oplusq=[svTvsI+v],q=[svTvsIv]q^\odot = \begin{bmatrix} s & -\mathbf{v}^T \\ \mathbf{v} & s\mathbf{I} + \mathbf{v}^\wedge \end{bmatrix}, \quad q^\oplus = \begin{bmatrix} s & -\mathbf{v}^T \\ \mathbf{v} & s\mathbf{I} - \mathbf{v}^\wedge \end{bmatrix} 由此满足 q1q2=q1q2=q2q1q_1 q_2 = q_1^\odot q_2 = q_2^\oplus q_1
  • 推导旋转矩阵:旋转变换可写为 p=qq1p\mathbf{p}' = q^\odot q^{-1 \oplus} \mathbf{p}。由于 p\mathbf{p} 是虚四元数,展开该矩阵的右下角部分即可得到从四元数到旋转矩阵 RR 的转换公式: q(q1)=[100R]q^\odot (q^{-1})^\oplus = \begin{bmatrix}1 & \mathbf{0}^\top \\\mathbf{0} & R\end{bmatrix}

R=vvT+s2I+2sv+(v)2R = \mathbf{v}\mathbf{v}^T + s^2 \mathbf{I} + 2s\mathbf{v}^\wedge + (\mathbf{v}^\wedge)^2

3.6 旋转表示之间的转换关系

根据四元数到旋转矩阵的变换公式,给定单位四元数 q=[s,v]Tq = [s, \mathbf{v}]^T,其对应的旋转矩阵 RR 为: R=vvT+s2I+2sv+(v)2R = \mathbf{v}\mathbf{v}^T + s^2 I + 2s\mathbf{v}^{\wedge} + (\mathbf{v}^{\wedge})^2

为了建立四元数与旋转角的关系,对上述矩阵 RR 两侧求迹: tr(R)=tr(vvT+s2I+2sv+(v)2)tr(R) = tr(\mathbf{v}\mathbf{v}^T + s^2 I + 2s\mathbf{v}^{\wedge} + (\mathbf{v}^{\wedge})^2)

具体计算过程如下:

  1. tr(vvT)tr(\mathbf{v}\mathbf{v}^T):向量外积的迹等于其内积,即 x2+y2+z2x^2 + y^2 + z^2
  2. tr(s2I)tr(s^2 I):三阶单位阵的迹为 3,故结果为 3s23s^2
  3. tr(2sv)tr(2s\mathbf{v}^{\wedge}):反对称矩阵的主对角线全为 0,故迹为 00
  4. tr((v)2)tr((\mathbf{v}^{\wedge})^2):经计算为 2(x2+y2+z2)-2(x^2 + y^2 + z^2)

将上述项合并: tr(R)=(x2+y2+z2)+3s2+02(x2+y2+z2)tr(R) = (x^2 + y^2 + z^2) + 3s^2 + 0 - 2(x^2 + y^2 + z^2) tr(R)=3s2(x2+y2+z2)tr(R) = 3s^2 - (x^2 + y^2 + z^2)

由于 qq单位四元数,满足 s2+x2+y2+z2=1s^2 + x^2 + y^2 + z^2 = 1,即 x2+y2+z2=1s2x^2 + y^2 + z^2 = 1 - s^2。 代入简化得: tr(R)=3s2(1s2)=4s21tr(R) = 3s^2 - (1 - s^2) = \mathbf{4s^2 - 1}

求解旋转角 θ\theta

已知旋转矩阵的迹与旋转角 θ\theta 的通用关系为: tr(R)=1+2cosθ    θ=arccostr(R)12tr(R) = 1 + 2\cos\theta \implies \theta = \arccos \frac{tr(R) - 1}{2}

将我们推导出的 tr(R)=4s21tr(R) = 4s^2 - 1 代入上式: θ=arccos(4s21)12=arccos(2s21)\theta = \arccos \frac{(4s^2 - 1) - 1}{2} = \arccos(2s^2 - 1)

利用三角恒等式 cosθ=2cos2θ21\cos\theta = 2\cos^2\frac{\theta}{2} - 1,且四元数定义中 s=cosθ2s = \cos\frac{\theta}{2}θ=2arccoss\mathbf{\theta = 2\arccos s}


求解旋转轴 nn

已知四元数的虚部 v\mathbf{v} 与旋转轴 n\mathbf{n} 的方向一致,为了得到单位旋转轴,需对虚部进行归一化:

  1. 已知四元数虚部定义为 v=nsinθ2\mathbf{v} = \mathbf{n} \sin\frac{\theta}{2}
  2. 因此,单位旋转轴为: nT=vT/sinθ2\mathbf{n}^T = \mathbf{v}^T / \sin\frac{\theta}{2}

总结:四元数转旋转向量公式

若已知单位四元数 q=[s,v]Tq = [s, \mathbf{v}]^T,则其对应的旋转向量 ϕ=θn\phi = \theta \mathbf{n} 为: {θ=2arccossn=v/sinθ2\begin{cases} \theta = 2\arccos s \\ \mathbf{n} = \mathbf{v} / \sin\frac{\theta}{2} \end{cases}

四元数通过构建四维代数空间,将二维复数的单位圆旋转逻辑升维。这种表述不仅在数学上通过夹心乘法保证了旋转的连续性和稳健性,其计算效率也优于冗余的 9 参数旋转矩阵(通过矩阵化算子推导可见其线性本质)。


补充部分(单位四元数构造和夹心乘法运算证明)

约定:

  • 四元数表示为 q=[s, v]q = [s,\ \mathbf{v}]^\top,其中 sRs\in\mathbb{R}vR3\mathbf{v}\in\mathbb{R}^3,且满足单位模长 s2+v2=1s^2 + \|\mathbf{v}\|^2 = 1
  • 待旋转的三维点用纯虚四元数 p=[0, r]\mathbf{p} = [0,\ \mathbf{r}]^\toprR3\mathbf{r}\in\mathbb{R}^3
  • 目标:找到 qq 的形式,使得 qpq1q\mathbf{p}q^{-1} 等价于绕某个单位轴 n\mathbf{n} 旋转 θ\theta 角。

1 从夹心乘法的期望结果反推

1.1 计算 qpq1q\mathbf{p}q^{-1}

已知 q1=[s, v]q^{-1}=[s,\ -\mathbf{v}]^\top(单位四元数逆等于共轭)先算 qpq\mathbf{p}qp=[s, v][0, r]=[vr, sr+v×r]q\mathbf{p} = [s,\ \mathbf{v}]\,[0,\ \mathbf{r}] = \big[ -\mathbf{v}\cdot\mathbf{r},\ s\mathbf{r} + \mathbf{v}\times\mathbf{r} \big]

a=vra = -\mathbf{v}\cdot\mathbf{r}w=sr+v×r\mathbf{w} = s\mathbf{r} + \mathbf{v}\times\mathbf{r},则 qp=[a, w]q\mathbf{p}=[a,\ \mathbf{w}]

再右乘 q1q^{-1}(qp)q1=[a, w][s, v]=[asw(v), a(v)+sw+w×(v)](q\mathbf{p})q^{-1} = [a,\ \mathbf{w}]\,[s,\ -\mathbf{v}] = \big[ a s - \mathbf{w}\cdot(-\mathbf{v}),\ a(-\mathbf{v}) + s\mathbf{w} + \mathbf{w}\times(-\mathbf{v}) \big] 即实部:as+wvas + \mathbf{w}\cdot\mathbf{v};虚部:av+sww×v-a\mathbf{v} + s\mathbf{w} - \mathbf{w}\times\mathbf{v}

计算 wv\mathbf{w}\cdot\mathbf{v}wv=(sr+v×r)v=s(rv)+(v×r)v=s(vr)+0\mathbf{w}\cdot\mathbf{v} = (s\mathbf{r} + \mathbf{v}\times\mathbf{r})\cdot\mathbf{v} = s(\mathbf{r}\cdot\mathbf{v}) + (\mathbf{v}\times\mathbf{r})\cdot\mathbf{v} = s(\mathbf{v}\cdot\mathbf{r}) + 0

因为 (v×r)v(\mathbf{v}\times\mathbf{r})\perp\mathbf{v}。而 a=vra = -\mathbf{v}\cdot\mathbf{r},所以 as=s(vr)as = -s(\mathbf{v}\cdot\mathbf{r})于是实部:

as+wv=s(vr)+s(vr)=0as + \mathbf{w}\cdot\mathbf{v} = -s(\mathbf{v}\cdot\mathbf{r}) + s(\mathbf{v}\cdot\mathbf{r}) = 0

故结果仍为纯虚四元数。

虚部: r=av+sww×v\mathbf{r}' = -a\mathbf{v} + s\mathbf{w} - \mathbf{w}\times\mathbf{v}

代入 a,wa,\mathbf{w}

  • av=(vr)v=(vr)v-a\mathbf{v} = -(-\mathbf{v}\cdot\mathbf{r})\,\mathbf{v} = (\mathbf{v}\cdot\mathbf{r})\,\mathbf{v}
  • sw=s(sr+v×r)=s2r+s(v×r)s\mathbf{w} = s(s\mathbf{r} + \mathbf{v}\times\mathbf{r}) = s^2\mathbf{r} + s(\mathbf{v}\times\mathbf{r})
  • 计算 w×v=(sr+v×r)×v=s(r×v)+(v×r)×v\mathbf{w}\times\mathbf{v} = (s\mathbf{r} + \mathbf{v}\times\mathbf{r})\times\mathbf{v} = s(\mathbf{r}\times\mathbf{v}) + (\mathbf{v}\times\mathbf{r})\times\mathbf{v} 利用 (v×r)×v=(vv)r(rv)v=v2r(vr)v(\mathbf{v}\times\mathbf{r})\times\mathbf{v} = (\mathbf{v}\cdot\mathbf{v})\mathbf{r} - (\mathbf{r}\cdot\mathbf{v})\mathbf{v} = \|\mathbf{v}\|^2\mathbf{r} - (\mathbf{v}\cdot\mathbf{r})\mathbf{v}r×v=(v×r)\mathbf{r}\times\mathbf{v} = -(\mathbf{v}\times\mathbf{r})所以 w×v=s((v×r))+v2r(vr)v=s(v×r)+v2r(vr)v\mathbf{w}\times\mathbf{v} = s\big(-(\mathbf{v}\times\mathbf{r})\big) + \|\mathbf{v}\|^2\mathbf{r} - (\mathbf{v}\cdot\mathbf{r})\mathbf{v}= -s(\mathbf{v}\times\mathbf{r}) + \|\mathbf{v}\|^2\mathbf{r} - (\mathbf{v}\cdot\mathbf{r})\mathbf{v} 于是 w×v=s(v×r)v2r+(vr)v-\mathbf{w}\times\mathbf{v} = s(\mathbf{v}\times\mathbf{r}) - \|\mathbf{v}\|^2\mathbf{r} + (\mathbf{v}\cdot\mathbf{r})\mathbf{v}

将各项相加: r=(vr)v+s2r+s(v×r)+s(v×r)v2r+(vr)v=(s2v2)r+2s(v×r)+2(vr)v.\begin{aligned}\mathbf{r}' &= (\mathbf{v}\cdot\mathbf{r})\mathbf{v} \\&\quad + s^2\mathbf{r} + s(\mathbf{v}\times\mathbf{r}) \\&\quad + s(\mathbf{v}\times\mathbf{r}) - \|\mathbf{v}\|^2\mathbf{r} + (\mathbf{v}\cdot\mathbf{r})\mathbf{v} \\&= (s^2 - \|\mathbf{v}\|^2)\mathbf{r} + 2s(\mathbf{v}\times\mathbf{r}) + 2(\mathbf{v}\cdot\mathbf{r})\mathbf{v}.\end{aligned}

1.2 与罗德里格斯公式对比

我们希望 r\mathbf{r}' 等于绕单位轴 n\mathbf{n} 旋转 θ\theta 后的结果: rrot=cosθr+sinθ(n×r)+(1cosθ)(nr)n.\mathbf{r}_{\text{rot}} = \cos\theta\,\mathbf{r} + \sin\theta\,(\mathbf{n}\times\mathbf{r}) + (1-\cos\theta)(\mathbf{n}\cdot\mathbf{r})\mathbf{n}. 比较系数,令 v=nsinθ2\mathbf{v} = \mathbf{n}\sin\frac{\theta}{2}(暂时假设 v\mathbf{v}n\mathbf{n} 同向,且 s=cosθ2s = \cos\frac{\theta}{2})则:

  • v=sinθ2\|\mathbf{v}\| = |\sin\frac{\theta}{2}|,取正,故 v2=sin2θ2\|\mathbf{v}\|^2 = \sin^2\frac{\theta}{2}
  • s2=cos2θ2s^2 = \cos^2\frac{\theta}{2} 于是 s2v2=cos2θ2sin2θ2=cosθs^2 - \|\mathbf{v}\|^2 = \cos^2\frac{\theta}{2} - \sin^2\frac{\theta}{2} = \cos\theta
  • 2s=2cosθ22s = 2\cos\frac{\theta}{2},而 2s(v×r)=2cosθ2((sinθ2n)×r)=(2sinθ2cosθ2)(n×r)=sinθ(n×r)2s(\mathbf{v}\times\mathbf{r}) = 2\cos\frac{\theta}{2}\big( (\sin\frac{\theta}{2}\mathbf{n})\times\mathbf{r} \big) = (2\sin\frac{\theta}{2}\cos\frac{\theta}{2})\,(\mathbf{n}\times\mathbf{r}) = \sin\theta\,(\mathbf{n}\times\mathbf{r})
  • 2(vr)v=2((sinθ2n)r)(sinθ2n)=2sin2θ2(nr)n=(1cosθ)(nr)n2(\mathbf{v}\cdot\mathbf{r})\mathbf{v} = 2\big((\sin\frac{\theta}{2}\mathbf{n})\cdot\mathbf{r}\big)(\sin\frac{\theta}{2}\mathbf{n}) = 2\sin^2\frac{\theta}{2}(\mathbf{n}\cdot\mathbf{r})\mathbf{n} = (1-\cos\theta)(\mathbf{n}\cdot\mathbf{r})\mathbf{n}

代入后正好得到罗德里格斯公式。因此,若令

s=cosθ2,v=nsinθ2s = \cos\frac{\theta}{2},\quad \mathbf{v} = \mathbf{n}\sin\frac{\theta}{2}

q=[cosθ2, nsinθ2]q = [\cos\frac{\theta}{2},\ \mathbf{n}\sin\frac{\theta}{2}]^\top 满足要求。且单位模长条件 s2+v2=cos2θ2+sin2θ2=1s^2+\|\mathbf{v}\|^2 = \cos^2\frac{\theta}{2}+\sin^2\frac{\theta}{2}=1 自然成立。

1.3 反解过程(不预设形式)

直接从系数比较出发:设 v\mathbf{v} 与某个单位向量 n\mathbf{n} 平行,即 v=tn\mathbf{v} = t\mathbf{n}tRt\in\mathbb{R}。则 v=t\|\mathbf{v}\| = |t|,且 vr=t(nr)\mathbf{v}\cdot\mathbf{r} = t(\mathbf{n}\cdot\mathbf{r})v×r=t(n×r)\mathbf{v}\times\mathbf{r} = t(\mathbf{n}\times\mathbf{r})。代入 r\mathbf{r}' 表达式:

r=(s2t2)r+2st(n×r)+2t2(nr)n.\mathbf{r}' = (s^2 - t^2)\mathbf{r} + 2s t(\mathbf{n}\times\mathbf{r}) + 2t^2(\mathbf{n}\cdot\mathbf{r})\mathbf{n}.

令其等于 cosθr+sinθ(n×r)+(1cosθ)(nr)n\cos\theta\,\mathbf{r} + \sin\theta\,(\mathbf{n}\times\mathbf{r}) + (1-\cos\theta)(\mathbf{n}\cdot\mathbf{r})\mathbf{n},得:

{s2t2=cosθ,2st=sinθ,2t2=1cosθ.\begin{cases} s^2 - t^2 = \cos\theta, \\ 2s t = \sin\theta, \\ 2t^2 = 1-\cos\theta. \end{cases}

由第三式得 t2=1cosθ2=sin2θ2t^2 = \frac{1-\cos\theta}{2} = \sin^2\frac{\theta}{2},取 t=sinθ2t = \sin\frac{\theta}{2}(符号决定转向,通常取正)。代入第二式得 2ssinθ2=sinθ=2sinθ2cosθ22s\sin\frac{\theta}{2} = \sin\theta = 2\sin\frac{\theta}{2}\cos\frac{\theta}{2},故 s=cosθ2s = \cos\frac{\theta}{2}。第一式自动满足。因此唯一确定:

s=cosθ2,v=nsinθ2.s = \cos\frac{\theta}{2},\quad \mathbf{v} = \mathbf{n}\sin\frac{\theta}{2}.

至此,单位四元数的半角构造被必然推导出来。