0

衝突検出に関して多くの質問が見つかりました。2 つの指定されたオブジェクトのペアが衝突するかどうかを検出する十分に効率的な方法を作成しました。オブジェクトの数を 2 から 20 に増やすと、突然アルゴリズムが正しく機能しなくなります。たとえば、パーティクル 1 がパーティクル 10 に衝突すると、パーティクル 10 は他のオブジェクトをスキップして壁に直接衝突します。

その背後にある理由は、たとえば、粒子 1 が実際に粒子 10 と衝突している場合、私のアルゴリズムはそれらの間の衝突をチェックしていませんが、他のペアをチェックしているためです。

私によると、解決策は、各ペアの衝突検出方法を同時に実行することです。ここで、Particle one と Particle Two を各スレッドに渡す必要があります。One と Two は、衝突が検出されるオブジェクトです。

擬似コードは次のとおりです。

private double isColliding(Particle One, Particle Two) { 
     //Collision Detection Mechanism
     //Returns 0 if no collision
     //Otherwise returns a double between 0 and 1 
     //used to clip the velocity vector so that it stops right before collision
}

だから、私が欲しいのは、上記のメソッドをオブジェクトの異なるペアに対して異なるスレッドで実行するように変換する方法を知ることです....

また、これを行うことができる他の方法はありますか........

注....この上記のメソッドは、パーティクル1または2の値を変更しないため、非同期で使用できます....

4

1 に答える 1

0

これがスレッド化の軽いバージョンです ^^

    double result;
    Thread t = new Thread(){
      public void run(){
        result = isColliding(aParticle, aParticle);
      }
    };
    t.start();

    t.join();

結合により、メインスレッドはスレッド t が終了するまで待機できます。これを 2-dim for ループに入れて、結果配列とスレッド配列を使用してすべての粒子ペアを反復処理し、最後に join を呼び出します。そして、あなたは欲しいものを手に入れました。

しかし、sth を作ろうとしても意味がありません。単一のスレッドで実行されていない場合は、複数のスレッドで動作します^^だから実際にあなたへの私の答えは. あなたはそうしました。違う。collisionDetection 関数を修正する必要があります。ヘルプが必要な場合は、さらにコードを提供してください。

于 2012-05-18T23:59:48.107 に答える