Eine weitere Funktion zur Bestimmung topologischer Beziehungen arbeitet auf Flächen. Diese topRel-Methode wird in der GEOTOOLKIT-Klasse gtTriangleNet bereitgestellt und orientiert sich wiederum an den zuvor besprochenen Algorithmen.
Das komplexe Problem der Bestimmung von topologischen Beziehungen wird auch für den Fall zweier Dreiecksnetze auf die viel einfachere Betrachtung ihrer enthaltetenen Dreiecke (Alg. 5) heruntergebrochen und die so gewonnenen Teilergebnisse als Grundlage für die Bewertung der relativen Lage der beiden Flächen verwendet. Der Algorithmus zu getPrimTopRel ist zu den Definitionen der topologischen Beziehungen konstruiert und bedarf sicherlich keiner weiteren Beschreibung.
Die entsprechende topRel-Methode ist in Algorithmus 6 zu finden und orientiert sich ebenfalls an den verwandten Algorithmen. Wir wollen deshalb nicht noch einmal näher auf ihn eingehen, sondern beschränken uns hier auf die interessantere Frage, welche Sonderfälle in dieser Konfiguration auftreten können.
Um bei dieser Problemstellung keinen Fall zu mißachten, entwickeln
wir wieder in einer Tabelle (6.3) alle möglichen topologischen
Beziehungen, die der Verbund zweier benachbarter Dreiecke zu einem
anderen Dreieck haben kann. Wir gehen dazu von den beiden Beziehungen
aus, welche die beiden benachbarten Dreiecke jeweils zu dem dritten
Dreieck haben können und geben zu jeder dieser Kombinationen
diejenigen topologischen Beziehungen an, die zwischen der Fläche der
beiden benachbarten Dreiecke und dem anderen Dreieck denkbar sind.
Auf diese Weise erfassen wir auch alle Sonderfälle, welche in der
Tabelle 6.3 wieder da zu finden sind, wo eine topologische Beziehung
r aus anderen Beziehungen
und
``entsteht``, die von
r verschieden sind.
Wir wollen uns hier speziell den folgenden beiden Fällen widmen:
Beispiele für die zuerst genannten Sonderfälle sind in
Abb. 6.4 zu finden. Die obere Situation stellt
eine benachbarte touch_1D- und ni-Beziehung
dar, während im unteren Teil der Abb. das touch_1D
an verschiedendimensionalen covered-Lagen anliegt.
Alle drei Fälle sind aber direkt dadurch zu erkennen, daß
der Nachbar des touch_1D-Dreiecks ermittelt wird,
welcher an dem Berührsegment angrenzt und dieser zu dem
aktuellen Dreieck des anderen Netzes in Beziehung gesetzt
wird. Tritt dabei eine der angesprochenen topologischen
Lagen
auf, kann overlap
zurückgegeben werden.
Schwieriger ist allerdings der zweite zu betrachtende Sonderfall, bei dem zwei benachbarte Dreiecke eines Netzes eine touch_1D-Beziehung (an ihrem gemeinsamen Segment) zu dem momentan betrachteten Dreieck der anderen Fläche aufweisen. Hier sind zwei verschiedene Schlußfolgerungen denkbar - je nachdem, ob die beiden Dreiecke auf den gleichen oder aber verschiedenen Seiten der durch das andere Dreieck aufgespannten Ebene liegen (Abb. 6.5). Während die erste Situation sicherlich zu einem touch_1D führt, ist in der anderen Konfiguration ein cross abzuleiten.
Welcher dieser beiden Fälle nun vorliegt, kann dadurch bestimmt werden, daß man aus den endständigen Definitionspunkten der benachbarten Dreiecke ein Segment bildet und es mit der von dem anderen Dreieck aufgespannten Ebene verschneidet. Ist dieser Schnitt leer, so liegen die benachbarten Dreiecke auf der gleichen Seiten und gehen damit eine touch_1D-Beziehung mit dem Dreieck der anderen Fläche ein. Schneidet das Segment allerdings die Ebene, dann lautet die topologische Beziehung jedoch cross, weil die beiden Dreiecke auf verschiedenen Seiten der Ebene zu finden sind.
Es kann natürlich auch vorkommen, daß das Berührsegment nicht im Innern eines Dreiecks liegt, sondern jeweils auf deren Randsegmenten. In diesem Fall sind dann die Nachbarn beider Dreiecke zu betrachten, um auf die topologische Lage schließen zu können. In Abb. 6.6 ist diese Möglichkeit verdeutlich - wie man sieht, ist hier der Segment/Ebene-Schnittest nicht durchführbar, da zwei benachbarte Dreiecke (wie in diesem Beispiel) nicht notwendigerweise in einer Ebene liegen müssen.
Das Verfahren zur Behandlung dieses Falles ist in Algorithmus 7 abzulesen. Dahinter steht die Idee, die Winkel zwischen den 4 Dreiecken zueinander zu bestimmen und daraus Rückschlüsse auf die topologische Beziehung der Dreieckspaare zu ziehen. Es liegt nämlich gerade dann ein cross vor, wenn der Winkel zwischen den benachbarten Dreiecken weder der größte, noch der kleinste ist.
Um dies herauszufinden, wird zuerst die Ebene
zu dem Berührsegment berechnet (Zeile 2).
Auf diese Ebene werden dann alle entfernten Endpunkte der 4
Dreiecke projiziert. Damit liegen die Punkte
in der berechneten Ebene
und dienen in Zeile 4 als Parameter
der Funktion anglePosition, die eine Bewertung des Winkels
innerhalb
der Winkel
und
vornimmt. Liegt dieser Winkel ``in der Mitte`` - nimmt also die
Position 2 ein - kreuzen sich die Dreieckspaare und es resultiert
die topologische Beziehung cross (Zeile 6). In den anderen
Fällen bleibt es bei der relativen Lage einer Segmentberührung
(touch_1D), welche in Zeile 8 zurückgegeben wird.
Bei dem topRel-Algorithmus für zwei Flächen bleibt nun
nur noch zu erwähnen, daß dieser nicht bei einem Vorkommen von
cross abbricht, sondern erst bei der topologischen Beziehung
overlap. Diese Entwurfsentscheidung folgt direkt aus der
Überlegung, ein overlap höher zu bewerten, als eine
cross-Lage. Treten also lokal zwischen zwei Flächen diese
beiden topologischen Beziehungen auf, wird insgesamt ein
overlap vermeldet.