gen_contour_nurbs_xld
— Erzeugen einer XLD Kontur anhand einer NURBS Kurve.
Der Operator gen_contour_nurbs_xld
erzeugt eine XLD Kontur
Contour
, die eine NURBS-Kurve (nicht uniformer, rationaler B-Spline)
approximiert. Eine NURBS-Kurve wird spezifiziert durch ihren Grad
Degree
, ihr Kontrollpolygon (Rows
,Cols
), ihren
Gewichtsvektor Weights
und ihren Knotenvektor Knots
.
Der Grad Degree
der Kurve bestimmt den Grad ihrer
Differenzierbarkeit. Die Kurve liegt innerhalb der konvexen Hülle ihres
Kontrollpolygons (Rows
,Cols
). Die Gewichte in
Weights
beschreiben, wie stark die Kurve von den jeweiligen
Kontrollpunkten angezogen wird. Wird 'auto' als Gewichtsvektor
Weights
ausgewählt, erhalten alle Kontrollpunkte das gleiche
Gewicht. Der Knotenvektor Knots
beschreibt den Träger der Kurve und
kann im Normalfall auf 'auto' gesetzt werden.
Die Genauigkeit der approximierenden Kontur Contour
wird durch die
Parameter MaxDistance
und MaxError
bestimmt. Ersterer ist
die maximale Distanz von zwei aufeinanderfolgenden Punkten in der
approximierenden Kontur Contour
. Der zweite Parameter entspricht
dem maximalen Abstand der Approximation Contour
von der
eigentlichen Kurve.
Normalerweise muss die Approximation beide Bedingungen erfüllen, es ist
aber möglich, durch Setzen des Wertes auf 'omit' eine der beiden
Bedingungen wegzulassen. Je niedriger diese beiden Parameter gewählt werden,
desto besser ist die Approximation der Kurve. Unabhängig
von der Wahl der Parameter liegen alle Punkte der Kontur Contour
genau auf der Kurve (bis auf numerische Ungenauigkeiten).
Definition
Eine NURBS Kurve C von Grad p is definiert durch Die Basis Funktionen N_{i,p} sind gegeben durch
Eine NURBS-Kurve ist also definiert durch ihren Grad p (Degree
),
ihr Kontrollpolygon P_{0},...,P_{n-1} (Rows
und Cols
),
ihren Gewichtsvektor w = (w_{0}, ..., w_{n-1}) (Weights
) und
ihren Knotenvektor u = (u_{0}, ..., u_{n+p}) (Knots
).
Der Grad der Differenzierbarkeit der Kurve wird bestimmt durch p. Mindestens p+1 Kontrollpunkte werden benötigt, um eine gültige Kurve zu definieren. Der Knotenvektur u beschreibt den Träger der Kurve. Die Länge dieses Vektors muss genau n+p+1 betragen und die Einträge müssen monoton steigend sein. Jeder Eintrag u_{i} entspricht dem Knoten zwischen den beiden Kurvensegmenten [u_{i-1},u_{i}) und [u_{i},u_{i+1}). Jedes Kurvensegment [u_{i},u_{i+1}) liegt innerhalb der konvexen Hülle der Kontrollpunkte P_{i-p}, ..., P_{i}. Für jedes Intervall, dessen Länge null ist, sinkt der Grad der Differenzierbarkeit des Knotens k. Die Anzahl der Vorkommen eines Knotens im Knotenvektor wird als Multiplizität bezeichnet. Die maximale Multiplizität eines Knotens ist p. Ausnahme sind Start- und Endpunkt, deren Multiplizität p+1 betragen kann. Das ist auch die Regel, da in diesem Fall Start- und Endpunkt der Kurve im ersten bzw. letzten Punkt des Kontrollpolygons liegen. Falls Start- oder Endpunkt nicht volle Multiplizität besitzen, ist der Träger der Kurve auf das Intervall [u_{p},u_{n}] beschränkt. Die Gewichte w_{i} bestimmen den Einfluss der jeweiligen Kontrollpunkte P_{i} auf die Kurve.
Geschlossene Kurven. Sind Start- und Endpunkt gleich
(P_{0} = P_{n-1}) und der Knotenvektor Knots
auf 'auto' gesetzt,
wird die Kurve automatisch geschlossen, so dass die Multiplizität aller
Knoten eins ist.
Falls ein Gewichtsvektor Weights
angegeben wird, muss dessen Länge
in diesem Fall n-1 betragen.
Contour
(output_object) xld_cont →
object
Die Kontur, die die Kurve approximiert.
Rows
(input_control) coordinates.y-array →
(real)
Zeilenkoordinaten des Kontrollpolygons.
Parameteranzahl: Rows == Cols && Rows >= Degree + 1
Cols
(input_control) coordinates.x-array →
(real)
Spaltenkoordinaten des Kontrollpolygons.
Parameteranzahl: Cols == Rows && Cols >= Degree + 1
Knots
(input_control) string(-array) →
(string / real)
Der Knotenvektor u.
Defaultwert: 'auto'
Wertevorschläge: 'auto'
Weights
(input_control) string(-array) →
(string / real)
Der Gewichtsvektor w.
Parameteranzahl: Weights == Rows
Defaultwert: 'auto'
Wertevorschläge: 'auto'
Restriktion: Weights > 0.0
Degree
(input_control) integer →
(integer)
Grad p der Kurve.
Defaultwert: 3
Wertevorschläge: 2, 3, 4, 5
Restriktion: Degree >= 2
MaxError
(input_control) real →
(real / string)
Maximale Distanz zwischen Approximation und Kurve.
Defaultwert: 1.0
Wertevorschläge: 'omit' , 1.0, 2.0, 3.0, 4.0, 5.0
Restriktion: MaxError > 0.0
MaxDistance
(input_control) real →
(real / string)
Maximaler Abstand zweier aufeinander folgender Punkte
in der approximierten Kontur Contour
.
Defaultwert: 5.0
Wertevorschläge: 'omit' , 1.0, 2.0, 3.0, 4.0, 5.0
Restriktion: MaxDistance > 0.0
* use a polygon XLD contour as control polygon and approximate * the NURBS curve as contour get_contour_xld(Polygon, Row, Col) gen_contour_nurbs_xld(NURBSContour, Row, Col, 'auto', 'auto', 3, 1.0, 10.0)
L. Piegl, W. Tiller: “The NURBS Book“, 2nd Edition, Springer, 1997.
Foundation