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.