Das Auffinden des nächsten Gitter- bzw. Geometriepunktes oder das
Feststellen in welcher Gitterzelle bzw. in welchem Solid sich ein
vorgegebener
Punkt befindet ist eine Prozedur, die bei vielen geometrischen Operationen
als Teilschritt enthalten ist.
Wie schon oben erwähnt, ist diese Aufgabe bei CSG-Geometrien sehr
einfach zu implementieren.
Ebenso bei Ortho-Produkt-Gittern--die Suche kann hier für jede
Koordinatenachse getrennt durchgeführt werden (am effizientesten mittels
binärem Suchen).
Bei allgemeinen strukturierten Gittern, unstrukturierten Gittern
sowie BRep Geometrien ist ein effizientes Suchverfahren in der
Implementierung deutlich aufwendiger.
Natürlich ist es möglich, alle Zellen des Gitters bzw. alle Solids der
Geometrie nacheinander zu prüfen, ob der gesuchte Punkt enthalten ist.
Da die Tests, ob ein Punkt innerhalb eines bestimmten Körpers ist, relativ
aufwendig sind, hat diese Methode auch einen großen Bedarf an CPU-Zeit.
Man kann zwar mittels sogenannter Boundingbox-Tests eine deutliche
Geschwindigkeitssteigerung erzielen, jedoch bleibt der Rechenaufwand bei
einer Größenordnung von .
Hingegen erreichen Verfahren, die mit einem Suchbaum arbeiten in der Regel
einen Aufwand von
.
Nach dem gleichen Prinzip wie ein binärer Baum für eindimensionale Daten arbeitet der Punkt-Octree (oder auch Point-Bucket-Octree) bei der Suche nach Geometriepunkten in drei Dimensionen. Jeder Knoten des Octrees entspricht einem Würfel (bzw. Quader) und wird durch seine Kinder in acht Würfel mit der halben Seitenlänge aufgeteilt (Abb. 5.7). Die Wurzel des Baumes bildet ein Würfel, der das gesamte darzustellende Gebiet umschließt.
![]() |
Neben dem Suchen nach vorhandenen Punktkoordinaten kann man den Punkt-Octree
auch zum Auffinden von Punkten in einem vorgegebenen Bereich, Suchen des
nächstgelegen Punktes und ähnlichen Operationen verwenden.
Der Aufwand dieser Operationen beträgt unter der Voraussetzung,
dass der Octree zumindest einigermaßen balanciert ist, ansonsten
kann er zu
ausarten.
Da die Flächen des Octrees parallel zu den Koordinatenachsen sind, können
Vergleiche, ob Punkte in einem Würfel liegen oder nicht, für die
,
, und
-Koordinaten exakt durchgeführt werden, und man braucht
keine Abstände oder Schnitte zu berechnen, was zu numerischen Ungenauigkeiten
führen könnte.
Mir einem erweiterten Octree (auch Finite Octree) [127] lassen sich nicht nur die Punkte, sondern auch die Linien, Flächen und Solids einer Struktur geometrisch ordnen. Er eignet sich deshalb zur Suche von Objekten in unstrukturierten Gittern oder BRep-Geometrien. Wie beim Punkt-Octree wird der Raum in Würfel eingeteilt, wobei jeder Würfel in acht Sub-Würfel aufgeteilt wird, bis ein Grenzkriterium erreicht wird. Abbildung 5.8 zeigt die vier möglichen Fälle, bei denen die Aufteilung abgebrochen wird, da ein weiteres Zerlegen des Würfels mindestens einen Sub-Würfel des selben Typs hätte. Einen Knoten, der nicht weiter zerteilt wird, nennt man Blatt.
Im Fall, dass ein Geometrie-Punkt sehr nahe an einer Teilungsebene des Octrees liegt, und zwei Linien oder Flächen, die in einem sehr spitzen Winkel zueinander stehen, diese Ebene durchstoßen, ist der Abstand der Durchtrittspunkte(-linien) sehr klein. Er kann sogar kleiner als die Auflösung der im Rechner darstellbaren Zahlen werden, was zur Folge hat, dass dieser Fall nicht im Octree darstellbar ist, da nicht mehr weiter unterteilt werden könnte. Um dies zu verhindern wird ein neuer Blatt-Typ eingeführt (Graues Blatt). Sein Aufbau (siehe Abb. 5.9) ist ähnlich dem Punkt-Blatt mit der Ausnahme, dass sich der Punkt außerhalb des Blattes befinden darf, alle Flächen und Linien innerhalb des Blattes müssen jedoch diesen Punkt enthalten.
![]() |
Ob sich ein Punkt in einem bestimmten Octree-Würfel befindet oder nicht,
kann wie zuvor durch direkten Koordinatenvergleich herausgefunden werden.
Schwieriger ist es zu bestimmen, ob eine Linie oder Fläche einen Würfel
schneidet.
Zwar gibt es dafür einfache Testverfahren, doch muss dabei
unbedingt darauf geachtet werden, dass es nicht etwa durch numerische
Ungenauigkeiten zu inkonsistenten Ergebnissen kommt.
Es ist deshalb ratsam ein Verfahren zu wählen, dass auf Punktvergleichen
basiert, da diese exakt durchgeführt werden können.
Die Aufgabe kann also folgendermaßen formuliert werden:
Finde einen Punkt, der falls die Fläche (Linie) den Würfel schneidet,
mit Sicherheit innerhalb des Würfels liegt.
Ein solcher Punkt kann durch Schnitt mit den Raumdiagonalen (
)
bzw. mit den Diagonalebenen (
,
,
) des
jeweiligen Würfels gefunden werden.
Da benachbarte Würfel Raumdiagonalen und Diagonalebenen gemeinsam haben,
ist garantiert, dass auch die Schnittfunktionen ungeachtet numerischer
Ungenauigkeiten das gleiche Ergebnis liefern und Konsistenz gewährleistet
ist.
Neben dem beschleunigten Suchen nach Geometrieelementen kann ein erweiterter Octree auch effizient zur Kollisionserkennung, Gittererzeugung [128,129], Voxel-Diskretisierung und Booleschen Operationen (siehe unten) verwendet werden.
![]() |
Da bei einem Octree immer an vordefinierten Stellen parallel zu den Koordinatenebenen unterteilt wird, kann es bei stark nichtsymmetrischen Geometrien vorkommen, dass der Baum nicht gut balanciert ist, was die Leistungsfähigkeit beim Suchen verringert. Auch bei der Darstellung dünner Schichten, die nicht parallel zu den Achsen sind, kommt es zu Leistungseinbußen, da hier so oft verfeinert werden muss, bis die Grenzflächen in verschiedenen Würfeln liegen (Abb. 5.10). Diese Nachteile lassen sich durch den BSP-Baum (Binary Space Partitioning) beheben. Die Wurzel dieses Baumes repräsentiert den gesamten Raum. Jeder Knoten hat (nicht wie beim Octree acht, sondern) genau zwei Kinder, die durch Teilung mittels einer Ebene entstehen. Als Teilungsebenen verwendet man Flächen der Geometrie und wählt diese so aus, dass ein (annähernd) balancierter Baum entsteht. Das Aufteilen wird abgebrochen, wenn ein Blatt des Baumes ausschließlich in einem einzigen Solid liegt. Der BSP-Baum bildet somit einen Übergang von der BRep- zur CSG-Darstellung.