gen_ellipse_contour_xldgen_ellipse_contour_xldGenEllipseContourXldGenEllipseContourXldgen_ellipse_contour_xld — Erzeugen einer XLD-Kontur aus einem Ellipsenbogen.
gen_ellipse_contour_xldgen_ellipse_contour_xldGenEllipseContourXldGenEllipseContourXldGenEllipseContourXldgen_ellipse_contour_xld generiert einen oder mehrere Ellipsenbögen
bzw. geschlossene Ellipsen. Die Ellipsen werden dabei
durch ihren Mittelpunkt (RowRowRowRowrowrow, ColumnColumnColumnColumncolumncolumn), die
Orientierung der Hauptachse PhiPhiPhiPhiphiphi und die Länge der großen
Radius1Radius1Radius1Radius1radius1radius_1 bzw. kleinen Halbachse Radius2Radius2Radius2Radius2radius2radius_2
beschrieben.
Ellipsenbögen werden zusätzlich durch den Anfangs- und Endwinkel
StartPhiStartPhiStartPhiStartPhistartPhistart_phi und EndPhiEndPhiEndPhiEndPhiendPhiend_phi des Start- bzw. Endpunktes,
sowie den zugehörigen Umlaufsinn PointOrderPointOrderPointOrderPointOrderpointOrderpoint_order charakterisiert.
Die Anfangs- und Endwinkel werden von der positiven großen Halbachse
aus gemessen, deren Orientierung durch PhiPhiPhiPhiphiphi gegeben ist.
Sie beziehen sich auf den kleinsten die Ellipse umgebenden Kreis.
Der tatsächliche Anfangs- und Endpunkt der Ellipse ergibt sich aus dem
Schnittpunkt der Ellipse mit der Orthogonalprojektion des
entsprechenden Kreispunktes auf die große Halbachse.
Beide Winkel werden dabei im Ellipsenkoordinatensystem bezogen auf die
Hauptachse der Ellipse mathematisch positiv angegeben.
Die beiden Hauptpole der Ellipse haben demnach die Winkel
0 bzw. , die Nebenpole die Winkel
bzw. 3*pi/2. Um eine geschlossene Ellipse
zu erhalten, müssen die Werte 0 und
(bei positivem Umlaufsinn) übergeben werden. Für alle Winkel sind beliebige
Werte zugelassen, da diese intern auf das Intervall
abgebildet werden.
Die Auflösung der resultierenden XLD Konturen ContEllipseContEllipseContEllipseContEllipsecontEllipsecont_ellipse
wird über den Parameter ResolutionResolutionResolutionResolutionresolutionresolution festgelegt: Er bestimmt den
maximalen euklidischen Abstand zwischen benachbarten Konturpunkten. Die
Auflösung wird auf den kleinsten zulässigen Wert gesetzt, wenn der
Eingabewert diesen Wert unterschreitet.
Ausführungsinformationen
Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
ResolutionResolutionResolutionResolutionresolutionresolution (input_control) real →HTuplefloatHTupleHtuple (real) (double) (double) (double)
Auflösung: Maximaler Abstand zwischen benachbarten
Konturpunkten.
Defaultwert: 1.5
Restriktion: Resolution >= 1.192e-7
Beispiel (HDevelop)
draw_ellipse(WindowHandle,Row,Column,Phi,Radius1,Radius2)
gen_ellipse_contour_xld(Ellipse,Row,Column,Phi,Radius1,Radius2,0,6.28319, \
'positive',1.5)
length_xld(Ellipse,Length)
* Transform StartPhi so that the start point of the ellipse actually
* intersects the line through origin at the angle StartPhi measured from
* the positive main axis
affine_trans_point_2d ([1.0,0.0,0.0,0.0,1.0*Radius2/Radius1,0.0], \
sin(StartPhi), cos(StartPhi), Qx, Qy)
StartPhiEllipse := atan2(Qx,Qy)
draw_ellipse(WindowHandle,Row,Column,Phi,Radius1,Radius2)
gen_ellipse_contour_xld(Ellipse,Row,Column,Phi,Radius1,Radius2,0,6.28319, \
'positive',1.5)
length_xld(Ellipse,Length)
* Transform StartPhi so that the start point of the ellipse actually
* intersects the line through origin at the angle StartPhi measured from
* the positive main axis
affine_trans_point_2d ([1.0,0.0,0.0,0.0,1.0*Radius2/Radius1,0.0], \
sin(StartPhi), cos(StartPhi), Qx, Qy)
StartPhiEllipse := atan2(Qx,Qy)
Beispiel (HDevelop)
draw_ellipse(WindowHandle,Row,Column,Phi,Radius1,Radius2)
gen_ellipse_contour_xld(Ellipse,Row,Column,Phi,Radius1,Radius2,0,6.28319, \
'positive',1.5)
length_xld(Ellipse,Length)
* Transform StartPhi so that the start point of the ellipse actually
* intersects the line through origin at the angle StartPhi measured from
* the positive main axis
affine_trans_point_2d ([1.0,0.0,0.0,0.0,1.0*Radius2/Radius1,0.0], \
sin(StartPhi), cos(StartPhi), Qx, Qy)
StartPhiEllipse := atan2(Qx,Qy)
Beispiel (HDevelop)
draw_ellipse(WindowHandle,Row,Column,Phi,Radius1,Radius2)
gen_ellipse_contour_xld(Ellipse,Row,Column,Phi,Radius1,Radius2,0,6.28319, \
'positive',1.5)
length_xld(Ellipse,Length)
* Transform StartPhi so that the start point of the ellipse actually
* intersects the line through origin at the angle StartPhi measured from
* the positive main axis
affine_trans_point_2d ([1.0,0.0,0.0,0.0,1.0*Radius2/Radius1,0.0], \
sin(StartPhi), cos(StartPhi), Qx, Qy)
StartPhiEllipse := atan2(Qx,Qy)
Ergebnis
Sind die Parameterwerte korrekt, dann liefert
gen_ellipse_contour_xldgen_ellipse_contour_xldGenEllipseContourXldGenEllipseContourXldGenEllipseContourXldgen_ellipse_contour_xld den Wert TRUE. Gegebenenfalls
wird eine Fehlerbehandlung durchgeführt.