algorytm.org

Implementacja w Delphi/Pascal



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Kreślenie okręgów - Implementacja w Delphi/Pascal
Ocena użytkownikóww: *****  / 3
SłabyŚwietny
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.
Dodaj komentarz