3D Math Keynote 2

1、方向(diretion),指的是前方朝向。方位(orientation),指的是head、pitch、roll。

  3D Math Keynote 2  3D Math Keynote 2

2、欧拉角的缺点:

  1)给定方位的表达式不惟一。

    例如,pitch 135 = heading180 + pitch 45 + bank 180。

    通过将 heading、bank 限制在 +180~-180度,pitch限制在+90~-90度即可解决不惟一的问题。

  2)两个角度间插值非常困难。

3、复数的共轭

  3D Math Keynote 2

  复数的模。

    3D Math Keynote 2

4、复数集存在于一个2D平面上,可以认为这个平面有2个轴:实轴、虚轴。

    3D Math Keynote 2

  四元数有3个虚部,i、j、k。

    3D Math Keynote 2

  绕向量 n 旋转 0 度的四元数:

    3D Math Keynote 2

  q与-q代表的实际角位移是相同的,将0 加上360度,不会改变q的角位移,但q的四个分量都变负了。所以任意角位移有2种四元数的表示法。

   四元数也有模。

    3D Math Keynote 2

5、四元数的共轭:

    3D Math Keynote 2

  四元数的逆:

    3D Math Keynote 2

  当 |q| 为1时,四元数的共轭,就是四元数的逆。

  单位四元数:[1, 0]

  四元数逆意味着向相反的方向旋转相同的角度。

6、四元数乘法。

  3D Math Keynote 2

  四元数乘法满足结合律,不满足交换律。

  四元数叉乘的模等于模的积:

  3D Math Keynote 2

  3D Math Keynote 2

  四元数逆的性质:

  3D Math Keynote 2

7、四元数旋转公式:

  3D Math Keynote 2

  下例,先执行a旋转,再执行b旋转:

    3D Math Keynote 2

8、四元数点乘。结果是一个标量。

  3D Math Keynote 2

9、四元数的对数。引入变量 alpha = 0/2

  3D Math Keynote 2

  指数公式为:

  3D Math Keynote 2  

9.1、四元数求幂。我们看看它的数学定义。
  3D Math Keynote 2

  结合9中的公式,上式可以推导为 exp(t[0 alpha*n]),也就是 q^t次方,其实是 alpha 乘以了t。所以q^t实际上是 [cos(t*alpha) n.sin(t*alpha)]。

 

  下述代码使用上述原理,计算四元数 q 的 t 次方的值。原理是让角度 alpha * t。

  3D Math Keynote 2

  上面的 if 是用于避免单位四元数[1 0]的情况,单位四元数放大 t 倍,还是单位四元数。

10、slerp 避免了欧拉角插值的所有问题。四元数插值的理论:

  3D Math Keynote 2

  3D Math Keynote 2

  旋转插值图解:

    3D Math Keynote 2

  3D Math Keynote 2

  由相似三角形原理,可以求出 k0、k1。

  3D Math Keynote 2

  3D Math Keynote 2  3D Math Keynote 2

  所以 V(t) 可以表示为:

    3D Math Keynote 2

  扩展到四元数即为:

    3D Math Keynote 2

  slerp 的完整代码如下:

    3D Math Keynote 2

    3D Math Keynote 2

  上述实现用了一个书上未证明的公式,四元数的点乘等于夹角的 cos。

    3D Math Keynote 2

11、squard 是四元数的样条插值。需要引入控制点:

  3D Math Keynote 2

  可以看到,Si的计算需要引用 qi-1、qi、qi+1。所以在计算转变时,实际需要四个 q点。

  3D Math Keynote 2

  样条插值轨迹为:

  3D Math Keynote 2

12、从欧拉角到矩阵。

  从惯性坐标系到物体坐标系非常容易,将3个轴轴的旋转矩阵相乘即可。
  3D Math Keynote 2

  而从物体坐标系到惯性坐标系,取上面矩阵的转置矩阵即可。

  3D Math Keynote 2

  3D Math Keynote 2

13、从矩阵到欧拉角

  3D Math Keynote 2

  3D Math Keynote 2

  上面求解出了 pitch,也就推出了 cosp 的值。从而根据 m13、m33 可以推出 sinh、cosh 的的值,然后使用 atan2 即可计算出 h。

    3D Math Keynote 2

  用同样的方式,可以用m21、m22解得 bank。

    3D Math Keynote 2

  若 cosp 为0,则可推出 p 是+/- 90,b 为0。从而可以使用下面的值化简公式:

    3D Math Keynote 2  3D Math Keynote 2

  通过 m11、m31 可计算出h。

14、实现从矩阵解出欧拉角的算法。

// 设矩阵保存在下面这些变量中
float m11, m12, m13;
float m21,m22,m23;
float m31,m32,m33;

// 以弧度形式计算欧拉角并存在以下变量中
float h,p,b;

// 从m23计算pitch, 小心 asin() 的域错误,因浮点计算我们允许一定的误差
float sp = -m23;
if (sp <= -1.0f){
    p = -1.570796f; // -pi/2
}else if (sp >= 1.0){
    p = 1.570796; // pi/2
} else {
    p = asign(sp);
}

// 检查万象锁的情况,允许一些误差
if (sp > 0.9999f){
    // 向正上或正下看
    // 将 bank 置零,赋值给 heading
    b = 0.0f;
    h = atan2(-m32, m11);
} else {
    // 通过 m12 和 m33 计算heading
    h = atan2(m12, m33);
    b = atan2(m21, m22);
}
View Code

相关文章:

  • 2021-07-28
  • 2022-12-23
  • 2021-12-19
  • 2021-08-16
  • 2021-08-07
  • 2021-07-25
  • 2021-07-16
猜你喜欢
  • 2021-12-19
  • 2021-12-20
  • 2021-09-05
  • 2021-07-12
  • 2021-09-23
  • 2022-12-23
  • 2021-05-10
相关资源
相似解决方案