gen_ellipse_contour_xldgen_ellipse_contour_xldGenEllipseContourXldGenEllipseContourXldGenEllipseContourXld generiert einen oder mehrere Ellipsenbögen
bzw. geschlossene Ellipsen. Die Ellipsen werden dabei
durch ihren Mittelpunkt (RowRowRowRowrow, ColumnColumnColumnColumncolumn), die
Orientierung der Hauptachse PhiPhiPhiPhiphi und die Länge der großen
Radius1Radius1Radius1Radius1radius1 bzw. kleinen Halbachse Radius2Radius2Radius2Radius2radius2
beschrieben.
Ellipsenbögen werden zusätzlich durch den Anfangs- und Endwinkel
StartPhiStartPhiStartPhiStartPhistartPhi und EndPhiEndPhiEndPhiEndPhiendPhi des Start- bzw. Endpunktes,
sowie den zugehörigen Umlaufsinn PointOrderPointOrderPointOrderPointOrderpointOrder charakterisiert.
Die Anfangs- und Endwinkel werden von der positiven großen Halbachse
aus gemessen, deren Orientierung durch PhiPhiPhiPhiphi 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 ContEllipseContEllipseContEllipseContEllipsecontEllipse
wird über den Parameter ResolutionResolutionResolutionResolutionresolution 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).
ResolutionResolutionResolutionResolutionresolution (input_control) real →HTupleHTupleHtuple (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_xldGenEllipseContourXldGenEllipseContourXldGenEllipseContourXld den Wert 2 (H_MSG_TRUE). Gegebenenfalls
wird eine Fehlerbehandlung durchgeführt.