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
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
id-12861