1. 基本概念
-
空间中的子空间:
一般而言,空间(维度>2)都存在更低维的子空间。比如二维空间中一维子空间,也就是直线;三维空间中的一维子空间和二维子空间,也就是直线和面。 -
空间和子空间的映射:我们将二维空间表示为(x,y),当y=0时,其实可以看成是一维的,只不过它表示成(x,0)这种形式。推到四维,(w,x,y,z),当w=0时,(0,x,y,z)就是一个三维子空间,这也是为什么我们可以用单位四元数对三维向量进行操作,其实我们是将三维向量映射到思维的三维子空间中,然后对其进行旋转,最终得到的向量结果依然是这个三维子空间中的,因而可以映射回三维空间。
-
广义球 : 我们在二维平面上,广义球只带cirecle, 三维空间上就是我们认知上的球,称为two-sphere。 而四维空间中广义球其实是一个超球(hyper-sphere),又称为three-sphere。单位向量其实就是广义球上面的点,而单位四元数也就是three-sphere上面的点。
-
特征与特征向量: 空间中的一点由x,y,z等参数来表示,一般来说参数的数量与维度相等,二维空间的点用{x,y}参数,四维空间的点用{x,y,z,w}参数。但是对于空间的点加以约束,则会减少参数的数量。比如三维空间的点在某一单位球面上,原本三个参数{x, y, z}才能表达的点现在只需要两个参数{u, v}就可以表达。如果{u, v}是单位向量,也可以称{u, v}是{x, y, z}的特征向量。
-
四元数是四维空间中一个超球上面的点,满足 w 2 + x 2 + y 2 + z 2 = 1 w^2 + x^2 + y^2 + z^2=1 w2+x2+y2+z2=1;而纯四元数是四维空间在w=0时的一个子控件的点,形式为 { 0 , q ⃗ } \{0,\vec q\} { 0,q },特别注意的是纯四元数与四元数是不同的概率。
-
四元数是复数虚部扩展的结果,复数的虚部为1个,而四元数的虚部有三个,且两两互相正交,其中实部是 c o s θ / 2 cos\theta/2 cosθ/2,而虚部为一个单位轴乘以 s i n θ / 2 sin\theta/2 sinθ/2
-
四元数自由度并没有四个维度,由于存在 w 2 + x 2 + y 2 + z 2 = 1 w^2 + x^2 + y^2 + z^2=1 w2+x2+y2+z2=1这个约束,它的自由度其实只有3,且每个四元数可以对应一个特征向量,即 n ⃗ \vec n n 。注意四元数并不是与特征向量意一一对应的。
-
四元数通常定义为
q = q 0 + q 1 i + q 2 j + q 3 k \mathbf q= q_0 + q_1\mathbf i + q_2\mathbf j + q_3\mathbf k q=q0+q1i+q2j+q3k
其中 i , j , k i,j,k i,j,k满足
i 2 = − 1 , j 2 = − 1 , k 2 = − 1 i j = − j i = k , j k = − k j = i , k i = − i k = j \mathbf i ^2 = -1,\mathbf j ^2 = -1,\mathbf k ^2 = -1\\ \mathbf i\mathbf j=-\mathbf j\mathbf i = \mathbf k,\mathbf j\mathbf k=-\mathbf k\mathbf j = \mathbf i,\mathbf k\mathbf i=-\mathbf i\mathbf k = \mathbf j i2=−1,j2=−1,k2=−1ij=−ji=k,jk=−kj=i,ki=−ik=j
q 0 q_0 q0是四元数的实数或标量部分, q 1 i + q 2 j + q 3 k q_1\mathbf i + q_2\mathbf j + q_3\mathbf k q1i+q2j+q3k是虚数或矢量部分。因此,四元数也可以写成四维列矩阵,由下式给出:
q = [ q 0 v ] = [ q 0 , q 1 , q 2 , q 3 ] T \mathbf q= \begin{bmatrix}q_0 \\ \mathbf v \end{bmatrix}=[ q_0, q_1, q_2, q_3]^T q=[q0v]=[q0,q1,q2,q3]T。
如果 q 0 , v q_0, \mathbf v q0,v满足
v = [ k x s i n ( θ / 2 ) k x s i n ( θ / 2 ) k x s i n ( θ / 2 ) ] = k ^ s i n ( θ / 2 ) , q 0 = c o s ( θ / 2 ) \mathbf v =\begin{bmatrix} k_xsin(\theta/2) \\k_xsin(\theta/2) \\k_xsin(\theta/2)\end{bmatrix} = \hat k sin(\theta / 2), q_0 = cos(\theta / 2) v= kxsin(θ/2)kxsin(θ/2)kxsin(θ/2) =k^sin(θ/2),q0=cos(θ/2)
元素 q 0 、 … 、 q 3 q_0、…、q3 q0、…、q3被称为“旋转四元数”或“欧拉对称参数”(Euler symmetric parameters)。描述了沿轴的单位向量和旋转角。
2. 四元数的表示方法
复数式 : q = q 0 + q 1 i + q 2 j + q 3 k \mathbf q= q_0 + q_1\mathbf i + q_2\mathbf j + q_3\mathbf k q=q0+q1i+q2j+q3k
矢量式 : q = q 0 + v \mathbf q= q_0 + \mathbf v q=q0+v
三角式 : q = c o s ( θ / 2 ) + k ^ s i n ( θ / 2 ) \mathbf q= cos(\theta / 2)+ \hat k sin(\theta / 2) q=cos(θ/2)+k^sin(θ/2)
四元数 c o s θ / 2 + i ∗ s i n θ / 2 cosθ/2+i*sinθ/2 cosθ/2+i∗sinθ/2就表示“绕矢量 k ^ \hat k k^ 旋转θ角
指数式 : q = e k ^ θ 2 \mathbf q= e^{\hat k \frac{\theta }{2}} q=ek^2θ
矩阵式 : q = [ q 0 , q 1 , q 2 , q 3 ] T \mathbf q= [q_0,q_1, q_2, q_3]^T q=[q0,q1,q2,q3]T
3. 四元数的性质
假设现在有两个四元数 q a = q a + v a \mathbf q_a= q_a + \mathbf v_a qa=qa+va, q b = q b + v b \mathbf q_b= q_b + \mathbf v_b qb=qb+vb
-
加法: q a + q b = [ q a + q b , v a + v b ] T \mathbf q_a + \mathbf q_b = [q_a+q_b,\mathbf v_a + \mathbf v_b]^T qa+qb=[qa+qb,va+vb]T
-
乘法: q a q b = [ q a q b − v a T v b , q a v b + q b v a + v a × v b ] T \mathbf q_a \mathbf q_b = [q_aq_b-\mathbf v_a^T \mathbf v_b,\mathbf q_a\mathbf v_b + \mathbf q_b\mathbf v_a +\mathbf v_a \times \mathbf v_b]^T qaqb=[qaqb−vaTvb,qavb+qbva+va×vb]T
-
模长: ∣ ∣ q a q b ∣ ∣ = ∣ ∣ q a ∣ ∣ ⋅ ∣ ∣ q b ∣ ∣ ||\mathbf q_a \mathbf q_b|| = ||\mathbf q_a ||\cdot ||\mathbf q_b || ∣∣qaqb∣∣=∣∣qa∣∣⋅∣∣qb∣∣
-
共轭:
四元数的共轭是把虚数写成相反数: q a ∗ = q a − v a \mathbf q_a^*= q_a - \mathbf v_a qa∗=qa−va
四元数共轭与其本身相乘,会得到一个实四元数,其实部为模长的平方:
q ∗ q = q q ∗ = [ q a 2 + v a T v a , 0 ] T \mathbf q^*\mathbf q = \mathbf q\mathbf q^*=[q_a^2 + \mathbf v_a^T\mathbf v_a,\mathbf 0]^T q∗q=qq∗=[qa2+vaTva,0]T -
逆:
一个四元数的逆为
q − 1 = q ∗ / ∣ ∣ q ∣ ∣ 2 \mathbf q^{-1}=\mathbf q^*/||\mathbf q||^2 q−1=q∗/∣∣q∣∣2
如果 q \mathbf q q为单位四元数,其逆和共轭就是同一个量。
同时,乘积的逆具有和矩阵相似的性质:
( q a q b ) − 1 = q b − 1 q a − 1 (\mathbf q_a\mathbf q_b)^{-1}=\mathbf q_b^{-1}\mathbf q_a^{-1} (qaqb)−1=qb−1qa−1 -
数乘: k q a = [ k q a , k v a ] T k\mathbf q_a=[kq_a,k\mathbf v_a]^T kqa=[kqa,kva]T
4. 四元数乘法
-
复数式
q ⊗ p = ( q 0 + q 1 i + q 2 j + q 3 k ) ( p 0 + p 1 i + p 2 j + p 3 k ) = [ p 0 q 0 − p 1 q 1 − p 2 q 2 − p 3 q 3 p 1 q 0 + p 0 q 1 + p 2 q 3 − p 3 q 2 p 2 q 0 + p 0 q 2 + p 3 q 1 − p 1 q 3 p 3 q 0 + p 0 q 3 + p 1 q 2 − p 2 q 1 ] \mathbf q \otimes \mathbf p=(q_0 + q_1\mathbf i + q_2\mathbf j + q_3\mathbf k)(p_0 + p_1\mathbf i + p_2\mathbf j + p_3\mathbf k )\\ = \begin{bmatrix} p_0q_0 - p_1q_1 - p_2q_2 -p_3q_3\\ p_1q_0 + p_0q_1 + p_2q_3 -p_3q_2 \\ p_2q_0 + p_0q_2 + p_3q_1 -p_1q_3 \\ p_3q_0 + p_0q_3 + p_1q_2 -p_2q_1\end{bmatrix} q⊗p=(q0+q1i+q2j+q3k)(p0+p1i+p2j+p3k)= p0q0−p1q1−p2q2−p3q3p1q0+p0q1+p2q3−p3q2p2q0+p0q2+p3q1−p1q3p3q0+p0q3+p1q2−p2q1 -
矢量式
q ⊗ p = ( q 0 + v a ) ( p 0 + v b ) = q 0 p 0 + q 0 v b + p 0 v + v a × v b − v a ⋅ v b = q 0 p 0 − v a ⋅ v b + q 0 v b + p 0 v a + v a × v b \mathbf q \otimes \mathbf p=(q_0 + \mathbf v_a)(p_0 + \mathbf v_b)\\ =q_0p_0+q_0\mathbf v_b+p_0\mathbf v+\mathbf v_a\times \mathbf v_b - \mathbf v_a\cdot \mathbf v_b\\ =q_0p_0- \mathbf v_a\cdot \mathbf v_b+q_0\mathbf v_b+p_0\mathbf v_a+\mathbf v_a\times \mathbf v_b q⊗p=(q0+va)(p0+vb)=q0p0+q0vb+p0v+va×vb−va⋅vb=q0p0−va⋅vb+q0vb+p0va+va×vb
其中 q 0 p 0 − v a ⋅ v b q_0p_0- \mathbf v_a\cdot \mathbf v_b q0p0−va⋅vb为标量部分, q 0 v b + p 0 v a + v a × v b q_0\mathbf v_b+p_0\mathbf v_a+\mathbf v_a\times \mathbf v_b q0vb+p0va+va×vb为矢量部分
注意 v b , v a \mathbf v_b,\mathbf v_a vb,va矢量相乘的结果等于叉乘的结果减去点乘的结果
- 矩阵式 :
q = [ q 0 , q 1 , q 2 , q 3 ] T \mathbf q= [q_0, q_1, q_2, q_3]^T q=[q0,q1,q2,q3]T
p = [ p 0 , p 1 , p 2 , p 3 ] T \mathbf p= [p_0, p_1, p_2, p_3]^T p=[p0,p1,p2,p3]T
q ⊗ p = ( q 0 + q 1 i + q 2 j + q 3 k ) ( p 0 + p 1 i + p 2 j + p 3 k ) = [ p 0 − p 1 − p 2 − p 3 p 1 p 0 − p 3 p 2 p 2 p 3 p 0 − p 1 p 3 − p 2 p 1 p 0 ] [ q 0 q 1 q 2 q 3 ] = [ q 0 − q 1 − q 2 − q 3 q 1 q 0 q 3 − q 2 q 2 − q 3 q 0 q 1 q 3 q 2 − q 1 q 0 ] [ p 0 p 1 p 2 p 3 ] = [ q 0 − v a T v a q 0 I 3 × 3 + [ v a × ] ] [ p 0 v b ] = [ q 0 p 0 − v a T v b p 0 v a + q 0 v b + v a × v b ] = L ( q ) p = [ p 0 − v b T v b p 0 I 3 × 3 − [ v b × ] ] [ q 0 v a ] = R ( p ) q \mathbf q \otimes \mathbf p=(q_0 + q_1\mathbf i + q_2\mathbf j + q_3\mathbf k)(p_0 + p_1\mathbf i + p_2\mathbf j + p_3\mathbf k )\\{}\\ = \begin{bmatrix} p_0 & -p_1&-p_2&-p_3\\ p_1 & p_0 & -p_3 & p_2\\ p_2 & p_3 & p_0 & -p_1\\ p_3 & - p_2 & p_1 & p_0\end{bmatrix} \begin{bmatrix} q_0\\ q_1\\q_2\\ q_3\end{bmatrix} \\{}\\ = \begin{bmatrix} q_0 & -q_1&-q_2&-q_3\\ q_1 & q_0 & q_3 & -q_2\\ q_2 & -q_3 & q_0 & q_1\\ q_3 & q_2 & -q_1 & q_0\end{bmatrix} \begin{bmatrix} p_0\\ p_1\\p_2\\ p_3\end{bmatrix}\\{}\\ = \begin{bmatrix} q_0 &-\mathbf v_a^T\\ \mathbf v_a & q_0\mathbf I_{3\times3} +[\mathbf v_a\times]\end{bmatrix} \begin{bmatrix} p_0\\ \mathbf v_b\end{bmatrix} = \begin{bmatrix} q_0p_0 -\mathbf v_a^T \mathbf v_b\\ p_0\mathbf v_a + q_0 \mathbf v_b + \mathbf v_a\times \mathbf v_b \end{bmatrix} \\ =\mathcal L(\mathbf q)\mathbf p \\{}\\ = \begin{bmatrix} p_0 &-\mathbf v_b^T\\ \mathbf v_b & p_0\mathbf I_{3\times3} -[\mathbf v_b\times]\end{bmatrix} \begin{bmatrix} q_0\\ \mathbf v_a\end{bmatrix} \\ =\mathcal R(\mathbf p)\mathbf q q⊗p=(q0+q1i+q2j+q3k)(p0+p1i+p2j+p3k)= p0p1p2p3−p1p0p3−p2−p2−p3p0p1−p3p2−p1p0 q0q1q2q3 = q0q1q2q3−q1q0−q3q2−q2q3q0−q1−q3−q2q1q0 p0p1p2p3 =[q0va−vaTq0I3×3+[va×]][p0vb]=[q0p0−vaTvbp0va+q0vb+va×vb]=L(q)p=[p0vb−vbTp0I3×3−[vb×]][q0va]=R(p)q
5. 用四元数表示旋转
假设有一个空间三维点 p = [ x , y , z ] ∈ R 3 \mathbf p=[x,y,z] \in \mathbb R^3 p=[x,y,z]∈R3,以及一个由单位四元数 q \mathbf q q指定的旋转。三维点 p \mathbf p p经过旋转之后变为 p ′ \mathbf p' p′。如果使用矩阵描述,那么有 p ′ = R p \mathbf p'=\mathbf R \mathbf p p′=Rp,如果用四元数描述旋转,则表示为 p ′ = q p q − 1 \mathbf p'=\mathbf q \mathbf p\mathbf q^{-1} p′=qpq−1
此处的乘法均为四元数乘法,结果也是四元数。最后把 p ′ \mathbf p' p′的虚部取出来,即得到旋转之后的点的坐标。
证明 : 假设单位四元数 q = [ q 0 , v a ] T \mathbf q= [q_0, \mathbf v_a]^T q=[q0,va]T,三维点 p = [ 0 , v b ] T \mathbf p= [0,\mathbf v_b]^T p=[0,vb]T
乘法: q a q b = [ q a q b − v a T v b , q a v b + q b v a + v a × v b ] T \mathbf q_a \mathbf q_b = [q_aq_b-\mathbf v_a^T \mathbf v_b,\mathbf q_a\mathbf v_b + \mathbf q_b\mathbf v_a +\mathbf v_a \times \mathbf v_b]^T qaqb=[qaqb−vaTvb,qavb+qbva+va×vb]T
则有 r = q p = [ − v a T v b , q 0 v b + v a × v b ] T \mathbf r = \mathbf q \mathbf p = [-\mathbf v_a^T \mathbf v_b,q_0 \mathbf v_b + \mathbf v_a \times \mathbf v_b]^T r=qp=[−vaTvb,q0vb+va×vb]T
q − 1 = q ∗ / ∣ ∣ q ∣ ∣ 2 \mathbf q^{-1}=\mathbf q^*/||\mathbf q||^2 q−1=q∗/∣∣q∣∣2,所以单位四元数的逆即为 q ∗ \mathbf q^* q∗
则 p ′ = q p q − 1 = r q ∗ \mathbf p'=\mathbf q \mathbf p\mathbf q^{-1} = \mathbf r\mathbf q^* p′=qpq−1=rq∗
其实部为 v a × v b ⋅ v a \mathbf v_a \times \mathbf v_ b \cdot \mathbf v_a va×vb⋅va
由于 v a × v b \mathbf v_a \times \mathbf v_ b va×vb 和 v a \mathbf v_a va垂直,因此 p ′ \mathbf p' p′的实部为0,即旋转后的点仍然是一个虚四元数