Math of Quaternion

整理四元数的定义、Hamilton 乘法规则、矩阵形式以及点乘和叉乘关系。

Math of Quaternion

四元数 是由爱尔兰数学家哈密顿提出定义的 超复数,其有一个 实数部 和 三个虚数部 组成,即 i,j,ki,j,k,它的提出本意为将 二维复平面 的复数拓展到 三维空间 中

q=w+xi+yj+zkq = w + x\mathbf{i} + y\mathbf{j}+ z\mathbf{k}

也可以记为

q=(w,x,y,z)q = (w,x,y,z)

其中,ww 被称为 标量 scalar,(x,y,z)(x,y,z) 称为 向量 vector

哈密顿的最大贡献是定义了 哈密顿计算规则,也就是

i2=j2=k2=ijk=−1\mathbf{i}^2 = \mathbf{j}^2 = \mathbf{k}^2 = \mathbf{i}\mathbf{j}\mathbf{k} = -1

四元数的四则运算规则

若有

q1=(w1,x1,y1,z1)=w1+x1i+y1j+z1kq2=(w2,x2,y2,z2)=w2+x2i+y2j+z2k\begin{align*} q_1 &= (w_1,x_1,y_1,z_1) = w_1 + x_1\mathbf{i} + y_1\mathbf{j} + z_1\mathbf{k} \\ q_2 &= (w_2,x_2,y_2,z_2) = w_2 + x_2\mathbf{i} + y_2\mathbf{j} + z_2\mathbf{k} \end{align*}

可以轻松定义 四元数加法

q1+q2=(w1+w2,x1+x2,y1+y2,z1+z2)=w1+w2+(x1+x2)i+(y1+y2)j+(z1+z2)k\begin{align*} q_1 + q_2 &= (w_1 + w_2, x_1 + x_2,y_1 + y_2, z_1 + z_2)\\ &= w_1 + w_2 + (x_1 + x_2)\mathbf{i} + (y_1+y_2)\mathbf{j} + (z_1+z_2)\mathbf{k} \end{align*}

定义 四元数乘法 则是重头戏

q1q2=(w1+x1i+y1j+z1k)(w2+x2i+y2j+z2k)=w1w2+w1x2i+w1y2j+w1z2k+=x1w2i+x1x2i2+x1y2ij+x1z2ik+=y1w2j+y1x2ji+y1y2j2+y1z2jk+=z1w2k+z1x2ki+z1y2kj+z1z2k2\begin{align*} q_1q_2 &= (w_1 + x_1\mathbf{i} + y_1\mathbf{j} + z_1\mathbf{k})(w_2 + x_2\mathbf{i} + y_2\mathbf{j} + z_2\mathbf{k}) \\ &= w_1w_2 + w_1x_2\mathbf{i} + w_1y_2\mathbf{j} + w_1z_2\mathbf{k} + \\ &\phantom{=}x_1w_2\mathbf{i} + x_1x_2\mathbf{i}^2 + x_1y_2\mathbf{i}\mathbf{j} + x_1z_2\mathbf{i}\mathbf{k} + \\ &\phantom{=}y_1w_2\mathbf{j} + y_1x_2\mathbf{j}\mathbf{i} + y_1y_2\mathbf{j}^2 + y_1z_2\mathbf{j}\mathbf{k} + \\ &\phantom{=}z_1w_2\mathbf{k} + z_1x_2\mathbf{k}\mathbf{i} + z_1y_2\mathbf{k}\mathbf{j} + z_1z_2\mathbf{k}^2 \end{align*}

我们这里只是将括号展开,注意 虚部 的相乘顺序不能改变,因为四元数乘法不符合交换律

我们展开以后得到了很多 虚部相乘 的项,我们可以依托 哈密顿计算规则 来进行一些简单的分析

ijk=−1两边同时乘 i  ⟹  i2jk=−i−jk=−ijk=i\begin{align*} \mathbf{i}\mathbf{j}\mathbf{k} &= -1 \\ \text{两边同时乘 } \mathbf{i} \implies \mathbf{i}^2\mathbf{j}\mathbf{k} &= -\mathbf{i} \\ -\mathbf{j}\mathbf{k} &= -\mathbf{i} \\ \mathbf{j}\mathbf{k} &= \mathbf{i} \end{align*}

