Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Как начертить круг?

01.01.2007
{ ... }
 
implementation
 
{$R *.DFM}
 
uses
 
Math;
 
procedure
DrawCircle(CenterX, CenterY, Radius: Integer; Canvas: TCanvas; Color:
 
TColor);
 
  procedure
PlotCircle(x, y, x1, y1: Integer);
 
begin
   
Canvas.Pixels[x + x1, y + y1] := Color;
   
Canvas.Pixels[x - x1, y + y1] := Color;
   
Canvas.Pixels[x + x1, y - y1] := Color;
   
Canvas.Pixels[x - x1, y - y1] := Color;
   
Canvas.Pixels[x + y1, y + x1] := Color;
   
Canvas.Pixels[x - y1, y + x1] := Color;
   
Canvas.Pixels[x + y1, y - x1] := Color;
   
Canvas.Pixels[x - y1, y - x1] := Color;
 
end;
 
var
  x
, y, r: Integer;
  x1
, y1, p: Integer;
begin
  x
:= CenterX;
  y
:= CenterY;
  r
:= Radius;
  x1
:= 0;
  y1
:= r;
  p
:= 3 - 2 * r;
 
while (x1 < y1) do
 
begin
    plotcircle
(x, y, x1, y1);
   
if (p < 0) then
      p
:= p + 4 * x1 + 6
   
else
   
begin
      p
:= p + 4 * (x1 - y1) + 10;
      y1
:= y1 - 1;
   
end;
    x1
:= x1 + 1;
 
end;
 
if (x1 = y1) then
    plotcircle
(x, y, x1, y1);
end;

Used like this:

procedure TForm1.Button1Click(Sender: TObject);
begin
 
DrawCircle(ClientWidth div 2, ClientHeight div 2, Min(ClientWidth div 2,
   
ClientHeight div 2), Canvas, clBlack);
 
{Add Math to the uses clause for the Min function}
end;

Взято с Delphi Knowledge Base: https://www.baltsoft.com/