unit MainUnit; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Menus; type TfrmMain = class(TForm) PopupMenu1: TPopupMenu; Szakaszrajzols11: TMenuItem; Krrajzols11: TMenuItem; Krrajzols21: TMenuItem; Krrajzols31: TMenuItem; Szakaszrajzolsegyszer1: TMenuItem; Krrajzols41: TMenuItem; procedure Szakaszrajzols11Click(Sender: TObject); procedure Szakaszrajzolsegyszer1Click(Sender: TObject); procedure Krrajzols11Click(Sender: TObject); procedure Krrajzols21Click(Sender: TObject); procedure Krrajzols31Click(Sender: TObject); procedure Krrajzols41Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var frmMain: TfrmMain; implementation {$R *.DFM} Procedure SzakaszRajzol1(X1, Y1, X2, Y2: Integer); var HX, HY, H, k, X, Y: Integer; LX, LY: Real; begin HX:=X2-X1; HY:=Y2-Y1; if abs(HX)>abs(HY) then H:=abs(HX) else H:=abs(HY); If H=0 then frmMain.Canvas.Pixels[X1, Y1]:=ClBlack else begin LX:=HX / H; LY:=HY / H; X := X1; Y := Y1; For k:=1 to H+1 do begin frmMain.Canvas.Pixels[X, Y]:=ClBlack; X:=Round(X+LX); Y:=Round(Y+LY); end; //for end; //else end; //szakaszrajzol1 Procedure SzakaszRajzol2(X1, Y1, X2, Y2: Integer); var X, Y: Integer; SZ: Real; begin SZ:=(Y2-Y1) / (X2-X1); for x:=x1 to x2 do begin Y:=Round((X-X1)*SZ + Y1); frmMain.Canvas.Pixels[X, Y]:=ClBlack; end; end; //szakaszrajzol2 Procedure KorRajzol1(r, x1, y1: integer); var X, Y: Integer; begin { Ciklus X=0-tól R-ig Y:=gyök(R*R-X*X) Rajzol(X,Y): Rajzol(X,-Y) Rajzol(-X,Y): Rajzol(-X,-Y) Ciklus vége} For x:=0 to R do begin Y:=Round(sqrt(r*r-x*x)); frmMain.Canvas.Pixels[X+X1, Y+Y1]:=ClBlack; frmMain.Canvas.Pixels[X+X1, -Y+Y1]:=ClBlack; frmMain.Canvas.Pixels[-X+X1, Y+Y1]:=ClBlack; frmMain.Canvas.Pixels[-X+X1, -Y+Y1]:=ClBlack; end; end; Procedure KorRajzol2(r, x1, y1: integer); var X, Y: Integer; ALFA: Integer; begin {Ciklus ALFA=0-tól pi/2-ig .01-esével X:=R*cos(ALFA): Y:=R*sin(ALFA) Rajzol(X,Y): Rajzol(X,-Y) Rajzol(-X,Y): Rajzol(-X,-Y) Ciklus vége Eljárás vége} For ALFA:=0 to Round(PI/2*10) do begin X:=Round(R*cos(ALFA)); Y:=Round(R*sin(ALFA)); frmMain.Canvas.Pixels[X+X1, Y+Y1]:=ClBlack; frmMain.Canvas.Pixels[X+X1, -Y+Y1]:=ClBlack; frmMain.Canvas.Pixels[-X+X1, Y+Y1]:=ClBlack; frmMain.Canvas.Pixels[-X+X1, -Y+Y1]:=ClBlack; end; end; Procedure KorRajzol3(r, x1, y1: integer); var X, Y: Integer; begin { Ciklus X=0-tól R-ig Y:=gyök((R+X)*(R-X)) Rajzol(X,Y): Rajzol(X,-Y): Rajzol(-X,Y): Rajzol(-X,-Y) Ciklus vége } For x:=0 to R do begin Y:=Round(sqrt((R+X)*(R-X))); frmMain.Canvas.Pixels[X+X1, Y+Y1]:=ClBlack; frmMain.Canvas.Pixels[X+X1, -Y+Y1]:=ClBlack; frmMain.Canvas.Pixels[-X+X1, Y+Y1]:=ClBlack; frmMain.Canvas.Pixels[-X+X1, -Y+Y1]:=ClBlack; end; end; Procedure KorRajzol4(r, x1, y1: integer); var X, Y, RR: Integer; begin { X:=0: Y:=R: RR:=R*R Ciklus amíg Y0 Rajzol(X,Y): Rajzol(X,-Y): Rajzol(-X,Y): Rajzol(-X,-Y) Ha (X+1)*(X+1)+Y*YRR akkor X:=X+1 különben Y:=Y-1 Ha (X+1)*(X+1)+Y*YRR akkor X:=X+1 [különben le] Elágazások vége Ciklus vége } X:=0; Y:=R; RR:= SQR(R); While Y<>0 do begin frmMain.Canvas.Pixels[X+X1, Y+Y1]:=ClRed; frmMain.Canvas.Pixels[X+X1, -Y+Y1]:=ClGreen; frmMain.Canvas.Pixels[-X+X1, Y+Y1]:=ClBlue; frmMain.Canvas.Pixels[-X+X1, -Y+Y1]:=ClYellow; If SQR(X+1)+SQR(Y) - RR <= 0 then X:=X+1 else begin Y:=Y-1; if SQR(X+1)+SQR(Y)-RR <= 0 then X:=X+1; end; end; end; procedure TfrmMain.Szakaszrajzols11Click(Sender: TObject); begin SzakaszRajzol1(10, 10, 99, 50); end; procedure TfrmMain.Szakaszrajzolsegyszer1Click(Sender: TObject); begin SzakaszRajzol2(10, 20, 32, 45); end; procedure TfrmMain.Krrajzols11Click(Sender: TObject); begin KorRajzol1(100, 160, 160); end; procedure TfrmMain.Krrajzols21Click(Sender: TObject); begin KorRajzol2(50, 300, 100); end; procedure TfrmMain.Krrajzols31Click(Sender: TObject); begin KorRajzol1(50, 200, 200); end; procedure TfrmMain.Krrajzols41Click(Sender: TObject); begin KorRajzol4(100, 160, 160); end; end.