四元数与欧拉角(yaw roll pitch)转换公式与推导,以及它们unity中的不同
来源:互联网 发布:玄天问道源码 编辑:程序博客网 时间:2024/05/29 08:41
四元数是一个高阶复数,它可以表示三维空间绕任意旋转轴旋转的变换。
下面我们在笛卡尔坐标系中考虑四元数。
考虑如下绕任意旋转轴的旋转:旋转轴与x,y,z轴的夹角分别为,绕该轴旋转角。则我们可以得到这个四元数:
写成复数形式为
利用欧拉角也可以实现一个物体在空间的旋转,它按照既定的顺序,如依次绕z,y,x分别旋转一个固定角度,使用roll,yaw ,pitch分别表示物体绕,x,y,z的旋转角度,记为,可以利用三个四元数依次表示这三次旋转,即:
我们知道变换矩阵相乘可以复合两次变换,四元数相乘的意义也是复合两次变换,与矩阵相乘一样不符合交换律,符合结合律,因此
Q=Q1Q2Q3
就代表了这个欧拉旋转的四元数。四元数乘法具有如下规则:
i^2=j^2=k^2=-1
ij=k、ji=-k、jk=i、kj=-i、ki=j、ik=-j
举个例子:
x = 3 + I, y = 5i + j - 2k
那么:
xy =( {3 + i} )( {5i + j - 2k} ) = 15i +3j - 6k + 5i^2 + ij - 2ik= 15i + 3j - 6k - 5 + k + 2j = - 5 + 15i + 5j - 5k
因此,通过相乘计算可以得到欧拉角到四元数的变换公式:
这个公式并不是unity中的变换公式,有以下两点不同:
1. unity的欧拉角旋转顺序为z-x-y,非以上推导的z-y-x,因此推导中交换Q2Q3,得到Q'=Q1Q3Q2
2. 通过第一步改变后,仍然与unity中不同,这是由于本文推导一开始假设了笛卡尔坐标系,而unity中的坐标系是左手坐标系,因此任取一个坐标轴将其反向,角发生了变化,重新代入Q'中,我们可以得到Q''为最终的正确变换
还有一点,那就是绕第二个旋转轴旋转90度会出现万向锁问题(简单的说,就是在第二次旋转的时候把第三个旋转轴转到了第一个轴所在的位置,使得第三次的旋转无效),导致无法表示任意旋转,在unity中绕x旋转90度时,系统会改为270,四元数各部全部取反。
因此,unity中的变换如下
参考资料
https://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles
http://baike.baidu.com/link?url=NA09CdOpOe2uHUsSaj3w9Io2YD1MLK3ir4OFD25XxttgyMoMTcyvcfXh8K6pJNfptQYo6hQ2CMWmu-zxAeZnFq
- 四元数与欧拉角(yaw roll pitch)转换公式与推导,以及它们unity中的不同
- 四元数与欧拉角(Yaw、Pitch、Roll)的转换
- 四元数与欧拉角(roll,pitch,yaw)的转换
- Unity 之欧拉角 pitch yaw roll
- OrientationEuler中的pitch、yaw、roll
- Quaternion(四元数)和旋转以及Yaw, pitch, roll 的含义
- Quaternion(四元数)和旋转以及Yaw, pitch, roll 的含义
- 欧拉角pitch、yaw,roll的理解
- pitch yaw roll 的区别(转载)
- Roll, Pitch & Yaw
- yaw-pitch-roll
- roll pitch yaw
- Pitch Yaw Roll
- pitch yaw roll是什么
- Yaw pitch roll
- pitch yaw roll是什么
- pitch yaw roll
- pitch yaw roll
- HDU 1004
- 开源 java CMS - FreeCMS2.3会员我的收藏
- 周鸿祎的一段话,让我受益匪浅
- 线程安全C/C++ http://blog.csdn.net/huangxy10/article/details/8068653
- POJ 3104 Drying Clothes
- 四元数与欧拉角(yaw roll pitch)转换公式与推导,以及它们unity中的不同
- hd1272 小希的迷宫
- iOS 设计模式之中介者模式
- 同步非阻塞I/O——NIO(一)基于文件操作
- POJ_1426_FindTheMultiple
- 脏读(dirty read)不可重复读(unrepeatable read)幻读(phantom problem)解析
- hdu 5317 RGCDQ 2015 Multi-University Training Contest 3
- eclipse tomcat插件
- 当程序员老去 还能做什么