.. highlightlang:: us .. _poly_line_clip: poly_line_clip ============== .. index:: poly_line_clip .. us.tag poly_line_clip NOTREADYGERMAN base_graph New363 :ref:`poly_line_clip` ermittelt die Schnittpunkte zweier Linienzüge (Polygone). .. function:: = poly_line_clip(nOption, clip, line) .. us.return **Returnwert** *rmXY*, *rmIDX*. Die Funktion liefert zwei Returnwerte. Der Returnwert *rmXY* ist eine Matrix mit zwei Spalten. Die erste Spalte enthält die x-Koordinaten und die zweite Spalte die y-Koordinaten aller Punkte einschließlich der berechneten Schnittpunkte. Der Returnwert *rmIDX* ist eine zweispaltige Matrix mit Indices. Die erste Spalte enthält den Startindex und die zweite Spalte den Endindex bezogen auf *rmXY*. Wenn beispielsweise das Polygon innerhalb der Hülle beginnt, dann aus der Hülle austritt und wieder in der Hülle endet, enthält *rmIDX* zwei Zeilen, falls *nOption* == 0. Falls die Linie vollständig innerhalb oder außerhalb der Hülle liegt, enthält *rmIDX* nur eine Element. Falls die Linie vollständig innnerhalb der Hülle liegt, hat *rmIDX* den Wert 1 und 0, falls die Linie vollständig außerhalb liegt (dies gilt für *nOption* = 1, ansonsten ist es genau umgekehrt). .. us.params **Parameter** .. uparam:: nOption *nOption*: 0 == inside, 1 == outside. .. uparam:: clip *clip* sind die x/y-Koordinaten der Hülle an der das Subjekt-Polygon geclippt werden soll. Die Koordinaten müssen in einen komplexen Vektor geschrieben werden (x + 1i*y) (siehe Beispiel). .. uparam:: line *line* sind die x/y-Koordinaten des Subjekt-Polygons. Die Koordinaten müssen in einen komplexen Vektor geschrieben werden (x + 1i*y) (siehe Beispiel). .. us.example **Beispiel** .. image:: S:/uniplot-obj/images/poly_line_clip.* :: def test(option) { idx = poly_hull(x = rand(1,1000), y = rand(1,1000)) h = plot(x[idx], y[idx]) h2 = plot(x, y, h[2]) XYShowLine(h2[3], FALSE); = poly_line_clip(option, x[idx] + 1i*y[idx], [0,1] + 1i* [0,1]) print "xy:", xy, "idx", idx if (len(idx) == 1) { if (idx[1] == 1) { // draw complete line! plot(xy[;1], xy[;2], h[2]); return TRUE; } else { // all points outside! return TRUE; } } else { for (i in 1:nr(idx)) { plot(xy[idx[i;];1], xy[idx[i;];2], h[2]) } } LayerSetAxisMinMaxDelta(h2[2], "X", -0.1, 1.1, 0.1) LayerSetAxisMinMaxDelta(h2[2], "Y", -0.1, 1.1, 0.1) LayerShowGrid(h2[2], "X", FALSE, FALSE) LayerShowGrid(h2[2], "Y", FALSE, FALSE) LayerSetAxisTitle(h2[2], "X", "") LayerSetAxisTitle(h2[2], "Y", "") PageReplot(h2[1]) } .. seealso:: :ref:`poly_poly_clip` :sub:`id-12861`