math - 如何插值旋转?

标签 math 3d matrix rotation quaternions

我有两个描述旋转的向量;起始旋转 A 和目标旋转 B。我如何最好地通过因子 F 对 A 进行插值以接近 B?

当需要插值多个维度时(即产生不需要的旋转),在向量上使用简单的 lerp 无法工作。也许从旋转向量构建四元数并使用 Slerp是要走的路。但是,那么,我如何从生成的四元数中提取描述新旋转的向量呢?

最佳答案

由于我似乎不明白你的问题,这里有一点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()

关于math - 如何插值旋转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2879441/

相关文章:

c# - 从映射到排列的数字,如何生成不同于先前 perm 的其他排列。通过交换元素?

Android 3D 曲面图

Python 脚本(主要)+ Blender "face"动画

python - 获取矩阵相邻元素的总和

iPhone OpenGL : Using gluUnProject (port) and detecting clicking on an object

math - 您可以使用以下字符创建多少个可能的 URL?

java - 不使用 Math.BigInteger 的高幂模

c++ - 多维数组的划分

javascript - 带有分数/小数的数学输入、计算和输出 Javascript

wolfram-mathematica - Mathematica Graphics3D中的阴影