码迷,mamicode.com
首页 > 其他好文 > 详细

【几何系列】四元数的基础

时间:2020-03-02 21:06:46      阅读:107      评论:0      收藏:0      [点我收藏+]

标签:卡尔   误差   工业   可视化   from   旋转   表达   关于   两种   

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+b\vec{i}+c\vec{j}+d\vec{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+x\vec{i}+y\vec{j}+z\vec{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\neq q_2q_1$

加减

对于两个四元数(为了方便,此后向量不再加箭头号):

$$q_1=s_1+x_1i+y_1j+z_1k$$

$$q_2=s_2+x_2i+y_2j+z_2k$$

其加减法为:

$$q_1\pm q_2=(s_1\pm s_2)+(x_1\pm x_2)i+(y_1\pm y_2)j+(z_1\pm 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$$

相乘之后:

\begin{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_1\cdot v_2+s_1v_2+s_2v_1+v_1\times v_2
\end{align*}

其中 $s_1s_2-v_1\cdot v_2$ 是标量,$s_1v_2+s_2v_1+v_1\times v_2$ 是向量。

由于 $v_1\times v_2$ 的存在,可以证实四元数乘法不满足交换律。

纯四元数

标量项为 0 的四元数称为纯四元数(pure quaternion)

$$q=0+v$$

对于两个纯四元数 $q_1=0+v_1$ 和 $q_2=0+v_2$,其乘积为:

$$q_1q_2=-v_1\cdot v_2+v_1\times v_2$$

进而可以发现,两个纯四元数的平方为:

$$

\begin{align*}
qq &= -v\cdot v+v\times v\\
&= -v\cdot v\\
&= -\left | v \right |^2
\end{align*}

$$

在 Hamilton 的时代,尤其物理学家对于这个负数结果很难接受,因而拒绝使用四元数而接受 Gibbs 等人的向量分析。

四元数的模

四元数的模(modulus)范数(norm)写作 $\left | q \right |$ ,对于四元数 $q=s+xi+yj+zk$:

$$\left | q \right |=\sqrt{s^2+x^2+y^2+z^2}$$

四元数的模的几何意义是对空间的放缩系数

单位四元数

单位四元数(unit quaternion)是模为 1 的四元数:

$$\left | q \right |=\sqrt{s^2+x^2+y^2+z^2}=1$$

单位四元数尤为重要,如果把它看作是几何变换的话,由于模为 1,所以放缩系数为 1,于是单位四元数它相当于一个描述三维空间的纯旋转动作

任何四元数 $q$ 都可以规范为单位四元数 $\hat{q}$:

$$\hat{q}=$\frac{q}{\left | q \right |}$

共轭四元数

共轭四元数和共轭复数类似,对于某一四元数:

$$q=s+v=s+xi+yj+zk$$

其共轭四元数为:

$$q^*=s-v=s-xi-yj-zk$$

于是我们可以发现:

$$

\begin{align*}
qq^*&=(s+v)(s-v)\\
&=s^2+v\cdot v+sv-sv+v\times (-v) \\
&= s^2+x^2+y^2+z^2
\end{align*}

$$

其乘积是一个标量,进而可得:

$$qq^*=\left | q \right |^2\Leftrightarrow \left | q \right |=\sqrt{qq^*}$$

类似地,我们可以证明:$qq^*=q^*q$。

根据共轭四元数定义和乘法,我们还可以证得:$(q_1q_2)^*=q_2^*q_1^*$。

四元数的逆

$q^{-1}$ 是四元数 $q$ 的逆($q\neq 0$),满足:

$$qq^{-1}=q^{-1}q=1$$

根据定义,两边同乘 $q^*$,可得:

$$q^*qq^{-1}=q^*q^{-1}q=q^*$$

$$\Rightarrow q^*qq^{-1}=q^*$$

$$\Rightarrow \left | q \right |^2q^{-1}=q^*$$

$$\Rightarrow q^{-1}=\frac{q^*}{\left | q \right |^2} $$

显然,如果 $q$ 是单位四元数,即 $\left | q \right |=1$,那么:

$$q^{-1}=q^*$$

由于单位四元数可以表示旋转作用,那么单位四元数的逆就表示对这个旋转作用的抵消作用。关于四元数的更多几何意义推荐观看四元数的可视化

 

参考

 

【几何系列】四元数的基础

标签:卡尔   误差   工业   可视化   from   旋转   表达   关于   两种   

原文地址:https://www.cnblogs.com/noluye/p/12391719.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!