2011-04-08 134 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