Stránky neboli dlhú dobu aktualizované. Môžu obsahovať nepresné alebo neaktuálne informácie.
Hľadanie
Rozšírené vyhľadávanie
TOP 7 - stránky
Napaľovacie programy - 108 203x
Free Pascal - Úvod - 65 907x
Lazarus - Kreslenie - 47 467x
Free Pascal - Začiatky - 44 755x
Free Pascal - Podmienky - 37 111x
Free Pascal - Cykly - 36 359x
Internetové prehliadače - 36 218x
Nové v diskusii
Free Pascal - Cykly - štvrtok 31.3.
Lazarus - Začíname - piatok 25.3.
Anketa - streda 2.3.
Navigácia: Programovanie > Free Pascal - Grafika

Free Pascal - Grafika

Doteraz sme ako výstup používali len vypisovanie textu procedúrami write a writeln. Pascal však dokáže pracovať aj s grafikou - kresliť úsečky, obdĺžniky, elipsy a pod.

Grafický režim

Aby sme mohli pracovať s grafikou, je potrebné prepnúť z textového do grafického režimu. Uvediem tu kód, ktorý je nutné vkladať do každého pascalovského grafického programu. Nemusíte mu rozumieť, keďže ide o systémové záležitosti, ale napíšem niečo aj o tom.

Najskôr pridáme do sekcie uses jednotku graph, ktorá obsahuje všetko potrebné na „kreslenie“.

Premenná ovladac, veľmi zjednodušene povedané, obsahuje číslo ovládača grafickej karty. Ovládač je súbor sprostredkujúci spoluprácu medzi hardvérom a softvérom. Grafmod je grafický mód, v akom budeme pracovať - väčšina ovládačov totiž obsahuje viac režimov, napr. mód 1 = rozlíšenie monitora 640x480, 256 farieb; mód 2 = rozlíšenie 720x400, 16 farieb a pod.

Nebojte sa, všetko ponecháme na autodetekciu a premennej ovladac priradíme hodnotu funkcie Detect.

Nakoniec prepneme do grafického režimu procedúrou InitGraph. Prvým parametrom je ovládač, druhým grafický mód a tretí určuje priečinok, kde sa nachádza súbor s ovládačom. Ovládače sú v tomto prípade súbory s príponou BGI a môžeme ich nájsť priamo v adresároch Free Pascalu, resp. TurboPascalu. Priečinok, v ktorom sme ich našli, uvedieme ako tretí parameter procedúry InitGraph.

program grafika;
uses
 crt, graph;
var
 ovladac, grafmod: integer;
begin
 ovladac := Detect;
 InitGraph(ovladac, grafmod, 'C:\OVLADACE');
 ...
 repeat until keypressed;
end.

Ak používate FreePascal a nedarí sa vám tento kód skompilovať, je nutné:

  • Buď zameniť v deklarácii premenných ovladac a grafmod dátový typ integer za smallint
  • alebo nastaviť v menu Options / Compiler na karte Syntax položku Compiler mode na Turbo Pascal Compatible.

Program spustite a ak nepozorujete chybové hlášky, všetko by malo byť v poriadku.

Grafická plocha

Grafickú plochu predstavuje v prípade TurboPascalu celá obrazovka, pri Free Pascale je to špeciálne windowsovské okno.

Pracuje sa v súradnicovej sústave. Jej začiatok je v ľavom hornom rohu a má súradnice X = 0, Y = 0; ináč povedané [0, 0]. Jednotkou sú pixle.

Čiary

Na nakreslenie úsečky používame funkciu Line(X1, Y1, X2, Y2). Parametre sú celočíselné a zohrávajú nasledujúcu úlohu:

  • X1 je X-ová súradnica začiatočného bodu úsečky
  • Y1 je jeho Y-ová súradnica
  • X2 je X-ová súradnica koncového bodu úsečky
  • Y2 je jeho Y-ová súradnica

Skúsime nakresliť vodorovnú čiaru začínajúcu na súradniciach [100, 50] a končiacu na [300, 50].

Line(100, 50, 300, 50);

Podobný efekt môžeme dosiahnuť tým, že procedúrou MoveTo(X, Y) posunieme akýsi „ukazovateľ“ na pozíciu [100, 50]. Potom pomocou LineTo(X, Y) urobíme čiaru z aktuálnej súradnice do pozície [300, 50].

MoveTo(100, 50);
LineTo(300, 50);

Obdĺžniky

Obdĺžnik sa dá nakresliť viacerými čiarami, ale zvyčajne ho kreslíme jednoduchšie - procedúrou Rectange(X1, Y1, X2, Y2). Parametre majú tentoraz takýto význam:

  • X1 a Y1 sú súradnice ľavého horného rohu obdĺžnika
  • X2 a Y2 sú súradnice jeho pravého dolného rohu

Nakreslíme obdĺžnik široký 200 a vysoký 80 px. Jeho ľavý horný roh bude na pozícii [100, 100].

