3D数学4-方位

本文详细介绍了3D数学中的方位概念,探讨了旋转矩阵、欧拉角和四元数三种表示方位的方法。旋转矩阵具有直接旋转向量的优势,但可能占用较多内存;欧拉角简单直观,但存在万向节死锁问题;四元数则提供平滑插值和快速运算,但使用相对复杂。内容涵盖了各种旋转表示的优缺点及相互转换。
摘要由CSDN通过智能技术生成

05/11/2020

前言:

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

方位

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

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

旋转矩阵

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

用哪个矩阵

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

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

矩阵的优缺点

优点
  • 可以立即进行向量的旋转
  • 被图形API所使用
  • 多个角位移连接
  • 矩阵的逆
缺点
  • 矩阵占用了更多的内存,如动画序列中的关键帧,
  • 难使用
  • 矩阵可能是病态的

欧拉角

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

  • heading-pitch-bank 基本思想是让物体开始于标准方位-- 就是物体坐标轴和惯性坐标轴对象
    M 惯 性 → 物 体 = H P B M_{惯性\rightarrow物体} = HPB M=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 wrap(x)=x360[(x+180)/360]Δθ=wra
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值