JS - 我怎样才能实现重力?

5 javascript math gravity numerical-methods

我怎样才能实现重力?我做了这个: http: //jsfiddle.net/X2XvC/5/,但所有点都只是跟随你的光标(这不是重力)。我听说过欧拉方法,但我不知道如何将其实现到我的代码中。

我发现了什么:

void update(float dt)
{
    position += velocity * dt + acceleration * 0.5 * dt * dt;
    velocity += acceleration * dt;
}
Run Code Online (Sandbox Code Playgroud)

Nic*_*ler 5

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

重力是一种力,计算公式为:

F_G = gamma * mass1 * mass2 / distance^2
Run Code Online (Sandbox Code Playgroud)

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

F_G = a * mass1
a = F_G / mass1
  = gamma * mass2 / distance^2
Run Code Online (Sandbox Code Playgroud)

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

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

d = cursorPosition - pointPosition
a = constant * d / length(d)^3
Run Code Online (Sandbox Code Playgroud)

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

velocity += a * dt
position += velocity * dt
Run Code Online (Sandbox Code Playgroud)

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

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