四元数球面差值公式推导
惯例先废话 其实去年就推过这个 不过当时忙别的就一直没写 前两天回想起来 发现再推一边还是费了一些时间 所以决定还是来记录一下以下正文
还是先说结论
q m = q a ⋅ s i n ( ( 1 − t ) θ ) + q b ⋅ s i n ( t θ ) s i n θ 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 θ
则 q 2 = q 1 ⋅ q q2=q1·q q2=q1⋅q
左右同乘 q1 的逆 q 1 − 1 q1^{-1} q1−1 得
q = q 1 − 1 q 2 q=q1^{-1}q2 q=q1−1q2
因为四元数相等,所以两四元数的实部(即 ω \omega ω分量)对应相等
令real() 表示取实部操作 则有
real( q 1 − 1 q 2 q1^{-1}q2 q1−1q2) = real(q) = cos θ \theta