第10章 3D中方位与角位移
3D中有很多方法来描述方位和角位移,本章将主要讲解的是,矩阵、欧拉角、四元数
,需要了解到其优缺点、工作原理,在不同情况选择最合适的描述,转换等
矩阵形式
- 优点
利用矩阵可以在物体和惯性坐标系间旋转向量
矩阵形式被图形API所使用
多角位移连接:知道A关于B的方位和B关于C的方位,利用矩阵可以知道A关于C的方位
矩阵的逆,撤销操作,旋转矩阵是正交的,所以可以很方便的求得逆矩阵 - 缺点
矩阵相对于欧拉角的三个数占用内存很大
不直观
矩阵可能是病态的
矩阵存在六阶冗余,矩阵描述方位,行必须为单位向量并且互相垂直
欧拉角
- 书中称为
heading-pitch-bank
分别代表y-x-z
,正方形由原点沿着方向看,逆时针
为正方向 - 缺点:
给定方位,表达式不唯一,具体表现为heading转360方位没有改变,数值却改变了
万向锁
先heading=45、pitch=90的结果和pitch=90、bank=45的结果相同(这个可以自己拿个东西试试),定义:角度为正负90的第二次旋转,使得第一次和第三次旋转轴相同
两个角度求插值特别困难,具体情况如,在没有进行欧拉角限制时,A=720,B=45,从A->B其实真实插值为45,但是直接插值就会旋转2圈多,但是限制欧拉角依然会产生问题,如下图,A和B只相差了20,但是A->B会绕大圈而不是小圈,解决这个问题可以将插值的角度限制在-180~+180
四元数
- 四元数可以记为:
[w, v]
,展开为[w, (x, y, z)]
- 四元数与复数 记为:
a + bi
a为实部,b为虚部,并且满足一下计算
- 共轭复数
a + bi
和a - bi
互为共轭复数 - 复数的模
复数在2D平面上表现
首先认为在存在一个实轴和一个虚轴,具体如下
四元数
- 3个虚部 i、j、k
- 四元数任意角位移都有2个四元数表示,他们互为负,所以也存在2个
单位四元数
, - 四元数的乘法也就是叉乘和上面乘法一样
四元数的逆
就是其共轭复数除以他的模
四元数进行旋转
四元数的差
利用四元数的乘和逆,可以求得四元数的差,差定义为从一个方位到另一个方位的角位移
四元数的点乘
四元数点乘公式:[w1, v1]·[w2, v2] = w1w2 +v1v2
,其绝对值越大代表2个角位移越相似