万向节死锁的个人理解

万向节死锁的个人理解

前言

关于万向节死锁的问题个人看了一些博客,大多数文章的说法是由于按一个轴旋转了特定角度,使另外两个轴的方向重合,导致损失了一个自由度,并给出了陀螺仪的示意图。但个人对于这种解释很难理解。经过在unity中一番摆弄后,我觉得以下的说法可能更易接受。
先说明想法:我认为理解万向节死锁的两个重点是“按序旋转”和“从头开始”。

按序旋转

所谓按序旋转就是说物体旋转被拆分成按三个轴分别旋转的结果,但这三个轴是有确定的先后顺序的。在unity中手动调整transformer组件中的rotation值,我们会发现从(0,0,0)的状态开始,只有按照y轴,x轴,z轴的顺序进行调整,每一步才会按照物体自身xyz轴进行旋转。说明起码在这种方法下,物体的旋转顺序可以看做先y轴,x轴,最后z轴。这里说的轴应该理解成物体自身的轴,而非世界空间中的静态轴。

从头开始

所谓从头开始就是在对unity中rotation项中x,y,z值进行调整时,不是根据调整前的状态进行变化,而是从头,也就是(0,0,0)的状态开始(此时物体自身的轴与世界空间的静态轴重合)按自身y轴、x轴,最后是z轴的顺序变换成调整后的状态。
比如rotation从(20,0,0)调整为(30,0,0)并不是我们习惯思维中直接按x再转10,而是回到(0,0,0),先按自身y轴变换0,再按自身x轴变换30,最后按自身z轴变换0。这也符合前面说到的按序旋转原则。

举个栗子

y轴绿色,x轴红色,z轴蓝色


这是初始状态在这里插入图片描述


根据按序旋转原则,y轴转0度,x轴转90度,z轴转0度,调整至(90,0,0)
在这里插入图片描述


现在只调整z轴,根据从头开始原则,会从(90,0,0)回到(0,0,0),再用按序旋转原则y轴转0度,x轴转90度,z轴转30度。视觉效果上好像是根据上图直接旋转z轴,是因为z轴本来就排在yx的后面。
在这里插入图片描述


此时只调整y轴,会发现看起来是按照当前z轴旋转的,这就是万向节死锁现象。原因同上,根据从头开始原则,会从(90,0,0)回到(0,0,0),再用按序旋转原则y轴转-30度,x轴转90度,z轴转0度。造成的视觉效果就是调整y轴和调整z轴好像都是按照(90,0,0)状态时的z轴进行旋转
在这里插入图片描述

结论

综上所述,如果不能理解自由度损失的说法,不如这样理解。万向节死锁是我们人类的惯性思维的产物,我们理所应当的认为旋转是在以前的基础上进行的,但计算机却不会记录中间状态,每次只会从头开始,并按照旋转顺序调整至当前设置的状态。这就导致了特定情况下两个不同的调整会产生相同的视觉效果。大家也可以用三根手指摆一组xyz正交基,按照yxz的旋转顺序和从头开始原则模拟一下就能理解了。

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值