Rectangle(100, 100, 300, 180);

Procedúra Bar má rovnaké parametre ako Rectangle, ale jej úlohou je nakresliť vyplnený obdĺžnik. Predtým, ako ju zavoláme, je vhodné nastaviť štýl a farbu výplne pomocou SetFillStyle(Typ_výplne, Farba).

SetFillStyle(SolidFill, red);
Bar(100, 100, 300, 180);

Kruhy a elipsy

Vytvoriť kruh je jednoduchšie, ako by sa mohlo zdať. Máme na to procedúru Circle(X, Y, Polomer). Celočíselné parametre X a Y označujú súradnice stredu kruhu, význam slova polomer asi netreba vysvetľovať.

Circle(250, 200, 40);

Procedúra Ellipse, kresliaca elipsu alebo jej časť, má, samozrejme, trochu viac parametrov. Takto znie definícia:

Ellipse(X, Y: Integer; StAngle, EndAngle: Word;
 XRadius, YRadius: Word);

X a Y sú súradnice stredu. XRadius je x-ový polomer, YRadius zas y-ový.

StAngle je uhol, od ktorého sa začína časť elipsy kresliť. EndAngle je uhol, kde sa má prestať kresliť. Predstavte si uhlomer, kde 0 alebo 360 stupňov je vpravo, 90 hore, 180 vľavo a 270 dole. Viac možno pochopíte skúšaním rôznych hodnôt.

Ellipse(50, 150, 90, 360, 30, 50);

Vznikne časť elipsy:

Free Pascal - elipsa

Text

Hoci sme v grafickom prostredí, nikto nepovedal, že na grafickú nemôžme písať text. Slúži na to procedúra OutText s parametrom typu string. Daný text sa vypíše na aktuálnu pozíciu (určenú cez MoveTo, atď.).

OutText('Nejaky text');

Funkcia OutTextXY(X, Y, Text) vypíše parameter Text na súradniciach X, Y.

OutTextXY(10, 10, 'Iny text');

Farby

Farbu kresliaceho nástroja nastavíme procedúrou SetColor(Farba). Parametrom je číslo, avšak existujú preddefinované konštanty, ktoré môžeme použiť - napr. Blue je modrá, Yellow žltá a pod.

SetColor(LightBlue);
Line(0, 0, 100, 200);

Graf kvadratickej funkcie

Uvediem praktický príklad - vykreslenie grafu kvadratickej funkcie x2-10x+30. Hodnoty sa budú počítať a kresliť od x = -10 po x = 20.

program grafkvad;
uses
 crt, graph;
const
 zaciatok = -10;
 koniec = 20;
var
 ovladac, grafmod: integer;
 x, stredX, stredY: integer;

Samotná funkcia bude uložená vo funkcii f s celočíselným parametrom X. Vráti sa stred výšky plochy mínus hodnota Y pre dané X. Dôvod je jasný - hodnoty pascalovských súradnic sa zhora nadol zvyšujú, v matematike je to naopak.

{kvadraticka funkcia
 s prepoctom na pascalovske suradnice}
function f(x: integer): integer;
begin
 f := stredY-(x*x-10*x+30);
end;
begin
{prechod do grafickeho rezimu}
 ovladac := Detect;
 InitGraph(ovladac, grafmod, 'C:\OVLADACE');

Pascalovská funkcia GetMaxX vráti šírku grafickej plochy v pixloch, GetMaxY zas jej výšku. Vydelením týchto čísel dvojkou dostaneme stred nášho vlastného súradnicového systému.

{urcenie stredu plochy}
 stredX := GetMaxX div 2;
 stredY := GetMaxY div 2;

Teraz nakreslíme osi x a y. Dáme k nim aj textový popis.

{vykreslenie osi x a y}
 Line(0, stredY, GetMaxX, stredY);
 Line(stredX, 0, stredX, GetMaxY);
{napiseme k nim textovy popis}
 OutTextXY(0,stredY+2,'X');
 OutTextXY(stredX+2,0,'Y');

Presunieme ukazovateľ na začiatok. V cykle postupne vykresľujeme hodnoty Y pre X, zväčšujúce sa od začiatočnej po koncovú hodnotu.

{presun na zaciatok grafu}
 MoveTo(stredX+zaciatok, f(zaciatok));
{vykreslovanie v cykle}
 for x := zaciatok to koniec do
  LineTo(stredX+x, f(x));
 repeat until keypressed;
end.
Free Pascal - graf
Hodnotenie
1 2 3 4 5 (ako v škole)
Priemerná známka: 2,23
Diskusia k tejto stránke Číslo na reťazec sa prevedie napr. takto: int cisl...
Prejsť do diskusie»
2005-2012, Matúš Sulír, matus.sulir (zav) gmail bodka com. Gen.: 0,0434 s. Valid XHTML, CSS.