同理可以分析得到其他虚部相乘的结果,最终形成一个运算表 (相乘顺序为行乘列)

虚部i\mathbf{i}j\mathbf{j}k\mathbf{k}
i\mathbf{i}−1-1k\mathbf{k}-j\mathbf{j}
j\mathbf{j}-k\mathbf{k}−1-1i\mathbf{i}
k\mathbf{k}j\mathbf{j}-i\mathbf{i}−1-1

可以注意到,虚部 的相乘 不符合交换律,交换相乘顺序会得到 相反数

有了上面的乘法表以后,我们可以继续化简之前的四元数乘法

q1q2=(w1+x1i+y1j+z1k)(w2+x2i+y2j+z2k)=w1w2+w1x2i+w1y2j+w1z2k+=x1w2i−x1x2+x1y2k−x1z2j+=y1w2j−y1x2k−y1y2+y1z2i+=z1w2k+z1x2j−z1y2i−z1z2=w1w2−x1x2−y1y2−z1z2+=(w1x2+x1w2+y1z2−z1y2)i+=(w1y2−x1z2+y1w2+z1x2)j+=(w1z2+x1y2−y1x2+z1w2)k\begin{align*} q_1q_2 &= (w_1 + x_1\mathbf{i} + y_1\mathbf{j} + z_1\mathbf{k})(w_2 + x_2\mathbf{i} + y_2\mathbf{j} + z_2\mathbf{k}) \\ &= w_1w_2 + w_1x_2\mathbf{i} + w_1y_2\mathbf{j} + w_1z_2\mathbf{k} + \\ &\phantom{=}x_1w_2\mathbf{i} - x_1x_2 + x_1y_2\mathbf{k} - x_1z_2\mathbf{j} + \\ &\phantom{=}y_1w_2\mathbf{j} - y_1x_2\mathbf{k} - y_1y_2 + y_1z_2\mathbf{i} + \\ &\phantom{=}z_1w_2\mathbf{k} + z_1x_2\mathbf{j} - z_1y_2\mathbf{i} - z_1z_2 \\ &= w_1w_2 - x_1x_2 - y_1y_2 - z_1z_2 + \\ &\phantom{=} (w_1x_2 + x_1w_2 + y_1z_2 - z_1y_2)\mathbf{i} + \\ &\phantom{=} (w_1y_2 - x_1z_2 + y_1w_2 + z_1x_2)\mathbf{j} + \\ &\phantom{=} (w_1z_2 + x_1y_2 - y_1x_2 + z_1w_2)\mathbf{k} \end{align*}

显然,四元数乘法不符合交换律

q1q2≠q2q1q_1q_2 \neq q_2q_1

但是 结合律 依然有效

(q1q2)q3=q1(q2q3)(q_1q_2)q_3 = q_1(q_2q_3)

四元数乘法的矩阵形式

可以发现,四元数的乘法可以由矩阵乘法来表示

q1q2=[w1−x1−y1−z1x1w1−z1y1y1z1w1−x1z1−y1x1w1][w2x2y2z2]=[w1w2−x1x2−y1y2−z1z2w1x2+x1w2+y1z2−z1y2w1y2−x1z2+y1w2+z1x2w1z2+x1y2−y1x2+z1w2]q_1q_2 = \begin{bmatrix} w_1 & -x_1 & -y_1 & -z_1 \\ x_1 & w_1 & -z_1 & y_1 \\ y_1 & z_1 & w_1 & -x_1 \\ z_1 & -y_1 & x_1 & w_1 \end{bmatrix} \begin{bmatrix} w_2 \\ x_2 \\ y_2 \\ z_2 \end{bmatrix} = \begin{bmatrix} w_1w_2 - x_1x_2 - y_1y_2 - z_1z_2 \\ w_1x_2 + x_1w_2 + y_1z_2 - z_1y_2 \\ w_1y_2 - x_1z_2 + y_1w_2 + z_1x_2 \\ w_1z_2 + x_1y_2 - y_1x_2 + z_1w_2 \end{bmatrix}

也就是说将 q1q_1 写为矩阵形式了

