Zuerst soll der Fall zweier Volumina untersucht werden. Wie zuvor schon angesprochen, geschieht hier die Bestimmung der topologischen 3D-Beziehungen der beiden Tetraedernetze, indem die Beziehungen der einzelnen Tetraeder zueinander ermittelt und diese Teilergebnisse schließlich zusammengesetzt werden.
Die Idee hinter diesem Zwischenschritt besteht darin, das schwierige Problem der Bestimmung der topologischen Lage von zwei simplizialen 3-Komplexen auf die viel leichteren Untersuchungen ihrer enthaltenen Primitive (in Form von 3-Simplexen) herunterzubrechen. Diese sind symmetrisch und vor allem konvex, wodurch deren relative räumliche Lage zueinander leicht zu ermitteln ist.
Zu diesem Zweck wurde die Klasse gtTetraNetElement um die
Methode getPrimTopRel erweitert (Algorithmus
1). Sie nimmt zwei Tetraedernetzelemente
entgegen und gibt deren topologische Lage als topFlag
zurück
-
hierbei ist der Wert cross aber nicht möglich, da jede
echte Überlappung zweier Volumina 3-dimensional ist (vgl. Definition
3.14)
Wie aus diesen Teilergebnissen nun auf die Gesamtbeziehung der beteiligten simplizialen 3-Komplexe zu schließen ist, wird im folgenden bei der Betrachtung der topRel-Methode für zwei Tetraedernetze verdeutlicht.
Algorithmus 2 stellt diejenige Klassifikationsfunktion
des GEOTOOLKIT dar, mit der für ein gegebenes Volumen dessen topologische
Beziehung zu einem zweiten Volumen bestimmt werden kann. Dazu wird
der aktuelle Stand der Berechnung in mehreren topFlags
(vgl. 6.1.5) vorgehalten
, welche anfangs (Zeile 1) so initialisiert werden,
daß von einer disjoint-Lage ausgegangen wird.
Danach werden alle Tetraeder des ersten Netzes sequentiell durchlaufen
und in Beziehung zu den Tetraedern des anderen Netzes gesetzt. Zum
aktuellen Tetraeder
und dessen Bounding-Box
kann mittels
einer nicht-strikten R-Baum-Anfrage (vgl. 4.4.2) diejenige
Menge von 3-Simplexen des zweiten Volumens bestimmt werden, die
hierfür in Frage kommt (Zeile 4). Alle anderen Tetraeder von
müssen nicht weiter untersucht werden, da sie zu
in einer
disjoint-Beziehung stehen.
Aus der Tetraedermenge
werden dann nacheinander alle
Tetraeder betrachtet und jeweils die topologische Beziehung
zu
ermittelt. Ist diese von disjoint verschieden, so
besteht die Möglichkeit, daß die momentan vorgehaltene
topologische Beziehung r nicht mehr aktuell ist und erste
Anpassungen aufgrund von
vorgenommen werden können. Wurde
etwa eine topologische Lage der beiden Tetraeder festgestellt, in
der beispielsweise ein 3D-Schnitt vorliegt (overlap, covers,
covered, in oder ni), so wird das touch-Flag auf
false gesetzt.
Wie in Kapitel 5 gezeigt wurde, sind jedoch nicht
alle topologischen Beziehungen der beiden Tetraedernetze allein
durch die relativen räumlichen Lagen ihrer enthaltenen Tetraeder
abzuleiten. Es wird also in einem nächsten Schritt überprüft,
ob die ermittelte topologische Beziehung
auch auf den Rändern
der beiden Volumina ihre Gültigkeit hat. Dies geschieht mit der
gtTetraNetElement-Methode appliesOnSurface (Zeile 9),
in der getestet wird, ob die Tetraeder Randdreiecke enthalten und ob
diese an der gefundenen Beziehung beteiligt sind. Wenn dem so ist, hat
die Lage dieses Tetraederpaares einen größeren Einfluß auf die
Gesamtbeziehung: im Falle einer Berührung (von Innen oder Außen)
kann das jeweilige Flag nun aktualisiert und die bisher erfaßte
Dimension entsprechend angepaßt werden. Außerdem bedeutet eine
overlap-Beziehung, die sich über beide Ränder erstreckt
den sofortigen Abbruch dieser Funktion, da die beiden Volumina
dann ebenfalls die topologische Beziehung overlap aufweisen.
Bei bestimmten topologischen Lagen der Tetraeder reicht jedoch auch die Betrachtung der Ränder nicht aus, um auf die Gesamtbeziehung schließen zu können. In diesen Sonderfällen ist es vielmehr nötig, auch die benachbarten Tetraeder zu untersuchen (Zeile 11) und die Beziehung eines Tetraeders zur Vereinigung von zwei benachbarten Tetraedern mit einfließen zu lassen. Damit die Entscheidung, bei welchen topologischen Beziehungen unter den Tetraedern auch deren umgebende Simplexe betrachtet werden müssen, auf eine formale Grundlage gestellt werden konnte, wurde zu allen möglichen Beziehungen (außer disjoint) summiert, welche Beziehungen zu den Nachbarn vorkommen können und wenn ja, wie die entstandene Beziehung aussieht - Tabelle 6.1 faßt die so gewonnenen Erkenntnisse zusammen.
Zu den Sonderfällen sind nun diejenigen Kombinationen zu zählen,
bei denen zu den benachbarten Beziehungen
und
ein
Tabelleneintrag zu finden ist, der eine topologische Beziehung
enthält, die von
und
verschieden ist.
Ein Beispiel für einen solchen Sonderfall ist im rechten Bild
von Abb. 6.1 (Seite 73) zu sehen. Hier kommt es zu
einem overlap, obwohl nur ein touch_2D und ein
covers_2D unter den einzelnen Tetraedern festgestellt
wurde
.
Da die beiden Tetraeder jedoch benachbart sind, führt
diese spezielle Konfiguration zur topologischen Beziehung
overlap, welche sogar für die Gesamtbeziehung übernommen
wird, wenn der appliesOnSurface-Test positiv ausfällt.
Doch kommen wir wieder zurück zum topRel-Algorithmus. Nachdem die Sonderfälle betrachtet (Zeile 10) und deren Auswirkungen berücksichtigt wurden (Zeile 11), folgt eine erneute Anpassung der aktuellen topologischen Beziehung in den jeweiligen Flags (Zeile 13) und die sofortige Rückmeldung eines eventuellen overlaps, bevor das nächste Tetraeder der nicht-strikten R-Baum-Anfrage aus Zeile 4 gewählt und deren topologische Beziehung zum aktuellen Tetraeder aus dem ersten Netz betrachtet wird.
Wurde so mit allen Elementen des ersten Tetraedernetzes verfahren, erfolgt in Zeile 19 die Rückgabe der von overlap verschieden topologischen Gesamtbeziehung der beteiligten Volumina.
Ein ähnlicher Aufbau ist auch bei den anderen topRel-Methoden zu finden, auf die im folgenden aber noch genauer eingegangen werden soll, da hierbei auch interessante Sonderfälle auftreten können.