四元数和欧拉角优缺点
欧拉旋转
优点:
很容易理解,形象直观;表示更方便,只需要3个值(分别对应x、y、z轴的旋转角度);但按我的理解,它还是转换到了3个3*3的矩阵做变换,效率不如四元数;
缺点:
之前提到过这种方法是要按照一个固定的坐标轴的顺序旋转的,因此不同的顺序会造成不同的结果;
会造成万向节锁(Gimbal Lock)的现象。这种现象的发生就是由于上述固定坐标轴旋转顺序造成的。理论上,欧拉旋转可以靠这种顺序让一个物体指到任何一个想要的方向,但如果在旋转中不幸让某些坐标轴重合了就会发生万向 节锁,这时就会丢失一个方向上的旋转能力,也就是说在这种状态下我们无论怎么旋转(当然还是要原先的顺序)都不可能得到某些想要的旋转效果,除非我们打破原先的旋转顺序或者同时旋转3个坐标轴。这里有个视频可以直观的理解下;
由于万向节锁的存在,欧拉旋转无法实现球面平滑插值;
四元数旋转
Quaternion.Euler(transform.eulerAngles+Aisx))
Quaternion.eulerAngles(transform.eulerAngles+Aisx))
两个都可以,只是上面版本比较高,后面这个适用于低版本。
transform.rotation = Quaternion.AngleAxis(degrees, transform.right) * transform.rotation;
优点:
可以避免万向节锁现象;
只需要一个4维的四元数就可以执行绕任意过原点的向量的旋转,方便快捷,在某些实现下比旋转矩阵效率更高;
可以提供平滑插值;
缺点:
比欧拉旋转稍微复杂了一点点,因为多了一个维度;
理解更困难,不直观;
万向节锁
其实就是一个物体在一个3D世界里面随着旋转顺序和旋转角度的改变,导致物体只能在一个固定的平面旋转,无法旋转到你预想的角度。. 由于物体的旋转,物体的坐标轴方向也发生了改变,导致其中2条坐标轴发生了 重合 。
四元数和欧拉角优缺点相关推荐
- 四元数和欧拉角的相互转换
四元数转欧拉角&欧拉角转四元数程序:四元数转欧拉角&欧拉角转四元数程序. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ...
- eigen 编译_头条 | 使用eigen实现四元数、欧拉角、旋转矩阵、旋转向量间的转换...
点击上方蓝字,关注本公众号,获得更多资源上一篇文章介绍了四元数.欧拉角.旋转矩阵.轴角如何相互转换,本篇文章介绍如何用eigen来实现. 旋转向量 1,初始化旋转向量:旋转角为alpha,旋转轴为(x ...
- 四元数,欧拉角,旋转矩阵相互转换
#include <TransForms3d/TransForms.h>/*---------------------------------------角度弧度转换----------- ...
- 【飞控理论】【惯性导航基础】二维平面的旋转如何用代数表示?三维平面的旋转如何用代数表示?什么是四元数?四元数、欧拉角、方向余弦之间有什么关系?
上一篇欧拉角 由于欧拉角在描述三维空间物体旋转问题时存在万向节死锁问题(详情戳这里),所以引入四元数概念. 目录 1.二维平面的旋转 2.三维平面的旋转(什么是四元数) 3.<捷联惯性导航> ...
- Matlab ——旋转矩阵,四元数,欧拉角之间的转换
最近要用这方面的东西,整理,记录,分享一下 基于Matlab现有函数下的内容 Matlab --旋转矩阵,四元数,欧拉角之间的转换 旋转矩阵 dcm R 四元数 quat q = [q0 q1 q2 ...
- unity中的四元数,欧拉角,方向向量之间的相互转换方法。
四元数: 到欧拉角:quaternion.eulerAngles 到方向向量:(quaternion * Vector3.forward).normalized 欧拉角: 到四元数:Quaternio ...
- unity 四元数和欧拉角的相互转换
四元数和欧拉角相互转换 //四元数转化成欧拉角 Vector3 v3=transform.rotation.eulerAngles; //欧拉角转换成四元数 Quaternion rotation = ...
- 【Unity3D 灵巧小知识点】☀️ | Unity 四元数、欧拉角 与 方向向量 之间转换
Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 . 包括游戏开发.美术.建筑.汽车设计.影视在内的所有创作者,借助 Unity 将创意 ...
- ROS中四元数、欧拉角、旋转矩阵等格式转换
未完- ROS接收到odometry格式消息: nav_msgs::Odometry pos_msg 具有: pos_msg.pose.pose.orientation.x; // xyzw pos_ ...
最新文章
- 土木工程计算机仿真学科未来前景,土木工程的发展现状与未来发展趋势
- EasyUi 改变 selelct 的 下拉内容 div 的高度
- 如何使用Visual Studio 2010(VS2010)编译C语言
- gifcam录制动态图后导入photoshop出现透明格子怎么办?
- php 5w的并发需要多少台服务器_php使用异步编程是怎样的?
- Java7运行applet_Java applet不会在JRE7下运行,控制台中不会显示错误
- 设置searchDisplayController的searchResultsTableView的UITableViewStyle为grouped
- IntelliJ IDEA 2017.1 EAP与异步堆栈跟踪调试器扩展
- 中国人上淘宝喜欢干啥 你知道吗?
- 参加东方道迩2010用户大会的归来总结
- 利用CSS3的transform做的动态时钟
- 【软件教程】Spring Tool Suite(STS)
- 优化python中os模块遍历文件夹时的排序问题
- 在线密码破解medusa
- 0x00000....蓝屏
- mybatis-plus环境搭建
- Undefined/Null/Boolean数据类型
- 移动光猫怎么设置虚拟服务器设置,移动光猫自带无线和拨号功能,光猫与路由器如何设置网络才最优?...
- supermap 数据转为shp
- pinpoint2.3.3安装和部署
热门文章
- Generation-A
- 修复MBR的工具MBRFix下载
- android 6.0 开机自启管理,Android App 如何做到开机自启动
- Hikvison对接iSecure Center时获取Appkey和Secert、不显示API网关、预览时提示网络请求失败
- [528]attrib隐藏文件夹
- qt QString数值转换格式化不足补0 QString十进制转换不足补0
- 网狐U3D客户端登陆大联盟服务器成功无法进入大厅解决
- Win8/Win7双系统安装超详尽图文教程——NT6 HDD Installer
- jca.jar_JCA 1.5,第1部分,优化和生命周期管理
- CIFAR10图像识别