3D数学之方位与角位移、欧拉角与四元数

3D物体如何描述方位:
1.方向
2.角位移
3.旋转

方位≠方向

当向量自转时,不会改变向量的属性
但是物体自转时,物体的方位就变化了

表示方法:
位置:使用相对于参考系的位移
方位:相对于已知方位的旋转来描述的,也就是角位移


使用矩阵形式描述方位:
3D物体,描述坐标系中的方位的一种法就是列出这个坐标系的基向量
基向量构成一个3x3矩阵,用这个矩阵表示方位

也就是说:
一个旋转矩阵可以把一个坐标系中的向量旋转到另一个坐标系中

使用矩阵的优点:
1.方便的计算向量旋转
2.图形API都在用
3.多个矩阵连续可以坐多个坐标系旋转
4.矩阵的逆可以表示反角位移
使用矩阵的缺点:
1.占用了更多内存
2.不直观


使用欧拉角描述方位
什么是欧拉角?
将角位移分解为绕三个互相垂直轴(笛卡尔坐标系)的三个旋转组成的序列,可以表示任意旋转

绕y轴旋转为heading,绕x轴旋转为pitch,绕z轴旋转为bank
每次旋转 先heading->pitch->bank,也就是旋转顺序是固定的
一般都有三个轴 x-y-z,每个表示为旋转的角度

使用欧拉角的优点:
1.容易使用,角度好看
2.简洁的表达方式
3.任何三个数都可以构成欧拉角
使用欧拉角的缺点:
1.给定方位表达方式不唯一
2.两个角度之间求差值非常困难(在720°和45°有很大的角度差)

万向锁问题:
先y转45°,再x转90° 和 先 x转90读,再z转45°时等价的
一旦选择 x轴转了90或者-90°,就被限制在只能绕竖直轴旋转
角度为90或者-90°的第二次旋转使得第一次和第三次旋转的轴完全相同,就叫万向锁

解释一下:
绕Y轴的旋转,是以惯性坐标系的Y轴来,而X和Z轴的旋转却按照模型的本地坐标系来旋转
当y转了90°是,z就和y的旋转轴共面了,所以现在旋转y和z的效果都是一样的了,也就是万向锁


四元数
四元数就是用四个数表达方位
表示为[w,(x,y,z)]

n为旋转轴,θ为旋转量
q=[cos(θ/2), sin(θ/2)n]

差值运算(球面线性插值Slerp:Spherical Linear Interpolation)

四元数的优点:
1.平滑差值
2.快速连接和角位移求逆
3.能和矩阵形式快速转换
4.仅用四个数
四元数的缺点:
1.比欧拉角稍大一些
2.四元数可能不合法
3.难于使用


矩阵、四元数和欧拉角之间的转换

1.从欧拉角转换到矩阵
分别计算出每个旋转的矩阵再将它们连接成一个矩阵,这个矩阵就代表了整个角位移
M(惯性->物体)=HPB
(H、P、B代表heading、pitch、bank的旋转矩阵,分别绕y、x、z旋转)

2.从矩阵转换到欧拉角
反推HPB

3.从四元数转换到矩阵
通过任意轴的旋转矩阵,套入四元数的分量(通过复杂的计算)

4.从矩阵转换到四元数
反推

5.从欧拉角转换到四元数
先通过欧拉角构造矩阵,然后将三个旋转分别转成四元数,进行四元数连接

q(x,y,z) =
cos(y/2)cos(x/2)cos(z/2)+sin(y/2)sin(x/2)sin(z/2)
cos(y/2)sin(x/2)cos(z/2)+sin(y/2)cos(x/2)sin(z/2)
sin(y/2)cos(x/2)sin(z/2)+cos(y/2)sin(x/2)cos(z/2)
cos(y/2)cos(x/2)sin(z/2)+sin(y/2)sin(x/2)cos(z/2)

5.从四元数转换到欧拉角
通过矩阵转换到欧拉角的公式,将四元数带入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值