Nadesłany przez Tomasz Lubiński, 29 marca 2007 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
Okrag - Delphi/Unit1.pas:
//Tomasz Lubiński (C)2007
//www.algorytm.org
//Algorytm kreslenia okregow z punktem srodkowym
//Algorytm Bresenhama
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Image: TImage;
Label4: TLabel;
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
UpDown1: TUpDown;
Button1: TButton;
Edit2: TEdit;
UpDown2: TUpDown;
Edit3: TEdit;
UpDown3: TUpDown;
procedure Button1Click(Sender: TObject);
procedure CirclePoints(x: Integer; y: Integer; x_move: Integer; y_move: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.CirclePoints(x: Integer; y: Integer; x_move: Integer; y_move: Integer);
begin
Form1.Image.Canvas.Pixels[x+x_move, y+y_move] := clBlack;
Form1.Image.Canvas.Pixels[y+x_move, x+y_move] := clBlack;
Form1.Image.Canvas.Pixels[y+x_move, -x+y_move] := clBlack;
Form1.Image.Canvas.Pixels[x+x_move, -y+y_move] := clBlack;
Form1.Image.Canvas.Pixels[-y+x_move, -x+y_move] := clBlack;
Form1.Image.Canvas.Pixels[-x+x_move, -y+y_move] := clBlack;
Form1.Image.Canvas.Pixels[-y+x_move, x+y_move] := clBlack;
Form1.Image.Canvas.Pixels[-x+x_move, y+y_move] := clBlack;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
x, y: Integer;
x_move, y_move, radius: Integer;
d : Integer;
begin
x_move := StrToInt(Edit1.Text);
y_move := StrToInt(Edit2.Text);
radius := StrToInt(Edit3.Text);
x := 0;
y := radius;
d := 5 - 4*radius;
CirclePoints(x, y, x_move, y_move);
while(y > x) do
begin
if(d < 0) then // Select E
begin
d := d + x*8 + 12;
x := x + 1;
end
else
begin // Select SE
d := d + (x - y)*8 + 20;
x := x + 1;
y := y - 1;
end;
CirclePoints(x, y, x_move, y_move);
end;
end;
end.

