05/11/2020
3D中的方位与角位移
前言:
史诗级难以理解,关于欧拉角的万向节死锁与四元数,可以选择性跳过本章内容。
方位
方位主要描述的是物体的朝向,然后,方向与方位并不完全一样,向量有方向但没有方位。例子:3D中一个向量是一个箭头,如果让它自转并不会影响它的方向,因为它的轴没有形状或者厚度。但是你把向量当成一架飞机,它自转的时候,是以一种机身与机背面翻转的状态前行着,这就是方位改变。
- 确定一个方位至少需要3个数字。
- 方位也需要使用参考物来描述自身的旋转量。旋转量也称角位移
旋转矩阵
- 方位可以用矩阵来描述,通过旋转来描述
- 用把向量从惯性坐标系转换到物体坐标系的变换矩阵
- 根据轴n旋转 角的矩阵
用哪个矩阵
我们知道怎样用矩阵将点从一个坐标系变换到另一个坐标系。首先了解方位是用矩阵来描述的,而矩阵表示的是转换后的基向量。
- 通过描述一个坐标系到另一个坐标系的旋转来确定一个方位
- 旋转矩阵是正交的,只需要使用转置,就可求得逆变化。
矩阵的优缺点
优点
- 可以立即进行向量的旋转
- 被图形API所使用
- 多个角位移连接
- 矩阵的逆
缺点
- 矩阵占用了更多的内存,如动画序列中的关键帧,
- 难使用
- 矩阵可能是病态的
欧拉角
欧拉角将方位围绕三个互相垂直轴的旋转。欧拉角描述了一个旋转序列。
- heading-pitch-bank 基本思想是让物体开始于标准方位-- 就是物体坐标轴和惯性坐标轴对象
HPB分别绕y,x,z轴旋转。欧拉角旋转的是坐标轴,如果变换的是点的话,需要倒过来。
欧拉角的优点
- 易于使用,简单理解
- 角位移用来表示旋转角度
- 最简洁的表达方式
- 任意三个数都是合法的
欧拉角的缺点
- 表达式不唯一
- 两个角度间差值非常困难:
- 别名问题,由角度天生的周期性和旋转之间的不独立性导致
- 万向锁问题,当限制住了heading-pitching-bank的区间范围后,还有一种别名问题,就时先heading45度再pitch90度,这与pitch90度再bank45度等价,所以在限制欧拉角中,如果pitch为正负90度,则bank为0.
限制欧拉角
heading和bank在-180度到+180度之间,pitch在-90度到+90度之间。如果pitch等于正负90度,则bank为零。
插值
求插值意味着平滑的从A变换到B,这项技术应用于角色动画或摄像机自动控制等方面。
问题
- 角度问题可以用限制欧拉角
- 使用了限制欧拉角还有问题,加入heading等于-170度,另一个heading是170度,插值是340度而不是20度,所以对欧拉角做插值也需要限制,为了找到最短弧。
四元数(轴-角对)
通过4个数字表示方位,一个四元数包含一个标量和一个3D向量分量。记作[w,v] = [w,(x,y,z)]。通常表达方位,最简单的方式是告知你绕n轴旋转多少度。所以数学上使用四元数表示这个方式。
这里面四元数w分量和
有关系,同样v和n旋转轴有关系但它们并不是完全相同的。
四元数的数学渊源及其产生背景(不重要)
- 复数
- 共轭复数
- 复数的运算
- 复数的模
- 复数在2D平面上的意思,表示2D向量,表达平面中的旋转
- 复数与2X2旋转矩阵达到的效果是一样的,但提供了另一个有趣的记法
四元数计算
- 负四元数
- 单位四元数
- 四元数的模
- 四元数共轭和逆
- 四元数叉乘
- 四元数差:一个方位到另一个方位的角位移
- 四元数点乘:类型于向量点乘,表示角位移的相似度
- 四元数的对数、指数和标量乘运算
- 四元数求幂:旋转角度的倍数增加或减少,
- 例子:如果绕x轴旋转20度,如何变成绕x轴旋转40度。其实就是原四元数是的平方。
- 四元数差值
四元数优缺点
优点
- 平滑差值
- 快速连接和角位移求逆
- 能和矩阵形式快速转换
- 仅有四个数
缺点
- 四元数不合法性
- 难于使用
表达形式之间的转换
欧拉角与矩阵相互转换
欧拉角转换成矩阵
欧拉角描述了一个旋转序列。所以可以分别计算出每个旋转的矩阵再将它们连接成一个矩阵。这个矩阵就代表了整个角位移。同时,该旋转序列将物体从惯性坐标空间到物体坐标空间。
如果是从物体坐标系到惯性坐标系,那么旋转顺序变成roll-pitch-yaw
HPB分别表示为heading,pitch,bank的旋转矩阵,它们分别绕y,x,z轴旋转。注意,旋转坐标空间就是旋转点的严格相反操作。欧拉角公式明确指明是物体和它的坐标空间旋转,但我们需要的是变换“点”的矩阵,所以使用相反旋转角度计算HPB。
在3D中绕y轴旋转,使用左手坐标系,这是一个逆时针的旋转。
- 四元数与矩阵相互转换
- 欧拉角与矩阵相互转换
3D数学基础 第十章
矩阵变换详解