参考文献
1. 四元数的优势
- 解决欧拉角的万向锁死问题
- 仅需要存储4个浮点数(相比较矩阵而言)
- 求逆、串联等比矩阵更高效
2. 几个基本概念
空间中的子空间:一般而言,空间(维度>2)都存在更低维的子空间,比如二维空间中一维子空间,也就是直线;三维空间中的一维子空间和二维子空间,也就是直线和面。当超过三维的概念我们就很难去想象是什么样子,但四维空间一定会存在三维子空间或二维子空间。我们这里会加一个前缀超(hyper)来形容这些空间,比如高维空间中的平面我们称为超平面。
空间和子空间的映射:我们将二维空间表示为(x,y),当y=0时,其实可以看成是一维的,只不过它表示成(x,0)这种形式。推到四维,(w,x,y,z),当w=0时,(0,x,y,z)就是一个三维子空间,这也是为什么我们可以用单位四元数对三维向量进行操作,其实我们是将三维向量映射到四维的三维子空间(w=0,这种形式也成纯四元数),然后对其进行旋转,最终得到的向量结果依然是这个三维子空间中的,因而可以映射回三维空间。
此处关于单位四元数可用来对三位向量进行操作的解释需要补充,暂时不明白
广义球:这里的球是广义上的。我们在二维平面上,广义球其实指代circle,三维空间上就是我们认知上的球,称为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}的特征向量。
复数:大家都知道基本概念。
欧拉公式:
z
=
x
+
i
y
=
r
∗
c
o
s
θ
+
i
∗
r
s
i
n
θ
=
r
∗
e
i
θ
\begin{aligned} z&=x+iy \\ &=r*cos\theta+i*rsin\theta \\ &=r*e^{i\theta} \end{aligned}
z=x+iy=r∗cosθ+i∗rsinθ=r∗eiθ
从复数推导出四元数:将复数的一个虚部扩展成三个虚部,即两两相交{i,j,k}
e
i
∗
q
θ
/
2
=
c
o
s
(
θ
/
2
)
+
i
∗
q
s
i
n
(
θ
/
2
)
=
q
0
+
i
∗
q
=
q
0
+
i
q
1
+
j
q
2
+
k
q
3
\begin{aligned} e^{\textbf{i}*\textbf{q}\theta/2}&=cos(\theta/2)+\textbf{i}*\textbf{q}sin(\theta/2) \\ &=q_0+\textbf{i}*\textbf{q} \\ &=q_0+iq_1+jq_2+kq_3 \end{aligned}
ei∗qθ/2=cos(θ/2)+i∗qsin(θ/2)=q0+i∗q=q0+iq1+jq2+kq3
其中n为三维的单位向量,i²=j²=k²=i·j·k=-1
3.四元数特性
- 四元数(以后不特指四元数=单位四元数)是四维空间中一个超球上面的点,满足w²+x²+y²+z²=1;而纯四元数是四维空间在w=0时的一个子空间的点,形式为{0, q},特别注意的是纯四元数与四元数是不同的概念。
- 四元数是复数虚部扩展的结果,复数的虚部为1个,而四元数虚部有3个,且两两互相正交,其中实部是cosθ/2,而虚部为一个単位轴乘以sinθ/2。
- 四元数自由度并没有四个维度,由于存在w²+x²+y²+z²=1这个约束,它的自由度其实只有3,且每个四元数可以对应一个特征向量,即n。但请记住四元数并不是与特征向量一一对应的,后文会有说。
4. 乘法
由于四元数有i,j,k三个虚部,所以得满足i²=j²=k²=i·j·k=-1这个条件。这里令★为“乘法”操作符,则p★q的公式如下
- 封闭性:易证明,p和p的共轭相乘即可,|p★q|=1。
如何理解???
- 结合律:这条也很好证明,只要证明(p★q)★r=p★(q★r)。
- 单位元素:e=(1,0,0,0),这也是四元数的一个初始值(相当于单位矩阵)。带入上面的公式可知,p★(1,0,0,0)还是等于p。
- 逆元素:p存在一单位四元数,★操作的结果为e,具体参考下面公式,可以看出逆元素就是其共轭除以模的平方。
q ∗ q q − 1 = q ∗ ∣ q ∣ 2 q − 1 = q ∗ q ∗ / ∣ q ∣ 2 = q − 1 \begin{aligned} q^*qq^{-1}&=q^* \\ |q|^2q^{-1}&=q^* \\ q^*/|q|^2&=q^{-1} \end{aligned} q∗qq−1∣q∣2q−1q∗/∣q∣2=q∗=q∗=q−1
5. 指数、对数与内积
- 根据欧拉公式可知,四元数的指数形式只是换了一种表达方式,都是表达同一个东西。而其对数形式也就是四元数指数形式的指数,如下图公式所示。这对公式在计算四元数插值的时候很有用,这个后文再说。
e ( 0 , n θ / 2 ) = ( c o s θ / 2 , n s i n θ / 2 ) l n ( c o s θ / 2 , n s i n θ / 2 ) = ( 0 , n θ / 2 ) \begin{aligned} e^{(0,n\theta/2)}&=(cos\theta/2,nsin\theta/2) \\ ln(cos\theta/2,nsin\theta/2)&=(0,n\theta/2) \end{aligned} e(0,nθ/2)ln(cosθ/2,nsinθ/2)=(cosθ/2,nsinθ/2)=(0,nθ/2) - 那么对数和指数的关系是什么呢?我们参考下图,其实对数的变化量其实就是角度的大小,所以用下图可以很直观的看出四元数指数形式和对数形式之间的关系。
没看明白???
- 内积:我们先看三维空间或二维空间,如果两个单位向量算内积,内积的结果为两个向量的夹角。四元数也是如此,两个单位四元数的内积就是其夹角,这个结论推广到n维也是成立,原因很简单,因为三点共面,即使n维空间,两个向量所在的空间也仅是二维子空间。至于外积,由于对于复数和四元数来说,外积的意义均不是很明显,这里就不做过多讨论。
q = ( a , b , c , d ) p = ( t , x , y , z ) p ⋅ q = a t + b x + c y + d z q=(a,b,c,d) \\ p=(t,x,y,z) \\ p \cdot q=at+bx+cy+dz q=(a,b,c,d)p=(t,x,y,z)p⋅q=at+bx+cy+dz
TODO:部分原理理解还不是很好,待补充