Kreis: Unterschied zwischen den Versionen
Aus DGL Wiki
(Die Seite wurde neu angelegt: „Ein Kreis lässt sich durch einen Winkel, Radius und Mittelpunkt parameterisieren. <source lang="c"> int x=m+r*cosf(alpha); int y=m+r*sinf(alpha); </source> Fü…“) |
|||
Zeile 2: | Zeile 2: | ||
<source lang="c"> | <source lang="c"> | ||
− | int x= | + | int x = ofsx + r * cosf(alpha); |
− | int y= | + | int y = ofsy + r * sinf(alpha); |
</source> | </source> | ||
Für einen vollständigen Kreis durchläuft man alpha von 0 bis 2PI und als Zeichenmodus wird GL_POINTS oder GL_LINE_STRIP gewählt. | Für einen vollständigen Kreis durchläuft man alpha von 0 bis 2PI und als Zeichenmodus wird GL_POINTS oder GL_LINE_STRIP gewählt. | ||
+ | |||
+ | ==Beispiel== | ||
+ | Dieses Beispiel zeigt, wie man die obige Formel umsetzt, einfachheitshalber wird der Kreis auf den Canvas des Forms ausgegeben.<br> | ||
+ | Bei OpenGL nimmt man anstelle MoveTo und LineTo, Vektoren. | ||
+ | |||
+ | <source lang="pascal"> | ||
+ | procedure TForm1.Circle(ofsx, ofsy, radius: integer); | ||
+ | const | ||
+ | Sektoren = 24; // Die Auflösung des Kreises. | ||
+ | var | ||
+ | i: integer; | ||
+ | a: single; | ||
+ | begin | ||
+ | Canvas.MoveTo(ofsx + radius, ofsy); | ||
+ | for i := 1 to Sektoren do begin | ||
+ | a := Pi * 2 / Sektoren * i; | ||
+ | Canvas.LineTo( | ||
+ | ofsx + round(cos(a) * radius), | ||
+ | ofsy + round(sin(a) * radius) | ||
+ | ); | ||
+ | end; | ||
+ | end; | ||
+ | </source> |
Aktuelle Version vom 18. Mai 2018, 20:07 Uhr
Ein Kreis lässt sich durch einen Winkel, Radius und Mittelpunkt parameterisieren.
int x = ofsx + r * cosf(alpha);
int y = ofsy + r * sinf(alpha);
Für einen vollständigen Kreis durchläuft man alpha von 0 bis 2PI und als Zeichenmodus wird GL_POINTS oder GL_LINE_STRIP gewählt.
Beispiel
Dieses Beispiel zeigt, wie man die obige Formel umsetzt, einfachheitshalber wird der Kreis auf den Canvas des Forms ausgegeben.
Bei OpenGL nimmt man anstelle MoveTo und LineTo, Vektoren.
procedure TForm1.Circle(ofsx, ofsy, radius: integer);
const
Sektoren = 24; // Die Auflösung des Kreises.
var
i: integer;
a: single;
begin
Canvas.MoveTo(ofsx + radius, ofsy);
for i := 1 to Sektoren do begin
a := Pi * 2 / Sektoren * i;
Canvas.LineTo(
ofsx + round(cos(a) * radius),
ofsy + round(sin(a) * radius)
);
end;
end;