四元数、欧拉角学习笔记&个人理解


一、背景知识:复数乘法与向量内积、外积

在这里插入图片描述
          i、j、k三轴定义如上图所示。满足右手螺旋定则:
在这里插入图片描述
          复数的乘法:(ai+bj+ck)×(xi+yj+zk)=(ax)i×i+(ay)i×j+(az)i×k+(bx)j×i+(by)j×j+(bz)j×k+(cx)k×i+(cy)k×j+(cz)k×k = -(aa+bb+c*c)+(bz-cy)i+(cx-az)j+(ay-bx)z
          向量内积:(a,b,c)·(x,y,z) = ax+by+cz
          向量外积:(a,b,c)×(x,y,z) = ax+by+cz
(e1、e2、e3分别为i、j、k三轴上的单位向量)
          由此可知:
复数乘法(ai+bj+ck)×(xi+yj+zk)=-(向量内积)+(向量外积) 【形式上相等】

二、二维复数表示旋转

         二维复数可以表示二维平面上的旋转。

         如:定义待旋转的复数p=2+i,定义旋转因子q=cos45+isin45
在这里插入图片描述
  如下图所示
在这里插入图片描述
          旋转因子q左乘被旋转复数p表示p逆时针转45°。

三、为什么三维旋转用四维复数表示而不用三维复数

原贴见:

https://blog.csdn.net/u011760195/article/details/85346704

          若用实轴x、ij两个虚轴表示旋转因子q和被旋转复数p,那么p绕某个轴转动时,有:

x轴绕j轴转动:x×(a+bi) [j不出现]
i轴绕x轴转动:i×(a+bj) [x不出现]

        此时会出现一个问题,i×j这一项并不能表示实轴x,因为没有规定。i×i=-1是可以的,但i×j不是实数。因此,由于i、j、x三轴虽然呈相互垂直关系,但无法用叉乘相互表示,不满足计算的需求。因此引入四维复数(四元数),在三维复数的基础上再引入一个虚轴k,而将实轴x=0隐去,此时ijk三轴满足叉乘相互表示(右手螺旋定则)。
          因此,用四维复数替代三维复数只是因为实轴x无法通过i×j表示,不满足计算需要而已。将四维复数的实部置零,形式上是四维,当实际上用的时候是三维,实部是不需要的。
         另一个角度思考:(如被转复数p=2只含有实部时,这个点既可以说是一维轴上的一个点,也可以说是二维平面内的一个点。低维的点、线、面等都既可以存在于它自身的维度上,又可以存在于任意更高的维度内。)二维中,旋转因子q=a+bi可以将原本在实轴上的一维的点转进二维的平面里。乘以几维的复数就是在几维空间中进行旋转,比如乘以四维复数,那么就是在四维空间中进行旋转。但是旋转并不一定会把实轴上的一维的p转到二维平面上去,比如二维平面上有p=2,旋转因子定义为q=3,那么p、q都可以看做虚部为0的二维复数,此时旋转p’=q×p=6,此时的旋转只是在实轴上,并没有把p转进二维平面上。四元数表示的三维空间中的旋转也是这个道理,p是一个纯四元数,实部为0,是实实在在的三维空间中的一个向量,我们对p乘以另一个四元数q时,实际上是在四维空间中进行的一个旋转,只不过如同二维平面上一样,我们可以通过某种方式让p的旋转只保持在三维空间中,而不至于转到四维空间中去。
          另外,引自:

https://blog.csdn.net/linyijiong/article/details/79777399

…所以从始至终,四元数定义的都是四维旋转,而不是三维旋转!……说白了,三维旋转就是四维旋转的一个特例,就像二维旋转是三维旋转的一个特例一样。……qpq-1这种左乘单位四元数,右乘其共轭的表达式……这个运算形式是为了限制其运算结果所在的空间。简单的说,当对一个三维向量进行三维旋转后,我们希望得到的是一个三维向量。……那么这个左乘单位四元数,右乘其共轭的运算保证了结果是一个在三维超平面上中的纯四元数。

四、四元数的书写表示

          设四元数表示为:[s,v],其中s为一个实数,是四元数的实部。v是3维向量(或看成3维纯虚数),v=xi+yj+zk。则四元数相乘计算为:q1×q2=[sa , va]×[sb , vb]=[sa•sb+va•vb , sa•vb+sb•va+va×vb]
          定义:
         单位四元数:q=[s , v],|q|=1
          纯四元数:q=[0 , v],即实部为0,是一个三维空间中的向量

五、四元数表示旋转

原贴见:

https://blog.csdn.net/linyijiong/article/details/79777399

          二维空间中,旋转因子q=cosθ+sinθi,由上一部分的四元数书写表示,亦可将二维的旋转因子表示为q=[ cosθ,sinθv],其中v为一维纯虚数,v=i。三维空间中既然要用四维复数表示旋转,那么也可以定义旋转因子为:q=[ cosθ,sinθv],其中v为三维纯虚数,v=ai+bj+cz。(留一个问题:二维平面上q能画出来,三维空间中这个q呢?
          现有被旋转三维复数写成四维的纯四元数形式:p=[0,p],旋转因子q=[ cosθ,sinθv], 则p’=q×p=[ sinθv•p , cosθ•p+ sinθv×p]
          ①v和p正交时,绕v旋转45°,则p’=[ 0 , cosθ•p+ sinθv×p]
          举例:p=[0,2i] q=[√2/2,√2/2 v],为了v和p正交,不妨设v=k,
          则p’=[0, √2i+√2k×i]=[0, √2i+√2j],旋转过程如下图,绕k轴旋转45°。
在这里插入图片描述
          ② v和p不正交时,绕v旋转45°,则p’=[ sinθv•p , cosθ•p+ sinθv×p]
          举例:p=[0,2i]不变, q=[√2/2,√2/2 v],为了v和p不正交,不妨设v= √2/2 i+√2/2 k
此时计算p’=q×p=[-1, √2i+j]
在这里插入图片描述
        可以看到,计算结果p’已经不再是纯四元数了,实际上就是p被q转进了四维空间,而在其纯虚数ijk的三维空间内的投影如上图所示,红色的p并没有绕玫红色的v= √2/2 i+√2/2 k旋转45°,而且|p’|≠2,被拉伸变形了。
        此时Hamilton提出了一种修正算法,
在这里插入图片描述
        这样可以算的p’=[0,i+√2j+k],如下图所示,
在这里插入图片描述
        此时旋转后的|p’|=2,没有被拉伸,但是转过了90°(p-v平面和p’-v平面夹角为90,即p-v平面绕着v逆时针转了90°),角度上变为了两倍,因此进一步修正,令
在这里插入图片描述

六、四元数→欧拉角

        原贴见:

https://www.cnblogs.com/kljfdsa/p/9093009.html

在这里插入图片描述
        空间中的三维旋转可视为绕三个基本轴的旋转组合叠加,绕 x,y,z (分别代表i,j,k三个轴)三个基本轴旋转角度分别为 ϕ,θ,ψ ,则三个基本旋转的四元素可表征为:
在这里插入图片描述
        绕三个基本轴的旋转次序不同,其表征的空间旋转也不同,下面以ZYX的顺序计算(此处根据参考资料撰写,和前面的几块内容在左乘右乘上顺序不同,此处是右乘,就是顺时针转动):
在这里插入图片描述
        则已知四元数时,反求欧拉角:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44986556/article/details/108881052