四元素(Quaternion)与旋转

一、四元数的含义


1、数学含义及表示方法

      三维复数域可表示为 Q = [x, y, z,w] 或 Q = w + x*i + y*j + z*k, 其中 w 是实部,[x, y, z]是虚部,[i, j, k]是虚轴单位向量


2、物理含义

        四元数常用于表示三维空间的旋转变换,注意它表示一个变换,不是一个状态,它描述了一个旋转轴[α, β, γ]θ,对应的四元数为Q = [cos(θ/2), α*sin(θ/2), β*sin(θ/2), γ*sin(θ/2)]一般我们使用右手坐标系,逆时针旋转为正

       与其它旋转表示方法相比,例如欧拉角、矩阵,四元数并不直观,但具有以下优点:

  • 四元数不存在欧拉角中的 “gimbal lock” 问题,翻译成中文叫“万向节死锁”,名字很装B有木有,其实就是当三个轴中的两个轴由于旋转重合了,导致旋转失去了一个自由度,想具体了解的,请参考欧拉角与万向节死锁带视频的,非常形象)
  • 四元数只有四个数,矩阵表示变换一般都是 4*4 的,存储计算量更小(此优点可忽略)
  • 两个四元数之间更容易插值(实际应用中,什么时候需要插值)

       注意:四元素在多次运算后,会存在累计误差,需要定期归一化处理


二、四元数的基本运算及其物理意义


     1. 虚轴的性质

          i * i = -1; i * j = k(右手定责:i 转到j轴,大拇指指向的方向,如下图);j * i = -k 

                       四元素(Quaternion)与旋转_第1张图片


     2. 模长 Length:sqrt(x * x + y * y + z * z + w * w)

     3. 归一化 Normalize:(x, y, z, w)./Length;用四元数表示旋转需要归一化处理

     4. 共轭 conjugate:(-x, -y, -z, w),对比四元数物理含义易得:共轭表示旋转轴不变,旋转角相反

     5.  点乘Dot(q1 .* q2):q1.x * q2.x + q1.y * q2.y + q1.z * q2.z + q1.w * q2.w

     6. 叉乘(q1 * q2):两个四元数的各元素两两相乘,虚轴的乘法按上述第一点"虚轴的性质”处理

          叉乘的物理含义:先绕 q2 做旋转变换,再绕 q1 做旋转变化

     7. 向量 v 绕四元数旋转:q * v * conjugate(q)


三、 四元数与欧拉角、旋转矩阵之间的相互转换


       该节内容请直接参考代码(下载),此代码由虚拟现实(VR)公司Oculus 原创,包含上述四元数的基本运算,矩阵的基本运算,四元数、欧拉角、旋转矩阵之间的相互转换






你可能感兴趣的:(VR)