四元数—Quaternion
来源:互联网 发布:2016淘宝刷单走向 编辑:程序博客网 时间:2024/06/05 04:48
一、什么是四元数
在计算机图形学中,四元数用于物体的旋转,是一种较为复杂,但是效率较高的旋转方式。在三种坐标变换:旋转,平移,缩放当中,旋转应该算是比较复杂的存在。平常我们接触的比较多的是矩阵变换和欧拉变换。关于矩阵变换和欧拉变换,我这里不打算详细介绍,有兴趣的同学可以访问以下链接:
旋转矩阵:http://baike.baidu.com/view/180617.htm
欧拉角:http://baike.baidu.com/view/90087.htm
对于一个物体的旋转,其实我们只需要知道四个值:一个旋转的向量 + 一个旋转的角度。而四元数也正是这样的设计:
其中x,y,z 代表的是向量的三维坐标,w代表的是角度;同时我们也可以写成以下的形式方便我们计算和分析:
其实,四元数本质上是一个超复数,q = xi + yj + zk + w , i^2 = j^ 2 = k^2 = -1;
现在我们对四元数的概念应该有了一定的了解了,那么四元数是怎样体现在旋转上面呢?
二、四元数与旋转
现在我们先来看一个简单的例子:一个向量(1,1,0)绕Z轴(0,0,1)旋转90度,得到的旋转后的向量是多少?相信很多同学一看就知道答案:(-1,1,0)。
那我们用四元数来做应该怎么做呢?(注:绕某轴旋转是指面对某轴然后顺时针旋转)
这里简单的说一下利用四元数来做旋转的方式:
现在我们有一个向量:v1,要让它绕 v2 旋转 Θ 度,我们先把这个向量写成一个四元数:p = (v1, 0); 那么旋转的四元数则是:q = ( v2 * sin(Θ/2) , cos(Θ/2) ) ;旋转后的四元数为(得到的四元数实部为0,虚部为新的坐标):
相乘:
四元数的共轭:
取模:
取逆:
在使用四元数旋转之前要注意:
1、用于旋转的四元数必须是单位四元数(即模为1)
2、实际参与旋转的四元数有两个:p 和 p的逆
现在大家可以算一下之前的问题
三、在Unity里使用四元数旋转
只需新建一个四元数,然后跟要旋转的向量进行左乘即可。
Vector3 begin = new Vector3(1, 1, 1);Quaternion Antest = new Quaternion(0.5f, 0.5f, -0.5f, 0.5f);Vector3 final = Antest * begin;
0 0
- 四元数—Quaternion
- Quaternion 四元数
- Quaternion 四元数
- Ogre 的 四元数quaternion
- Ogre的四元数quaternion
- Ogre的四元数quaternion
- Quaternion(四元数)和旋转
- Quaternion四元数与旋转
- Quaternion(四元数)和旋转
- Quaternion(四元数)和旋转
- Ogre 的 四元数quaternion
- Quaternion(四元数)和旋转
- Unity3D的四元数 Quaternion
- Quaternion四元数 翻译
- Unity3D的四元数 Quaternion
- unity3d的四元数 Quaternion
- 四元数(Quaternion)学习
- unity3d的四元数 Quaternion
- Sublime Text 全程指南
- 让命令行更多彩的显示
- Linux实现报警自动发邮件
- hdu 2187 悼念512汶川大地震遇难同胞——老人是真饿了
- hdu 3065 病毒侵袭持续中(ac自动机)
- 四元数—Quaternion
- nRF51822 白名单
- DevExpress v15.1:WinForms控件功能升级(四)
- 【小C出品】java基础类之System简单使用
- 如何把tomcat设置为开机自启动
- UIView Why limit max size
- so easy
- memcached的最佳实践方案
- SVN提交失败