Wenn Sie geometrische Objekte in einem Quadtree (oder Octree) platzieren, können Sie Objekte, die größer als ein einzelner Knoten sind, auf verschiedene Arten platzieren:
- Platzieren Sie die Referenz des Objekts in jedem Blatt, für das es enthalten ist
- Platzieren Sie die Referenz des Objekts in dem tiefsten Knoten, für den es vollständig enthalten ist
- Sowohl # 1 als auch # 2
Beispielsweise:
In diesem Bild können Sie den Kreis entweder in alle vier Blattknoten (Methode 1) oder nur in den Wurzelknoten (Methode 2) oder in beide (Methode 3) platzieren.
Welche Methode ist für die Abfrage des Quadtrees üblicher und warum?
graphics
data-structures
computational-geometry
nsantorello
quelle
quelle
Antworten:
Angenommen, Sie speichern eine Referenz und nicht das Objekt selbst, kann es je nach Anwendung sinnvoll sein, dies anders zu tun.
Wenn Sie beispielsweise Kollisionen mit diesem (durchgezogenen) Kreis berechnen und die Kollision in der unteren linken Ecke auftritt, ist es einfacher, direkt von diesem Blatt aus auf alle Geometrien in diesem Blatt zuzugreifen (Methode 3). (ohne den Baum nach oben durchlaufen und die geerbte Geometrie bestimmen zu müssen). Angenommen, Sie haben nur Quadtrees zum Zeichnen von Geometrie verwendet, und Sie möchten Methode 1 verwenden, da es nur Sinn macht, etwas in den Knoten zu zeichnen, für den es vollständig enthalten ist (es wäre schwieriger, herauszufinden, welcher Abschnitt vorhanden ist für jeden Blattknoten zeichnen und wo).
Was allgemeiner ist, meine einzige Erfahrung mit Quadtrees ist das Schreiben einer N-Body-Simulation, bei der die geometrischen Objekte wirklich nur Punkte waren, die keine Fläche hatten, daher kann ich das nicht definitiv beantworten.
quelle
Einer der Vorteile eines Quadtree besteht darin, dass Sie einen Knoten nicht in seine untergeordneten Knoten aufteilen müssen, wenn alle untergeordneten Knoten die gleichen Informationen enthalten würden. Dies kann viel Speicherplatz einsparen und die Verarbeitung beschleunigen.
Nach diesem Prinzip halte ich es für sinnvoller, es nur im Wurzelknoten zu speichern (Methode 2). Es könnte Ihnen viel Speicherplatz ersparen, und ich denke, es würde auch die Verarbeitung erleichtern. Wenn Sie beispielsweise versuchen, Schnittpunkte des Kreises mit einer Linie zu finden, die durch drei der Blattknoten verläuft, müssen Sie entweder den Schnittpunkt für jeden Blattknoten separat berechnen oder sich daran erinnern, dass Sie diesen Kreis bereits geschnitten haben.
Wenn Sie dagegen Objekte in Blattknoten haben, können Sie Fehlalarme beseitigen (Objekte, die auf Schnittpunkte überprüft werden müssen, da sie sich im richtigen Knoten befinden, sich jedoch nicht schneiden).
Ich denke also, dass beide Ansätze ihren Nutzen haben und ich bin mir nicht sicher, wie ich mich für einen entscheiden soll.
Ich würde wahrscheinlich Ansatz 3 nicht verwenden, da ich keine positiven Ergebnisse sehe.
quelle