next up previous contents
Next: Wichtige interne Funktionen Up: Die Klasse gtTriangleNet Previous: Die Klasse gtTriangleNet

Topologische 3D-Beziehungen

Auch für 3D-Objekte der Klasse gtTriangleNet werden im Zuge dieser Arbeit topologische Beziehungen bereitgestellt. Welche Erweiterungen dazu implementiert wurden, wird nun angegeben.

Da die Funktionalität für ein zu untersuchendes Paar einer Fläche und eines Volumens schon bei der Betrachtung der Klasse gtTetraNet beschrieben wurde, sollen hier nur noch die Köpfe der jeweiligen Methoden aufgelistet werden. Dabei ist zu beachten, daß für die antisymmetrischen topologischen Beziehungen covers und ni hier mit covered und in deren inverse Varianten zur Verfügung stehen:

   int gtTriangleNet::disjoint(const gtTetraNet& t) const;

   int gtTriangleNet::touch(const gtTetraNet& t) const;
   int gtTriangleNet::touch_0D(const gtTetraNet& t) const;
   int gtTriangleNet::touch_1D(const gtTetraNet& t, int strict=0) const;
   int gtTriangleNet::touch_2D(const gtTetraNet& t, int strict=0) const;

   int gtTriangleNet::cross(const gtTetraNet& t) const;

   int gtTriangleNet::covered(const gtTetraNet& t) const;
   int gtTriangleNet::covered_0D(const gtTetraNet& t) const;
   int gtTriangleNet::covered_1D(const gtTetraNet& t, int strict=0) const;
   int gtTriangleNet::covered_2D(const gtTetraNet& t, int strict=0) const;

   int gtTriangleNet::in(const gtTetraNet& t) const;

   topFlag gtTriangleNet::topRel(const gtTetraNet& t) const;


Die zuletzt aufgeführte Klassifikationsfunktion hat als mögliche Rückgabewerte wiederum genau diejenigen topologischen 3D-Beziehungen, welche darüber auch als Prädikate angegeben sind.

Der letzte Fall, der bei der Untersuchung von topologischen Beziehungen zwischen Flächen und Volumina auftreten kann, ist die Betrachtung der relativen räumlichen Lage zweier Flächen zueinander. Hierbei ist zu beachten, daß in diesem Fall keine 2-dimensionalen Berührungen möglich sind, da solche als echte Überlappungen angesehen werdengif. Es gibt also nur 2 verschiedene Ausprägungen der dimensionsbehafteten topologischen Beziehungen touch, covers und covered.

Die restlichen Methoden entsprechen aber wiederum den Köpfen der schon zuvor erläuterten Funktionen, womit dem Benutzer der topologischen Komponente des GEOTOOLKIT ein einheitlicher Zugang verschafft wird. Mit der disjoint-Methode werden erneut die betrachteten Objekte (Flächen) auf einen Abstand > 0 getestet, während die Prädikate zum touch genau dann wahr werden, wenn eine Berührung (des jeweiligen Typs) ermittelt wird - die Bedeutung des strict-Flags wurde schon angegeben und kann direkt übernommen werden.

   int gtTriangleNet::disjoint(const gtTriangleNet& t) const;

   int gtTriangleNet::touch(const gtTriangleNet& t) const;
   int gtTriangleNet::touch_0D(const gtTriangleNet& t) const;
   int gtTriangleNet::touch_1D(const gtTriangleNet& t, int strict=0) const;


Für zwei Flächen existiert sowohl die topologische Lage des cross, als auch die overlap-Beziehung. Beide sind sogar benachbartgif und durch eine Drehung um das Schnittsegment des cross ineinander überführbar (vgl. Abb. 6.2). Ist das Schnittobjekt 2-dimensional und nicht identisch zu einem der betrachteten Flächen, so liegt, wie zuvor schon erwähnt, ein overlap vor. Für eine cross-Lage ist ein 1-dimensionaler Schnitt zu beobachten, der jedoch echt sein und im Inneren der Objekte liegen muß:

  figure3272

   int gtTriangleNet::cross(const gtTriangleNet& t) const;

   int gtTriangleNet::overlap(const gtTriangleNet& t) const;


Die Methoden zum covers bzw. covered werden auch adäquat an die Besonderheiten dieses Falles, in dem beide Objekte eine Codimension von 1 aufweisen, angepaßt und demnach nicht in einer Variante angeboten, die 2-dimensionale Berührstellen erfaßt. Die Anwendung der topologischen Prädikate erfolgt analog zu dem bisher gesagten, wobei mit covers/covered und in/ni jeweils beide zueinander inversen Beziehungen zur Verfügung stehen:

   int gtTriangleNet::covers(const gtTriangleNet& t) const;
   int gtTriangleNet::covers_0D(const gtTriangleNet& t) const;
   int gtTriangleNet::covers_1D(const gtTriangleNet& t, int strict=0) const;

   int gtTriangleNet::covered(const gtTriangleNet& t) const;
   int gtTriangleNet::covered_0D(const gtTriangleNet& t) const;
   int gtTriangleNet::covered_1D(const gtTriangleNet& t, int strict=0) const;

   int gtTriangleNet::in(const gtTriangleNet& t) const;
   int gtTriangleNet::ni(const gtTriangleNet& t) const;


Neben diesen topologischen Prädikaten gibt es im GEOTOOLKIT wiederum die Möglichkeit, auch die topologische Beziehung zwischen zwei Flächen direkt zu ermitteln. Dies kann mit der gtTriangleNet-Methode topRel vorgenommen werden, welche die topologische Beziehung als topFlag zurückliefert:

   topFlag gtTriangleNet::topRel(const gtTriangleNet& t) const;


next up previous contents
Next: Wichtige interne Funktionen Up: Die Klasse gtTriangleNet Previous: Die Klasse gtTriangleNet

Stefan Hecht
Thu Aug 26 14:06:24 MET DST 1999