原文链接

1复数

为了引入四元数的概念和更好的理解四元数,首先回顾复数的相关概念。因为四元数的根源其实是复数

虚数:
i2=1若i^2=-1
则认为ii就是虚数,这是在逻辑上不存在的数。
复数:
复数由实部和虚部构成,表示形式为:
z=a+bi  a,bR,  i2=1z=a+bi~~a,b\in\mathbb{R},~~i^2=-1
因此可以认为所有实数都是b=0b=0的复数、所有虚数都是a=0a=0的复数。

1.1 复数的运算

加法和减法

对应实部相加减,对应虚部相加减
(a1+b1i)+(a2+b2i)=(a1+a2)+(b1+b2)i(a_{1} + b_{1}\mathbf i) + (a_{2} + b_{2}\mathbf i) = (a_{1} + a_{2}) + (b_{1} + b_{2})\mathbf i
(a1+b1i)(a2+b2i)=(a1a2)+(b1b2)i(a_{1} + b_{1}\mathbf i) - (a_{2} + b_{2}\mathbf i) = (a_{1} - a_{2}) + (b_{1} - b_{2})\mathbf i

与标量相乘

λ(a1+b1i)=λa1+λb1i\lambda (a_{1} + b_{1}\mathbf i) = \lambda a_{1} + \lambda b_{1}\mathbf i

复数相乘

z1=(a1+b1i)z2=(a2+b2i)z1z2=(a1+b1i)(a2+b2i)=a1a2+a1b2i+b1a2i+b1b2i2z1z2=(a1a2b1b2)+(a1b2+b1a2)iz_{1} = (a_{1} + b_{1}\mathbf i) \\ z_{2} = (a_{2} + b_{2}\mathbf i) \\z_{1}z_{2} = (a_{1} + b_{1}\mathbf i)(a_{2} + b_{2}\mathbf i) = a_{1}a_{2} + a_{1}b_{2}\mathbf i + b_{1}a_{2}\mathbf i + b_{1}b_{2}\mathbf i^{2}\\ z_{1}z_{2} = (a_{1}a_{2} - b_{1}b_{2}) + (a_{1}b_{2} + b_{1}a_{2})\mathbf i

复数相除

z1=(a1+b1i)z2=(a2+b2i)z1z2=a1+b1ia2+b2i=(a1+b1i)(a2b2i)(a2+b2i)(a2b2i)=a1a2a1b2i+b1a2ib1b2i2a22+b22z_{1} = (a_{1} + b_{1}\mathbf i)\\ z_{2} = (a_{2} + b_{2}\mathbf i)\\ \frac {z_{1}}{z_{2}} = \frac {a_{1} + b_{1}\mathbf i}{a_{2} + b_{2}\mathbf i} = \frac {(a_{1} + b_{1}\mathbf i)(a_{2} - b_{2}\mathbf i)}{(a_{2} + b_{2}\mathbf i)(a_{2} - b_{2}\mathbf i)}\\= \frac {a_{1}a_{2}-a_{1}b_{2}\mathbf i+b_{1}a_{2}\mathbf i-b_{1}b_{2}\mathbf i^{2} }{a_{2}^{2} + b_{2}^{2}}

复数平方

z=(a+bi)z2=(a+bi)(a+bi)z2=(a2b2)+2abiz = (a + b\mathbf i) \\z^{2} = (a + b\mathbf i)(a + b\mathbf i)\\z^{2} = (a^{2} - b^{2}) + 2ab\mathbf i

共轭复数

复数的共轭就是指把复数的虚数部分变成负的。
z=(a+bi)z=(abi)z = (a + b\mathbf i)\\ z^{*} = (a - b\mathbf i)
复数和它的共轭复数的乘积是:
zz=(a+bi)(abi)=a2abi+abi+b2=a2+b2zz^{*} = (a + b\mathbf i)(a - b\mathbf i) = a^{2}-ab\mathbf i + ab\mathbf i + b^{2} = a^{2}+b^{2}

复数的绝对值

z=(a+bi)z=zz=(a+bi)(abi)=a2+b2z = (a + b\mathbf i)\\|z| = \sqrt {zz^{*}} = \sqrt {(a + b\mathbf i)(a - b\mathbf i)} = \sqrt {a^{2} + b^{2} }

虚数的i次幂

i0=1i1=ii2=1i3=ii2=ii4=i2i2=1i5=ii4=ii6=ii5=i2=1\mathbf i^{0} = 1 \\\mathbf i^{1} = \mathbf i \\ \mathbf i^{2} = -1 \\\mathbf i^{3} = \mathbf i\mathbf i^{2} = -i \\ \mathbf i^{4} = \mathbf i^{2}\mathbf i^{2} = 1 \\ \mathbf i^{5} = \mathbf i \mathbf i^{4} = i \\ \mathbf i^{6} = \mathbf i\mathbf i^{5} = \mathbf i^{2} = -1

