我有两个描述旋转的向量;起始旋转 A 和目标旋转 B。我如何最好地通过因子 F 对 A 进行插值以接近 B?
当需要插值多个维度时(即产生不需要的旋转),在向量上使用简单的 lerp 不起作用。也许从旋转向量构建四元数并使用Slerp https://en.wikipedia.org/wiki/Slerp是要走的路。但是,如何从生成的四元数中提取描述新旋转的向量呢?
由于我似乎不太明白你的问题,所以这里有一点SLERP http://en.wikipedia.org/wiki/Slerp使用numpy在python中实现。我使用 matplotlib(Axes3D 的 v.99)绘制了结果。
我不知道你是否可以使用 python,但是看起来像你的 SLERP 实现吗?在我看来,给出了很好的结果......
from numpy import *
from numpy.linalg import norm
def slerp(p0, p1, t):
omega = arccos(dot(p0/norm(p0), p1/norm(p1)))
so = sin(omega)
return sin((1.0-t)*omega) / so * p0 + sin(t*omega)/so * p1
# test code
if __name__ == '__main__':
pA = array([-2.0, 0.0, 2.0])
pB = array([0.0, 2.0, -2.0])
ps = array([slerp(pA, pB, t) for t in arange(0.0, 1.0, 0.01)])
from pylab import *
from mpl_toolkits.mplot3d import Axes3D
f = figure()
ax = Axes3D(f)
ax.plot3D(ps[:,0], ps[:,1], ps[:,2], '.')
show()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)