0

2 つのオブジェクトの引力を扱うチュートリアルを知っている人はいますか? 例えば。衛星が月に引き寄せられます (そして、月を通り過ぎる可能性があります)。

私が取り組んでいる小さな Java ゲームがあり、彼の機能をそのゲームに実装したいと考えています。

2 つの物体間の引力の公式を知っていますが、それをゲームで使用しようとしても何も起こりませんか?

画面上に 2 つの物体があり、そのうちの 1 つは常に静止しており、もう 1 つは静止している物体の検出範囲内に入るまで一定の速度で直線的に移動します。どの時点で、静止オブジェクトに描画する必要があります。まず、2 つのオブジェクト間の距離を計算し、それらの質量とこの距離に応じて、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;
}
4

2 に答える 2

1

数式に問題があります。重力を計算し、それを加速度であるかのように適用します。加速度は力を質量で割ったものなので、力を小さな物体の質量で割る必要があります。したがって、GRAV_CONSTANT * ((mass1) / (distBetweenObjects * distBetweenObjects))は質量 2 の加速度の式です。

次に、速度調整(加速度)ではなく、位置調整であるかのように使用しています。移動質量の速度を追跡し、それを使用してその位置を調整し、加速度を使用してその速度を変更します。

最後に、実際にはベクトルである加速をスカラーとして使用しています。移動質量から静止質量までの角度を計算し、正の x 軸からの角度として表す場合は、x 加速度に角度の余弦を掛け、y 加速度に角度の正弦を掛けます。

これにより、重力の正しい表現が得られます。

何もしない場合は、座標をチェックして何が起こっているかを確認してください。静止質量が効果を発揮するのに十分な大きさであることを確認してください。重力は非常に弱い力であり、惑星の質量よりもはるかに小さい場合、大きな影響はありません。

また、使用している単位に対して正しい重力定数を使用していることを確認してください。本に載っている定数は、MKS システム用のもので、メートル、キログラム、秒です。長さの単位としてキロメートルを使用している場合は、定数を 100 万倍するか、長さを 1000 倍してから式に代入する必要があります。

于 2011-04-08T14:52:53.037 に答える
-1

あなたのアルゴリズムは正しいです。おそらく、あなたが計算する引力は小さすぎて見えません。削除GRAV_CONSTANTして再試行します。ところで、一時変数で
結果を移動する速度を少し上げることができる場合。getDistanceBetweenObjects()

于 2011-04-08T14:28:37.007 に答える