虚数的-i次幂

i0=1i1=ii2=1i3=ii4=1i5=ii6=1\mathbf i^{0} = 1 \\ \mathbf i^{-1} = -i \\ \mathbf i^{-2} = -1 \\ \mathbf i^{-3} = i \\ \mathbf i^{-4} = 1 \\ \mathbf i^{-5} = -i \\ \mathbf i^{-6} = -1

复数平面

我们可以将复数映射到2D网格平面-复数平面,只需要把实数映射到横轴、虚数映射到纵轴。
四元数基础
对一个复数乘以i,这个复数就在复数平面上旋转了90度。
随机地在复数平面上取一个点:
p=2+ip = 2 + \mathbf i
p乘以i后得到q:
q=pi=(2+i)i=2i+i2=1+2iq = p\mathbf i = (2+\mathbf i)\mathbf i = 2\mathbf i + \mathbf i^{2} = -1 + 2\mathbf i
q乘以i后得到r:
r=qi=(1+2i)i=i+2i2=2ir = q\mathbf i = (-1 + 2\mathbf i)\mathbf i = -\mathbf i + 2\mathbf i^{2} = -2 -\mathbf i
r乘以i后得到s:
s=ri=(2i)i=2ii2=12is = r\mathbf i = (-2 - \mathbf i)\mathbf i = -2\mathbf i-\mathbf i^{2} = 1 - 2\mathbf i
s乘以i后得到t:
t=si=(12i)i=i2i2=2+it = s\mathbf i = (1-2\mathbf i)\mathbf i = \mathbf i - 2\mathbf i^{2} = 2 + \mathbf i
四元数基础

用复数表示旋转数

定义qq表示复数平面上任意角度的旋转
q=cosθ+isinθq = cos\theta + \mathbf i sin\theta
定义复平面上初始坐标pp
p=a+bip = a + b\mathbf i
pp在经过旋转qq后,得到新的坐标为:
pq=(a+bi)(cosθ+isinθ)a+bi=acosθbsinθ+(asinθ+bcosθ)i\begin{array}{rcl} pq & = & (a+bi)(\cos\theta+i\sin\theta) \\ a^{\prime}+b^{\prime}i & = & a\cos\theta-b\sin\theta+(a\sin\theta+b\cos\theta)i \end{array}
用矩阵表示为:
[abba]=[cosθsinθsinθcosθ][abba]\begin{bmatrix} a^{\prime} & -b^{\prime} \\ b^{\prime} & a^{\prime} \end{bmatrix}=\begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix}\begin{bmatrix}a & -b \\b & a \end{bmatrix}
这是复平面上点绕原点逆时针旋转任意角度的方法。

四元数

四元数在复数的基础上额外增加两个虚数,从而把这些概念拓展到3维空间。

2.1 四元数的一般形式

q=s+xi+yj+zk  s,x,y,zRq=s+xi+yj+zk~~s,x,y,z\in\mathbb{R}
也可以用有序对的形式,来表示四元数:
q=[s,v]  sR,vR3q=[s,xi+yj+zk]  s,x,y,zRq=[s,\mathbf{v}]~~s\in\mathbb{R}, \mathbf{v}\in\mathbb{R}^3\\q=[s,x\mathbf{i}+y\mathbf{j}+z\mathbf{k}]~~s,x,y,z\in\mathbb{R}

2.2 四元数本身的性质

  • i2=j2=k2=ijk=1\mathbf i^{2} = \mathbf j^{2} = \mathbf k^{2} = \mathbf i\mathbf j\mathbf k = -1
  • ij=k   jk=i   ki=j\mathbf i \mathbf j = \mathbf k \ \ \ \mathbf j \mathbf k = \mathbf i \ \ \ \mathbf k \mathbf i = \mathbf j
  • ji=k   kj=i   ik=j\mathbf j \mathbf i = -\mathbf k \ \ \ \mathbf k \mathbf j = -\mathbf i \ \ \ \mathbf i \mathbf k = -\mathbf j

