欧拉角与万向锁—深度解读万向锁

article/2025/7/21 3:19:15

文章目录

  • 问题描述:
  • Z轴不生效(轴向重合)
  • 轴向为什么会重合
  • 初态
  • 二次变换
  • 总结:
  • 解决办法:

相信很多人听说过欧拉角与万向锁,主要问题是欧拉角为什么会产生万向锁?

有矩阵解读法,但是不够直观,而图像解读又难以理解,什么轴向重合啊,轴向失效啊等等。

其实误区在于万向锁并没有真的“锁”,只是看上去像是锁住了一个轴,这也是导致万向锁概念难以被理解的原因,因为大多数对欧拉角与万向锁的解读,都重点放在了"锁", 最近看到一句对于欧拉角旋转的解读,我认为这句话才是理解万向锁的重点

欧拉角是由三个角度表示,表示物体从原始姿态到目标姿态的一个变换。无论(α,β,γ)三个角度值是多少,都是得从物体的原始姿态开始进行绕轴进行旋转。

问题描述:

在这里插入图片描述
因为欧拉角旋转以自身轴向旋转
旋转X,导致YZ 平面,Y轴轴向向Z轴靠拢
在这里插入图片描述
旋转90° 重合
在这里插入图片描述
最终导致Y轴与Z轴调节效果一致,产生万象锁问题,Z轴看起来不再生效,
在这里插入图片描述

Z轴不生效(轴向重合)

重点是,Z轴为什么不生效

在Blender 查看轴向可以发现,万向锁问题是因为有一个轴始终看起来没有跟着模型改变轴向,如图,绕X轴旋转-90度,Y轴下去了,为什么Z轴不跟着转?Z轴始终朝上!!!!!

就是因为Z 轴没转,导致了Y轴与Z 轴重合,最后绕z 与绕y效果一致
在这里插入图片描述
大部分从图形角度解读万向锁就到此,告诉大家,因为轴向重合了,如图,y,z重合,于是绕y,绕z 效果一致,万向锁

但是我还想再问 为什么?

轴向为什么会重合

这里就进入误区了,我们这时旋转 y,z是把当前状态当成了初始状态去进行操作,我们实际想进行的操作,其实是二次变换

初态未改变是万向锁产生的根本原因。

如图,右边的方片应用旋转,万向锁解除

应用旋转后,旋转Z,即可发现,面片沿Z 轴转了,而不是与X轴相同,本质是初态改变
在这里插入图片描述

初态

在这里我把万向锁的原因归结为对于初态的认知不够,那么我觉得有必要更详细的体现一下什么是初态

如图:两者旋转一致
在这里插入图片描述
在这里插入图片描述

这体现两个事情:

1.欧拉角到目标状态,不是唯一确定的
2.一次变换,唯一确定一个目标态

因此我们得出结论,因为欧拉角到目标状态,不是唯一确定的,所以当我们X,Z重合,所调节的其实是欧拉角到目标状态的集合,

比如目标态为旋转Y=-90°,X= 50°,只要满足 X+Z=50的所有X,Z 都可以从初态变换到目标态

这个第一个事情,解释为什么轴向无效,因为欧拉角有无数种组合可以从初态到目标态,我们调节的是众多组合的一种,让我们产生了一种轴向无效的错觉

二次变换

第二个事情可以解释什么呢,那就是初态与二次变换,我们想要的,其实是二次变换,初态到目标态属于一次变换,而一次变换后,我们想要的二次变换恰巧落在了一次变换——初态到目标态的欧拉角重叠集合当中

(X+Z=50的例子,所有满足的X,Z,而Z恰巧属于我们二次变换需要改变的值)

,因此无论我们怎么做,都无法在一次变换的基础上实现二次变换的效果,本质是因为这些操作落在了一次变换当中

所以我们应用掉一次变换,初态改变(坐标轴重新计算),当前状态成为初态,此时万向锁消失,回到了一次初态的情况。

总结:

万向锁 本质是初态未改变,我们想要一次变换,实现两次变换效果,这是因为我们理所当然的认为欧拉角转动之后的状态就是新状态,我们每次都在新状态的认知上进行旋转,因此当我们认知与实际发生偏差后,我们就说,欧拉角有问题,实际是我们没有深入其中,草草下了结论。

