原文链接
1复数
为了引入四元数的概念和更好的理解四元数,首先回顾复数的相关概念。因为四元数的根源其实是复数。
虚数:
若i2=−1
则认为i就是虚数,这是在逻辑上不存在的数。
复数:
复数由实部和虚部构成,表示形式为:
z=a+bi a,b∈R, i2=−1
因此可以认为所有实数都是b=0的复数、所有虚数都是a=0的复数。
1.1 复数的运算
加法和减法
对应实部相加减,对应虚部相加减
(a1+b1i)+(a2+b2i)=(a1+a2)+(b1+b2)i
(a1+b1i)−(a2+b2i)=(a1−a2)+(b1−b2)i
与标量相乘
λ(a1+b1i)=λa1+λb1i
复数相乘
z1=(a1+b1i)z2=(a2+b2i)z1z2=(a1+b1i)(a2+b2i)=a1a2+a1b2i+b1a2i+b1b2i2z1z2=(a1a2−b1b2)+(a1b2+b1a2)i
复数相除
z1=(a1+b1i)z2=(a2+b2i)z2z1=a2+b2ia1+b1i=(a2+b2i)(a2−b2i)(a1+b1i)(a2−b2i)=a22+b22a1a2−a1b2i+b1a2i−b1b2i2
复数平方
z=(a+bi)z2=(a+bi)(a+bi)z2=(a2−b2)+2abi
共轭复数
复数的共轭就是指把复数的虚数部分变成负的。
z=(a+bi)z∗=(a−bi)
复数和它的共轭复数的乘积是:
zz∗=(a+bi)(a−bi)=a2−abi+abi+b2=a2+b2
复数的绝对值
z=(a+bi)∣z∣=zz∗=(a+bi)(a−bi)=a2+b2
虚数的i次幂
i0=1i1=ii2=−1i3=ii2=−ii4=i2i2=1i5=ii4=ii6=ii5=i2=−1
虚数的-i次幂
i0=1i−1=−ii−2=−1i−3=ii−4=1i−5=−ii−6=−1
复数平面
我们可以将复数映射到2D网格平面-复数平面,只需要把实数映射到横轴、虚数映射到纵轴。

对一个复数乘以i,这个复数就在复数平面上旋转了90度。
随机地在复数平面上取一个点:
p=2+i
p乘以i后得到q:
q=pi=(2+i)i=2i+i2=−1+2i
q乘以i后得到r:
r=qi=(−1+2i)i=−i+2i2=−2−i
r乘以i后得到s:
s=ri=(−2−i)i=−2i−i2=1−2i
s乘以i后得到t:
t=si=(1−2i)i=i−2i2=2+i

用复数表示旋转数
定义q表示复数平面上任意角度的旋转:
q=cosθ+isinθ
定义复平面上初始坐标p:
p=a+bi
p在经过旋转q后,得到新的坐标为:
pqa′+b′i==(a+bi)(cosθ+isinθ)acosθ−bsinθ+(asinθ+bcosθ)i
用矩阵表示为:
[a′b′−b′a′]=[cosθsinθ−sinθcosθ][ab−ba]
这是复平面上点绕原点逆时针旋转任意角度的方法。
四元数
四元数在复数的基础上额外增加两个虚数,从而把这些概念拓展到3维空间。
2.1 四元数的一般形式
q=s+xi+yj+zk s,x,y,z∈R
也可以用有序对的形式,来表示四元数:
q=[s,v] s∈R,v∈R3q=[s,xi+yj+zk] s,x,y,z∈R
2.2 四元数本身的性质
- i2=j2=k2=ijk=−1
- ij=k jk=i ki=j
- ji=−k kj=−i ik=−j
你可能已经注意到了,i、j、k之间的关系非常像笛卡尔坐标系下单位向量的叉积规则:
x×y=z y×z=x z×x=yy×x=−z z×y=−x x×z=−y
-
实四元数: 一个实四元数是一个虚部向量为零向量的四元数:q=[s,0]
-
纯四元数: 一个纯四元数是一个实部为零的四元数:q=[0,v]
-
单位四元数: 它是一个s=0,v为单位向量的四元数。单位四元数可以表示三维空间中任意的一个旋转。
2.3 四元数的操作
2.3.1 四元数的加减
qaqbqa+qbqa−qb====[sa,a][sb,b][sa+sb,a+b][sa−sb,a−b]
2.3.2 四元数的乘积(叉乘)
qaqbqaqb=====[sa,a][sb,b][sa,a][sb,b](sa+xai+yaj+zak)(sb+xbi+ybj+zbk)(sasb−xaxb−yayb−zazb)+(saxb+sbxa+yazb−ybza)i+(sayb+sbya+zaxb−zbxa)j+(sazb+sbza+xayb−xbya)k
其中:
a=xai+yaj+zakb=xbi+ybj+zbk
若用有序对形式来表示四元数乘积:
[sa,a][sb,b]=[sasb−a⋅b,sab+sba+a×b]
其中:
a⋅ba×b==xaxb+yayb+zazb(yazb−ybza)i+(zaxb−zbxa)j+(xayb−xbya)k
四元数乘积的结果依然为四元数
2.3.3 四元数的数乘
qλq===[s,v]λ[s,v][λs,λv]
2.3.4 四元数的模长
qa∣∣qa∣∣==[sa,va]s2+v2sa2+xa2+ya2+za2
2.3.5 共轭四元数
共轭四元数的计算,就是将四元数的虚向量取反:
qq∗==[s,v][s,−v]
四元数与自身的共轭四元数相乘会得到一个实四元数:
qq∗====[s,v][s,−v][s2−v⋅−v,−sv+sv+v×−v][s2+v⋅v,0][s2+v2,0]
2.3.6 四元数的逆
四元数的逆用q−1表示。要计算四元数的逆,需要用四元数的共轭四元数去除以四元数的范数的平方:
q−1=∣∣q∣∣2q∗
特殊情况: 对于单位四元数,由于∣∣q∣∣2=1,因此:
q−1=q∗
2.3.7 四元数的点乘
和向量的点积相似,我们也可以计算2个四元数的点积,只需要将各个对应的系数相乘,然后相加:
q1q2q1⋅q2===[s1,x1i+y1j+z1k][s2,x2i+y2j+z2k]s1s2+x1x2+y1y2+z1z2
我们也可以利用四元数点积,来计算四元数之间的角度差:
cosθ=∣q1∣∣q2∣s1s2+x1x2+y1y2+z1z2
两个单位四元数之间的角度值为:
cosθ=s1s2+x1x2+y1y2+z1z2
2.4 用四元数来表示旋转
由于单位四元数可以表示三维空间中的任意一个旋转。假设存在初始点p,经过旋转q(四元数)后的的坐标为p′。
为了将四元数作用于3D空间中的坐标点,首先需要将原坐标点转换为四元数形式:
p=[0,v]T=[0,x,y,z]T
计算出旋转变换后坐标点对应的四元数为:
p′=qpq−1
p′对应的虚部v′(x′,y′,z′),即变换后点在三维坐标系中的坐标值。
用四元数表示旋转: 即无冗余性,又没有奇异性。
2.5 四元数到其它旋转表示的转换
2.5.1 四元数转换到旋转向量
旋转向量的表示:θn
其中n为旋转轴的方向[nx,ny,nz],θ为绕该旋转轴旋转的角度。
四元数的表示:q=[s,v]=[q0,q1,q2,q3]
θ=2arccos(q0)[nx,ny,nz]T=[q1,q2,q3]T/sin2θ
2.5.2 四元数转换到旋转矩阵:
R=vvT+s2I+2sv∧+(v∧)2