q1=(w1,x1,y1,z1)=[w1−x1−y1−z1x1w1−z1y1y1z1w1−x1z1−y1x1w1]q_1 = (w_1,x_1,y_1,z_1) = \begin{bmatrix} w_1 & -x_1 & -y_1 & -z_1 \\ x_1 & w_1 & -z_1 & y_1 \\ y_1 & z_1 & w_1 & -x_1 \\ z_1 & -y_1 & x_1 & w_1 \end{bmatrix}

也就是说,任意四元数都可以由此写为矩阵形式,以下是一些常见四元数的 矩阵形式

1=(1,0,0,0)=[1000010000100001]i=(0,1,0,0)=[0−1001000000−10010]j=(0,0,1,0)=[00−10000110000−100]k=(0,0,0,1)=[000−100−1001001000]\begin{align*} 1 = (1,0,0,0) = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} & \quad \quad i = (0,1,0,0) = \begin{bmatrix} 0 & -1 & 0 & 0 \\ 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & -1 \\ 0 & 0 & 1 & 0 \end{bmatrix} \\ \\ j = (0,0,1,0) = \begin{bmatrix} 0 & 0 & -1 & 0 \\ 0 & 0 & 0 & 1 \\ 1 & 0 & 0 & 0 \\ 0 & -1 & 0 & 0 \end{bmatrix} & \quad \quad k = (0,0,0,1) = \begin{bmatrix} 0 & 0 & 0 & -1 \\ 0 & 0 & -1 & 0 \\ 0 & 1 & 0 & 0 \\ 1 & 0 & 0 & 0 \end{bmatrix} \end{align*}

我们可以借助 虚数单位 的 四元数矩阵形式 来验证 哈密顿计算规则,例如

i2=[0−1001000000−10010][0−1001000000−10010]=[−10000−10000−10000−1]=−1ij=[0−1001000000−10010][00−10000110000−100]=[000−100−1001001000]=k\begin{align*} i^2 &= \begin{bmatrix} 0 & -1 & 0 & 0 \\ 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & -1 \\ 0 & 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} 0 & -1 & 0 & 0 \\ 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & -1 \\ 0 & 0 & 1 & 0 \end{bmatrix} = \begin{bmatrix} -1 & 0 & 0 & 0 \\ 0 & -1 & 0 & 0 \\ 0 & 0 & -1 & 0 \\ 0 & 0 & 0 & -1 \end{bmatrix} = -1 \\ \\ ij &= \begin{bmatrix} 0 & -1 & 0 & 0 \\ 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & -1 \\ 0 & 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} 0 & 0 & -1 & 0 \\ 0 & 0 & 0 & 1 \\ 1 & 0 & 0 & 0 \\ 0 & -1 & 0 & 0 \end{bmatrix} = \begin{bmatrix} 0 & 0 & 0 & -1 \\ 0 & 0 & -1 & 0 \\ 0 & 1 & 0 & 0 \\ 1 & 0 & 0 & 0 \end{bmatrix} = k \end{align*}

同理也可验证其他规则

从四元数乘法导出点乘和叉乘

我们已经知道四元数乘法是

q1q2=(w1,x1,y1,z1)(w2,x1,y1,z1)=[w1w2−x1x2−y1y2−z1z2w1x2+x1w2+y1z2−z1y2w1y2−x1z2+y1w2+z1x2w1z2+x1y2−y1x2+z1w2]q_1q_2 = (w_1,x_1,y_1,z_1)(w_2,x_1,y_1,z_1) = \begin{bmatrix} w_1w_2 - x_1x_2 - y_1y_2 - z_1z_2 \\ w_1x_2 + x_1w_2 + y_1z_2 - z_1y_2 \\ w_1y_2 - x_1z_2 + y_1w_2 + z_1x_2 \\ w_1z_2 + x_1y_2 - y_1x_2 + z_1w_2 \end{bmatrix}

令 a⃗\vec{a} 和 b⃗\vec{b} 分别等于 q1q_1 和 q2q_2 的 向量部分

