万向节死锁 gimbal lock

,如下图一,把灰色箭头想象成是一架飞机,红,绿蓝三个圈看作是三个外围控制器,外圈带动所有里圈运动,里圈的运动不影响外圈。

1,首先,绕Y轴旋转(旋转绿圈),来确定前进的方向。这时红圈与蓝圈都跟着旋转。

2,然后,绕x轴旋转(旋转红圈),让飞机仰视或俯视。这时蓝圈跟着一起旋转,绿圈不动。

3,最后,绕z轴旋转(旋转蓝圈),让飞机左右倾斜。这时只有蓝圈在转,红绿圈不动。

经过这三个步骤,我们可以把飞机调整到任意想要的角度。这也是FPS相机中常用的 yaw, pitch, row三个操作。

在步骤2中,若旋转红圈过程中,恰巧旋转到了图二所示状态,然后进行步骤3时会发现,旋转蓝圈与绿圈效果一样。

也就是这种状态下,旋转Y或Z轴效果一样了,都只能使飞机左右倾斜,而不能再俯视或仰视(它只能头朝天),这下坏了,飞机操作失灵了,只能向上直冲。这就所谓的万向节死锁,gimbal lock.

可见,欧拉角旋转使用的是物体的局部坐标系,旋转过程是对局部坐标的三个轴X,Y,Z分别进行的旋转。

【所谓的死锁,仅是在一个操作单元,即XYZ组成的任意一个次序中出现了无法控制的现象,如上面飞机失灵的情况,我们可以继续操作X轴(红圈)来调整飞机的仰视和俯视,这时飞机又可以回到水平飞行的正常轨道上来了】

【但是,对于使用欧拉角旋转的程序,没有人会去专门写逻辑来判断是否发生了万向节死锁,D3D底层API更不会去管,因此我们的程序就会出BUG]

yaw 是左右看,pitch是俯视或仰视,roll就是左右倾斜。

如果我们写了一个FPS的飞机控制程序,当发生上面的死锁时,调用pitch就与调用roll一样了,当发现飞机朝上飞时,于是调用pitch想调整机头朝下,结果却发现飞机只是左右倾斜而机头仍然朝上直飞!出BUG了。

参考:http://www.cnitblog.com/luckydmz/archive/2010/09/07/68674.html

按上述方法在U3D编辑器中可以试验出万向节死锁,如下图,物体先绕X轴旋转90度后,再去调节Y轴和Z轴的旋转角时,发现物体只能绕Z轴旋转了,调节Y轴的旋转值时物体还是在绕Z轴转,死锁了。

欧拉旋转的计算可以有许多次序,每种次序得到的结果都不一样,U3D为YXZ次序,如果不按此次序来旋转,你就会看不懂它的表现

死锁的的情况是与欧拉旋转的计算次序有关的。如YXZ次序时,只要绕X轴的旋转为90度,不管绕Y,Z旋转多少,都是死锁;XYZ次序时,只要绕Y的旋转为90度,不管绕X,Z的旋转是多少,都是死锁;其它类推,死锁取决于中间次序的那个轴。

如上面U3D中的试验当我们先给rotation的Y设置90度,再调节X和Z的旋转值时,只要X不为90度就无死锁,这说明U3D在计算欧拉角时使用的计算顺序正是上面的YXZ顺序。

PS,欧拉角并不是个特殊算法的产物,它和矩阵旋转本质相同,就是说利用矩阵来实现旋转也会有死锁,参考下面的这篇文章:

旋转变换(二)欧拉角

posted on 2016-10-07 16:54 时空观察者9号 阅读(...) 评论(...) 编辑 收藏

