2011-04-08 141 views
0

有谁知道一个教程,将处理两个物体的引力拉?例如。一颗正在被月球吸引的卫星(可能还有吊索弹过它)。引力拉伸

我有一个小型的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())); 
     } 

而在我的粒子类中的方法做运动

// 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; 
} 

回答

-1

你的算法正确。你计算的引力可能太小而不能被看到。我会删除GRAV_CONSTANT并重试。
顺便说一句,如果你可以获得一些速度将getDistanceBetweenObjects()的结果放在一个临时变量中。

1

你的配方有问题。您正在计算引力,然后将其应用为加速度。加速度是力量除以质量,所以你需要将力量除以小物体的质量。因此,GRAV_CONSTANT * ((mass1)/(distBetweenObjects * distBetweenObjects))是加速mass2的公式。

然后,您将它用作位置调整,而不是速度调整(即加速度)。跟踪移动物体的速度,使用它来调整其位置,并使用加速度来改变速度。

最后,当加速度实际上是一个矢量时,您将加速度用作标量。计算从运动质量到静止质量的角度,如果您将其表示为来自正x轴的角度,请将x加速度乘以角度的余弦值,并将y加速度乘以角度的正弦值。

这会给你一个正确的重力表示。

如果它什么都不做,请检查坐标以查看发生了什么。确保静止的质量足够大以产生效果。引力是一个非常弱的力量,你不会有比行星质量小得多的重要影响。

此外,请确保您正在使用正确的引力常数。你在书中发现的常数是MKS系统 - 米,千克和秒。如果您使用公里作为长度单位,则需要将该常数乘以百万,或者在将公式插入公式之前,将长度乘以一千。

+0

打倒我吧。:^)但是我建议不要转换成角度,直接从分离矢量获取加速度矢量会更容易,速度更快。 – DSM 2011-04-08 14:59:24

+0

非常感谢您的快速回复,这听起来像是会做到这一点。当我回家时,我会放弃这一切。 – heyred 2011-04-08 15:16:57