.. highlightlang:: us .. _poly_poly_clip: poly_poly_clip ============== .. index:: poly_poly_clip .. us.tag poly_poly_clip NOTREADYGERMAN base_graph New363 :ref:`poly_poly_clip` ermittelt die Schnittpunkte eines Polygons an einer geschlossenen Hülle. .. function:: = poly_poly_clip(nOpt, clip, poly) .. us.return **Returnwert** *rmXY*, *idx*: *rmXY* ist eine Matrix mit zwei Spalten. Die erste Spalte enthält die x-Koordinaten und die zweite Spalte die y-Koordinaten des Ergebnis-Polygons. *idx* ist ein Vektor mit den Indizes (siehe Beispiel). .. us.params **Parameter** .. uparam:: nOpt *nOpt* gibt an, was für ein Polygon erzeugt werden soll. *nOpt* kann folgende Werte annehmen: .. list-table:: :header-rows: 1 * - Wert - Bedeutung * - 0 - union (Hülle um beide Polygone). * - 1 - Differenz (Teil des Subjekt-Polygons der innen liegt). * - 2 - Differenz (Teil des Subjekt-Polygons der aussen liegt). * - 3 - Hülle ohne Subjekt-Polygon. .. 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:: poly *poly* sind die x/y-Koordinaten des Subjekt-Polygons. .. us.example **Beispiel** .. image:: S:/uniplot-obj/images/poly_poly_clip.* :: def test(option) { xhull = [1, 1, 2, 2, 1]; yhull = [1, 2, 2, 1, 1]; nh = len(xhull) h = plot(xhull,yhull) xp = [1.3, 1.3, 1.6, 1.6, 1.3]; yp = [0.3, 2.6, 2.6, 0.3, 0.3]; = poly_poly_clip(option, xhull[1:nh] + 1i * yhull[1:nh], xp + 1i*yp); if (len(idx) == 1 && idx[1] == 0) { return TRUE; } nPoly = len(idx); if (len(xy) > 1) { idx = [0;idx]; for (i in 2:nPoly+1) { h = plot(xy[idx[i-1]+1:idx[i]; 1], xy[idx[i-1]+1:idx[i];2], h[2]); } } return xy; } .. seealso:: :ref:`poly_line_clip`, :ref:`poly_hull` :sub:`id-1848134`