Apollo学习笔记(26)四元素详解

上一篇的四元素只是简单带过,简单的坐标转换计算,但是实际四元素的用法没有那么简单,这里对四元素进行了一些补充,尽我可能的找到一些四元素相关的知识点,系统的学习了四元素,这里做一个记录。

四元素定义

复数大家都了解,可以理解为一个二维空间,如果有两个复数,
A = a + b i B = c + d i (1) A = a+b\bold{i} \\ B = c+d\bold{i} \tag{1} A=a+biB=c+di(1)

那么,有
C = A + B j = a + b i + c j + d k (2) C=A+B\bold{j} = a+b\bold{i}+c\bold{j}+d\bold{k} \tag{2} C=A+Bj=a+bi+cj+dk(2)
式中, i , j , k \bold{i},\bold{j},\bold{k} i,j,k为复数的三个轴,
a a a为实数部分,
b , c , d b,c,d b,c,d为复数部分三个轴上的三个系数。

这里说一下我的理解,复数的形式为 A = a + b i A=a+b\bold{i} A=a+bi,可以理解为复数表示的是一个二维空间,实数部分为一个坐标轴,虚数部分为一个坐标轴,两个坐标轴之间相互垂直,复数也可以理解为一个二维空间。

学过CAD的都知道三视图,三维物体可以根据不同的角度投影到二维空间,那么上述的变量 C C C代表的就是一个实数轴和三个虚数轴,表示的是一个四维空间,类似于三维的投影,四维空间当然也可以投影到任意的三维空间。

四元素的表达方式

四元素的一般可以表示为
Q = q w + q x i + q y j + q z k (3) Q=q_{w}+q_{x}\bold{i}+q_{y}\bold{j}+q_{z}\bold{k} \tag{3} Q=qw+qxi+qyj+qzk(3)

四元素的加法只需要将对应的系数相加即可,但是四元素的乘法和普通的乘法不一样,四元素的乘法是不可交换的,如下图所示,
在这里插入图片描述
由图中可知,
i j = k , j i = − k j k = i , k j = − i k i = j , i k = − j \bold{i}\bold{j}=\bold{k}, \bold{j}\bold{i}=-\bold{k} \\ \bold{j}\bold{k}=\bold{i},\bold{k}\bold{j}=-\bold{i} \\ \bold{k}\bold{i}=\bold{j},\bold{i}\bold{k}=-\bold{j} ij=k,ji=kjk=i,kj=iki=j,ik=j

然而,上述的四元素的一般表达方式在一些特定的计算情况下,并不是很方便。

四元素的还可以表达为,一个标量和一个向量之和,

Q = q w + q v (4) Q=q_{w}+\bold{q}_{v} \tag{4} Q=qw+qv(4)

式中, q w q_w qw为实数部分,
q v = q x i + q y j + q z k = ( q x , q y , q z ) \bold{q}_{v}=q_{x}\bold{i}+q_{y}\bold{j}+q_{z}\bold{k}=(q_{x},q_{y},q_{z}) qv=qxi+qyj+qzk=(qx,qy,qz)为虚数向量部分。

另外,也可以将四元素按照标量在前,向量在后的一个pair(这个词实在是不晓得怎么翻译比较合适),
Q = < q w , q v > (5) Q=<q_{w},\bold{q}_{v}> \tag{5} Q=<qw,qv>(5)

然而,使用的最多的方式是将四元素写作一个四维的向量 q \bold{q} q
q ≜ [ q w q v ] = [ q w q x q y q z ] (6) \bold{q} \triangleq \begin{bmatrix} q_{w} \\ \bold{q}_{v} \\ \end{bmatrix} = \begin{bmatrix} q_{w} \\ q_{x} \\ q_{y} \\ q_{z} \\ \end{bmatrix} \tag{6} q[qwqv]=qwqxqyqz(6)
这样写的就可以让我们可以使用矩阵运算来处理四元素的问题。

最后,还有使用矩阵表示四元素这种方式,矩阵表示四元素有两种方式,

一种是以二阶复数矩阵表示,

