License: CC BY-NC-SA 4.0
目录复数
在了解四元数之前,要先了解复数对空间干了什么。
设有复数 \(z_1 = a+b \mathrm{i}, z_2 = c+d \mathrm{i}\),则
\[z_1 z_2 = ac-bd+(bc+ad)\mathrm{i} \]如果将 \(z_1\) 看作变换, \(z_2\) 看作数,则用线性代数的语言表达就是
\[z_1z_2 = \begin{bmatrix} a & -b \\ b & a \end{bmatrix} \begin{bmatrix} c \\ d \end{bmatrix} \]我们可以发现,复数相乘这个运算,其实是与 \(\begin{bmatrix} a & -b \\ b & a \end{bmatrix}\) 这个矩阵所代表的变换是等价的.
现在来观察一个单位复数 \(z_1\) 对坐标系的基底干了什么。
将 \(z_1\) 写成矩阵形式:\(z_1 = \cos(\theta) + \mathrm{i} \sin(\theta) = \begin{bmatrix} \cos(\theta) & -\sin(\theta) \\ \sin(\theta) & \cos(\theta) \end{bmatrix}\).
因此它将 \((1,0)\) 的基底旋转到了 \((\cos \theta, \sin \theta)\),也即逆时针旋转了 \(\theta\).
极坐标表示
\(\exp(\mathrm{i}\theta) = \cos \theta + \mathrm{i} \sin \theta\).
因此对于任意复数 \(z\),我们都能用 \(re^{\mathrm{i}\theta}\) 表示。
不难发现 \(z_1 z_2 = r_1r_2 e^{\mathrm{i}(\theta_1+\theta_2)}\),用人话说就是复数相乘之后模长相乘,角度相加。
三维旋转
假设三维空间中有一个点 \(\mathbf{u}=(x,y,z)\),绕一个经过原点的轴 \(\mathbf{v}=(r,s,t)\) 逆时针旋转 \(\theta\). 假定 \(\|\mathbf v\|=1\).
首先可以将 \(\mathbf{u}\) 分解为平行于 \(\mathbf{v}\) 的分量和垂直于 \(\mathbf{v}\) 的分量。平行的分量转了等于没转,下面考虑 \(\mathbf{u}\) 与 \(\mathbf{v}\) 垂直,且 \(\mathbf u \ne \mathbf 0\) 的情况。
既然是垂直,就回到了平面的情况。但平面需要两个向量来确定,因此我们可以找另一个垂直于 \(\mathbf v\) 的向量:\(\mathbf{w} = \mathbf{v} \times \mathbf{u}\). 不难发现 \(\|\mathbf{w}\| = \|\mathbf{u}\|\),且 \(\mathbf{w}\) 就是 \(\mathbf{u}\) 绕 \(\mathbf{v}\) 逆时针旋转 \(\dfrac{\pi}{2}\) 得到的向量。
现在问题变成了:在平面里,给定 \(\mathbf{z_1}\) 和它逆时针旋转 \(\dfrac{\pi}{2}\) 后的向量 \(\mathbf{z_2}\),求 \(\mathbf{z_1}\) 逆时针旋转 \(\theta\) 后得到的向量。
相信你会做,答案是 \(\cos(\theta) \mathbf{z_1} + \sin(\theta) \mathbf{z_2}\). 将这个结论应用到上面即可。
于是,我们得到了三维旋转公式:
\[\mathbf{u'}=\cos(\theta) \mathbf{u} + (1-\cos(\theta)) (\mathbf{u} \cdot \mathbf{v}) \mathbf{v} + \sin(\theta) (\mathbf{v} \times \mathbf{u}) \]其中 \(\mathbf{u'}\) 是旋转后的 \(\mathbf{u}\), \(\mathbf{u}\) 是任意向量,\(\mathbf{v}\) 是表示旋转轴的单位向量。
四元数
形如 \(q=a+b \mathrm{i}+ c \mathrm{j} + d \mathrm{k}\),其中 \(a,b,c,d \in \mathbb R\).
全体四元数构成的集合为 \(\mathbb H\).
注意,四元数乘法不符合交换律。
Grassmann 积
如果把四元数的实部单拿出来,就可以写成一个实数和一个三维向量的有序对。
设 \(q_1, q_2 \in \mathbb{H}\),\(q_1=(a,b,c,d)=(a, \mathbf{v}), q_2=(e,f,g,h)=(e,\mathbf{u})\)(其中 \(\mathbf{v}=\begin{bmatrix} b \\ c \\ d \end{bmatrix}, \mathbf{u}=\begin{bmatrix} f \\ g \\ h \end{bmatrix}\)).
则有
\[q_1 q_2 = (ae-\mathbf{v} \cdot \mathbf{u}, a \mathbf{u} + e \mathbf{v} + \mathbf{v} \times \mathbf{u}) \]读者自证不难(
纯四元数
实部为 \(0\) 的四元数。
一个性质:设 \(q_1 = (0, \mathbf{v}), q_2 = (0, \mathbf{u})\)
则有
\[\begin{aligned} q_1 q_2 &= (0- \mathbf{v} \cdot \mathbf{u}, 0 + \mathbf{v} \times \mathbf{u}) \\ & = (-\mathbf{v} \cdot \mathbf{u}, \mathbf{v} \times \mathbf{u}) \end{aligned} \]共轭
三个虚部全部取相反数。四元数 \(q\) 的共轭记作 \(\bar q\) 或 \(q^*\).
和虚数类似,\(q \bar{q}= \|q\|^2\). 证明可以大力展开.
逆
由于 \(q \bar{q} = \|q\|^2\),因此对 \(q \ne 0\),它的逆是 \(\dfrac{1}{\|q\|^2}\bar{q}\).
三维旋转,但是四元数
回忆在描述二维旋转的时候,我们对空间做了什么:用复数来描述二维空间里的点,然后用复数乘法来进行旋转。
现在对于四元数,能否拿来主义呢?
第一步是描述三维空间里的点。
对于一个三维空间的点,显然它只能填满四元数的三个维度。剩下的一个维度怎么办?那就空着吧。\(i,j,k\) 三个维度一看就有大用,等式 \(\mathrm{i}^2 = \mathrm{j}^2 = \mathrm{k}^2 = \mathrm{i} \mathrm{j} \mathrm{k} = -1\) 告诉我们这三个维度有高度的对称性,那就只剩下实数维度了。
下面,用一个纯四元数 \(v\) 与三维向量 \(\mathbf{v}\) 相对应: \(v = (0, \mathbf{v})\).
现在考虑上文提到的三维旋转问题:将点 \(u\) 绕点 \(v\) 和原点形成的直线逆时针旋转 \(\theta\),求旋转后 \(u\) 的位置 \(u'\).
还是假设 \(u\) 垂直于 \(v\)。
回顾向量乘法的结论,旋转后的向量应该为 \(\cos(\theta) \mathbf{u} + \sin(\theta) \mathbf{v} \times \mathbf{u}\).
观察纯四元数的乘积:\(q_1 q_2 = (-\mathbf{v} \cdot \mathbf{u}, \mathbf{v} \times \mathbf{u})\)
尝试直接将 \(u\) 与 \(v\) 相乘:\(vu = (-\mathbf{v} \cdot \mathbf{u}, \mathbf{v} \times \mathbf{u}) = (0, \mathbf{v} \times \mathbf{u})\),其中后一步是因为 \(\mathbf{u}\) 与 \(\mathbf{v}\) 垂直。
还差一个 \(\sin(\theta)\) 的分量,尝试直接乘上,再拼拼凑凑:\(\cos(\theta)u + \sin(\theta) vu = (0, \cos(\theta) \mathbf{u} + \sin(\theta) \mathbf{v} \times \mathbf{u})\) 就是我们想要的结果。
它还可以化简为 \((\cos(\theta) + \sin(\theta) v) u\).
有没有发现它和复数的极坐标表示很像?事实上的确如此,对单位纯虚四元数 \(v\),有 \(e^{v \theta}=\cos(\theta)+ v \sin(\theta)\).
接下来令 \(q=e^{v \theta}\),我们想要的结果就是 \(qu\).
现在考虑 \(u\) 不垂直于 \(v\) 的情况。接下来的化简需要一些注意力(
首先还是将 \(u\) 拆成两部分 \(u_\perp\) 和 \(u_\parallel\).
记 \(q=\cos(\theta)+v \sin(\theta)\),\(p=\cos(\theta/2)+v \sin(\theta/2)\). \(p,q\) 均为单位四元数且 \(p^2=q\).
\[\begin{aligned} u' &= u_\parallel + q u_\perp \\ &= pp^{-1}u_\parallel + p^2 u_\perp & (p^2=q) \\ &= p \bar{p} u_\parallel + pp u_\perp & (p^{-1} = \bar{p}) \end{aligned} \]接下来有两个引理,可以用 Grassmann 积证明.
假设 \(v_\parallel\) 为纯四元数,\(q=(\alpha, \beta u)\),其中 \(u\) 为单位向量,\(\alpha, \beta \in R\). 此时若 \(\mathbf{v_\parallel}\) 平行于 \(u\),则 \(v_\parallel q = q v_\parallel\).
假设 \(v_\perp\) 为纯四元数,\(q=(\alpha, \beta u)\),其中 \(u\) 为单位向量,\(\alpha, \beta \in R\). 此时若 \(\mathbf{v_\perp}\) 垂直于 \(u\),则 \(v_\perp q = \bar{q} v_\perp\).
然后继续变形:
\[\begin{aligned} u' &= p \bar{p} u_\parallel + ppu_\perp \\ &= p u_\parallel \bar{p} + p u_\perp \bar{p} \\ &= p (u_\parallel + u_\perp) \bar{p} \\ &= p u \bar{p} \\ &= p u p^{-1} \end{aligned} \]就得到了一个简洁的式子:\(u'=pup^{-1}\).
矩阵形式
左乘一个四元数 \(q=a+b \mathrm{i} + c \mathrm{j} + d \mathrm{k}\) 有相应的矩阵形式
\[\begin{bmatrix} a & -b & -c & -d \\ b & a & -d & c \\ c & d & a & -b \\ d & -c & b & a \end{bmatrix} \]旋转的复合
有引理:
\(\forall q_1, q_2 \in H, \bar{q_1} \bar{q_2} = (q_2 q_1)^*\)
于是旋转的复合可以写成 \(q_2 q_1 p \bar{q_1} \bar{q_2} = (q_2 q_1) p (q_2 q_1)^*\)
四元数的插值
咕咕咕……
杂
四元数与旋转矩阵并不一一对应,而是二对一。(\(q\) 与 \(-q\) 代表同一个旋转)