当前位置: 首页 > news >正文

万向节死锁

要理解万向节死锁的产生原因,首先要理解欧拉角变换,欧拉角变换是基于最初始的坐标进行变换而非变换后的坐标进行变换。

欧拉角变换需要空间中的三个角(即变换后每个轴的偏移量),另外还有每个轴的变换顺序。值得注意的是,如果按照不同轴的顺序来改变每个角,其变换的结果是不一样的。

在Unity中,变换顺序为Y>Z>X

所以先对Y轴变换,就不会影响Z和X轴

初始时物体:

 对Y轴旋转90°:

旋转X轴:正常

 

 旋转Z轴:正常

 

对Z轴进行变换,根据理论,由于Y轴的变换顺序高于Z轴,故Z轴先进行改变,就不符合Unity原有的变换顺序,必然在旋转轴时会发生“异常”:

先旋转Z轴90°:

再旋转X轴:

 

发现物体却是绕Y轴进行旋转,但是别忘了:由于事先旋转了Z轴,导致初始坐标的X,Y轴发生了变换,而欧拉角变换却是基于初始坐标轴来变换的 

旋转Z轴90°,那么相当于X,Y轴交换了,所以从人的视觉效果上看起来,转动X轴时看上去是转动Y轴(其实是转动初始坐标系的X轴)

转动Y轴:

果然,转动Y轴时,视觉看上去却是围绕X轴进行旋转。

如果先转动X轴又会发生说明情况呢:

先转动X轴90° :

转动Y轴:

 

看上去是绕Z轴旋转 

转动Z轴:

 看上去仍是绕Z轴旋转。

这便是万向节死锁,在X轴旋转至90°时,不论是操作Y/Z轴,其效果都是一样的,相当于丢失了一个自由度。

为了解决这个问题,四元数就是个很好的方法,下期我将介绍一下四元数。

http://www.lryc.cn/news/97381.html

相关文章:

  • 大数据课程D1——hadoop的初识
  • xml命名空间
  • 七、Kafka源码分析之网络通信
  • WEB安全测试通常要考虑的测试点
  • 关于uni.createInnerAudioContext()的duration音频长度获取不到问题
  • 使用rknn-toolkit2把YOLOV5部署到OK3588上
  • 【雕爷学编程】Arduino动手做(93)--- 0.96寸OLED液晶屏模块14
  • ffplay播放器剖析(5)----视频输出剖析
  • 21.2:象棋走马问题
  • 【CSS】手写 Tooltip 提示组件
  • MySQL DDL语法
  • Git 绑定账号 和clone
  • ftp和sftp区别,以及xftp的使用
  • C++ 编程入门(一)—— Hello World
  • openlayers系列:加载arcgis和geoserver在线离线切片
  • 《人工智能安全》课程总体结构
  • unity关于匀速移动某些值的方法
  • 解决VScode下载太慢的问题记录
  • Gitlab服务器备份恢复及系统升级
  • docker入门讲解
  • 【Matlab】基于卷积神经网络的数据回归预测(Excel可直接替换数据))
  • 在Springboot集成Activiti工作流引擎-引入、调用,测试【基础讲解】
  • Java书签 #解锁MyBatis的4种批量插入方式及ID返回姿势
  • 在react项目中如何引入国际化
  • spring学习笔记十三
  • react native 本地存储 AsyncStorage
  • Postgresql数据库中的时间类型汇总
  • 算法刷题Day 51 最佳买卖股票时机含冷冻期+买卖股票的最佳时期含手续费
  • 编程导航算法村 第五关 | 白银挑战
  • (十六十七)时序数据库是怎么存储用户名和密码的从InfluxDB OSS迁移数据