你可能已经注意到了,i、j、k之间的关系非常像笛卡尔坐标系下单位向量的叉积规则:
x×y=z   y×z=x   z×x=yy×x=z   z×y=x   x×z=y\mathbf x\times \mathbf y = \mathbf z \ \ \ \mathbf y\times \mathbf z = \mathbf x \ \ \ \mathbf z\times \mathbf x = \mathbf y \\ \mathbf y\times \mathbf x = -\mathbf z \ \ \ \mathbf z\times \mathbf y = -\mathbf x \ \ \ \mathbf x\times \mathbf z = -\mathbf y

  • 实四元数: 一个实四元数是一个虚部向量为零向量的四元数:q=[s,0]q = [s,\mathbf {0}]
  • 纯四元数: 一个纯四元数是一个实部为零的四元数:q=[0,v]q = [0,\mathbf {v}]
  • 单位四元数: 它是一个s=0,vs=0,\mathbf{v}为单位向量的四元数。单位四元数可以表示三维空间中任意的一个旋转。

2.3 四元数的操作

2.3.1 四元数的加减

qa=[sa,a]qb=[sb,b]qa+qb=[sa+sb,a+b]qaqb=[sasb,ab]\begin{array}{rcl}q_a & = & [s_a,\mathbf{a}] \\ q_b & = & [s_b,\mathbf{b}] \\ q_a+q_b & = & [s_a+s_b,\mathbf{a}+\mathbf{b}] \\ q_a-q_b & = & [s_a-s_b,\mathbf{a}-\mathbf{b}]\end{array}

2.3.2 四元数的乘积(叉乘)

qa=[sa,a]qb=[sb,b]qaqb=[sa,a][sb,b]=(sa+xai+yaj+zak)(sb+xbi+ybj+zbk)=(sasbxaxbyaybzazb)+(saxb+sbxa+yazbybza)i+(sayb+sbya+zaxbzbxa)j+(sazb+sbza+xaybxbya)k\begin{array}{rcl}q_a & = & [s_a,\mathbf{a}] \\ q_b & = & [s_b,\mathbf{b}] \\ q_{a}q_{b} & = & [s_{a},\mathbf{a}][s_{b},\mathbf{b}] \\ & = & (s_{a}+x_{a}i+y_{a}j+z_{a}k)(s_{b}+x_{b}i+y_{b}j+z_{b}k) \\ & = & (s_{a}s_{b}-x_{a}x_{b}-y_{a}y_{b}-z_{a}z_{b}) \\ & & +(s_{a}x_{b}+s_{b}x_{a}+y_{a}z_{b}-y_{b}z_{a})i \\ & & +(s_{a}y_{b}+s_{b}y_{a}+z_{a}x_{b}-z_{b}x_{a})j \\ & & +(s_{a}z_{b}+s_{b}z_{a}+x_{a}y_{b}-x_{b}y_{a})k\end{array}
其中:
a=xai+yaj+zakb=xbi+ybj+zbk\mathbf{a} = x_{a}\mathbf{i}+y_{a}\mathbf{j}+z_{a}\mathbf{k} \\ \mathbf{b} = x_{b}\mathbf{i}+y_{b}\mathbf{j}+z_{b}\mathbf{k}
若用有序对形式来表示四元数乘积:
[sa,a][sb,b]=[sasbab,sab+sba+a×b][s_{a},\mathbf{a}][s_{b},\mathbf{b}]=[s_{a}s_{b}-\mathbf{a}\cdot\mathbf{b},s_{a}\mathbf{b}+s_{b}\mathbf{a}+\mathbf{a}\times\mathbf{b}]
其中:
ab=xaxb+yayb+zazba×b=(yazbybza)i+(zaxbzbxa)j+(xaybxbya)k\begin{array}{rcl}\mathbf{a}\cdot\mathbf{b} & = & x_{a}x_{b}+y_{a}y_{b}+z_{a}z_{b} \\ \mathbf{a}\times\mathbf{b} & = & (y_{a}z_{b}-y_{b}z_{a})\mathbf{i}+(z_{a}x_{b}-z_{b}x_{a})\mathbf{j}+(x_{a}y_{b}-x_{b}y_{a})\mathbf{k}\end{array}

四元数乘积的结果依然为四元数

2.3.3 四元数的数乘

q=[s,v]λq=λ[s,v]=[λs,λv]\begin{array}{rcl}q & = & [s,\mathbf{v}] \\ \lambda{q} & = & \lambda[s,\mathbf{v}] \\ & = & [\lambda{s},\lambda\mathbf{v}]\end{array}

2.3.4 四元数的模长

qa=[sa,va]qa=s2+v2sa2+xa2+ya2+za2\begin{array}{rcl}q_a & = & [s_a,\mathbf{v_a}] \\ ||q_a|| & = & \sqrt{s^2+v^2}\\ &&\sqrt{s_a^2+x_a^2+y_a^2+z_a^2}\end{array}

2.3.5 共轭四元数

