在二维空间中,我们用复数表示某点坐标,此时可以用加法表达点的移动,用乘法(乘以一个复数)表示点绕原点的旋转。
在三维空间中,我们无法无法用三维的“超级复合数”来表示点的移动和旋转。这也是四元数发明者汉姆尔顿(爱尔兰数学家)曾苦恼的地方。后来他想:为什么要坚持3位数表达,不用四位数来表达三维空间的移动和旋转呢?经过一系列证明,现在我们已经知道可以用四元数来表示三维空间的旋转,同理还存在八元数、十六元数等;但越往上就越会失去一些特性,比如四元数失去了交换律。
1.四元数简介
四元数分为向量和旋转角度 θ \theta θ。如果用三个数来表达,则不可避免会出现奇异情况(如欧拉角);而旋转矩阵有9个分量,浪费空间;四元数刚好无奇异表达,又节约空间。
四元数分为实部和虚部:
q = [ q 0 + q 1 i + q 2 j + q 3 k ] q = [q_0+q_1i+q_2j+q_3k] q=[q0+q1i+q2j+q3k] (2)
常写作: [ q 0 , q 1 , q 2 , q 3 ] [q_0,q_1,q_2,q_3] [q0,q1,q2,q3]
有时也将四元数用一个标量 q 0 q_0 q0,一个向量 [ q 1 , q 2 , q 3 ] [q_1,q_2,q_3] [q1,q2,q3] 来表示。
注: 高翔的博客中用实部在前、虚部在后的写法,而很多文章中采用虚部在前,实部在后的方式。但它们都对应于唯一的表达式(2),也就是这对四元数运算,如旋转公式 q p q − 1 qpq^{-1} qpq−1无影响。
假设绕空间中某一向量 n = [ n x , n y , n z ] T n = [n_x,n_y,n_z]^T n=[nx,ny,nz]T 旋转 θ \theta θ,则四元数 q = [ q 0 , q 1 , q 2 , q 3 ] q = [q_0,q_1,q_2,q_3] q=[q0,q1,q2,q3]式子为:
q = [ c o s θ 2 , n x s i n θ 2 , n y s i n θ 2 , n z s i n θ 2 ] ( 1 ) q = [cos\frac{\theta}{2}, n_xsin\frac{\theta}{2}, n_ysin\frac{\theta}{2}, n_zsin \frac{\theta}{2}] (1) q=[cos2θ,nxsin2θ,n