四元素的三个元素 i , j , k \bold{i},\bold{j},\bold{k} i,j,k采用矩阵表示(其中 i i i − 1 \sqrt{-1} 1 σ x , σ y , σ z \sigma_{x},\sigma_{y},\sigma_{z} σx,σy,σz为泡利矩阵)
i = − i σ x = [ 0 − i − i 0 ] \bold{i}=-i\sigma_{x}=\begin{bmatrix} 0 & -i \\ -i & 0 \end{bmatrix} i=iσx=[0ii0]
j = − i σ y = [ 0 − 1 − 1 0 ] \bold{j}=-i\sigma_{y}=\begin{bmatrix} 0 & -1 \\ -1 & 0 \end{bmatrix} j=iσy=[0110]
k = − i σ z = [ − i 0 0 − i ] \bold{k}=-i\sigma_{z}=\begin{bmatrix} -i & 0 \\ 0 & -i \end{bmatrix} k=iσz=[i00i]
则,任意的四元素 q = a + b i + c j + d k \bold{q}=a+b\bold{i}+c\bold{j}+d\bold{k} q=a+bi+cj+dk的二阶矩阵形式为
q = [ a − d i − c − b i c − b i a + d i ] (7) \bold{q}=\begin{bmatrix} a-di & -c-bi \\ c-bi & a+di \\ \end{bmatrix} \tag{7} q=[adicbicbia+di](7)

这种表示方法有如下优点:

  1. 使 b = d = 0 b = d = 0 b=d=0,可回归到一复数 q = a + c j \bold{q} = a + c\bold{j} q=a+cj,相应于一个实矩阵。
  2. 四元数的绝对值平方就等于矩阵的行列式。
  3. 四元数的共轭值就等于矩阵的共轭转置。
  4. 对于单位四元数 (|h| = 1) 而言,这种表示方式给了四维球体和SU(2)之间的一个同型,而后者对于量子力学中的自旋的研究十分重要。

第二种,是以四阶实数矩阵表示,相当于把上述表示中的复数再换成其矩阵表示,
i ↔ [ 0 − 1 − 1 0 ] i\leftrightarrow \begin{bmatrix} 0 & -1 \\ -1 & 0 \end{bmatrix} i[0110]

[ a d − c b − d a − b − c c b a − d − b c d a ] = a [ 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 ] + b [ 0 0 0 1 0 0 − 1 0 0 1 0 0 − 1 0 0 0 ] + c [ 0 0 − 1 0 0 0 0 − 1 1 0 0 0 0 1 0 0 ] + d [ 0 1 0 0 − 1 0 0 0 0 0 0 − 1 0 0 1 0 ] (8) \begin{bmatrix} a & d & -c & b \\ -d & a & -b & -c \\ c & b & a & -d \\ -b & c & d & a \\ \end{bmatrix} = \\ a \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \\ \end{bmatrix}+b\begin{bmatrix} 0 & 0 & 0 & 1 \\ 0 & 0 & -1 & 0 \\ 0 & 1 & 0 & 0 \\ -1 & 0 & 0 & 0 \\ \end{bmatrix} + c\begin{bmatrix} 0 & 0 & -1 & 0 \\ 0 & 0 & 0 & -1 \\ 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ \end{bmatrix} + d\begin{bmatrix} 0 & 1 & 0 & 0 \\ -1 & 0 & 0 & 0 \\ 0 & 0 & 0 & -1 \\ 0 & 0 & 1 & 0 \\ \end{bmatrix} \tag{8} adcbdabccbadbcda=a1000010000100001+b0001001001001000+c0010000110000100+d0100100000010010(8)

其中,四元素的共轭等于矩阵的转置,模的四次方等于矩阵的行列式。

四元素运算