解决办法:

理解了万向锁的本质,那么使用欧拉角就再也不用担心了,只要我们时刻保持对初态的关注,理解欧拉角是从初态到目标态的一次旋转变换,就不会发生万向锁问题

那么实际如何操作呢?

在Blender 中,我们使用应用旋转,这样即初态改变

那么在其余地方呢?Unity,Unreal,Maya,甚至于机器人转向,以及各种旋转问题,这些地方怎么办呢?

其实答案已经在前面提到过了,提示:Blender应用旋转的本质是什么,其余所有情况下解决万向锁问题都是一样的

除此之外,当然还有其余办法可以解决,比如更换旋转方案,采用四元数,矩阵旋转,旋转向量等等,也是不错的方法,
这里就不多介绍了。

此篇只是想为欧拉角正名,万向锁问题是可以在欧拉旋转内解决的


http://chatgpt.dhexx.cn/article/IFSKPCcH.shtml

相关文章

关于万向锁(Gimbal lock)问题的理解及解决

有时间更新一下理解,现在回过头来看写的东西真是垃圾哈哈哈哈哈~~~~ 1. Gimbal lock的理解 万向锁(Gimbal lock): 一旦选择90作为pitch角,就会导致第一次旋转和第三次旋转等价,整个旋转表示系统被限制在只…

详解万向锁

最近在看高翔老师的slam十四讲时,对万向锁这个概念不是很清晰,于是从网上查了不少博客文档,最终明白了万向锁这个概念。 在此记录一下。 解释万向锁之前首先明白一下什么是欧拉角。 什么是欧拉角? 用一句话说,欧拉角…

java uuid多少位_UUID用在MySQL中,性能到底好不好?

如果你在网上快速的做一个关于 UUID 和 MySQL 的搜索,你会得到相当多的结果。以下是一些例子: 存储 UUID 和 生成列在 MySQL 中存储 UUID 的值说明 InnoDB 中的主键模型及其对磁盘使用的影响主键选型之战 UUID vs. INTGUID / UUID 的性能突破到底需不需要…

UUID 全世界的唯一id!(唯一的接口标识符)