a⃗=(x1,y1,z1)b⃗=(x2,y2,z2)  ⟹  q1=(w1,a⃗)q2=(w2,b⃗)\begin{align*} \vec{a} &= (x_1,y_1,z_1) \\ \vec{b} &= (x_2,y_2,z_2) \end{align*} \implies \begin{align*} q_1 &= (w_1,\vec{a}) \\ q_2 &= (w_2,\vec{b}) \end{align*}

那么,我们可以将四元数写为 标量 和 向量 结合的形式

q1q2=(w1,x1,y1,z1)(w2,x2,y2,z2)=(w1,a⃗)(w2,b⃗)q_1q_2 = (w_1,x_1,y_1,z_1)(w_2,x_2,y_2,z_2) = (w_1,\vec{a})(w_2,\vec{b})

已知

q1q2=[w1w2−x1x2−y1y2−z1z2w1x2+x1w2+y1z2−z1y2w1y2−x1z2+y1w2+z1x2w1z2+x1y2−y1x2+z1w2]q_1q_2 = \begin{bmatrix} w_1w_2 - x_1x_2 - y_1y_2 - z_1z_2 \\ w_1x_2 + x_1w_2 + y_1z_2 - z_1y_2 \\ w_1y_2 - x_1z_2 + y_1w_2 + z_1x_2 \\ w_1z_2 + x_1y_2 - y_1x_2 + z_1w_2 \end{bmatrix}

可以对该式进行重新整理

