如何实现重力?我做了这个:http: //jsfiddle.net/X2XvC/5/但所有点都只是跟随你的光标(这不是引力)。我听说过 Eulers 方法,但我不知道如何在我的代码中实现它。
我发现了什么:
void update(float dt)
{
position += velocity * dt + acceleration * 0.5 * dt * dt;
velocity += acceleration * dt;
}
如何实现重力?我做了这个:http: //jsfiddle.net/X2XvC/5/但所有点都只是跟随你的光标(这不是引力)。我听说过 Eulers 方法,但我不知道如何在我的代码中实现它。
我发现了什么:
void update(float dt)
{
position += velocity * dt + acceleration * 0.5 * dt * dt;
velocity += acceleration * dt;
}
正如 Pointy 已经建议的那样,您必须影响点的速度矢量。
重力是一种力,通过以下方式计算:
F_G = gamma * mass1 * mass2 / distance^2
哪里gamma
是万有引力常数,mass1
和mass2
是物体的质量。您可以通过以下方式获得加速度:
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
是最后一帧的持续时间。
这是您更改的示例代码。这条线if(distance < 6)...
用于限制加速度(如果一个点移动通过重心,它会被无限加速)。