关于欧拉角的问题

一、简单介绍

自己主要做一个知识记录,想着学了还是要写点东西的,首先我们可以把欧拉角看成是描述方位的一种方法,我们可以用欧拉角来表示旋转,也可以用四元数,以及用矩阵来表示旋转。欧拉角是一种常用的描述方位的方法。在这里简单的介绍下方向和方位的区别,方位主要描述的就是物体的朝向,而方向只是其实相当于一个指向。一个3D的物体自转就会有方位的变化。

欧拉角的基本思想就是将角位移分解为绕三个互相垂直轴的三个旋转组成的序列,这里的角位移可以理解为是方向上的变换。旋转的度量是角位移。欧拉角将方位分解为绕三个互相垂直轴的旋转。

当我们在做动画效果的时候需要保存大量方位的时候最好使用欧拉角来保存,因为如果我们用矩阵来保存方位的话是需要9个数的,但其实方位只需要三个数就可以确定了,所以欧拉角可以帮我们来解决这额外的空间消耗

欧拉角有两种,一种是静态欧拉角,还有一种就是动态欧拉角,静态欧拉角的话其实就是它的旋转轴使用的是静止不动的坐标系,比如说世界坐标系,因为物体旋转过程中坐标轴保持静止,所以称为静态。所以这种情况下是不可能发生万向节死锁的。首先看一个图,也就是说我这三个万向节都是绕着固定的参考转进行转动的。

还有一种就是动态欧拉角,所谓动态指的就是围绕物体坐标系三个轴的旋转,由于物体旋转过程中坐标轴是随着物体做相同的转动,所以称为动态,也就是说其的x轴,y轴,z轴是会变的。

欧拉角由三个角度组成,这三个角分别是Yaw,Pitch,Roll,非常容易让人理解。我们在在将一个角度加上360度的倍数时,并不会改变方位。

关于Yaw,Pitch,Roll有三个图可以很清楚的解释了的区别

关于Yaw就是偏航的意思,就比如说一个船在海上行驶肯定会发生方向的偏移,可以理解为船在发生水平旋转,下面的飞机的动图也很好的诠释了这一点。

接下来就是Pitch,这个就是俯仰的意思了,就比如说下面的飞机受到气流影响上下摇晃着,其实也可以想象成船受到了浪的影响导致了船头和船尾上下摇晃。

下面就是转动,可以理解成是船体受到海上浪的影响会发生了左右的摇晃。所以其实都是可以结合现实生活来讲的

其实总结来说,Yaw 表示绕y轴旋转的角度,Pitch表示绕x轴旋转的角度,Roll表示绕z轴旋转的角度。

看了下面这张空间直角坐标系的图再结合上面的动图就会比较好理解了

接下来再解释下关于万向节死锁的问题,首先我们需要知道的是什么是万向节,由于本人水平有限,讲的可能不是很清楚,首先先知道一个概念,欧拉角旋转是需要去指定X,Y,Z三个轴面的旋转顺序的,我们可以通过指定X,Y,Z三个轴面的旋转顺序来尽可能避免万向节死锁的情况。

下面我们再看一个图。下面这个物体可以理解成是一个万向节旋转支架装置,而三个圆环就可以理解成是三个万向节,这三个万向片之间相互连接着。随着每一部分的旋转,我们都可以去观察到旋转的步骤。通过依次旋转三个万向节我们可以把物体旋转到任何我们需要的角度。

那么什么是万向节死锁的情况,首先我们先看一下还没有发生旋转的时候的物体的状态

如果这个时候我让某个万向节旋转到和某个万向节处于同一个平面的时候,这个时候就发生了万向节死锁的情况。比如说变成了下面图所示的这个样子,这样就会丢失了一个表示维度,也就是说原本我们旋转可以表示三个维度的,现在只能代表两个了。

这样的话,我们如果要做一个动画效果的时候,比如说我们想要旋转到一个我们指定的角度,可能就会因为缺乏那个维度,不能找到合适的轴,当然这里还是指的是要围绕原先的旋转的顺序。

在这种情况下如果我们还想转到指定的位置,我们可以打破原先的旋转顺序,或者同时旋转三个轴。这样的话,虽然能旋转过去,但是旋转过去走的路线不会是按照原本的直线路径,而是曲线路径,什么是直线路径,就比如说我们如果有三个维度的时候,就可以分开旋转到达指定的角度。物体没有按照期望的方式旋转。而是产生了不合理的旋转。

解决的办法就是我们可以通过构造不同的旋转顺序来避免。但是无论是什么样的旋转顺序都是不能解决万向节死锁的根本问题,我们可以通过采取四元数来解决。


万向节死锁的问题还可以用下面的这个图来表示正好对应了动态欧拉角出现的问题。这里当这个飞机pitch为90度后,可以理解成当我绿色的万向节旋转到了紫红色的万向节的内侧,这样的话我蓝色的万向节不能再去做Roll操作的,这个时候我们去做Roll操作和Yaw操作是一样的效果,因为可以理解为z轴的坐标轴和y轴的坐标轴重合了,自然的就失去了一个维度的变化。

一旦我们旋转的顺序设置的不好就会造成万向节死锁的问题。


  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值