2011-08-07 11 views
1

私は円形のオブジェクトを持っているとしましょう。各オブジェクトの直径は64ピクセルです。クワッドツリーの巨大なオブジェクトの問題

私のクワッドツリーのセルは、96x96ピクセルと言います。

サークルが+すべての隣接セルに存在するセルからの衝突をチェックすると、すべてうまく動作します。

しかし、512ピクセルの直径を持つ円が1つあればどうなりますか?それは多くの細胞をカバーするので、これは隣接細胞のみをチェックするときには問題になります。しかし、もっと大きなオブジェクトがツリーに挿入されるたびに、四分木グリッドをサイズ変更することはできません。

+1

ここにはツリーがありません。固定サイズのグリッドを記述します。クワッドツリーは異なるサイズの四角形を含むと仮定されていて、シーンにオブジェクトを追加すると、セルの数とサイズは動的に変化すると想定されています。 –

+0

n.m:詳しいことはできますか?どのようにそれを動的にすることができますか? – Bytemain

答えて

1

これは興味深い問題です。ツリーの高さ情報を使ってノードやセルを拡張できますか?オブジェクトが大きい場合、最小のセルはツリーの高さでそれをネストします。それはgoogleやbingマップのようなマップのアプリケーションがするものです。

ここに、同様のソリューションへのリンク:http://www.gamedev.net/topic/588426-2d-quadtree-collision---variety-in-sizeがあります。私は画面を四分木と混同していました。あなたは簡単な再考で衝突をチェックすることができます。

+0

だから私は完全にノードのオブジェクトを格納する必要がありますセルサイズが完全にオーバーラップ?または、オブジェクトがすべての境界に重ならない完全に一致するセルに置くだけですか? – Napoleon

+0

移動するオブジェクトがあるためわからない。私の考えは、別の高さに大きなオブジェクトを格納する場合、この情報を使ってオブジェクトの実際の境界を取得できるということです。これを画面アドレスにどのように変換できるのかよく分かりません。私はすべてのオブジェクトを最大で保存するので、私はこれを使うことができます。すべてのオブジェクトを見たくない場合は、ルートを移動します。 – Bytemain

+0

私は私の答えを修正しました! – Bytemain

1

オブジェクトを1つのセルに入れる代わりに、それらを衝突させるすべてのセルに配置します。そうすれば、各セルを個別にテストできます。コピーを作成しないようにオブジェクトへのポインタを使用してください。また、leavenodesでこれを行う必要があるので、上位ノードに含まれるデータを下位ノードに結合する必要はありません。

関連する問題