2012-03-28 5 views
1

Ich versuche eine 2-D schnelle Kollisionserkennung mit Quad-Tree zu implementieren.Können wir Quad-Tree auf ein nicht quadratisches Rechteck anwenden?

AFAIK, Quad-Tree unterteilt eine Region in 4 Teilregionen, Nordwesten, Nordosten, Südosten und Südwesten. Diese Aufteilung funktioniert perfekt mit einem Quadrat. Aber was, wenn die Region ein nicht-quadratisches Rechteck ist? In diesem Fall können wir die lange Kante und die kurze Kante nicht gleichmäßig teilen, und die kurze Kante bestimmt, wie weit wir teilen können.

Bin ich richtig? Soll das so sein?

+2

Gibt es einen Grund, warum Sie keinen quadratischen Quadtree verwenden können, dessen Seiten so lang sind wie die längste Seite Ihres Rechtecks? Es wird nie etwas im leeren Raum geben, aber das sollte ein vernachlässigbarer Overhead sein. –

+0

Sie meinen, fügen Sie etwas Polsterung hinzu. Das ist eine gute Idee. Aber was ist mit einer Region in willkürlicher Form? Soll ich es so klein wie möglich in ein Quadrat einschließen? – smwikipedia

+1

Das ist die Idee! Der Quadtree funktioniert immer noch genauso, wenn er einen beliebigen Raum einschließt. –

Antwort

0

Nehmen Sie einfach das Maximum der Breite und Höhe der Begrenzungsbox der Region von Interesse als die Seitenlänge des Quadbaums.

Eine andere Lösung: Zwei Quad-Baum implementtaions, die ich je gesehen habe verwendet ein Rechteck internaly, so dass aus der Box laufen würde, auch wenn die zur Verfügung gestellten Wurzel Grenzen nicht ein Quadrat ist. Sie teilen sowohl die Breite als auch die Höhe der Grenzen in jedem Unterteilungsschritt.
Beachten Sie jedoch, dass es 10 verschiedene Quadtree-Typen gibt. Ich rede von Rectangle Quadretrees.

Eine Implementierung verwendet explizit eine a-Seitenlänge, die durch 2 geteilt wird, so dass dies nicht für Nicht-Wurzel-Grenzen funktionieren würde.

Allerdings empfehle ich immer noch meinen ersten Satz, besser ein Quadrat als Wurzelgrenzen verwenden. Dies funktioniert dann für alle Quad-Tree-Typen.

Verwandte Themen