- 注意!本文是在下几年前入门期间所写(young and naive),其中许多表述可能不正确,为防止误导,请各位读者仔细鉴别。
四元组
这篇文章内容将比较偏数学,为方便快速复习,这里只列出关键的结论。
四元组简介
四元组类似于一个复数,有实部和虚部,只不过四元组的虚部是个矢量,因此总共有四维,一般来说我们把矢量放在前面,也就是说存在XMFLOAT4里面的时候,前三维是虚部,最后一维是实部。
运算的定义
乘法可以写成矩阵形式
注意因为涉及叉乘,左手系和右手系里的四元组不一样。
乘法和矩阵乘法一样,有结合律没有交换律。
单位四元组(0,0,0,1),纯四元组 ( v ⃗ , 0 ) (\vec{v},0) (v,0)。
共轭
共轭的性质
模长的定义就是二阶范数
求逆
逆的性质
单位四元组
可以写成
旋转操作符
复数相乘的时候,模长相乘,辐角相加。乘单位复数相当于作旋转操作。
四元组也类似,假如我们有单位四元组 q = ( u , \bf{q} = (\bf{u}, q=(u, w ) ) ),有 q − 1 = q ∗ \bf{q}^{-1}=q^* q−1=q∗,假如p是一个三维空间中的点或矢量,我们把p看作一个纯四元组,即(v,0),考虑如下计算
其中
相当于对着 n ⃗ \vec{n} n这根轴旋转了2θ。
我们可以这样构造q
这样就是绕 n ⃗ \vec{n} n轴旋转θ角(左手系)。
旋转操作符转矩阵:
旋转矩阵转旋转操作符:
旋转操作符复合
四元组插值
定义点乘
插值
可以看出这种spherical插值不是线性的,但是对角度而言是匀速的插值,相比之下,(1-t)a+tb这种线性插值再归一化得到的结果是不匀速的旋转,会先加速再减速。
旋转操作符有这么一个性质
即负的q也会得到同样的旋转结果,然而这个过程是不同的
负的q旋转是绕 n ⃗ \vec{n} n