四元数基础

原文链接

1复数

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

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

1.1 复数的运算

加法和减法

对应实部相加减,对应虚部相加减
( a 1 + b 1 i ) + ( a 2 + b 2 i ) = ( a 1 + a 2 ) + ( b 1 + b 2 ) 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)=(a1+a2)+(b1+b2)i
( a 1 + b 1 i ) − ( a 2 + b 2 i ) = ( a 1 − a 2 ) + ( b 1 − b 2 ) 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 i ) = λ a 1 + λ b 1 i \lambda (a_{1} + b_{1}\mathbf i) = \lambda a_{1} + \lambda b_{1}\mathbf i λ(a1+b1i)=λa1+λb1i

复数相乘

z 1 = ( a 1 + b 1 i ) z 2 = ( a 2 + b 2 i ) z 1 z 2 = ( a 1 + b 1 i ) ( a 2 + b 2 i ) = a 1 a 2 + a 1 b 2 i + b 1 a 2 i + b 1 b 2 i 2 z 1 z 2 = ( a 1 a 2 − b 1 b 2 ) + ( a 1 b 2 + b 1 a 2 ) i z_{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+b1i)(a2+b2i)=a1a2+a1b2i+b1a2i+b1b2i2z1z2=(a1a2b1b2)+(a1b2+b1a2)i

复数相除

z 1 = ( a 1 + b 1 i ) z 2 = ( a 2 + b 2 i ) z 1 z 2 = a 1 + b 1 i a 2 + b 2 i = ( a 1 + b 1 i ) ( a 2 − b 2 i ) ( a 2 + b 2 i ) ( a 2 − b 2 i ) = a 1 a 2 − a 1 b 2 i + b 1 a 2 i − b 1 b 2 i 2 a 2 2 + b 2 2 z_{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}} z1=(a1+b1i)z2=(a2+b2i)z2z1=a2+b2ia1+b1i=(a2+b2i)(a2b2i)(a1+b1i)(a2b2i)=a22+b22a1a2a1b2i+b1a2ib1b2i2

复数平方

z = ( a + b i ) z 2 = ( a + b i ) ( a + b i ) z 2 = ( a 2 − b 2 ) + 2 a b i z = (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)z2=(a+bi)(a+bi)z2=(a2b2)+2abi

共轭复数

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

复数的绝对值

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

虚数的i次幂

i 0 = 1 i 1 = i i 2 = − 1 i 3 = i i 2 = − i i 4 = i 2 i 2 = 1 i 5 = i i 4 = i i 6 = i i 5 = i 2 = − 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 i0=1i1=ii2=1i3=ii2=ii4=i2i2=1i5=ii4=ii6=ii5=i2=1

虚数的-i次幂

i 0 = 1 i − 1 = − i i − 2 = − 1 i − 3 = i i − 4 = 1 i − 5 = − i i − 6 = − 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 i0=1i1=ii2=1i3=ii4=1i5=ii6=1

复数平面

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

用复数表示旋转数

定义 q q q表示复数平面上任意角度的旋转
q = c o s θ + i s i n θ q = cos\theta + \mathbf i sin\theta q=cosθ+isinθ
定义复平面上初始坐标 p p p
p = a + b i p = a + b\mathbf i p=a+bi
p p p在经过旋转 q q q后,得到新的坐标为:
p q = ( a + b i ) ( cos ⁡ θ + i sin ⁡ θ ) a ′ + b ′ i = a cos ⁡ θ − b sin ⁡ θ + ( a sin ⁡ θ + b cos ⁡ θ ) 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} pqa+bi==(a+bi)(cosθ+isinθ)acosθbsinθ+(asinθ+bcosθ)i
用矩阵表示为:
[ a ′ − b ′ b ′ a ′ ] = [ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] [ a − b b a ] \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} [abba]=[cosθsinθsinθcosθ][abba]
这是复平面上点绕原点逆时针旋转任意角度的方法。

四元数

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

2.1 四元数的一般形式

q = s + x i + y j + z k    s , x , y , z ∈ R q=s+xi+yj+zk~~s,x,y,z\in\mathbb{R} q=s+xi+yj+zk  s,x,y,zR
也可以用有序对的形式,来表示四元数:
q = [ s , v ]    s ∈ R , v ∈ R 3 q = [ s , x i + y j + z k ]    s , x , y , z ∈ R q=[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} q=[s,v]  sR,vR3q=[s,xi+yj+zk]  s,x,y,zR