下面的所有 p \bold{p} p q \bold{q} q没有特别说明的话,默认的就是
{ p = p w + p v = p w + p x i + p y j + p z k q = q w + q v = q w + q x i + q y j + q z k \begin{cases} \bold{p}=p_{w}+\bold{p}_v=p_{w}+p_{x}\bold{i}+p_{y}\bold{j}+p_{z}\bold{k} \\ \bold{q}=q_{w}+\bold{q}_v=q_{w}+q_{x}\bold{i}+q_{y}\bold{j}+q_{z}\bold{k} \\ \end{cases} {p=pw+pv=pw+pxi+pyj+pzkq=qw+qv=qw+qxi+qyj+qzk

1 四元素的加法

四元素的加法,和普通的向量加法没啥区别,直接加就行了,如下
p + q = [ p w p v ] + [ q w q v ] = [ p w + q w p v + q v ] (9) \bold{p}+\bold{q}=\begin{bmatrix} p_w \\ \bold{p}_{v} \end{bmatrix}+\begin{bmatrix} q_w \\ \bold{q}_{v} \end{bmatrix}=\begin{bmatrix} p_w +q_w\\ \bold{p}_{v}+\bold{q}_{v} \end{bmatrix} \tag{9} p+q=[pwpv]+[qwqv]=[pw+qwpv+qv](9)

加法交换律和结合律在四元素的加法中同样适用,
p + q = q + p p + ( q + r ) = ( p + q ) + r (10) \bold{p}+\bold{q} = \bold{q}+\bold{p} \\ \bold{p}+(\bold{q}+\bold{r})=(\bold{p}+\bold{q})+\bold{r} \tag{10} p+q=q+pp+(q+r)=(p+q)+r(10)

2 四元素乘法

两个四元素的乘积是不可交换的,叫做格拉斯曼乘积,四元素的乘法符号用 ⊗ \otimes 表示,写成矩阵形式,
p ⊗ q = [ p w q w − p x q x − p y q y − p z q z p w q x + p x q w + p y q z − p z q y p w q y − p x q z + p y q w + p z q x p w q z + p x q y − p y q x + p z q w ] (11) \bold{p} \otimes \bold{q}=\begin{bmatrix} p_{w}q_{w}-p_{x}q_{x}-p_{y}q_{y}-p_{z}q_{z} \\ p_{w}q_{x}+p_{x}q_{w}+p_{y}q_{z}-p_{z}q_{y} \\ p_{w}q_{y}-p_{x}q_{z}+p_{y}q_{w}+p_{z}q_{x} \\ p_{w}q_{z}+p_{x}q_{y}-p_{y}q_{x}+p_{z}q_{w} \\ \end{bmatrix} \tag{11} pq=pwqwpxqxpyqypzqzpwqx+pxqw+pyqzpzqypwqypxqz+pyqw+pzqxpwqz+pxqypyqx+pzqw(11)
也可以写作另一种标量+矢量的方式,
p ⊗ q = [ p w q w − p v T q v p w q v + q w p v + p v × q v ] (12) \bold{p} \otimes \bold{q}=\begin{bmatrix} p_{w}q_{w}-\bold{p}^{T}_{v}\bold{q}_{v} \\ p_{w}\bold{q}_{v}+q_{w}\bold{p}_{v}+\bold{p}_{v} \times \bold{q}_{v} \end{bmatrix} \tag{12} pq=[pwqwpvTqvpwqv+qwpv+pv×qv](12)
从上式也可以看出四元素乘法为什么无法适用交换律了。
p ⊗ q ≠ q ⊗ p \bold{p}\otimes\bold{q}\ne\bold{q}\otimes\bold{p} pq=qp

但是,四元素的乘法是可以适用结合律和分配律的,
( p ⊗ q ) ⊗ r = p ⊗ ( q ⊗ r ) ( p + q ) ⊗ r = p ⊗ r + q ⊗ r p ⊗ ( q + r ) = p ⊗ q + p ⊗ r (13) (\bold{p}\otimes\bold{q})\otimes \bold{r}=\bold{p}\otimes(\bold{q}\otimes \bold{r}) \\ (\bold{p}+\bold{q})\otimes \bold{r}=\bold{p}\otimes\bold{r}+ \bold{q}\otimes\bold{r} \\ \bold{p} \otimes (\bold{q} + \bold{r})=\bold{p}\otimes\bold{q}+ \bold{p}\otimes\bold{r} \tag{13} (pq)r=p(qr)(p+q)r=pr+qrp(q+r)=pq+pr(13)

四元素还有其他形式的乘积,比如说点积,外积,偶积,叉积,由于工程中用的不多,这里就不多说了。

3 单位四元素

既然是单位四元素 q 1 \bold{q}_{1} q1,那可以知道,单位四元素必然有这个属性,
q 1 ⊗ q = q ⊗ q 1 = q \bold{q}_{1} \otimes \bold{q}=\bold{q} \otimes \bold{q}_{1} = \bold{q} q1q=qq1=q
单位四元素就相当于实数“1”,
q 1 = 1 = [ 1 0 v ] (14) \bold{q}_{1}=1=\begin{bmatrix} 1 \\ \bold{0}_{v} \end{bmatrix} \tag{14} q1=1=[10v](14)

4 共轭四元素

四元素的共轭定义为
q ∗ ≜ q w − q v = [ q w − q v ] (15) \bold{q}^{*}\triangleq q_{w}-\bold{q}_{v}=\begin{bmatrix} q_{w} \\ -\bold{q}_{v} \end{bmatrix} \tag{15} qqwqv=[qwqv](15)

共轭四元素具有以下两个属性,

q ⊗ q ∗ = q ∗ ⊗ q = q w 2 + q x 2 + q y 2 + q z 2 = [ q w 2 + q x 2 + q y 2 + q z 2 0 ] \bold{q} \otimes \bold{q}^{*} = \bold{q}^{*} \otimes \bold{q} = q_{w}^{2}+q_{x}^{2}+q_{y}^{2}+q_{z}^{2}=\begin{bmatrix} q_{w}^{2}+q_{x}^{2}+q_{y}^{2}+q_{z}^{2} \\ 0 \end{bmatrix} qq=qq=qw2+qx2+qy2+qz2=[qw2+qx2+qy2+qz20]

( p ⊗ q ) ∗ = q ∗ ⊗ p ∗ (\bold{p} \otimes \bold{q})^{*}=\bold{q}^{*} \otimes \bold{p}^{*} (pq)=qp

5 四元素的模

四元素的模定义为

∥ q ∥ = q ⊗ q ∗ = q ∗ ⊗ q = q w 2 + q x 2 + q y 2 + q z 2 (16) \lVert{\bold{q}} \rVert=\sqrt{\bold{q} \otimes \bold{q}^{*}}=\sqrt{\bold{q}^{*} \otimes \bold{q}}=\sqrt{q_{w}^{2}+q_{x}^{2}+q_{y}^{2}+q_{z}^{2}} \tag{16} q=qq =qq =qw2+qx2+qy2+qz2 (16)

6 四元素的逆

和普通矩阵一样,四元素的逆乘以本身等于单位四元素,有
q ⊗ q − 1 = q − 1 ⊗ q = q 1 (17) \bold{q} \otimes \bold{q}^{-1}=\bold{q}^{-1} \otimes \bold{q}=\bold{q}_{1} \tag{17} qq1=q1q=q1(17)

四元素的逆可以通过如下方式计算得到,
q − 1 = q ∗ / ∥ q ∥ (18) \bold{q}^{-1}=\bold{q}^{*}/\lVert{\bold{q}} \rVert \tag{18} q1=q/q(18)

7 四元素单位化

对于单位四元素的话,有 ∥ q ∥ = 1 \lVert{\bold{q}} \rVert=1 q=1,所以单位四元素的逆与其共轭四元素相同,
q − 1 = q ∗ (19) \bold{q}^{-1}=\bold{q}^{*} \tag{19} q1=q(19)

另外,单位四元素总可以写作如下形式,
q = [ cos ⁡ θ u sin ⁡ θ ] (20) \bold{q}=\begin{bmatrix} \cos\theta \\ \bold{u}\sin\theta \end{bmatrix} \tag{20} q=[cosθusinθ](20)

式中, u = u x i + u y j + u z k \bold{u}=u_{x}\bold{i}+u_{y}\bold{j}+u_{z}\bold{k} u=uxi+uyj+uzk是一个单位向量,
θ \theta θ为一个标量。

8 纯四元素乘法

没有实数或者标量的四元素叫做纯四元素,由式(12)可知,
p v ⊗ q v = − p v T q v + p v × q v = [ − p v T q v p v × q v ] (21) \bold{p}_{v} \otimes \bold{q}_{v}=-\bold{p}_{v}^{T} \bold{q}_{v}+\bold{p}_{v} \times \bold{q}_{v}=\begin{bmatrix} -\bold{p}_{v}^{T} \bold{q}_{v} \\ \bold{p}_{v} \times \bold{q}_{v} \end{bmatrix} \tag{21} pvqv=pvTqv+pv×qv=[pvTqvpv×qv](21)

由上式可知,
p v ⊗ q v − q v ⊗ p v = 2 p v × q v (22) \bold{p}_{v} \otimes \bold{q}_{v}-\bold{q}_{v} \otimes \bold{p}_{v}=2\bold{p}_{v} \times \bold{q}_{v} \tag{22} pvqvqvpv=2pv×qv(22)

9 纯四元素的幂

我们用 q n \bold{q}^{n} qn来表示 n n n个四元素 q \bold{q} q相乘 ⊗ \otimes ,另外,如果 v \bold{v} v是一个纯四元素的话,我们定义 v = u θ \bold{v}=\bold{u}\theta v=uθ,式中 θ = ∥ v ∥ ∈ R \theta=\lVert \bold{v} \rVert \in \Bbb{R} θ=vR u \bold{u} u为单位四元素,因此可以得到,
v 2 = − θ 2 , v 3 = − u θ 3 , v 4 = θ 4 , v 5 = u θ 5 , v 6 = − θ 6 , … (23) \bold{v}^{2}=-\theta^{2},\bold{v}^{3}=-\bold{u}\theta^{3},\bold{v}^{4}=\theta^{4},\bold{v}^{5}=\bold{u}\theta^{5},\bold{v}^{6}=-\theta^{6},\dots \tag{23} v2=θ2,v3=uθ3,v4=θ4,v5=uθ5,v6=θ6,(23)

10 纯四元素的指数

纯四元素 v = v x i + v y j + v z k \bold{v}=v_{x}\bold{i}+v_{y}\bold{j}+v_{z}\bold{k} v=vxi+vyj+vzk的指数,可以用一个绝对收敛的数列进行表示,
e v = ∑ k = 0 ∞ v n k ! ∈ H (24) e^{\bold{v}}=\displaystyle\sum_{k=0}^{\infin}\frac{\bold{v}^{n}}{k!} \in \Bbb{H} \tag{24} ev=k=0k!vnH(24)

v = u θ , θ = ∥ v ∥ ∈ R \bold{v}=\bold{u}\theta,\theta=\lVert \bold{v} \rVert \in \Bbb{R} v=uθ,θ=vR u \bold{u} u为单位向量,再结合式(23),将四元素分为标量和向量两个部分,如下
e v = e u θ = cos ⁡ θ + u sin ⁡ θ = [ cos ⁡ θ u sin ⁡ θ ] (25) e^{\bold{v}}=e^{\bold{u}\theta}=\cos\theta+\bold{u}\sin\theta=\begin{bmatrix} \cos\theta \\ \bold{u}\sin\theta \end{bmatrix} \tag{25} ev=euθ=cosθ+usinθ=[cosθusinθ](25)

这就是欧拉方程 e i θ = cos ⁡ θ + i sin ⁡ θ e^{i\theta}=\cos\theta+i\sin\theta eiθ=cosθ+isinθ。注意, ∥ e v ∥ 2 = cos ⁡ 2 θ + sin ⁡ 2 θ = 1 \lVert e^{\bold{v}} \rVert^{2}=\cos^2\theta+\sin^2\theta=1 ev2=cos2θ+sin2θ=1,纯四元素的指数是一个单位四元素。

11 普通四元素的指数

四元素乘法是不适用交换律的,对于普通四元素 p \bold{p} p q \bold{q} q,不能写成 e p + q = e p e q e^{\bold{p}+\bold{q}}=e^{\bold{p}}e^{\bold{q}} ep+q=epeq。但是,如果有任意的乘数是标量的话,交换律还是适用的,所以,有
e q = e q w + q v = e q w e q v (26) e^{\bold{q}}=e^{q_{w}+\bold{q}_{v}}=e^{q_{w}}e^{q_{v}} \tag{26} eq=eqw+qv=eqweqv(26)

12 单位四元素的对数

如果 ∥ q ∥ = 1 \lVert \bold{q} \rVert=1 q=1,可以直接看出
log ⁡ q = log ⁡ ( cos ⁡ θ + u sin ⁡ θ ) = log ⁡ ( e u θ ) = u θ = [ 0 u θ ] (28) \log\bold{q}=\log(\cos\theta+\bold{u}\sin\theta)=\log(e^{\bold{u}\theta})=\bold{u}\theta=\begin{bmatrix} 0 \\\bold{u}\theta \end{bmatrix} \tag{28} logq=log(cosθ+usinθ)=log(euθ)=uθ=[0uθ](28)
从上式不难看出,单位四元素的对数就是一个纯四元素。

13 普通四元素的对数

对上式拓展一下,如果 q \bold{q} q是一个普通四元素,
log ⁡ q = log ⁡ ( ∥ q ∥ q ∥ q ∥ ) = log ⁡ ∥ q ∥ + log ⁡ q ∥ q ∥ = log ⁡ ∥ q ∥ + u θ = [ log ⁡ ∥ q ∥ u θ ] (29) \log{\bold{q}}=\log(\lVert \bold{q} \rVert \frac{\bold{q}}{\lVert \bold{q} \rVert})=\log \lVert \bold{q} \rVert + \log\frac{\bold{q}}{\lVert \bold{q} \rVert}=\log \lVert \bold{q} \rVert +\bold{u}\theta=\begin{bmatrix} \log \lVert \bold{q} \rVert \\ \bold{u}\theta \end{bmatrix} \tag{29} logq=log(qqq)=logq+logqq=logq+uθ=[logquθ](29)

四元素插值

线性插值之前使用过很多,看了四元素之后才发现四元素也可以进行插值,首先如下图

在这里插入图片描述
图中有两个初始向量 v 0 v_{0} v0 v 1 v_{1} v1,是球面上的两个向量,四元素插值也叫球面线性插值(Slerp)。Slerp插值可以解决前面的均匀角速度问题,它能够保证每两个四元数之间的⻆速度是固定的,这就从原理上保证了插值的效果。

两个初始向量 v 0 v_{0} v0 v 1 v_{1} v1之间的夹角为 ω \omega ω,推到过程比较简单,这里就不献丑了,直接上结果
v t = k 0 v 0 + k 1 v 1 = sin ⁡ [ ( 1 − t ) ω ] sin ⁡ ω v 0 + sin ⁡ t ω sin ⁡ ω v 1 (30) v_{t}=k_{0}v_{0}+k_{1}v_{1}=\frac{\sin[(1-t)\omega]}{\sin\omega}v_{0}+\frac{\sin t\omega}{\sin\omega}v_{1} \tag{30} vt=k0v0+k1v1=sinωsin[(1t)ω]v0+sinωsintωv1(30)
q 0 = v 0 , q 1 = v 1 \bold{q_0}=v_{0},\bold{q_1}=v_{1} q0=v0q1=v1,则有
s l e r p ( q 0 , q 1 , t ) = sin ⁡ [ ( 1 − t ) ω ] sin ⁡ ω v 0 + sin ⁡ t ω sin ⁡ ω v 1 (31) slerp(\bold{q}_{0},\bold{q}_{1},t)=\frac{\sin[(1-t)\omega]}{\sin\omega}v_{0}+\frac{\sin t\omega}{\sin\omega}v_{1} \tag{31} slerp(q0,q1,t)=sinωsin[(1t)ω]v0+sinωsintωv1(31)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值