home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / sonderh1 / bresenh.pas < prev    next >
Pascal/Delphi Source File  |  1987-03-13  |  2KB  |  45 lines

  1. (*-------------------------------------------------------------------------*)
  2. (*                                 BRESENH.PAS                             *)
  3. (*    Bresenham-Algorithmus (inkrementell, integer) zum Kreise-Zeichnen    *)
  4. (*-------------------------------------------------------------------------*)
  5.  
  6. PROCEDURE do_circle (x_center, y_center, radius: INTEGER);
  7.  
  8. CONST Pi = 3.1415926;
  9.  
  10. VAR zwei_r_quadrat,                   (* 2 mal radius hoch 2. INTEGER !!!! *)
  11.     x_ende,                           (* Endwert x-Koordinate Achtel-Kreis *)
  12.     AspRX,                            (* round(Aspect_Ratio*x)             *)
  13.     AspRY,                            (* round(Aspect_Ratio*y)             *)
  14.     x, y              : INTEGER;      (* Berechnete Koordinaten            *)
  15.  
  16. BEGIN                                        (* Koordinaten initialisieren *)
  17.   x := 0;
  18.   y := radius;
  19.   x_ende := Round(radius*Cos(Pi/4));     (* Endwert x-Koordinate berechnen *)
  20.   zwei_r_quadrat := 2*radius*radius;
  21.   REPEAT
  22.     AspRX := Round(Aspect_Ratio*x);
  23.     AspRY := Round(Aspect_Ratio*y);
  24.     Point_System(x_center + x, y_center + AspRY);
  25.     Point_System(x_center - x, y_center + AspRY);
  26.     Point_System(x_center + x, y_center - AspRY);
  27.     Point_System(x_center - x, y_center - AspRY);
  28.     Point_System(x_center + y, y_center + AspRX);
  29.     Point_System(x_center - y, y_center + AspRX);
  30.     Point_System(x_center + y, y_center - AspRX);
  31.     Point_System(x_center - y, y_center - AspRX);
  32.                                           (* Neue x- und y-Werte berechnen *)
  33.     IF (2*Succ(x)*Succ(x) + y*y + Pred(y)*Pred(y) - zwei_r_quadrat) > 0 THEN
  34.       BEGIN                            (* naechster Punkt rechts unterhalb *)
  35.         x := Succ(x);
  36.         y := Pred(y);
  37.       END
  38.     ELSE                                   (* naechster Punkt rechts davon *)
  39.       x := Succ(x);
  40.   UNTIL (x > x_ende);
  41. END;
  42.  
  43. (*-------------------------------------------------------------------------*)
  44. (*                             Ende von BRESENH.PAS                        *)
  45.