共轭四元数的计算,就是将四元数的虚向量取反:
q=[s,v]q=[s,v]\begin{array}{rcl}q & = & [s,\mathbf{v}] \\ q^* & = & [s,-\mathbf{v}]\end{array}
四元数与自身的共轭四元数相乘会得到一个实四元数:
qq=[s,v][s,v]=[s2vv,sv+sv+v×v]=[s2+vv,0]=[s2+v2,0]\begin{array}{rcl}qq^* & = & [s,\mathbf{v}][s,-\mathbf{v}] \\ & = & [s^2-\mathbf{v}\cdot-\mathbf{v},-s\mathbf{v}+s\mathbf{v}+\mathbf{v}\times-\mathbf{v}] \\ & = & [s^2+\mathbf{v}\cdot\mathbf{v},\mathbf{0}] \\ & = & [s^2+v^2,\mathbf{0}]\end{array}

2.3.6 四元数的逆

四元数的逆用q1\mathbf q^{-1}表示。要计算四元数的逆,需要用四元数的共轭四元数去除以四元数的范数的平方:
q1=qq2q^{-1}=\frac{q^*}{||q||^2}
特殊情况: 对于单位四元数,由于q2=1||q||^2=1,因此:
q1=qq^{-1}=q^{*}

2.3.7 四元数的点乘

和向量的点积相似,我们也可以计算2个四元数的点积,只需要将各个对应的系数相乘,然后相加:
q1=[s1,x1i+y1j+z1k]q2=[s2,x2i+y2j+z2k]q1q2=s1s2+x1x2+y1y2+z1z2\begin{array}{rcl}q_1 & = & [s_1,x_1\mathbf{i}+y_1\mathbf{j}+z_1\mathbf{k}] \\ q_2 & = & [s_2,x_2\mathbf{i}+y_2\mathbf{j}+z_2\mathbf{k}] \\ q_1{\cdot}q_2 & = & s_{1}s_{2}+x_{1}x_{2}+y_{1}y_{2}+z_{1}z_{2}\end{array}
我们也可以利用四元数点积,来计算四元数之间的角度差:
cosθ=s1s2+x1x2+y1y2+z1z2q1q2\cos\theta=\frac{s_{1}s_{2}+x_{1}x_{2}+y_{1}y_{2}+z_{1}z_{2}}{|q_{1}||q_{2}|}
两个单位四元数之间的角度值为:
cosθ=s1s2+x1x2+y1y2+z1z2\cos\theta=s_{1}s_{2}+x_{1}x_{2}+y_{1}y_{2}+z_{1}z_{2}

2.4 用四元数来表示旋转

由于单位四元数可以表示三维空间中的任意一个旋转。假设存在初始点pp,经过旋转qq(四元数)后的的坐标为pp^{\prime}
为了将四元数作用于3D空间中的坐标点,首先需要将原坐标点转换为四元数形式:
p=[0,v]T=[0,x,y,z]Tp = [0,v]^T=[0,x,y,z]^T
计算出旋转变换后坐标点对应的四元数为:
p=qpq1p^{\prime} = qpq^{-1}
pp^{\prime}对应的虚部v(x,y,z)v^{\prime}(x^{\prime},y^{\prime},z^{\prime}),即变换后点在三维坐标系中的坐标值。
用四元数表示旋转: 即无冗余性,又没有奇异性。

2.5 四元数到其它旋转表示的转换

2.5.1 四元数转换到旋转向量

旋转向量的表示:θn\theta \bf{n}
其中n\bf{n}为旋转轴的方向[nx,ny,nz][n_x,n_y,n_z]θ\theta为绕该旋转轴旋转的角度。
四元数的表示:q=[s,v]=[q0,q1,q2,q3]q = [s,\bf{v}]=[q_0,q_1,q_2,q_3]
θ=2arccos(q0)[nx,ny,nz]T=[q1,q2,q3]T/sinθ2\theta = 2arccos (q_0)\\ [n_x,n_y,n_z]^T = [q_1,q_2,q_3]^T/{\sin{\frac{\theta}{2}}}

2.5.2 四元数转换到旋转矩阵:

R=vvT+s2I+2sv+(v)2R = vv^T + s^2I+2sv^{\wedge}+{(v^{\wedge})}^2

相关文章:

  • 2021-05-12
  • 2021-12-08
  • 2022-12-23
  • 2021-10-19
  • 2021-07-03
  • 2022-02-12
  • 2022-12-23
  • 2021-12-03
猜你喜欢
  • 2021-07-15
  • 2021-12-03
  • 2021-05-08
  • 2021-07-01
相关资源
相似解决方案