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=ijk=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+=x1w2ix1x2+x1y2kx1z2j+=y1w2jy1x2ky1y2+y1z2i+=z1w2k+z1x2jz1y2iz1z2=w1w2x1x2y1y2z1z2+=(w1x2+x1w2+y1z2z1y2)i+=(w1y2x1z2+y1w2+z1x2)j+=(w1z2+x1y2y1x2+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*}

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

q1q2q2q1q_1q_2 \neq q_2q_1

但是 结合律 依然有效

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

四元数乘法的矩阵形式

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

q1q2=[w1x1y1z1x1w1z1y1y1z1w1x1z1y1x1w1][w2x2y2z2]=[w1w2x1x2y1y2z1z2w1x2+x1w2+y1z2z1y2w1y2x1z2+y1w2+z1x2w1z2+x1y2y1x2+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)=[w1x1y1z1x1w1z1y1y1z1w1x1z1y1x1w1]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)=[0100100000010010]j=(0,0,1,0)=[0010000110000100]k=(0,0,0,1)=[0001001001001000]\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=[0100100000010010][0100100000010010]=[1000010000100001]=1ij=[0100100000010010][0010000110000100]=[0001001001001000]=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)=[w1w2x1x2y1y2z1z2w1x2+x1w2+y1z2z1y2w1y2x1z2+y1w2+z1x2w1z2+x1y2y1x2+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_1q2q_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=[w1w2x1x2y1y2z1z2w1x2+x1w2+y1z2z1y2w1y2x1z2+y1w2+z1x2w1z2+x1y2y1x2+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+y1z2z1y2y1w2+w1y2+z1x2x1z2z1w2+w1z2+x1y2y1x2]\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_1q2q_2 向量部分 a\vec{a}b\vec{b}各分量相乘,我们定义这种向量各分量相乘的运算为 向量点乘 (向量 内积 inner product),记作

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

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

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

    [x1w2+w1x2+y1z2z1y2y1w2+w1y2+z1x2x1z2z1w2+w1z2+x1y2y1x2]\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+w1bw_2\vec{a} + w_1\vec{b}

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

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

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

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

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

q1q2=(w1w2ab,w2a+w1b+a×b)aq1=(w1,a)q2=(w2,b)  a=(x1,y1,z1)b=(x2,y2,z2)  ab=x1x2+y1y2+z1z2a×b=[y1z2z1y2z1x2x1z2x1y2y1x2]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×bb×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,v1)v2=(0,v2)\begin{cases} v_1 &= (0,\vec{v}_1) \\ v_2 &= (0,\vec{v}_2) \end{cases}

则有

{v1v2=(v1v2,  v1×v2)v2v1=(v1v2,  v2×v1)=(v1v2,  v1×v2)\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=(v1v2,  v1×v2)+(v1v2,  v1×v2)=(v1v2v1v2,  v1×v2v1×v2)=(2v1v2,  0)=2v1v2将  0 向量部分省略v1v2+v2v1=2v1v2    v1v2=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*}
  • 注意区分 箭头,带箭头的是 向量,不带箭头的是 四元数

将他们两个 相减 得到:

v1v2v2v1=(v1v2,  v1×v2)(v1v2,  v1×v2)=(v1v2+v1v2,  v1×v2+v1×v2)=(0,  2v1×v2)将  0 标量部分省略=2v1×v2v1v2v2v1=2v1×v2    v1×v2=12(v1v2v2v1)\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*}
  • 注意区分 箭头,带箭头的是 向量,不带箭头的是 四元数

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

v1×v2=12(v1v2v2v1)=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_1v2v_2交换子 Commutator 是他们各自 向量部分叉乘的 2 倍

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

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