在3D中以弧形运动将点A移动到点B.

时间:2015-05-24 12:36:33

标签: python math 3d

我正在努力弄清楚如何在3D中以弧形运动将A点移动到B.运动的持续时间并不重要。我已经在它上面找到了大量的维基百科页面,但是自从我上大学以来已经很长时间没有理解它们了。任何代码示例对我来说都非常有用。谢谢,我真的很感谢你的帮助。这是一个图像,显示我想要实现的目标,虽然图像只代表2d中的点,我正在寻找一个3D解决方案。

illustration

2 个答案:

答案 0 :(得分:1)

假设您的问题陈述是:

  

给定点ab,沿着与up向量相切的平面追踪圆形路径:

并且你有合适的矢量代数库:

def interp(a, b, up, t):
    """ 0 <= t <= 1"""

    # find center and radius vector
    center = (a + b) / 2
    radius = a - center

    # split path into upwards and downwards section
    omega = math.acos(radius.dot(up))  # angle between center-a and center-top
    t_top = omega / math.pi  # time taken to reach the top

    # redefine 0 as A, 1 as the top, and B as whatever remains linear
    t = t / t_top

    #slerp, with t intentionally > 1
    sin = math.sin
    return (
        center +
        sin((1 - t) * omega) / sin(omega) * radius +
        sin(t * omega) / sin(omega) * up
    )

答案 1 :(得分:0)

如果它的2d或3d无关紧要。 你取每个点的位置,找到它们的中心beetwean。 距离beetwean中心,每个点是半径。 之后,给物体一个移动方向并告诉它始终与中心的半径距离。一个移动的矢量,你可以给它任何你想要的方向。