在3D程序中,通常用quaternion来计算3D物体的旋转角度,与Matrix相比,quaternion更加高效,占用的储存空间更小,此外也更便于插值。在数学上,quaternion表示复数w+xi+yj+zk,其中i,j,k都是虚数单位:
i*i = j*j = k*k= -1
i*j = k, j*i = -k
可以把quaternion看做一个标量和一个3D向量的组合。实部w表示标量,虚部表示向量标记为V,或三个单独的分量(x,y,z)。所以quaternion可以记为[ w, V]或[ w,(x,y,x)]。对quaternion最大的误解在于认为w表示旋转角度,V表示旋转轴。正确的理解应该是w与旋转角度有关,v与旋转轴有关。例如,要表示以向量N为轴,轴旋α度,相对的quaternion应该是:
q = [ cos(α/ 2) , sin(α/ 2) N]
=[ cos(α/ 2) , ( sina(α/ 2) Nx, sin(α/ 2)Ny, sin(α/ 2)Nz ) ]
为了计算方便,一般要求N为单位矢量。对quaternion来说使用四个值就能记录旋转,而不是Matrix所需的十六个值。为什么用quaternion来计算旋转很方便呢?先说过quaternion是一个复数,如果你还记得一点点复数的知识,那么应该知道复数乘法(叉乘)的几何意义实际上就是对复数进行旋转。对最简单的复数p= x + yi来说,和另一个复数q = ( conα,sinα)相乘,则表示把p沿逆时针方向旋转α:
p’ = pq
当然,x+yi的形式只能表示2D变换,对3D变换来说就需要使用 quaternion了,而且计算也要复杂一点。为了对3D空间中的一个点p(x,y,z)进行旋转,需要先把它转换为quaternion形式p = [0, ( x, y, z)],接下来前面讨论的内容,定义q = cos(α/ 2) , sin(α/ 2) N为旋转quaternion,这里N为单位矢量长度的旋转轴,α为旋转角度。那么旋转之后的点p’则为:
p’ = qpq-1
分享到:
相关推荐
讲述四元数和旋转矩阵之间相互转化的学术论文:首先介绍了四元数和旋转矩阵在实现向量旋转中的应用,在此基础上,根据游戏开发的实际需要,讨论了四元数和旋转矩阵之间的相互转化关系。最后,重点分析了由旋转矩阵到...
我学习了DirectX11教程中的四元数之后写的一篇学习笔记,这里面主要就是讲的四元数和旋转变换的关系。介绍了一些四元素有关的基础知识,介绍了四元数插值方法。
使用四元数实现的旋转 四元数不同于矩阵的旋转
旋转矩阵R通常是3x3的形式,具有inv(R)=trans(R)的性质,即R的逆就是...本案记四元数Q[0]-Q[3],其中Q[0]与旋转的幅度有关,其余三数与旋转轴有关。本例子给出了四元数与欧拉角以及与旋转矩阵互换的代码。希望对各位有用。
这篇文章的主要目的就是简单讨论一下四元数(Quaternion)与三维旋转之间的关系.简介:虽然网上四元数相关的资料有很多了,但是我好像一直没找到令我满意的,所以就想自己来写一篇.目前很多资料都使用了比较抽象的方式来...
文章Unity3D学习笔记05:四元数控制人物旋转的脚本代码
代码!!!!重要!!!! 学习中关于机器人领域中四元数、欧拉角、旋转矩阵、旋转向量的相互转换关系总结,整理加深记忆。 每一个都有相互转换关系,并注释
关于四元数和三维旋转的数学知识详解,包括复数基础,向量基础计算,向量分解旋转计算,四元数字的构成,四元数插值slerp等内容,另外简要介绍了样条插值等内容
包含四元数的基本运算,矩阵的基本运算,四元数、欧拉角、旋转矩阵之间的相互转换
四元数关于旋转的相关理论
将四元数转换为欧拉角。 请注意,不同旋转顺序的欧拉角是不同的。 此代码中使用的欧拉角旋转顺序是 z-y'-x''(偏航、俯仰、滚转)。 旋转是固有的,即沿新轴旋转。 这个定义被航空航天工程师广泛使用。 参考: ...
欧拉角、四元数与旋转向量,并介绍他们之间的转换关系
四元数转化为旋转矩阵的matlab函数
四元数与欧拉角以及矩阵之间的转换,把欧拉角转换成旋转矩阵,方便计算顶点变换。
四元数与旋转矩阵详细推导过程
matlab开发-qrot3四元数旋转。编写了一个用C语言编写的matlab函数,对大型三维数据集进行快速四元数旋转。
该包在 3-D 数据集上执行四元数旋转。 代码是用 C 编写的,我发现它比 .m 文件版本产生了非常显着(> 10 倍)的加速,允许在短时间内旋转大型 3-D 数据集。 “qrot3d”对单精度或双精度数据进行操作,可以将四元数...
这篇文章的主要目的就是简单讨论一下四元数(Quaternion)与三维旋转之间的关 系.虽然网上四元数相关的资料有很多了, 但从我的整理来看,这一篇更实用一些。
今天小编就为大家分享一篇python将四元数变换为旋转矩阵的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
Krasjet在文档中详细描述了关于三维旋转过程中遇到的“万向锁”问题,对此解读的十分详细,值得一看。