您的位置:首页 > 运维架构

四元素(Quaternion)与旋转

2015-10-11 18:22 337 查看


一、四元数的含义

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 

                       


     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
原创,包含上述四元数的基本运算,矩阵的基本运算,四元数、欧拉角、旋转矩阵之间的相互转换





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息