51 lines
1.1 KiB
ObjectPascal
51 lines
1.1 KiB
ObjectPascal
procedure DrawCircle(Image: TImage; Radius: integer; Center: TPoint);
|
|
var T1,T2: integer;
|
|
var X,Y: integer;
|
|
var Cnt: integer;
|
|
|
|
procedure DrawPixels(X,Y: integer);
|
|
{Draw pixel into all 8 octents}
|
|
begin
|
|
Image.Canvas.Pixels[Center.X + x, Center.Y + y]:=clRed;
|
|
Image.Canvas.Pixels[Center.X - X, Center.Y + Y]:=clRed;
|
|
Image.Canvas.Pixels[Center.X + X, Center.Y - Y]:=clRed;
|
|
Image.Canvas.Pixels[Center.X - X, Center.Y - Y]:=clRed;
|
|
Image.Canvas.Pixels[Center.X + Y, Center.Y + X]:=clRed;
|
|
Image.Canvas.Pixels[Center.X - Y, Center.Y + X]:=clRed;
|
|
Image.Canvas.Pixels[Center.X + y, Center.Y - X]:=clRed;
|
|
Image.Canvas.Pixels[Center.X - Y, Center.Y - X]:=clRed;
|
|
end;
|
|
|
|
begin
|
|
Cnt:=0;
|
|
T1:= Radius div 32;
|
|
{Start on X-axis}
|
|
X:= Radius; Y:= 0;
|
|
repeat
|
|
begin
|
|
DrawPixels(X, Y);
|
|
Y:=Y + 1;
|
|
T1:=T1 + Y;
|
|
T2:=T1 - X;
|
|
if T2 >= 0 then
|
|
begin
|
|
T1:=T2;
|
|
X:=X - 1;
|
|
end;
|
|
Inc(Cnt);
|
|
end
|
|
until x < y;
|
|
Form1.Caption:=IntToStr(Cnt);
|
|
end;
|
|
|
|
|
|
|
|
procedure ShowBrezCircle(Image: TImage);
|
|
begin
|
|
{Draw three times to make line thicker}
|
|
DrawCircle(Image,100,Point(200,200));
|
|
DrawCircle(Image,99,Point(200,200));
|
|
DrawCircle(Image,98,Point(200,200));
|
|
Image.Invalidate;
|
|
end;
|