42 lines
1.4 KiB
Plaintext
42 lines
1.4 KiB
Plaintext
MODULE Circle;
|
|
|
|
IMPORT Bitmap;
|
|
|
|
PROCEDURE Draw(
|
|
img: Bitmap.T;
|
|
center: Bitmap.Point;
|
|
radius: CARDINAL;
|
|
color: Bitmap.Pixel) =
|
|
VAR f := 1 - radius;
|
|
ddfx := 0;
|
|
ddfy := - 2 * radius;
|
|
x := 0;
|
|
y := radius;
|
|
BEGIN
|
|
Bitmap.SetPixel(img, Bitmap.Point{center.x, center.y + radius}, color);
|
|
Bitmap.SetPixel(img, Bitmap.Point{center.x, center.y - radius}, color);
|
|
Bitmap.SetPixel(img, Bitmap.Point{center.x + radius, center.y}, color);
|
|
Bitmap.SetPixel(img, Bitmap.Point{center.x - radius, center.y}, color);
|
|
WHILE x < y DO
|
|
IF f >= 0 THEN
|
|
y := y - 1;
|
|
ddfy := ddfy + 2;
|
|
f := f + ddfy;
|
|
END;
|
|
x := x + 1;
|
|
ddfx := ddfx + 2;
|
|
f := f + ddfx + 1;
|
|
Bitmap.SetPixel(img, Bitmap.Point{center.x + x, center.y + y}, color);
|
|
Bitmap.SetPixel(img, Bitmap.Point{center.x - x, center.y + y}, color);
|
|
Bitmap.SetPixel(img, Bitmap.Point{center.x + x, center.y - y}, color);
|
|
Bitmap.SetPixel(img, Bitmap.Point{center.x - x, center.y - y}, color);
|
|
Bitmap.SetPixel(img, Bitmap.Point{center.x + y, center.y + x}, color);
|
|
Bitmap.SetPixel(img, Bitmap.Point{center.x - y, center.y + x}, color);
|
|
Bitmap.SetPixel(img, Bitmap.Point{center.x + y, center.y - x}, color);
|
|
Bitmap.SetPixel(img, Bitmap.Point{center.x - y, center.y - x}, color);
|
|
END;
|
|
END Draw;
|
|
|
|
BEGIN
|
|
END Circle.
|