2

衝突検出を大幅に高速化するために、2Dシミュレーションで四分木を実装する方法を探していましたが、その概念を理解するのは非常に難しいと思います。衝突検出が完全にすべてのパーティクルを不必要に通過し、単純に愚かであるため、160〜180のパーティクルを通過すると、非常に遅くなるため、シムはうまく機能します。今のところ、それは画面全体で互いに衝突している束または円であり、マウスをクリックしてドラッグすることで、新しい速度と場所で新しい円を生成することができます。

edit1:

さて、画像でわかるように、今はツリーを作成できたと思います

私の四分木画像:http://i.stack.imgur.com/c4WNz.jpg

だから今の問題は、衝突検出にどのように役立つようにするかです...

チェックするたびにゼロからツリー全体を作成する必要がありますか?

私が待っている間に私がやろうとしていること、それが何らかの形で正しいことを願っています:P

1_各ノードにボールがあるかどうかを確認し、ボールがない場合はそのノードを除外します。2_葉のレベルに達するまで交差をチェックし続け、それらの交差するボールを葉のノードに追加します。3_続行する前にリーフノードでボールを衝突させますか?

これが私のQuadTreeNodeクラスです。

public class QuadTreeNode { 
    private QuadTreeNode parent;
    private QuadTreeNode[] children;    
    private int id;
    private double x;
    private double y;
    private double width;
    private double height;

public QuadTreeNode(double x, double y, double width, double height, int id, QuadTreeNode parent){
    this.x = x;
    this.y = y;
    this.width =  width;
    this.height = height;
    this.children = new QuadTreeNode[4];
    this.id = id;
    this.parent = parent;
    //System.out.println("<x:>"+x+"<y:>"+y+"<w:>"+width+"<h:>"+height);     
    if (this.width>=1000/12 && this!=null){
        nodes+=1;
        this.children[0] = new QuadTreeNode(x, y, width/2, height/2, id+1, this);
        this.children[1] = new QuadTreeNode(x + width/2, y, width/2, height/2, id+2, this);
        this.children[2] = new QuadTreeNode(x, y + height/2, width/2, height/2, id+3, this);
        this.children[3] = new QuadTreeNode(x + width/2, y + height/2, width/2, height/2, id+4, this);
    }
}
4

1 に答える 1

1

コンセプトがわかりにくいと思います

アイディア:

  • 以下以降のセルの再帰的パーティション:

    • セルには、プリミティブの修正カウントが含まれています。
    • 最大パーティションカウントが発生しました。
  • シーン全体のバウンディングボックスから始めます。

  • 再帰的:プリミティブが多すぎる場合は、セルを分割します。
  • 部屋が空の場合は分割なし(適応パーティション)
  • ジオメトリがある細かいパーティション。

ヒント:ヒラーチでは上下に多くの動きがあるため、トラバーサルは比較的高価です。

  • プリミティブを内部ノードまたはリーフに保存します。

トラバーサル:-ルートの軸に位置合わせされたバウンディングボックスでテストします(最初:シーン全体)

ヒント:最初のヒットは最も近いものではありません。

これが、要するに四分木または八分木(3D)の原理です。ここに画像で説明したcgスライドがありますが、すべてをアップロードしたくありませんでした。それはあなたの質問に対する完全な答えではないと思いますが、多分それは少し役立つでしょう。

于 2012-07-14T00:07:50.967 に答える