您的当前位置:首页正文

欧拉角

来源:华拓网

在我们的3D数学中,如果使用矩阵来旋转的话就会显得十分的复杂和笨拙。计算中使用最为广泛的旋转方式为欧拉角。
  欧拉角用三个旋转角表示3D空间中的方位和旋转(角位移),这三个旋转角都是绕着三个相互垂直的坐标轴旋转(可以是世界坐标系也可以是局部坐标系)同时也是计算机最能理解和高效的旋转方式。

Paste_Image.png

  heading-pitch-bank分别对应着三个相互垂直的轴向。

Paste_Image.png
  • heading:垂直向上的是heading角(yaw)(笛卡尔的y轴),控制3D中的左右旋转。

  • pitch角:绕x轴旋转时pitch角,控制着物体在3D中的上下旋转。

Paste_Image.png
  • bank(roll):z轴。
Paste_Image.png Paste_Image.png

3D中的经过旋转变换,就会旋转到一个新的方位,旋转前后所形成的夹角称为旋转角(也叫角位移)从上图可以看出使用欧拉角可以轻松的控制物体的旋转,无论物体在哪只需要控制它三个轴的旋转角就可以完成旋转。

相较于旋转矩阵的复杂变换,欧拉角轻巧明了。但是欧拉角也有需要缺点比如:无法使用欧拉角进行插值运算(如果你想进行插值需要先将欧拉角转换为矩阵或者四元数),还有万向锁现象。

万向锁:

万向锁是欧拉角最大的缺点,欧拉角在插值过程中很容易碰见万向锁现象。为什么会出现万向锁现象呢?
  万向锁:因为我们的欧拉角旋转是通过3个旋转角来控制的,但是这些旋转并不是同时进行的。它们是具有先后的顺序的。
比如我们来看看unity中的欧拉角旋转顺序:

Paste_Image.png

万向锁的解决方案:

  • 使用欧拉角转化为四元数进行插值。
  • 改变三个轴的旋转次序(我目前就只能理解这个解决方案)

程序中的欧拉角使用3x3的旋转矩阵(RotationMatrix)来表示由于它是绕着三个相互垂直的轴向进行旋转,所以在旋转变换的时候,需要考虑将物体坐标系到世界坐标系的转化过程:

Paste_Image.png
  • 3x3的旋转矩阵:
Paste_Image.png