UUID(Universally Unique IDentifier)是一个128位数字的唯一标识。RFC 4122描述了具体的规范实现。本文尝试从它的结构一步步分析为什么它能做到唯一性?及各个版本的使用场景。 Format UUID使用16进制表示,共有36个字符(32个字母数字4个连接符"-&…

瓦片地图加载

OpenLayers之加载多源数据四:万能瓦片地图加载秘籍 不睡觉的怪叔叔 2018-08-02 13:46:59 7175 收藏 17 分类专栏: 开源GIS 目录 加载简单的瓦片地图 瓦片地图之高德地图 瓦片地图之百度地图 重新定义OpenLayers3的瓦片坐标系 分析瓦片地图坐标系…

QGIS 上加载瓦片地图(高德、ESRI、OSM等)

1. 在QGIS左侧的浏览面板中,选择XYZ Tiles节点,右键新建连接。在弹出的窗口中填入名称和瓦片地图的网址http://webrd02.is.autonavi.com/appmaptile?langzh_cn&size1&scale1&style7&x{x}&y{y}&z{z} ,保存。 2.将浏览…

QGIS二次开发:加载XYZ Tiles形式的瓦片地图

1.前言 QGIS官方提供的QGIS.exe可以加载远程地图提供商提供的基于URL格式的XYZ Tiles形式的瓦片地图。如:https://tile.openstreetmap.org/{z}/{x}/{y}.png ,开发者如果不能联网,也可以创建离线地图服务。如下:打开QGIS 3.26.2.exe,选择xyz Tiles节点,单击右键,选择“N…

Vue Mapbox 发布高德瓦片地图

一、需求来源 公司网站开发需求里需要做一个大屏看板,包含地图的功能,而且以后是要在内网使用的,也就是说不能使用在线网络。我在研究了(踩了一万个坑!!!)多个地图组件以后&#xff…

瓦片地图的入库

数据: 瓦片地图 数据库: MySQL 语言 : Java 方法: 用Java语言把瓦片地图以二进制的方式导入数据库 瓦片地图的存储格式 当我们用ArcMap切完瓦片之后, 它的存储方式是以级数,行列号的方式存储在文件夹中 级数: 行号: 列号: 一般的存储结构在数据库中存储它的 级数,行号,列…

各种瓦片地图

概述 研究了一阵子的地图,太过深奥了。写了一个小程序,可以下载瓦片地图。下面是各种瓦片图例。 瓦片地图 微软瓦片地图 图1 图2 谷歌瓦片地图 图3 图4 osm瓦片地图 图5 图6 天地图瓦片地图 图7 图8 水瓦片地图 图9 图10 后续 还…

geoserver发布TIF格式瓦片地图

一,准备tif地图 可以通过全能电子地图下载器获取地图(软件可以去淘宝下载) 二,geoserver发布tif 在geoserver安装文件夹中双击“startup.bat”打开服务(注意:为了防止端口占用,我这里更改了默…

Unity 瓦片地图

一些常见的使用类似方法绘制地图的游戏: 泰拉瑞亚: 如果有老哥玩过泰拉瑞亚的地图编辑器,其实unity瓦片地图和泰拉瑞亚地图编辑器手感类似 蔚蓝: 大名鼎鼎的蔚蓝也是如此 Untiy中制作2D俯视角游戏,往往需要使用瓦片地图…

瓦片地图下载工具

收费工具,学生党勿扰,白嫖党勿扰 收费金额:200元 MyChat:wangjianjun1018 瓦片地图下载工具 概述操作查看地图 下载链接说明后续 概述 最近花费一点时间,研究瓦片地图。在网上找了好久,有好多下载的提供商…

百度个性化瓦片地图下载

百度个性化瓦片地图下载 因为近期项目需求,客户项目在内网使用,不连接外网,因此地图不能使用在线地图,必须使用离线地图。 离线地图使用在之前的博客写过,就不在累述了。https://blog.csdn.net/weixin_42776111/arti…

Tilemap瓦片地图

可以用Tilemap工具来构建游戏世界的地图,创建瓦片地图时,Grid组件自动作为瓦片地图的父级,相比于传统使用照片搭建地图的方式,使用瓦片地图用来搭建地图可以更加迅速,而且使用传统方式搭建地图时,需要添加大量的碰撞体…

leaflet加载离线瓦片地图

首先我们要明白瓦片地图的请求原理。 其实瓦片地图并不是什么特殊的文件,就是最普通的png图片。之所以为地图,就是带有了该图片按规则组织,绘制时,按规则拼图组装而已; 打开network,查看其请求的的url就能…

瓦片地图原理

GIS介绍 地理信息系统(Geographic Information System或 Geo-Information system,GIS)有时又称为“地学信息系统”。它是一种特定的十分重要的空间信息系统。它是在计算机硬、软件系统支持下,对整个或部分地球表层&…

Unity(9)-TileMap瓦片地图

文章目录 前言相关介绍其他介绍上一篇笔记下一篇笔记 一、图片预处理二、创建调色板(TilePalette)三、创建瓦片(Tile)[1]. 方式一[2]. 方式二 四、修改瓦片(Tile)[1]. 参数介绍[2]. 修改Sprite[3]. 修改Color[4]. 修改ColliderType 五、创建瓦…

cocos2d-x瓦片地图制作详解

瓦片地图制作详解 瓦片地图的原理是把图片中的元素进行单位化,将大图片拆成一张张小图块,然后通过组合拼接的方式,重新拼出整个地图。其流程为:项目定好游戏中瓦片的大小,然后美术绘制瓦片并制作成瓦片图集&#xff0c…

Unity学习:瓦片地图

目录 一、tilemap 二、rule tiles 三、rule override tile 四、advanced override tile 五、伪透视图 这里首先给出unity的官方文档: https://docs.unity3d.com/Manual/class-Tilemap.htmlhttps://docs.unity3d.com/Manual/class-Tilemap.html 一、tilemap 创建 创…