union2_closed_polygons_xld
— Berechnen der Vereinigungsmenge von geschlossenen Polygonen.
union2_closed_polygons_xld(Polygons1, Polygons2 : PolygonsUnion : : )
Der Operator union2_closed_polygons_xld
berechnet die
Vereinigungsmenge der von den geschlossenen Eingabepolygonen umgebenen
Regionen. Der Rand dieser Vereinigungsmenge wird in PolygonsUnion
zurückgegeben.
Wenn die einzelnen Eingabepolygone nicht geschlossen sind, werden sie automatisch durch Verbinden von Anfangs- und Endpunkt geschlossen.
Intern werden zuerst die Regionen, die von den Polygonen Polygons1
bzw. Polygons2
umschlossen sind, getrennt voneinander bestimmt
(siehe unten). Danach wird die Vereinigungsmenge der beiden sich ergebenden
Regionen berechnet.
Im folgenden werden die beiden Eingabepolygone als Menge von Rändern
der zu schneidenden Regionen betrachtet. Jede dieser Mengen besteht aus einer
beliebigen Anzahl von Rändern (die einzelnen Polygonen aus Polygons1
bzw. Polygons2
). Jeder Rand kann konvex oder konkav sein und sich
selbst schneiden. Löcher können durch Verschachtelung der Ränder gebildet
werden.
Die von allen Rändern einer solchen Menge von Rändern umschlossene Region ist durch die sogenannte Even-Odd-Rule definiert. Sie besteht also aus der Menge aller Punkte, die folgende Eigenschaft besitzen: Die Strecke, die man durch Verbinden des Punktes mit einem außerhalb der Region liegenden Referenzpunkt erhält, schneidet eine ungerade Anzahl von Rändern.
Anschaulich bedeutet dies, dass ein Rand, der vollständig innerhalb eines anderen Randes liegt, ein Loch in der Region erzeugt, die durch den ersten Rand umschlossen ist. Analog dazu wird auch der Überlappungsbereich zweier Regionen als "Loch" betrachtet, d.h., er gehört nicht zu der Region, die von den beiden Rändern umschlossen wird. Die Region, die von einem Rand umschlossen wird, ist dabei unabhängig von der Umlaufrichtung des Randes.
Ein sich selbst schneidender Rand kann entweder am Schnittpunkt aufgetrennt werden oder er wird so angeordnet, dass er sich selbst am Schnittpunkt berührt. Die sich ergebenden Ränder werden als unabhängige Ränder betrachtet.
Die Ergebnispolygone PolygonsUnion
enthalten keine Referenzen
auf die möglicherweise von Polygons1
und Polygons2
referenzierten XLD-Konturen. Daher kann es beim Aufruf von Operatoren, die
auf die zu einem Polygon gehörigen Konturen zugreifen, z.B.
split_contours_xld
, zu Fehlermeldungen kommen.
Polygons1
(input_object) xld_poly(-array) →
object
Polygone, die die erste Region umschließen.
Polygons2
(input_object) xld_poly(-array) →
object
Polygone, die die zweite Region umschließen.
PolygonsUnion
(output_object) xld_poly(-array) →
object
Polygone, die die Vereinigungsmenge umschließen.
union2_closed_polygons_xld
liefert den Wert 2 (H_MSG_TRUE) wenn alle
Parameter korrekt sind. Andernfalls wird eine Fehlerbehandlung
durchgeführt
difference_closed_polygons_xld
,
symm_difference_closed_polygons_xld
,
intersection_closed_polygons_xld
,
union2_closed_contours_xld
Foundation