home *** CD-ROM | disk | FTP | other *** search
- (*-------------------------------------------------------------------------*)
- (* 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 *)