四元素(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 的,存储计算量更小(此优点可忽略
)
两个四元数之间更容易插值(实际应用中,什么时候需要插值
)
注意:四元素在多次运算后,会存在累计误差,需要定期归一化处理
二、四元数的基本运算及其物理意义
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
原创,包含上述四元数的基本运算,矩阵的基本运算,四元数、欧拉角、旋转矩阵之间的相互转换
相关文章推荐
- 解决Vista系统OpenGL驱动问题的方法整理
- Delphi下OpenGL2d绘图之画四边形的方法
- Delphi下OpenGL2d绘图之画点的方法
- Delphi下OpenGL2d绘图之初始化流程详解
- Delphi使用OpenGL2d绘图之画图片Bmp的方法
- 通过OpenGL ES混合模式缩放视频缓冲区来适应显示尺寸
- VC运用OPENGL加载BMP纹理图的实现方法汇总
- java实现OpenGL ES纹理映射的方法
- java基于OpenGL ES实现渲染实例
- OpenGL坐标系介绍
- linux下opengl的安装(with qt)
- OpenGL超级宝典笔记——显示列表
- OpenGL超级宝典笔记——顶点数组
- OpenGL生成轮廓
- OpenGL超级宝典笔记——性能比较
- OpenGL超级宝典笔记——顶点缓冲区对象
- OpenGL超级宝典笔记——选择
- OpenGL超级宝典笔记——反馈
- OpenGL超级宝典笔记——遮挡查询
- OpenGL超级宝典笔记——深度纹理和阴影