什么是欧拉角Euler Rotations

Euler用来体现在3维空间中,物体的旋转。
计算主要分成三个轴上的旋转,分别是x轴的pitch,y轴的yaw,z轴的roll


下面将分别演示,三个角各自的作用----暂时先不考虑XYZ轴的问题
  1. YAW(航空中被形象的称为偏航角)
    欧拉角Euler Rotations---yaw/pitch/roll

2.PITCH(航空中被形象的称为俯仰角)
欧拉角Euler Rotations---yaw/pitch/roll

3.ROLL(航空中被形象的称为翻滚角)
欧拉角Euler Rotations---yaw/pitch/roll

如果要以XYZ轴的方向来表示,则要先确定坐标系
如果我们以Unity以及DerectX的左手坐标系为例

  • X:右左
  • Y:上下
  • Z:内外
    X轴转动就表示为我们的PITCH
    Y轴转动就表示为我们的YAW
    Z轴转动就表示为我们的ROLL

以上便是yaw pitch roll各自的特点


但在使用欧拉角的时候,会发生所谓的—万向锁(Gimbal lock)

为解决死锁问题,引入了四元数,下一篇再重点讲四元数的概念

  • 万向锁的产生,是因为其中某个角选中了90度,导致其他两个角的旋转表现在此时变得一致,我们也由此失去了一个旋转维度。
    那么为什么会出现这种情况呢
    在我个人一开始的学习过程中,我始终以为欧拉角的旋转,无论按照哪个轴旋转,所有的轴都是跟着一同旋转的,但实际上,不是如此:
    任意欧拉角的计算遵循某个计算次序,而计算次序,影响了轴与轴之间的旋转关系
那么计算次序有什么用呢?表现是什么样的呢?

欧拉角的表现形式,事实上是这样的

这是一个yaw-pitch-roll旋转次序模型
欧拉角Euler Rotations---yaw/pitch/roll
由上图可以看到
从外到里分别是

Y yaw

X pitch

Z roll

在这样到一个yaw-pitch-roll旋转次序的模型中

  • 在yaw方向上的旋转,会带动pitch和roll一同旋转
  • 在pitch方向上的旋转只会带动roll一起旋转
  • roll的旋转与pitch和yaw无关,也就是roll旋转的过程中,pitch和yaw的方向不会有所改变。

因此,在模型旋转到下图所示位置时。
欧拉角Euler Rotations---yaw/pitch/roll

也就是pitch旋转了90度时,yaw和roll变为同向,无论变化yaw还是变化roll得到的效果是一样的
这就是我们所谓的万向锁(Gimbal Lock)

相关文章: