Bitmap/Midpoint circle algorithm: Difference between revisions
Content added Content deleted
No edit summary |
|||
Line 912: | Line 912: | ||
.......##.......##....... |
.......##.......##....... |
||
.........#######.........</pre> |
.........#######.........</pre> |
||
=={{header|Delphi}}== |
|||
{{works with|Delphi|6.0}} |
|||
{{libheader|SysUtils,StdCtrls}} |
|||
<syntaxhighlight lang="Delphi"> |
|||
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 |
|||
DrawCircle(Image,100,Point(200,200)); |
|||
Image.Invalidate; |
|||
end; |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
Elapsed Time: 7.341 ms. |
|||
</pre> |
|||
=={{header|ERRE}}== |
=={{header|ERRE}}== |
||
<syntaxhighlight lang="erre">PROGRAM BCircle |
<syntaxhighlight lang="erre">PROGRAM BCircle |