有没有人知道一个可以处理两个物体引力的教程?例如。一颗被吸引到月球上的卫星(可能还有一个射向它的射门)。
我正在制作一个小型Java游戏,我想在其中实现他的功能。
我有两个身体之间的引力吸引力的公式,但是当我尝试在我的游戏中使用它时,没有任何反应?
屏幕上有两个物体,其中一个物体始终是静止的,而另一个物体以恒定速度沿直线移动,直到它进入静止物体的探测范围内。此时它应该被吸引到静止物体上。 首先,我计算两个物体之间的距离,并根据它们的质量和距离,更新x和y坐标。
但就像我说的那样,没有任何反应。我没有正确实施公式吗?
我已经包含了一些代码来展示我到目前为止所拥有的内容。 这是当粒子与门检测范围发生碰撞时应该开始被拉向它的情况
for (int i = 0; i < particle.length; i++)
{
// **************************************************************************************************
// GATE COLLISION
// **************************************************************************************************
// Getting the instance when a Particle collides with a Gate
if (getDistanceBetweenObjects(gate.getX(), particle[i].getX(), gate.getY(), particle[i].getY()) <=
sumOfRadii(particle[i].getRadius(), barrier.getRadius()))
{
particle[i].calcGravPull(particle[i].getMass(), barrier.getMass(),
getDistanceBetweenObjects(gate.getX(), particle[i].getX(), gate.getY(), particle[i].getY()));
}
我的Particle类中的方法来进行移动
// Calculate the gravitational pull between objects
public void calcGravPull(int mass1, int mass2, double distBetweenObjects)
{
double gravityPull;
gravityPull = GRAV_CONSTANT * ((mass1 * mass2) / (distBetweenObjects * distBetweenObjects));
x += gravityPull;
y += gravityPull;
}
答案 0 :(得分:1)
你的配方有问题。你正在计算引力,然后将其应用为加速度。加速度是力除以质量,因此您需要将力除以小物体的质量。因此,GRAV_CONSTANT * ((mass1) / (distBetweenObjects * distBetweenObjects))
是加速质量2的公式。
然后你正在使用它,好像它是位置调整,而不是速度调整(加速度是)。跟踪移动质量的速度,使用它来调整其位置,并使用加速度来改变速度。
最后,当它真的是一个向量时,你正在使用加速作为标量。计算从移动质量到静止质量的角度,如果你将其表示为正x轴的角度,则将x加速度乘以角度的余弦值,将y加速度乘以角度的正弦值。 / p>
这将为您提供正确的重力表示。
如果没有,请检查坐标以查看发生的情况。确保静止质量大到足以产生效果。重力是一种非常微弱的力量,并且与行星质量相比,它没有明显的效果。
另外,请确保您正在使用正确的重力常数。你在书中找到的常数是MKS系统 - 米,千克和秒。如果你使用千米作为长度单位,你需要将常数乘以一百万,或者将长度乘以一千,然后再插入公式。
答案 1 :(得分:-1)
您的算法是正确的。可能你计算的引力太小而无法看到。我将删除GRAV_CONSTANT
并重试。
顺便说一句,如果你可以获得一点速度,将getDistanceBetweenObjects()
的结果移动到一个临时变量中。