poly_poly_clip

poly_poly_clip ermittelt die Schnittpunkte eines Polygons an einer geschlossenen Hülle.

<rmXY, idx> = poly_poly_clip(nOpt, clip, poly)

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).

Parameter

nOpt

nOpt gibt an, was für ein Polygon erzeugt werden soll. nOpt kann folgende Werte annehmen:

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.
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).

poly

poly sind die x/y-Koordinaten des Subjekt-Polygons.

Beispiel

../../_images/poly_poly_clip.png
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];
    <xy, idx> = 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;
}

id-1848134