万向节死锁 gimbal lock相关推荐

  1. 万向节死锁_万向节死锁 gimbal lock

    ,如下图一,把灰色箭头想象成是一架飞机,红,绿蓝三个圈看作是三个外围控制器,外圈带动所有里圈运动,里圈的运动不影响外圈. 1,首先,绕Y轴旋转(旋转绿圈),来确定前进的方向.这时红圈与蓝圈都跟着旋转. ...

  2. 如何快速解决Unity中万向节死锁(gimbal lock)的问题

    如何快速解决Unity中万向节死锁(gimbal lock)的问题 转载连接:https://www.jianshu.com/p/59acdd1c9db8 万向节死锁的根本问题是欧拉角(EulerAn ...

  3. 八分钟诠释什么是万向节死锁(Gimbal Lock)

  4. 使用四元数解决万向节锁(Gimbal Lock)问题

    使用四元数解决万向节锁(Gimbal Lock)问题 参考文章: (1)使用四元数解决万向节锁(Gimbal Lock)问题 (2)https://www.cnblogs.com/psklf/p/56 ...

  5. 万向节锁(Gimbal Lock)的理解

    转自:https://www.cnblogs.com/psklf/p/5656938.html 严正声明: 作者:psklf 出处: https://www.cnblogs.com/psklf/p/5 ...

  6. 欧拉角万向节死锁与四元数的相关资料

    欧拉角和四元数都可以用来描述物体的姿态.欧拉角的万向节死锁理解稍微奇怪.四元数原理的理解较为复杂.欧拉角和四元数之间可以做转换.这里收集了若干资料已做备忘. 万向节死锁(Gimbal Lock) : ...

  7. 欧拉角会出现Gimbal Lock万向节死锁

    Gimbal Lock ... Maybe it's a bit difficult to understand. OK, let me show you a real sence. 可能有点不好理解 ...

  8. Unity中旋转方式的探究与对万向节死锁(Gimbal Lock)的理解

    Gimbal Lock Gimbal Lock的原理网上已经有很多资料,详细可以看介绍视频.视频讲到Gimbal Lock的时候提到x,y,z三个坐标轴是有从属关系(hierarchical syst ...

  9. 欧拉角与万向节死锁(Euler angle Gimbal Lock)

    欧拉角 欧拉角有三种: 俯仰:Pitch(绕y轴旋转) 偏航:Yaw(绕z轴旋转) 翻滚:Roll(绕x轴旋转) 万向节死锁 下面的动图为死锁的一种情况,旋转层级为z > y > x,当y ...

最新文章

  1. 洛谷 - 试炼场(全部题目备份)
  2. 不懂技术的产品经理,真的是“祸害人类”吗?
  3. 51Nod 1445 变色DNA
  4. 谷歌 Daydream VR 开发工具
  5. 计算机视觉论文-2021-07-27
  6. 隐藏水滴屏的软件_隐藏水滴屏的软件
  7. SketchUp:SketchUp草图大师经典案例之实现柜子、书桌等设计
  8. Typecho后台美化插件 TypechoOneAdmin
  9. 微软苏州集体抵制来自阿里、华为的跳槽者:请停止你的“奋斗逼”行为!
  10. 媒体专访 | 许彬教授:我们离元宇宙Big Bang有多近?
  11. 学java的就业方向_新手学习Java后有哪些就业方向?
  12. 10个最佳PHP URL缩短器脚本
  13. 沃通PDF签名证书 保障电子发票真实有效
  14. 怎么修改PDF文件中的文字
  15. xml文件解析的三种方式
  16. tp获取执行的sql语句
  17. 大数据治理解决方案PPT
  18. 美国 vs 中国 火星探测
  19. 【航模插头总结】 ec3,ec5,t插,xt60,xt90,xt150,as150,mt60,mt30
  20. twrp 3.0 编译教程

热门文章

  1. Mysql在Windows上离线安装与配置
  2. 若依前后端分离版数据库已经存在的字典添加一条后刷新没作用,必须清除Redis缓存
  3. JS获取当前时间的前n天/后n天
  4. java基础知识讲解(一)数据类型和运算符
  5. 微信小程序 获取用户信息 官网例程 详解
  6. 六大环节,教你如何从 0 到 1 搭建一场 A/B 测试
  7. 神策数据入选 Facebook 全球合作计划,助力出海客户拥抱全球化广告生态
  8. 4 个关键步骤打造用户满意的产品体验
  9. 内附 PPT | 新零售里程碑,神策数据新起点
  10. 神策数据荣膺 2017 企业创新典范、最佳青年榜样双殊荣