我正在尝试实施SLERP(由Ken Shoemake在“使用四元数曲线进行动画旋转”中描述) 我已经阅读了维基百科上的主题(主题:四元数,1和2)和其他网站,还搜索了有关此问题的stackoverflow。我似乎理解它背后的理论,但监督一个小细节。我将使用w作为四元数的标量值
所以最初我有两个3D矢量。每个向量在两个坐标系(C和C')中具有表示。我的目标是在系统“中途”找到这些向量的第三个表示形式。 所以我所做的是找到旋转矩阵,它将矢量从C变换为C',这似乎非常好。 我的下一步是将这个矩阵转换为四元数,这也是有效的。
现在我的问题是slerp的公式,即:
slerp(q1,q2; u)=((sin(1-u)* t)/(sin t))* q1 +(sin(ut)/ sin t)* q2
(抱歉无法上传图片以获得更好的代表性:请参阅来源1)
所以我猜这里u = 0.5,q1是我想要旋转的矢量(w = 0),q2等于我先前计算的四元数。 θ是从归一化向量和(已)归一化四元数的点积计算的。
所以我期待的是我得到一个矢量,从C旋转到第三个坐标系或从C'旋转到第三个坐标系。
我现在的问题是,我没有看到,我将如何得到一个向量而不是四元数。意思是,怎么可能,我会得到一个带有(w = 0)的四元数,因为简单地将q2乘以这个因子就不会将w设置为0.或者它是否是我将从这个函数得到的东西?
我在这里监督什么?
感谢您的帮助!
答案 0 :(得分:0)
似乎我想通了。对于有相同理解问题的人:
slerp只是在两个方向之间进行插值,意味着在两个实际旋转之间。所以在我的例子中,q1是对应于单位矩阵的四元数(所以[1,0,0,0])。 q2是旋转。 theta仍为0.5。 使用四元数我得到了,我必须用q ^ -1 v q计算旋转。其中v是我的矢量,我想旋转。这可以使用Hamilton产品计算。