JS - 我如何实现引力?

时间:2013-07-13 23:10:43

标签: javascript math gravity numerical-methods

如何实施重力?我做了这个:http://jsfiddle.net/X2XvC/5/但是所有点都只是跟随你的光标(这不是万有引力)。我听说过Eulers方法,但我不知道如何在我的代码中实现它。

我找到了什么:

void update(float dt)
{
    position += velocity * dt + acceleration * 0.5 * dt * dt;
    velocity += acceleration * dt;
}

1 个答案:

答案 0 :(得分:2)

正如Pointy已经建议的那样,你必须影响点的速度向量。

重力是一种通过以下方式计算的力:

F_G = gamma * mass1 * mass2 / distance^2

gamma是引力常数,mass1mass2是物体的质量。您可以通过以下方式获得最终加速:

F_G = a * mass1
a = F_G / mass1
  = gamma * mass2 / distance^2

你会发现加速度与运动物体的质量无关。剩下的是gamma * mass2,您可以将其设置为任意常量。无论哪个最符合您的需求。

现在我们有加速度矢量的长度。方向当然是normalize(cursorPosition - pointPosition)。所以整体加速度是:

d = cursorPosition - pointPosition
a = constant * d / length(d)^3

了解这一点,您可以通过以下方式更新每一帧中点的速度和速度:

velocity += a * dt
position += velocity * dt

其中dt是最后一帧的持续时间。

Here是您更改的示例代码。线if(distance < 6)...用于限制加速度(如果一个点在重心中移动,则无限加速)。