home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turbo Toolbox
/
Turbo_Toolbox.iso
/
sonderh1
/
bresenh.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1987-03-13
|
2KB
|
45 lines
(*-------------------------------------------------------------------------*)
(* BRESENH.PAS *)
(* Bresenham-Algorithmus (inkrementell, integer) zum Kreise-Zeichnen *)
(*-------------------------------------------------------------------------*)
PROCEDURE do_circle (x_center, y_center, radius: INTEGER);
CONST Pi = 3.1415926;
VAR zwei_r_quadrat, (* 2 mal radius hoch 2. INTEGER !!!! *)
x_ende, (* Endwert x-Koordinate Achtel-Kreis *)
AspRX, (* round(Aspect_Ratio*x) *)
AspRY, (* round(Aspect_Ratio*y) *)
x, y : INTEGER; (* Berechnete Koordinaten *)
BEGIN (* Koordinaten initialisieren *)
x := 0;
y := radius;
x_ende := Round(radius*Cos(Pi/4)); (* Endwert x-Koordinate berechnen *)
zwei_r_quadrat := 2*radius*radius;
REPEAT
AspRX := Round(Aspect_Ratio*x);
AspRY := Round(Aspect_Ratio*y);
Point_System(x_center + x, y_center + AspRY);
Point_System(x_center - x, y_center + AspRY);
Point_System(x_center + x, y_center - AspRY);
Point_System(x_center - x, y_center - AspRY);
Point_System(x_center + y, y_center + AspRX);
Point_System(x_center - y, y_center + AspRX);
Point_System(x_center + y, y_center - AspRX);
Point_System(x_center - y, y_center - AspRX);
(* Neue x- und y-Werte berechnen *)
IF (2*Succ(x)*Succ(x) + y*y + Pred(y)*Pred(y) - zwei_r_quadrat) > 0 THEN
BEGIN (* naechster Punkt rechts unterhalb *)
x := Succ(x);
y := Pred(y);
END
ELSE (* naechster Punkt rechts davon *)
x := Succ(x);
UNTIL (x > x_ende);
END;
(*-------------------------------------------------------------------------*)
(* Ende von BRESENH.PAS *)