四元数球面差值公式推导
惯例先废话 其实去年就推过这个 不过当时忙别的就一直没写 前两天回想起来 发现再推一边还是费了一些时间 所以决定还是来记录一下以下正文
还是先说结论
qm=qa⋅sin((1−t)θ)+qb⋅sin(tθ)sinθqm = \frac{qa·sin((1-t)\theta)+qb·sin(t\theta)}{sin\theta}qm=sinθqa⋅sin((1−t)θ)+qb⋅sin(tθ)
其中:qm为插值结果
qa为插值起点
qb为插值终点
t为插值步长 取值范围0~1
θ\thetaθ为从qa转到qb旋转过的角度的一半
这里先证明一个引理
假设 q1 , q2 , q 都是四元数,
从 q1 变换到 q2 对应的四元数为 q ,转过角度的一半为 θ\thetaθ
则q2=q1⋅qq2=q1·qq2=q1⋅q
左右同乘 q1 的逆 q1−1q1^{-1}q1−1 得
q=q1−1q2q=q1^{-1}q2q=q1−1q2
因为四元数相等,所以两四元数的实部(即ω\omegaω分量)对应相等
令real() 表示取实部操作 则有
real(q1−1q2q1^{-1}q2q1−1q2) = real(q) = cosθ\theta