欧拉角是什么
欧拉角是用来 唯一的 确定定点转动刚体位置的 三个一组的 独立角参量。
由章动量θ、旋进角(即进动角)ψ和自转角φ组成,为欧拉首先提出而得名。
通俗来讲的话有:
eg:你去问路得到了两种回答
1 往东经104°04′北纬30°40′走
2 往前走100m后右转
第一种令人难以理解,第二种则是相对坐标,比较具有操作性
欧拉角的思想就是采用第二种回答的方式,优点在于较好理解
通过欧拉角旋转
该动图摘抄自维基百科
具体拆解旋转步骤,如图:
图中有两组坐标:
xyz为全局坐标,保持不动
XYZ为局部坐标,随着物体一起运动(这里可以令读者进一步理解欧拉角的作用和功能)
旋转步骤如下:
物体绕全局的z轴旋转α 角
继续绕自己的X轴(也就是图中N轴)旋转 β角
最后绕自己的Z轴旋转γ 角
这里有一副动图很直观的展示了旋转过程(角度标记的有点不一样)
其中会出现一些问题:
为什么第一步要绕着全局z轴旋转,这一步是为了和全局保持联系
eg:问路时候先左转后右转 和 先右转后左转 有着根本上的区别
关于旋转顺序
旋转顺序就是我们上文提到的Tait–Bryan angles (x-y-z, y-z-x, z-x-y, x-z-y, z-y-x, y-x-z).
我们指定绕x轴旋转α,绕y轴旋转β.但是可以有多个旋转顺序, 比如:
情况1:先绕x轴旋转α,再绕y轴旋转β.得到姿态 O1
情况2:先绕y轴旋转β,再绕x轴旋转α,得到姿态 O2
得到的 O1 一般是不等于 O2 的.
对于x,y,z三个轴的不同旋转顺序一共有(x-y-z, y-z-x, z-x-y, x-z-y, z-y-x, y-x-z)六种组合.我们需要明确旋转顺序,才能确定欧拉角所指的姿态.
欧拉角万向节死锁(Gimbal Lock)
局部坐标是很直观,但是导致了欧拉角有一个重大的缺陷,万向节死锁
这里很详细通俗的讲解了万向节死锁的原理
(2条消息) 【Unity编程】欧拉角与万向节死锁(图文版)_Andrew的游戏世界-CSDN博客
总结:这种围绕选旋转前固定轴的先Z、再X、再Y的旋转操作,与其最终所预期的三个轴向可以旋转的结果并非一定是一对一的映射。某些情况下是多对一的映射,造成一些旋转自由度的缺失,也就是“死锁”
在编程中很难规避死锁问题,所以现在很多时候都使用四元数实现旋转,四元数那又是另外的话题了。