{ GRAF2D.PAS Copyright (c) TrSek alias Zdeno Sekerak } { Zobrazí 2D graf prezentovaný nasledovnými funkciami X,Y. } { X, Y sú definované v FuncX(), FuncY(). } { } { Datum:13.07.2013 http://www.trsek.com } program graf2d; uses Graph,Crt; const PocKrok = 360; { max kruhu v radianoch } c_move = 50; os_x = 320; { stred osi x } os_y = 240; { stred osi y } var Gd, Gm: Integer; I, Width,ix,iy: Integer; krokeps,krokx,kroky: Integer; xx,yy,t,epsilon :real; { X-ova zlozka funkcie } function FuncX(i:integer):integer; var t:real; xx:real; x:integer; begin t:=i*2*pi/360; xx:=6*(4+sin(t)+3*cos(t)-0.7*sin(2*t)+0.8*cos(15*t)+0.3*abs(cos(30*t)))*cos(t)-15; FuncX:=os_x+round((xx/c_move)*240); end; { Y-ova zlozka funkcie } function FuncY(i:integer):integer; var t:real; yy:real; y:integer; begin t:=i*2*pi/360; yy:=6*(6+sin(t)+3*cos(t)-0.9*sin(2*t)+0.3*cos(15*t)+0.3*abs(cos(30*t)))*sin(t); FuncY:=os_y-round((yy/c_move)*240); end; { vykresli osovy kriz o farbe } procedure OsKriz; begin SetColor(Red); SetLineStyle(SolidLn, 0, NormWidth); Line(0,os_y,GetMaxX,os_y); Line(os_x,0,os_x,GetMaxY); end; { nastavenie vykreslovania grafu } procedure SetGraf(farba,Thiskness:integer); begin SetColor(farba); SetLineStyle(SolidLn, 0, Thiskness); end; BEGIN Gd := Detect; InitGraph(Gd, Gm,''); if GraphResult <> grOk then Halt(1); outtextxy(10,GetMaxY-20,'Press enter ...'); Width :=10; epsilon:=5; krokeps:=round(c_move/epsilon); OsKriz; ReadLn; { prve vykreslenie } SetGraf(Yellow,NormWidth); MoveTo( FuncX(0), FuncY(0)); For i:= 0 to PocKrok do LineTo( FuncX(i), FuncY(i)); ReadLn; { vyplni zelenou } SetFillStyle(SolidFill,Green); FloodFill(os_x, os_y, Yellow); OsKriz; ReadLn; { vykresli pixely } For krokx:=-krokeps to krokeps do For kroky:=-krokeps to krokeps do begin xx:=(epsilon/2)+epsilon*krokx; yy:=(epsilon/2)+epsilon*kroky; ix:=round((xx/c_move)*240); iy:=round((yy/c_move)*240); { akej farby ma byt pixel } if( GetPixel(os_x+ix,os_y-iy)=Green)then PutPixel(os_x+ix,os_y-iy,Red) else PutPixel(os_x+ix,os_y-iy,White) end; ReadLn; { vykresli siet - vodorovne } SetGraf(Magenta, NormWidth); For krokx:=-krokeps to krokeps+1 do begin delay(10); xx:=epsilon*krokx; ix:=round((xx/c_move)*240); Line(os_x+ix,0,os_x+ix,GetMaxY); end; ReadLn; { vykresli siet - zvisle } For kroky:=-krokeps to krokeps do begin delay(10); yy:=epsilon*kroky; iy:=round((yy/c_move)*240); Line(0,os_y-iy,GetMaxX,os_y-iy); end; OsKriz; ReadLn; { znova vykresli } SetGraf(Green, NormWidth); MoveTo( FuncX(0), FuncY(0)); For i:= 0 to PocKrok do LineTo( FuncX(i), FuncY(i)); ReadLn; { slusnost vravi uzavriet grafiku } CloseGraph; END.