3D数学4-方位

05/11/2020

前言:

史诗级难以理解,关于欧拉角的万向节死锁与四元数,可以选择性跳过本章内容。

方位

方位主要描述的是物体的朝向,然后,方向与方位并不完全一样,向量有方向但没有方位。例子:3D中一个向量是一个箭头,如果让它自转并不会影响它的方向,因为它的轴没有形状或者厚度。但是你把向量当成一架飞机,它自转的时候,是以一种机身与机背面翻转的状态前行着,这就是方位改变。

  • 确定一个方位至少需要3个数字。
  • 方位也需要使用参考物来描述自身的旋转量。旋转量也称角位移

旋转矩阵

  • 方位可以用矩阵来描述,通过旋转来描述
  • 用把向量从惯性坐标系转换到物体坐标系的变换矩阵
  • 根据轴n旋转 θ \theta 角的矩阵

用哪个矩阵

我们知道怎样用矩阵将点从一个坐标系变换到另一个坐标系。首先了解方位是用矩阵来描述的,而矩阵表示的是转换后的基向量

  • 通过描述一个坐标系到另一个坐标系的旋转来确定一个方位
    • 旋转矩阵是正交的,只需要使用转置,就可求得逆变化。

矩阵的优缺点

优点

  • 可以立即进行向量的旋转
  • 被图形API所使用
  • 多个角位移连接
  • 矩阵的逆

缺点

  • 矩阵占用了更多的内存,如动画序列中的关键帧,
  • 难使用
  • 矩阵可能是病态的

欧拉角

欧拉角将方位围绕三个互相垂直轴的旋转。欧拉角描述了一个旋转序列。

  • heading-pitch-bank 基本思想是让物体开始于标准方位-- 就是物体坐标轴和惯性坐标轴对象
    M = H P B M_{惯性\rightarrow物体} = HPB
    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度,所以对欧拉角做插值也需要限制,为了找到最短弧。
    w r a p ( x ) = x 360 [ ( x + 180 ) / 360 ] Δ θ = w r a p ( θ 1 θ 2 ) θ 1 = θ 0 + t Δ θ wrap(x) = x - 360[(x+180)/360]\\ \Delta \theta = wrap(\theta _{1} - \theta _{2}) \\ \theta _{1} = \theta _{0} + t \Delta \theta

四元数(轴-角对)

通过4个数字表示方位,一个四元数包含一个标量和一个3D向量分量。记作[w,v] = [w,(x,y,z)]。通常表达方位,最简单的方式是告知你绕n轴旋转多少度。所以数学上使用四元数表示这个方式。
[ c o s ( θ / 2 ) s i n ( θ / 2 ) n s i n ( θ / 2 ) n s i n ( θ / 2 ) n ] \left[ \begin{matrix} cos(\theta/2) &sin(\theta/2)n&sin(\theta/2)n&sin(\theta/2)n \end{matrix} \right]
这里面四元数w分量和 θ \theta 有关系,同样v和n旋转轴有关系但它们并不是完全相同的。

四元数的数学渊源及其产生背景(不重要)

  • 复数
  • 共轭复数
  • 复数的运算
  • 复数的模
  • 复数在2D平面上的意思,表示2D向量,表达平面中的旋转
    • 复数与2X2旋转矩阵达到的效果是一样的,但提供了另一个有趣的记法

四元数计算

  • 负四元数
  • 单位四元数
  • 四元数的模
  • 四元数共轭和逆
  • 四元数叉乘
  • 四元数差:一个方位到另一个方位的角位移
  • 四元数点乘:类型于向量点乘,表示角位移的相似度
  • 四元数的对数、指数和标量乘运算
  • 四元数求幂:旋转角度的倍数增加或减少,
    • 例子:如果绕x轴旋转20度,如何变成绕x轴旋转40度。其实就是原四元数是的平方。
  • 四元数差值

四元数优缺点

优点

  • 平滑差值
  • 快速连接和角位移求逆
  • 能和矩阵形式快速转换
  • 仅有四个数

缺点

  • 四元数不合法性
  • 难于使用

表达形式之间的转换

欧拉角与矩阵相互转换

欧拉角转换成矩阵

欧拉角描述了一个旋转序列。所以可以分别计算出每个旋转的矩阵再将它们连接成一个矩阵。这个矩阵就代表了整个角位移。同时,该旋转序列将物体从惯性坐标空间到物体坐标空间。
如果是从物体坐标系到惯性坐标系,那么旋转顺序变成roll-pitch-yaw
M > = H P B M_{惯性坐标系->物体坐标系} = HPB
HPB分别表示为heading,pitch,bank的旋转矩阵,它们分别绕y,x,z轴旋转。注意,旋转坐标空间就是旋转点的严格相反操作。欧拉角公式明确指明是物体和它的坐标空间旋转,但我们需要的是变换“点”的矩阵,所以使用相反旋转角度计算HPB。
[ c o s ( θ ) 0 s i n ( θ ) 0 1 0 s i n ( θ ) 0 c o s ( θ ) ] \begin{bmatrix} cos(\theta) & 0 &sin(\theta)\\ 0&1&0\\ -sin(\theta)&0& cos(\theta) \end{bmatrix}\\
在3D中绕y轴旋转,使用左手坐标系,这是一个逆时针的旋转。
H = R y ( h ) = [ c o s ( h ) 0 s i n ( h ) 0 1 0 s i n ( h ) 0 c o s ( h ) ] H= R_{y}(-h) = \begin{bmatrix} cos(-h) & 0 &sin(-h)\\ 0&1&0\\ -sin(-h)&0& cos(-h) \end{bmatrix}\\
P = R x ( p ) B = R z ( b ) P = R_{x}(-p) \\ B = R_{z}(-b)

  • 四元数与矩阵相互转换
  • 欧拉角与矩阵相互转换

3D数学基础 第十章
矩阵变换详解

猜你喜欢

转载自blog.csdn.net/weixin_44200074/article/details/106019531