https://www.cnblogs.com/delphi-xe5/p/12340038.html
https://www.cnblogs.com/delphi-xe5/p/12340039.html
https://www.cnblogs.com/delphi-xe5/p/12340053.html
https://www.cnblogs.com/psklf/p/5656938.html
参考上面 四个资料 。总结自己的理解
1. 欧拉角 分 静态 和动态。 静态就是 旋转的时候坐标轴 不动 。 这个很简单没问题。 动态就是 旋转的时候坐标轴会跟着动,一般说的都是这个 ,一下默认都是讨论 的 坐标轴跟着 动的。
2.欧拉角 有 2 类表示方式。 第一类 zxz xyx 等等 同一个轴旋转 2次。 第二类 xyz, yzx 等等 一个轴旋转一次。 这两类本质是一样的,因为坐标轴本身就是垂直的, 第三次转动使用第一次的轴没问题。(画一个图,实际转一下就明白,或者在3d软件下模拟一下,或者看这个文章https://www.cnblogs.com/delphi-xe5/p/12340038.html 里的图像演示)
默认情况下 3d软件 使用的都是 xyz 类型的 欧拉角 。
3.欧拉角的缺陷:
欧拉角是在世界坐标系下, 按物体本地坐标系(即前面说的动态,跟着坐标轴动的)旋转的三个角度。 注意 是有顺序的 先x轴转,再y轴转,再z轴转。 当然也可以用其他顺序。总之必须是固定顺序,
所以每一个不同的欧拉角,都是世界坐标系 按顺序的三次旋转得到的(也可理解为局部坐标系, 因为最开始局部坐标系和世界坐标系本身就重合的)。
在角度不动的时候,没有任何缺陷,都是完美。
欧拉角的缺陷是加法问题。 当给角度加上一个值,看看会有什么变化,看看影响是否均衡,看看对最终实际结果有啥影响。
举例子 当另外两个角度不变,其中一个角度变化的时候: 如下:
-------------------------------------------------------------------------
a1: x轴0度。 y轴30度, z轴30度 是一个角度。
a2: x轴10度。 y轴30度, z轴30度 是一个角度。
a3: x轴20度。 y轴30度, z轴30度 是一个角度。
a4: x轴30度。 y轴30度, z轴30度 是一个角度。
a5: x轴40度。 y轴30度, z轴30度 是一个角度。
a6: x轴50度。 y轴30度, z轴30度 是一个角度。
a1-a6 物体的最终实际角度变化很大。(和后面的比较而言)
-----------------------------------------------------------
b1: x轴30度。 y轴0度, z轴30度 是一个角度。
b2: x轴30度。 y轴10度, z轴30度 是一个角度。
b3: x轴30度。 y轴20度, z轴30度 是一个角度。
b4: x轴30度。 y轴30度, z轴30度 是一个角度。
b5: x轴30度。 y轴40度, z轴30度 是一个角度。
b6: x轴30度。 y轴50度, z轴30度 是一个角度。
b1 到 b6 物体的最终实际角度变化中等。
-------------------------------------------------------
c1: x轴30度。 y轴30度, z轴0度 是一个角度。
c2: x轴30度。 y轴30度, z轴10度 是一个角度。
c3: x轴30度。 y轴30度, z轴20度 是一个角度。
c4: x轴30度。 y轴30度, z轴30度 是一个角度。
c5: x轴30度。 y轴30度, z轴40度 是一个角度。
c6: x轴30度。 y轴30度, z轴50度 是一个角度。
c1 到 c6 物体的最终实际角度变化很小。
-----------------------------------------------
总结: 首先:工a1-a6 相比较 b1-b6,c1-c6 来说,a1 -a 6 对最终实际结果影响比较大。
其次 a1 - a6 本身 a6的最终实际变化 大于 a1的最终实际变化。
总结: 就是变化很混乱,严重不均衡。
4 。两个 欧拉角 中间值问题
两个欧拉角的中间值 ,就是 x, y,z 的算数平均值 得到新的欧拉角 。 这没问题。没毛病。完全ok.
先x轴转一个角, 再y轴转一个角 , 再z轴转一个角。 一点问题都没有.
问题在于欧垃角的表达方式看似很合理, 在静态下感觉很合理。
在动态下,也是对的,没错。 但是和人的感觉有冲突。 眼睛的感觉, 从一个角度 转到另一个角度 是直接转过去 , 而且是平滑 平稳的 转过去的。
欧拉角经过三个步骤 也没毛病,是合理的。 但是中间值 不均衡。 为什么不均衡 就是3 说的原因。 因为他本身就不均衡。
所以要使用四元数来解决中间值问题。这才是均衡的。 但是在静态下 四元数不性感 ,还是欧拉角性感。 所以两种方式分别使用。
5 万向节 死锁问题:
这个问题折磨了很久 终于搞通了。 其实这个问题本身不是问题。 是个人的思路,感觉 认识错误 造成的。 理性的理解的话 根本不存在万向节。
注意:(澄清一点 本行之前的x,y,z角度应该用a,g,c来表示。不然容易和坐标轴重复。 因为本行之前不涉及命名重复问题,所以懒的改了。)
这要从 欧拉角 的 旋转顺序说起,a,b,c三个旋转角。 xyz欧拉 方向 (按blender 设置来说 xyz欧拉方向 实际是先旋转c 即绕z轴旋转, 再绕b即y轴旋转, 再绕c即x轴旋转)。 先把已经条件理清除。 不然后面说得都等于0.
假设 m1 : a=10 , b=20 ,c=30 那么先绕局部坐标z转30,在y20 再x10度 旋转。 得到结果。
m2 : a=15 , b=25 ,c=35 那么先绕局部坐标z转35,在y25 再x15度 旋转。 得到结果。
这都没问题, 因为都是从 原始坐标旋转得到的。 清注意,所有的欧拉角 都是从原始世界坐标开始旋转得到的。 即使是先旋转了一次, 然后进行第二次旋转。 那么也要先计算 a,b,c角度的分别和。 然后重新 从世界坐标按 z,y, 按顺序旋转出来。(为什么要如此,因为3的原因, 欧拉角本身不均衡,不具备可加性。只能按定义来)
万向节产生的原因 就是当你旋转了一次之后。 再旋转第二次的时候,错误的把第一次旋转当成了基准。 此时你无法解释很多东西,你蒙蔽了,轴也有的转有的不转,这就是所谓的万向节。 他大爷的,终于解释清除了。
6; 万向坐标轴 ,blender 里有一个万向坐标系。
应该就是问题5 的延伸。 当以上一次旋转做为基准的时候,该怎么弄呢? 聪明的陀螺仪出现了。 把陀螺仪做为万向坐标, 就能很好的实现以上一个旋转结果 做为基准 ,进行下面的旋转的要求。
因为陀螺仪 能 把每一次的旋转 都进行线性累加, 陀螺仪 真牛逼。 直接在陀螺仪上旋转 。 可以放弃欧拉角了。 牛逼啊。 陀螺仪的旋转轴, z会影响y,z 。 y会影响x. 所以陀螺仪的y,x坐标会乱跑。但是z坐标稳定。
完结。
7. 万向节死锁, 用陀螺仪当然也能解释万向节死锁显现。 但这是另外一个系统。 和欧拉角无关 。
也就是说 旋转有两套系统 ,一套是欧拉角 系统。 一套是陀螺仪坐标系统(但是坐标会乱跑,甚至不垂直,甚至重合(就是万向节));
3d软件正好使用了 2种方式。