衝突検出を大幅に高速化するために、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);
}
}