四元数就是4个数的组合(q, a, b, c),或者记作
四元数是爱尔兰数学家哈密尔顿1841年发现的,是理论领先实际的一个例子,数学中很多内容都是这样,黎曼集合解释相对论,数论知识用于密码学都是这样,因为复数有一个很好的几何解释,就是二维空间的旋转, i=−1−−−√ 可以看做是二维空间的旋转,数1逆时针旋转90度得到i,再旋转90度得到-1。于是哈密尔顿那个时代很多数学家都希望把复数进行推广,得到一个3维空间中旋转的类似复数的东西,哈密尔顿也在做这样的工作,但是他发现无论如何定义三元组的乘法,都没法实现除法,据说1842年的某一天他来到法国都林布鲁姆桥上突然想到,向三元组增加第4个数就会让除法成为可能
哈密尔顿深入研究了四元数,他生命最后22年基本就在干两件事,研究四元数和说服别人接受四元数,写了上千页的数。人们问哈密尔顿,四元数的第四维意义是啥,哈密尔顿说是时间,他成了将时空联系起来的第一任,虽然只是在一个数学元素中。所以四元数不被当时的人们接受,因为至少在当时,这个东西基本没有实用价值,连当时连最顶级的科学家都说这是“不祥之物“,比如汤普森、麦克斯韦。直到20世纪人们才完全接受了四元数,理解了他的物理意义就是三维空间的旋转,也是表示三维空间物体自转的最好方式,用于三维图形学,还有质子、中字、电子这些微小但愿的研究。比如unity中物体的旋转用的就是四元数,虽然也可以用欧拉角表示旋转。
四元数不能被接受的一个原因是其计算不满足交换律 ab≠ba ,以前的人觉得这应该是理所当然的,当然现在的数学家已经不这么认为了,不满足啥都行,只要值得研究,顶多就是多增加个数学词汇。四元数被理所当然推广到更多元数,8元数,16元数,维数增加一倍就减少一些性质,8元数不满足结合律,16元数则根本不可能有除法。再推广就是更普遍的代数结构:环:加法减法乘法,群:加减法或乘除法。
构件在三维空间中的有限转动,可依次用三个相对转角表示,即进动角、章动角和自旋角,这三个转角统称为欧拉角。——引自百度百科
莱昂哈德·欧拉用欧拉角来描述刚体在三维欧几里得空间的取向。对于任何一个参考系,一个刚体的取向,是依照顺序,从这参考系,做三个欧拉角的旋转而设定的。所以,刚体的取向可以用三个基本旋转矩阵来决定。换句话说,任何关于刚体旋转的旋转矩阵是由三个基本旋转矩阵复合而成的。——引自wikipedia
绕3个轴旋转一定角度的矩阵为
取一个轴,比如x轴为基准,假设旋转轴为 nˆ=ai+bj+ck ,假设 nˆ 表示为球坐标,水平角度为 ϕ ,垂直角度为 θ ,则旋转矩阵为
用欧拉角表示旋转的问题就是万向节死锁,死锁其实没有锁死,这个问题的关键是在”死锁“发生的情况下,用欧拉角表示的旋转没法在三维空间平滑过渡,在很多情况下,可以通过巧妙选择旋转顺序避免万向节死锁的发生,但是没有能够完全解决这个问题的办法。四元数则完全没有这个问题
四元数相关内容研究的就是四元数作为一个代数结构的各种运算,包括各种表示和运算操作,最基本的内容就是:
表示
q=s+xi+yj+zks,x,y,z∈R,i2=j2=k2=−1
q=[s+v]s∈R,v∈R3
加减运算
ij=k,jk=i,ki=j,ijk=−1 ,满足结合律
+− 就是各个元素分开加减
共轭
q=[s,v],q∗=[s,−v]
模
|z|=s2+v2−−−−−−√
标准四元数
模为1的四元数
乘法
qaqb=[sa,a][sb,b]=[sasb−a⋅b,Sab+sba+a×b]
逆
q−1=q∗|q|2
令q为标准四元数 q=[s,v],|s|2+|v|2=1 ,可以表示为 q=cosθ+sinθv 。令 p=[0,p] ,对点 p 绕轴v旋转角度 θ 可以用下式实现
Quaternions for computer graphics by John Vince
介绍四元数很好的书
http://www.cnitblog.com/luckydmz/archive/2010/09/07/68674.html
这个网页里面的视频很好地解释了万向节死锁