Graafikakasutamise näidis

Alltoodud programm demonstreerib FreePascal graafikvõimalusi sin ja cos funktsiooni graafikute joonestamiseks, mõlemad funktsioonid koos joonestatult annab tulemuseks "vuntsid", kui soovite puhast siinusjoont, kommenteerige välja rida LintTo(x1, y1), kui puhast koosinusgraafikut, siis rida LineTo(x1,y2). Viimasel juhul näete lisaks üht joont, mis ühendab (0,0) ja esimese joonestatava punkti. Siinusfunktsiooni joonestamisel on see joon samuti, aga ta langeb teljega kokku ja pole seetõttu eraldi nähtav. Selle joone olemasolu tuleneb sellest, et enne joonestamist seadsime kursori asukohaks ekraani keskpunkti korraldusega MoveTo(320,240). Ka paistavad kõik graafikud nn. "jalad ülespidi". See tuleb sellest, et y koordinaadi loomulik suund on ülalt alla ja loomulik koordinaatide alguspunkt on akna ülemises vasakus nurgas. Loomulike koordinaatide muutmist peaks saama teostada SetViewPort korraldusega.

Program graafika1; (* kasutades sin ja cos funktsiooni koos saame joonestada "vuntsid" *)
uses graph, math; (* math vajalik funktsioonide sincos ja floor jaoks *)
var
varvid, eraldusv, error: integer; (* värvidesügavus ja eraldusvõime on täisarvulised muutujad *)
x1,x2,y1,y2: SmallInt; (* punktide koordinaadid on väike täisarv tüüpi muutujad *)
S,C:float; (* leitavad sin (tähistatud S) ja cos (tähistatud C) on reaalarvud *)
begin
(* Kasutame 8 bitist moodi *)
varvid := D8bit; (* kasutatav värvide hulk *)
eraldusv := m640x480; (* eraldusvõime *)
initgraph(varvid,eraldusv,'');
(* Alati peab kontrollima <graphresult> tulemust, et veenduda valitud värvidehulga ja eraldusvõime kasutatavust! *)
error := graphResult;
if (error <> grOk) Then (* kui <graphresult> annab vea *)
begin
writeln('640x480x256 reziimi videokaart ei toeta!');
halt(1)
end;
(* Kui test oli eduas, kasutame seadistust 640x480x256 *)
SetBkColor(blue); (* Taustavärvi seadmine *)
setColor(cyan); (* joonestamis ehk esiplaani värv *)
rectangle(0,0,getmaxx,getmaxy); (* kasutame valitud reziimi võimalikult suurt akent *)
SetViewPort(-320,-240,320,240,true); (* akan seadistamine, selles näites tegelikult midagi ei tee *)
line(320,0,320,480); (* verikaaltelg "y" *)
line(0,240,640,240); (* horisontaaltelg "x" *)
MoveTo(320,240); (* seame kursori "0,0" punkti ekraani keskel *)
for x2:=-180 to 180 do (* arvutame sin ja cos nurkadele -180 kuni 180 kraadi *)
begin
(* Kasutame Sin ja Cos funktsioone vuntside joonistamiseks *)
sincos(pi/180*x2,S,C); (* funktsioon sincos argumentideks on nurk radiaanides ja muutujad sin ja cos tulemuste jaoks *)
x1:=320+x2; (* punkti x koordinaat *)
y2:=240+ceil(100*S); (* punkti y koordinaat sin joone joonestamiseks, ceil on vajalik täisosa saamiseks *)
y1:=240+ceil(100*C); (* punkti y koordinaat cos joone joonestamiseks, ceil on vajalik täisosa saamiseks *)
LineTo(x1,y2); (* sin graafiku joonestamine joonelõikudega kursori asukohast kuni jooksvate koordinaatideni *)
LineTo(x1,y1); (* cos graafiku joonestamine joonelõike kasutades kursori asukohast kuni jooksvate koordinaatideni *)
end;
readln; (* oodatakse ENTER vajutust *)
(* Tagasi tekstimoodi *)
closegraph;
end.