几何系列四元数的基础
Posted noluye
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了几何系列四元数的基础相关的知识,希望对你有一定的参考价值。
William Rowan Hamilton 在 1843 年发明了四元数(quaternions)。他努力推广四元数来描述三维空间,不过当时有很多数学家反对,认为四元数很邪恶。
不过在一个世纪之后,四元数在计算机工业界起死回生,包括计算机图形学、机器人等领域应用广泛。他描述三维旋转简洁、计算高效、也能避免数值误差。
除此之外,四元数在量子力学方面也有应用。
定义
四元数的定义和相关规则如下:
$$q=a+bi+cj+dk$$
其中 $a$、$b$、$c$、$d$ 是标量,而 $i$、$j$、$k$ 是虚数,并遵循以下规则:
$$i^2=-1,j^2=-1,k^2=-1,ijk=-1$$
$$ij=k,jk=i,ki=j$$
$$ji=-k,kj=-i,ik=-j$$
19 世纪末,Josiah Gibbs 提出 3 个虚数可以看做 3 维向量,避免包含那么多的虚数项。于是 $bi+cj+dk$ 变为 $q=a+bvec{i}+cvec{j}+dvec{k}$ 的向量表示,其中 $vec{i}$、$vec{j}$、$vec{k}$ 是单位笛卡尔向量。
目前,在计算机图形学中,一般用两种方式表达四元数:
$$vec{q}=s,vec{v}$$
$$vec{q}=s+vec{v}$$
其中 $s$ 是标量,$vec{v}$ 是 3D 向量。
这里我们把四元数表示为标量和向量的组合,于是:
$$vec{q}=s+vec{v}=s+xvec{i}+yvec{j}+zvec{k}$$
其中 $s$、$x$、$y$、$z$ 为标量。
后面我们会知道 $vec{v}$ 用于表示旋转轴,而 $s$ 表示旋转角度。
公理
复数是实数的二维延伸,而四元数是复数的四维延伸。除了乘法以外,四元数与复数有相同的公理。
加法
交换律:$q_1+q_2=q_2+q_1$
结合律:$(q_1+q_2)+q_3=q_1+(q_2+q_3)$
乘法
结合律:$(q_1q_2)q_3=q_1(q_2q_3)$
交换律(不满足):$q_1q_2 eq q_2q_1$
加减
对于两个四元数(为了方便,此后向量不再加箭头号):
$$q_1=s_1+x_1i+y_1j+z_1k$$
$$q_2=s_2+x_2i+y_2j+z_2k$$
其加减法为:
$$q_1pm q_2=(s_1pm s_2)+(x_1pm x_2)i+(y_1pm y_2)j+(z_1pm z_2)k$$
四元数相乘
结合一下运算规则:
$$i^2=-1,j^2=-1,k^2=-1,ijk=-1$$
$$ij=k,jk=i,ki=j$$
$$ji=-k,kj=-i,ik=-j$$
对于两个四元数:
$$q_1=s_1+v_1=s_1+x_1i+y_1j+z_1k$$
$$q_2=s_2+v_2=s_2+x_2i+y_2j+z_2k$$
相乘之后:
egin{align*}
q_1q_2 &= s_1s_2-(x_1x_2+y_1y_2+z_1z_2)+s_1(x_2i+y_2j+z_2k)+s_2(x_1i+y_1j+z_1k)+(y_1z_2-y_2z_1)i+(z_1x_2-z_2x_1)j+(x_1y_2-x_2y_1)k\\
&= s_1s_2-v_1cdot v_2+s_1v_2+s_2v_1+v_1 imes v_2
end{align*}
其中 $s_1s_2-v_1cdot v_2$ 是标量,$s_1v_2+s_2v_1+v_1 imes v_2$ 是向量。
由于 $v_1 imes v_2$ 的存在,可以证实四元数乘法不满足交换律。
纯四元数
标量项为 0 的四元数称为纯四元数(pure quaternion):
$$q=0+v$$
对于两个纯四元数 $q_1=0+v_1$ 和 $q_2=0+v_2$,其乘积为:
$$q_1q_2=-v_1cdot v_2+v_1 imes v_2$$
进而可以发现,两个纯四元数的平方为:
$$
egin{align*}
qq &= -vcdot v+v imes v\\
&= -vcdot v\\
&= -left | v
ight |^2
end{align*}
$$
在 Hamilton 的时代,尤其物理学家对于这个负数结果很难接受,因而拒绝使用四元数而接受 Gibbs 等人的向量分析。
四元数的模
四元数的模(modulus)或范数(norm)写作 $left | q ight |$ ,对于四元数 $q=s+xi+yj+zk$:
$$left | q ight |=sqrt{s^2+x^2+y^2+z^2}$$
四元数的模的几何意义是对空间的放缩系数。
单位四元数
单位四元数(unit quaternion)是模为 1 的四元数:
$$left | q ight |=sqrt{s^2+x^2+y^2+z^2}=1$$
单位四元数尤为重要,如果把它看作是几何变换的话,由于模为 1,所以放缩系数为 1,于是单位四元数它相当于一个描述三维空间的纯旋转动作。
任何四元数 $q$ 都可以规范为单位四元数 $hat{q}$:
$$hat{q}=$frac{q}{left | q ight |}$
共轭四元数
共轭四元数和共轭复数类似,对于某一四元数:
$$q=s+v=s+xi+yj+zk$$
其共轭四元数为:
$$q^*=s-v=s-xi-yj-zk$$
于是我们可以发现:
$$
egin{align*}
qq^*&=(s+v)(s-v)\\
&=s^2+vcdot v+sv-sv+v imes (-v) \\
&= s^2+x^2+y^2+z^2
end{align*}
$$
其乘积是一个标量,进而可得:
$$qq^*=left | q ight |^2Leftrightarrow left | q ight |=sqrt{qq^*}$$
类似地,我们可以证明:$qq^*=q^*q$。
根据共轭四元数定义和乘法,我们还可以证得:$(q_1q_2)^*=q_2^*q_1^*$。
四元数的逆
$q^{-1}$ 是四元数 $q$ 的逆($q eq 0$),满足:
$$qq^{-1}=q^{-1}q=1$$
根据定义,两边同乘 $q^*$,可得:
$$q^*qq^{-1}=q^*q^{-1}q=q^*$$
$$Rightarrow q^*qq^{-1}=q^*$$
$$Rightarrow left | q ight |^2q^{-1}=q^*$$
$$Rightarrow q^{-1}=frac{q^*}{left | q ight |^2} $$
显然,如果 $q$ 是单位四元数,即 $left | q ight |=1$,那么:
$$q^{-1}=q^*$$
由于单位四元数可以表示旋转作用,那么单位四元数的逆就表示对这个旋转作用的抵消作用。关于四元数的更多几何意义推荐观看四元数的可视化。
参考
- Rotation Transforms for Computer Graphics by John Vince
- 四元数的可视化
- 【几何系列】复数基础与二维空间旋转
以上是关于几何系列四元数的基础的主要内容,如果未能解决你的问题,请参考以下文章