2.2 四元数本身的性质

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

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

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

2.3 四元数的操作

2.3.1 四元数的加减

q a = [ s a , a ] q b = [ s b , b ] q a + q b = [ s a + s b , a + b ] q a − q b = [ s a − s b , a − b ] \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} qaqbqa+qbqaqb====[sa,a][sb,b][sa+sb,a+b][sasb,ab]

2.3.2 四元数的乘积(叉乘)

q a = [ s a , a ] q b = [ s b , b ] q a q b = [ s a , a ] [ s b , 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 \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} qaqbqaqb=====[sa,a][sb,b][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
其中:
a = x a i + y a j + z a k b = x b i + y b j + z b k \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} a=xai+yaj+zakb=xbi+ybj+zbk
若用有序对形式来表示四元数乘积:
[ s a , a ] [ s b , b ] = [ s a s b − a ⋅ b , s a b + s b a + 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}] [sa,a][sb,b]=[sasbab,sab+sba+a×b]
其中:
a ⋅ b = x a x b + y a y b + z a z b a × b = ( y a z b − y b z a ) i + ( z a x b − z b x a ) j + ( x a y b − x b y a ) 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} aba×b==xaxb+yayb+zazb(yazbybza)i+(zaxbzbxa)j+(xaybxbya)k

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

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} qλq===[s,v]λ[s,v][λs,λv]

2.3.4 四元数的模长

q a = [ s a , v a ] ∣ ∣ q a ∣ ∣ = s 2 + v 2 s a 2 + x a 2 + y a 2 + z a 2 \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} qaqa==[sa,va]s2+v2 sa2+xa2+ya2+za2

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]
四元数与自身的共轭四元数相乘会得到一个实四元数:
q q ∗ = [ s , v ] [ s , − v ] = [ s 2 − v ⋅ − v , − s v + s v + v × − v ] = [ s 2 + v ⋅ v , 0 ] = [ s 2 + v 2 , 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} qq====[s,v][s,v][s2vv,sv+sv+v×v][s2+vv,0][s2+v2,0]

2.3.6 四元数的逆

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

2.3.7 四元数的点乘

和向量的点积相似,我们也可以计算2个四元数的点积,只需要将各个对应的系数相乘,然后相加:
q 1 = [ s 1 , x 1 i + y 1 j + z 1 k ] q 2 = [ s 2 , x 2 i + y 2 j + z 2 k ] q 1 ⋅ q 2 = s 1 s 2 + x 1 x 2 + y 1 y 2 + z 1 z 2 \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} q1q2q1q2===[s1,x1i+y1j+z1k][s2,x2i+y2j+z2k]s1s2+x1x2+y1y2+z1z2
我们也可以利用四元数点积,来计算四元数之间的角度差:
cos ⁡ θ = s 1 s 2 + x 1 x 2 + y 1 y 2 + z 1 z 2 ∣ q 1 ∣ ∣ q 2 ∣ \cos\theta=\frac{s_{1}s_{2}+x_{1}x_{2}+y_{1}y_{2}+z_{1}z_{2}}{|q_{1}||q_{2}|} cosθ=q1q2s1s2+x1x2+y1y2+z1z2
两个单位四元数之间的角度值为:
cos ⁡ θ = s 1 s 2 + x 1 x 2 + y 1 y 2 + z 1 z 2 \cos\theta=s_{1}s_{2}+x_{1}x_{2}+y_{1}y_{2}+z_{1}z_{2} cosθ=s1s2+x1x2+y1y2+z1z2

2.4 用四元数来表示旋转

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

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

2.5.1 四元数转换到旋转向量

旋转向量的表示: θ n \theta \bf{n} θn
其中 n \bf{n} n为旋转轴的方向 [ n x , n y , n z ] [n_x,n_y,n_z] [nx,ny,nz] θ \theta θ为绕该旋转轴旋转的角度。
四元数的表示: q = [ s , v ] = [ q 0 , q 1 , q 2 , q 3 ] q = [s,\bf{v}]=[q_0,q_1,q_2,q_3] q=[s,v]=[q0,q1,q2,q3]
θ = 2 a r c c o s ( q 0 ) [ n x , n y , n z ] T = [ q 1 , q 2 , q 3 ] 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}}} θ=2arccos(q0)[nx,ny,nz]T=[q1,q2,q3]T/sin2θ

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

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值