poly_line_clip

poly_line_clip ermittelt die Schnittpunkte zweier Linienzüge (Polygone).

<rmXY, rmIDX> = poly_line_clip(nOption, clip, line)

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

Parameter

nOption

nOption: 0 == inside, 1 == outside.

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

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

Beispiel

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

Siehe auch

poly_poly_clip

id-12861