[w1w2−(x1x2+y1y2+z1z2)x1w2+w1x2+y1z2−z1y2y1w2+w1y2+z1x2−x1z2z1w2+w1z2+x1y2−y1x2]\begin{bmatrix} w_1w_2 - (x_1x_2 + y_1y_2 + z_1z_2) \\ \textcolor{red}{x_1w_2} + \textcolor{#317dc8}{w_1x_2} + \textcolor{green}{y_1z_2} - \textcolor{green}{z_1y_2} \\ \textcolor{red}{y_1w_2} + \textcolor{#317dc8}{w_1y_2} + \textcolor{green}{z_1x_2} - \textcolor{green}{x_1z_2} \\ \textcolor{red}{z_1w_2} + \textcolor{#317dc8}{w_1z_2} + \textcolor{green}{x_1y_2} - \textcolor{green}{y_1x_2} \end{bmatrix}
  • 标量部分
    相乘得到的新四元数 q1q2q_1q_2 的 标量部分 是

    w1w2−(x1x2+y1y2+z1z2)w_1w_2 - (x_1x_2 + y_1y_2 + z_1z_2)

    注意到,其中 (x1x2+y1y2+z1z2)(x_1x_2 + y_1y_2 + z_1z_2) 等于 q1q_1 和 q2q_2 向量部分 a⃗\vec{a} 和 b⃗\vec{b} 的 各分量相乘,我们定义这种向量各分量相乘的运算为 向量点乘 (向量 内积 inner product),记作

    a⃗⋅b⃗=x1x2+y1y2+z1z2\vec{a} \cdot \vec{b} = x_1x_2 + y_1y_2 + z_1z_2

    所以新四元数 q1q2q_1q_2 的 标量部分 可以写为

    w1w2−(x1x2+y1y2+z1z2)=w1w2−a⃗⋅b⃗w_1w_2 - (x_1x_2 + y_1y_2 + z_1z_2) = w_1w_2 - \vec{a} \cdot \vec{b}
  • 向量部分
    接着观察 向量部分

    [x1w2+w1x2+y1z2−z1y2y1w2+w1y2+z1x2−x1z2z1w2+w1z2+x1y2−y1x2]\begin{bmatrix} \textcolor{red}{x_1w_2} + \textcolor{#317dc8}{w_1x_2} + \textcolor{green}{y_1z_2} - \textcolor{green}{z_1y_2} \\ \textcolor{red}{y_1w_2} + \textcolor{#317dc8}{w_1y_2} + \textcolor{green}{z_1x_2} - \textcolor{green}{x_1z_2} \\ \textcolor{red}{z_1w_2} + \textcolor{#317dc8}{w_1z_2} + \textcolor{green}{x_1y_2} - \textcolor{green}{y_1x_2} \end{bmatrix}

    很容易看出,红色部分 和 蓝色部分 可以写成 标量 和 向量 相乘形式

    w2a⃗+w1b⃗w_2\vec{a} + w_1\vec{b}

    然后,我们将剩余的 绿色部分 的计算定义为 向量叉乘 cross product,记为

    a⃗×b⃗\vec{a} \times \vec{b}

    所以新四元数 q1q2q_1q_2 的 向量部分 可以写为

    w2a⃗+w1b⃗+a⃗×b⃗w_2\vec{a} + w_1\vec{b} + \vec{a} \times \vec{b}

最终,我们得到 四元数相乘的向量计算表示法 为

q1q2=(w1w2−a⃗⋅b⃗,w2a⃗+w1b⃗+a⃗×b⃗)aq1=(w1,a⃗)q2=(w2,b⃗)  a⃗=(x1,y1,z1)b⃗=(x2,y2,z2)  a⃗⋅b⃗=x1x2+y1y2+z1z2a⃗×b⃗=[y1z2−z1y2z1x2−x1z2x1y2−y1x2]q_1q_2 = (w_1w_2 - \vec{a} \cdot \vec{b}, \quad w_2\vec{a} + w_1\vec{b} + \vec{a} \times \vec{b}) \\ \phantom{a} \\ \begin{align*} q_1 &= (w_1,\vec{a}) \\ q_2 &= (w_2,\vec{b}) \end{align*} \quad \ \ \begin{align*} \vec{a} &= (x_1,y_1,z_1) \\ \vec{b} &= (x_2,y_2,z_2) \end{align*} \quad \ \ \begin{align*} \vec{a}\cdot\vec{b} &= x_1x_2 + y_1y_2 + z_1z_2 \\ \vec{a} \times \vec{b} &= \begin{bmatrix} y_1z_2 - z_1y_2 \\ z_1x_2 - x_1z_2 \\ x_1y_2 - y_1x_2 \end{bmatrix} \end{align*}
  • 性质1:叉乘所得向量与原向量均垂直
    容易得出,a⃗×b⃗\vec{a} \times \vec{b} 所得到的新向量与 a⃗\vec{a} 和 b⃗\vec{b} 均为 正交 关系,即 a⃗⋅(a⃗×b⃗)=b⃗⋅(a⃗×b⃗)=0⃗\vec{a}\cdot(\vec{a} \times \vec{b}) = \vec{b}\cdot(\vec{a} \times \vec{b}) = \vec{0}
  • 性质2:向量叉乘不满足交换律 a⃗×b⃗≠b⃗×a⃗\vec{a} \times \vec{b} \neq \vec{b} \times \vec{a} 易证 a⃗×b⃗=−(b⃗×a⃗)=−b⃗×a⃗\vec{a} \times \vec{b} = -(\vec{b} \times \vec{a}) = -\vec{b} \times \vec{a} 即 交换叉乘顺序,所得向量大小相同,方向相反 (反交换的性质)

交换子 Commutator

根据 四元数相乘的向量计算表示法 以及 性质2,我们知道,若有四元数

{v1=(0,v⃗1)v2=(0,v⃗2)\begin{cases} v_1 &= (0,\vec{v}_1) \\ v_2 &= (0,\vec{v}_2) \end{cases}

则有

{v1v2=(−v⃗1⋅v⃗2,  v⃗1×v⃗2)v2v1=(−v⃗1⋅v⃗2,  v⃗2×v⃗1)=(−v⃗1⋅v⃗2,  −v⃗1×v⃗2)\begin{cases} v_1v_2 &= (-\vec{v}_1 \cdot \vec{v}_2, \ \ \vec{v}_1 \times \vec{v}_2) \\ v_2v_1 &= (-\vec{v}_1 \cdot \vec{v}_2, \ \ \vec{v}_2 \times \vec{v}_1) = (-\vec{v}_1 \cdot \vec{v}_2, \ \ -\vec{v}_1 \times \vec{v}_2) \end{cases}

将它们两个 相加 得到:

v1v2+v2v1=(−v⃗1⋅v⃗2,  v⃗1×v⃗2)+(−v⃗1⋅v⃗2,  −v⃗1×v⃗2)=(−v⃗1⋅v⃗2−v⃗1⋅v⃗2,  v⃗1×v⃗2−v⃗1×v⃗2)=(−2v⃗1⋅v⃗2,  0⃗)=−2v⃗1⋅v⃗2将  0 向量部分省略v1v2+v2v1=−2v⃗1⋅v⃗2  ⟹  v⃗1⋅v⃗2=−12(v1v2+v2v1)\begin{align*} v_1v_2 + v_2v_1 &= (-\vec{v}_1 \cdot \vec{v}_2, \ \ \vec{v}_1 \times \vec{v}_2) + (-\vec{v}_1 \cdot \vec{v}_2, \ \ -\vec{v}_1 \times \vec{v}_2) \\ &= (-\vec{v}_1 \cdot \vec{v}_2 - \vec{v}_1 \cdot \vec{v}_2, \ \ \vec{v}_1 \times \vec{v}_2 -\vec{v}_1 \times \vec{v}_2) \\ &= (-2\vec{v}_1 \cdot \vec{v}_2, \ \ \vec{0}) \\ &= -2\vec{v}_1 \cdot \vec{v}_2 \quad \text{将 \ 0 向量部分省略} \\ \\ v_1v_2 + v_2v_1 &= -2\vec{v}_1 \cdot \vec{v}_2 \implies \vec{v}_1 \cdot \vec{v}_2 = -\frac{1}{2}(v_1v_2 + v_2v_1) \end{align*}
  • 注意区分 箭头,带箭头的是 向量,不带箭头的是 四元数

将他们两个 相减 得到:

v1v2−v2v1=(−v⃗1⋅v⃗2,  v⃗1×v⃗2)−(−v⃗1⋅v⃗2,  −v⃗1×v⃗2)=(−v⃗1⋅v⃗2+v⃗1⋅v⃗2,  v⃗1×v⃗2+v⃗1×v⃗2)=(0,  2v⃗1×v⃗2)将  0 标量部分省略=2v⃗1×v⃗2v1v2−v2v1=2v⃗1×v⃗2  ⟹  v⃗1×v⃗2=12(v1v2−v2v1)\begin{align*} v_1v_2 - v_2v_1 &= (-\vec{v}_1 \cdot \vec{v}_2, \ \ \vec{v}_1 \times \vec{v}_2) - (-\vec{v}_1 \cdot \vec{v}_2, \ \ -\vec{v}_1 \times \vec{v}_2) \\ &= (-\vec{v}_1 \cdot \vec{v}_2 + \vec{v}_1 \cdot \vec{v}_2, \ \ \vec{v}_1 \times \vec{v}_2 + \vec{v}_1 \times \vec{v}_2) \\ &= (0,\ \ 2\vec{v}_1 \times \vec{v}_2) \quad \text{将 \ 0 标量部分省略} \\ &= 2\vec{v}_1 \times \vec{v}_2 \\ \\ v_1v_2 - v_2v_1 &= 2\vec{v}_1 \times \vec{v}_2 \implies \vec{v}_1 \times \vec{v}_2 = \frac{1}{2}(v_1v_2 - v_2v_1) \end{align*}
  • 注意区分 箭头,带箭头的是 向量,不带箭头的是 四元数

我们将形如 ab−baab-ba 这样的计算形式称为 交换子 Commutator,记作 [a,b][a,b],所以 v1v2−v2v1v_1v_2 - v_2v_1 可以写作 [v1,v2][v_1,v_2],那么上面 相减 的结果也可以写为

v⃗1×v⃗2=12(v1v2−v2v1)=12[v1,v2]\begin{align*} \vec{v}_1 \times \vec{v}_2 &= \frac{1}{2}(v_1v_2 - v_2v_1) \\ &= \frac{1}{2}[v_1,v_2] \end{align*}

或者也可以等价的认为,四元数 v1v_1 和 v2v_2 的 交换子 Commutator 是他们各自 向量部分叉乘的 2 倍

[v1,v2]=2v⃗1×v⃗2[v_1,v_2] = 2\vec{v}_1 \times \vec{v}_2
  • 注意 四元数 v1v_1 和 v2v_2 并非任意四元数,而是 标量部分为零 的 四元数

可以观察到有意思的是,对于只在三维中有定义的三维向量叉乘,实际上来源于四维的四元数