GRAFIKA

Popis obrazovky
Textová stránka sa skladá z 80 stĺpcov a 25 riadkov. Celkovo je takto prístupných 80x25 buniek, pričom v každej bunke môže býť zobrazený jeden znak. Miesto, kam sa bude zapisovať, je označené blikajúcim kurzorom. V každej bunke sa môžu naraz vyskytnúť dve farby - 1. farba papiera, pozadia 2. farba atramentu, znaku. Riadky sú číslované od 1 po 25, stĺpce od 1 po 80, pričom bunka s adresou 1,1 je úplne vľavo hore a posledná bunka 25,80 je úplne vpravo dole.
Grafická obrazovka
V programe pascal je implicitne navolená textová obrazovka, na prepnutie do grafického formátu musíme použiť príkaz jazyka. Situácia však nie je jednoduchá lebo existuje viacero grafických kariet podporujúcich viacero grafických režimov. Nakoľko pascal už nie je "najmladší", viacero grafických kariet i režimov, ktoré pascal podporuje, už vyšli z módy a nepoužívajú sa a naopak viaceré moderné vymoženosti grafických kariet pascal priamo nepodporuje, ale je možné si z internetu v prípade potreby takéto nástroje zabezpečiť. Pre našu potrebu budeme voliť grafickú kartu VGA s režimom VGA 640x480 bodov pri 16-tich farbách. Tento režim dnes podporujú všetky karty. Pri potrebe väčšieho grafického rozlíšenia, resp. pri väčšom počte požadovaných farieb, je nutné potrebné grafické ovládače stiahnuť z internetu (režim VESA - rozlíšenie 800x600 pri 16-tich farbách je ukázané ako príklad v adresári \bp\exampes\dos\bgi).
Popis grafickej obrazovky
Základná grafická obrazovka (VGA) je tabuľka pozostávajúca zo 640 stĺpcov a 480 riadkov. Každá bunka tejto tabuľky je tvorená plôškou obdĺžnika a nazýva sa pixel. Pixel je základnou grafickou jednotkou a môžeme ho rozsvecovať rôznymi farbami. Celý pixel môže mať iba jednu farbu. Grafický kurzor - miesto kam ukazuje grafické pero - nie je viditeľné, ale počítač si jeho polohu pamätá a môžeme ho príkazmi presúvať po obrazovke. Stĺpce sú číslované od 0 po 639 a riadky sú číslované 0 po 479, pričom pixel s adresou 0,0 je úplne vľavo hore a posledná bunka s adresou x=639 a y=479 je úplne vpravo dole. Oproti geometrickej interpretácii roviny, ako ju poznáte z matematiky, pomocou osí x a y je tu os y orientovaná opačne (zhora nadol) čo spočiatku robí trochu problémy, ale časom si na to zvyknete.
Pripnutie grafickej knižnice ku programu
Aby sme mohli používať príkazy týkajúce sa práce s grafickou obrazovkou je potrebné do prvého riadku deklaračnej časti programu umiestniť príkaz
uses graph;
Tento príkaz pripne graph.tpu ku programu a my môžme potom používať príkazy v ňom zadefinované ako napr. initgraph, line, circle, bar a pod.
Prepnutie sa do grafického režimu
Na prepnutie obrazovky do grafického režimu slúži procedura
initgraph(var graphdriver, grmode :integer; PathToDriver:string);
ktorá sa pokúsi prepnúť režim na grafický podľa zadaných parametrov.
Syntax
  • Prvý parameter musí byť premenná, ktorá určuje ktorý grafický driver sa má ku práci s našou grafickou kartou použiť. Každý driver má koncovku bgi a sú obyčajne v adresári \bp\bgi. Je dôležité nastaviť správny driver, v prípade nesprávnej voľby sa grafika nenastaví a pri pokuse použiť ďalší grafický príkaz program skončí s chybou.
    Prípustné hodnoty parametra
    0 ... túto hodnotu volíme, ak nevieme, aký driver použiť. Pomocou procedury detectGraph(var graphdriver, grmode :integer); ktorú si zavolá napomoc, sa program pokúsi zistiť s akým hardware má tú česť a podľa výsledku si sám nastaví do graphdriver a grmode správne hodnoty.
    1 - 8 ... tieto voľby patria dnes už prežitým resp. málo známym gr. kartám.
    9 ... túto voľbu používame, ak vieme, že naša gr. karta je VGA, alebo režim VGA podporuje, čo je dnes bežné u všetkých gr. kariet.
  • Druhý parameter vyžaduje premennú v ktorej je požadované grafické rozlíšenie. Pri voľbe VGA máme tieto možnosti
    0 ... VGALO ... 640x200
    1 ... VGAMED ... 640x350
    2 ... VGAHI ... 640x480
    Tieto voľby sa volili podľa veľkosti pamäte gr. karty. Dnes prakticky tento parameter môžme nastaviť vždy na hodnotu 2.
  • Tretí parameter musí obsahovať textový výraz v ktorom bude zapísaná cesta ku požadovanému súboru na ovládanie gr. karty *.bgi. Obyčajne tam býva textová konštanta '\bp\bgi'.
Sémantika
Po úspešnom vykonaní príkazu je obrazovka prepnutá do grafického režimu, obrazovka je zotretá aktuálnou farbou pozadia (čiernou) a kurzor je na súradniciach (0,0). Pri neúspechu sa neudeje nič - pozri kontrola chýb.
Kontrola chýb
O tom, či sa prepnutie podarilo je vhodné sa presvedčiť volaním funkcie Graphresult; ktorá ako svoju návratovú hodnotu vráti chybový kód poslednej grafickej operácie. Každé číslo okrem 0 signalizuje, že prepnutie do grafiky sa nepodarilo a nemá zmysel použiť ďalší gr. príkaz načo už program bude väčšinou reagovať chybovým ukončením.
Príklad použitia initgraph s kontrolou úspešnosti vykonania.
V príklade sú použité grafické konštanty
Detect ... jej hodnota je 0
GrOk ... jej hodnota je 0
Obe konštanty sú popísané v jednotke graph.tpu a po príkaze uses graph; sú zadefinované a nastavená ich hodnota. V prípade, že nastala chyba pri pokuse o initgraph je možné si chybové hlásenie patriace ku tejto chybe vypísať pomocou procedury GraphErrorMsg(ErrCode:integer). Vyžaduje parameter, v ktorom je číslo chyby, ktorá nastala pri grafickom príkaze. Nakoľko inicializácia grafiky teda vyžaduje viac riadkov programu, je vhodné si ich do programu kopírovať pascalského helpu patriaceho príkazu initgraph.

  
uses Graph;
var
 grDriver: Integer;
 grMode: Integer;
 ErrCode: Integer;
begin
 grDriver := Detect;
 InitGraph(grDriver, grMode,' ');
 ErrCode := GraphResult;
 if ErrCode = grOk then
 begin  { Tu je vetva ak je vsetko OK }
   Line(0, 0, GetMaxX, GetMaxY);
   Readln;
   CloseGraph;
 end
 else { tato vetva sa vykonava v pripade neuspechu }
   Writeln('Graphics error:', GraphErrorMsg(ErrCode));
end.
Úlohy
Rozhodnite, ktoré volania proc. initgraph sú syntaxticky správne - svoj názor zdôvodnite - pričom vo všetkých príkladoch predpokladajte, že potrebné premenné s,gr,gm sú korektne zadeklarované.
  1. initgraph(detect,gm,'\bp\bgi');
  2. initgraph(0,0,'\bp\bgi');
  3. s:='\bp\bgi'; initgraph(gr,gm,s);

Práca s bodmi
Pre prácu s bodmi používame nasledovné príkazy:
procedure putpixel(x,y:integer;color: word) ... na rozsvietenie bodu na obrazovke,
function getpixel(x,y:integer): word ... na zistenie farby bodu na obrazovke
Sémantika:
putpixel
položí na určené miesto obrazovky bod danej farby. Ak je určené okno pomocou príkazu setViewPort je výstup je výstup do tohto okna.
getpixel
vráti farbu bodu. Táto operácia je dosť pomalá a jej použitie sa tým obmedzuje.
Príklady:
  1. Nakresli na obrazovke sprayom s daným polomerom rozptylu nasledovné geometrické útvary:
    • kružnicu o danom polomere
    • kruh o danom polomere
    • štvorec o danej strane
    • špirálu
    • sinusovku
    • 500 bodov postupne rozsvecované v posúvajúcom sa páse
  2. Napíš podprogram na kreslenie kružnice, úsečky bez použitia typu real a výpočtov goniometrických funkcií

Práca s oknom
Obyčajne na výstup grafických príkazov slúži celá obrazovka, pričom súradnice ľavého horného bodu sú (0,0). Na určenie časti obrazovky do ktorej sa bude realizovať gr. výstup, alebo len zmena súradníc ľavého horného rohu slúži príkaz
setviewport.
Príkaz zároveň presunie kurzor do ľavého horného rohu okna, teda na súradnice (0,0).
Syntax:
Procedure SetViewPort(x1,y1,x2,y2:integer,clip:boolean)
Sémantika:
x1,y1 ... súradnice ľavého horného rohu
x2,y2 ... súradnice pravého dolného rohu
clip = TRUE výstup mimo volené okno nebude, orezáva výstup
clip = FALSE výstup mimo volené okno povolený, len zmena súradníc obrazovky Na zotretie aktuálneho okna požadovanou farbou používame príkaz clearviewport.
Na zotretie celej obrazovky požadovanou farbou používame príkaz cleardevice - zároveň zruší platnosť setviewport.
Farbu na zotretie nastavíme príkazom setbgcolor(farba:0..15).
Na zistenie aktívneho okna používame príkaz
procedure GetViewSetting(Var zaz: ViewPortType)
V programe pri volaní tejto procedúry ako parameter musí byť použitá premenná typu viewporttype,
(ViewPortType = RECORD 
		x1,y1,x2,y2:integer;
		clip       :boolean;
		END)
tento typ je zadeklarovaný v unite graph.tpu, a teda ho môžeme používať. Po zavolaní tejto procedury sa v parametri vrátia hodnoty posledne použitého príkazu setViewPort. Na vrátenie aktívneho okna na celú obrazovku - vlastne zrušenie aktívneho okna - použijeme príkaz SetViewPort(0,0,GetMaxX,GetMaxY,true).
Príklady
1. Pomocou príkazu setviewport a procedury na kreslenie kruznice danou farbou vykresli olympijské kruhy 2. Pomocou príkazu na vyplnenie kruhu sprayom vykresli kvet (8 lupeňov)

Práca s farbami
function getMaxColor:byte
vráti číslo maximálnej farby. Používame farby 0..GetMaxColor. Farba číslo 0 je určená na pozadie 1..max sú na ľub. kreslenie. Farba 0 teda nie je čierna, ale je tam farba pozadia.
procedure setcolor(farba:byte)
používame na nastavenie farby krelených objektov (čiar, plôch). (Farba atramentu)
procedure setbkcolor(farba:byte)
zapíše parameter do farby číslo 0 a zmení pozadie celej obrazovky na požadovanú farbu. (Farba papiera - celej obrazovky)
function getcolor:byte
vráti aktuálnu farbu atramentu
function getbkcolor:byte
vráti aktuálnu farbu papiera

Presúvanie grafického kurzora na obrazovke
Nech grafický kurzor je na súradniciach aktuálneho okna (x,y)
Kreslenie čiar
Príkazy na kreslenie
Nech grafický kurzor je na súradniciach aktuálneho okna (x,y)
  • procedure line(x1,y1,x2,y2:integer)
    • nakreslí úsečku z bodu (x1,y1) do bodu (x2,y2) určenou farbou
    • nemení polohu grafického kurzoru
    • body (x1,y1), (x2,y2) môžu ležať aj mimo obrazovky
  • procedure lineTo(x2,y2:integer)
    • nakreslí úsečku z bodu (x,y) do bodu (x2,y2) určenou farbou
    • mení polohu grafického kurzoru do bodu (x2,y2)
    • bod (x2,y2) môže ležať aj mimo obrazovky
  • procedure lineRel(dx,dy:integer)
    • nakreslí úsečku z bodu (x,y) do bodu (x+dx,y+dy)
    • mení polohu grafického kurzoru do bodu (x+dx,y+dy)
    • bod (x+dx,y+dy) môže ležať aj mimo obrazovky
  • procedure Rectangle(x1,y1,x2,y2:integer)
    • nakreslí obdĺžnik (x1,y1)=ľavý horný bod,(x2,y2)=pravý dolný bod
    • nemení polohu grafického kurzoru
    • body (x1,y1), (x2,y2) nemôžu ležať mimo obrazovky
  • procedure DrawPoly(Pocet:word, var zoznam)
    procedúra má pospájať body, ktorých integer súradnice sú zapísané v premennej zoznam. Premenná zoznam je pole dvojíc integerov x,y.
    • nakreslí lomenú čiaru, ak prvý bod je rovnaký ako posledný vznikne uzavretá lomená čiara
    • nemení polohu grafického kurzoru
    • všetky body musia ležať vnútri obrazovky
  • procedure circle(x,y:integer;polomer:word)
    • nakreslí kružnicu so stredom v bode (x,y) a polomerom polomer
    • nemení polohu grafického kurzoru
    • bod (x,y) môže ležať aj mimo obrazovky
  • procedure arc(x,y:integer;zac,kon:word;polomer:word)
    • nakreslí časť kružnice
    • x,y ... stred kružnice
    • zac,kon ... orientované uhly začiatku a konca kreslenia kružnice
    • polomer ... polomer kružnice
    • bod (x,y) môže ležať aj mimo obrazovky
  • procedure ellipse(x,y:integer;zac,kon:word;xr,yr:word)
    • nakreslí časť elipsy
    • x,y ... stred elipsy
    • zac,kon ... orientované uhly začiatku a konca kreslenia elipsy
    • xr,yr ... dĺžky poloos elipsy
    • bod (x,y) môže ležať aj mimo obrazovky
Príkazy na nastavenie vlastností kreslenia
  • procedure setcolor(farba:byte)
    • nastaví farbu atramentu do pera
    • prípustné farby 0..getMaxColor
  • procedure setlineStyle(styl,model,hrubka:word)
    • styl - určí typ čiary, tu sú povolené konštanty
      1. SolidLn ... plná čiara
      2. DottedLn ... bodkovaná čiara
      3. CenterLn ... čiarko-čiarkovaná čiara
      4. DashedLn ... čiarkovaná čiara
      5. UserBitLn ... užívateľom definovaný typ čiary
    • model - len pre styl=4, inak je ignorovaný, 16 bitová konštanta - pixel svieti ak v dvojkovej sústave je 1
    • hrubka - určí hrúbku čiary, tu sú povolené konštanty:
      1. NormWidth ... obyčajná čiara
      3. DottedLn ... hrubá čiara
  • procedure setWriteMode(režim:integer) - môžme voliť nasledovné režimy
    1. Copyput ... prepis každého pixla farbou čiary
    2. Xorput ... farba pixla bude určená výsledkom operácie xor medzi farbou pixla a farbou čiary
Príklady:
  1. Pomocou setwritemode naprogramuj pohybujúceho panáčika, hýbe rukami, nohami, vie nadvihnúť klobúk
  2. Pomocou setwritemode naprogramuj idúce ručičkové hodiny
  3. Naprogramuj vykreslovanie priebehu niektorých základných funkcií - sin, cos, tg, e^x, ln, ax^2+bx+c, ax^n+ ... menu ponúka jednu zvolenú funkciu, resp. štyri zvolené funkcie
  4. Napíšte program na vykreslenie pavučiny - úsečky [0,10]-[10,0]; [1,9]-[9,1]; ...
  5. Napíšte program na vykreslenie priebehu f:y=sin(2t); x=sin(3t)
  6. f: y=x*x/(x*x+1); y=x*x/(x*x+2)
  7. f: y=arctan(ax); y=arctan(a+x)
  8. f: y=abs(x+a)/(abs(x)+a)
  9. f: y=exp(-x*x/a);
  10. f: y=sin(ax)/(a*x); y=sin(ax)/x
    ukážka
  11. Napíšte program na vykreslovanie 3D objektov pomocou "drôteného" modelu, ktorý vykresluje len hrany telesa.
    Premenné x1,y1,z1 sú reálne súradnice bodu
    Premenné x2,x3,y2,y3 sú reálne súradnice bodu pootočeného
    Premenné x1,y1 sú namerané súradnice bodu v priestore - reálne
    Premenné x0,y0 sú súradnice obrazovky
    Premenná k je mierka zväčšenia na obrazovke - reálne k=sqrt((maxx-minx)^2+(maxy-miny)^2+(maxz-minz)^2)
    minxo ... lavý okraj na obrazovke
    minyo ... spodný okraj na obrazovke
    "Otocenie okolo osi z o uhol alfa"
    x2=x1*cos(alfa)+y1*sin(alfa)
    y2=y1*cos(alfa)-x1*sin(alfa)
    z2=z1
    "Otocenie okolo osi y o uhol beta"
    x3=x2
    y3=y2*cos(beta)+z2*sin(beta)
    z3=z2*cos(beta)-y2*sin(beta)
    "Zobrazenie na monitore - mierkovanie"
    xo=xmin0+round(k*(x3-xmin))
    yo=ymin0-round(k*(z3-zmin)) {ymin zadávame, kde chceme mať spodok - napr. 400}

Kreslenie plôch
Príkazy na kreslenie
  • procedure bar(x1,y1,x2,y2:integer)
    Kreslí pravoúhly pás aktuálnou farbou (stcolor) a aktuálnou výplňou (setfillpatern, setfillstyle). Používa sa na kreslenie farebných obdĺžnikov a zotieranie obdĺžnikových častí obrazovky
    x1,y1 ... súradnice ľavého horného rohu
    x2,y2 ... súradnice pravého dolného rohu
  • procedure bar3D(x1,y1,x2,y2:integer; hlbka:word; vrchol:boolean )
    Kreslí 3-rozmerný stĺpec aktuálnou farbou (stcolor) a aktuálnou výplňou (setfillpatern, setfillstyle). Používa sa na kreslenie farebných stĺpcových diagramov. Obrysy sa kreslia aktuálnym typom čiary.
    x1,y1 ... súradnice ľavého horného rohu
    x2,y2 ... súradnice pravého dolného rohu prednej steny
    hlbka ... tretí rozmer kresleného kvádra
    vrchol ... ak TRUE kreslí aj vrchnú plochu, inak nie
  • procedure FillPoly(Pocet:word; Var zoznam)
    Pracuje podobne ako DrawPoly aj má rovnaké parametre, navyše ohraničená plocha je zatretá aktuálnou výplňou.Ak je počet vrcholov väčší ako 600 je potrebné nastaviť veľkosť pomocnej pamäte (SetGraphBuffsize)
  • procedure PieSlice(x,y:integer; zac,kon,polomer:word)
    Kreslí a vypĺňa kruhový výsek. Obrysy kreslí aktuálnou čiarou.
    x,y ... stred kružnice
    zac,kon ... orientované uhly začiatku a konca kreslenia kružnice
    polomer ... polomer kružnice
    bod (x,y) môže ležať aj mimo obrazovky
  • procedure FillEllipse(x,y:integer; xr,yr:word)
    nakreslí a vyplní elipsu
    x,y ... stred elipsy
    xr,yr ... dĺžky poloos elipsy
    bod (x,y) môže ležať aj mimo obrazovky
  • procedure Sector(x,y:integer;zac,kon:word;xr,yr:word)
    nakreslí a vyplní časť elipsy
    x,y ... stred elipsy
    zac,kon ... orientované uhly začiatku a konca kreslenia elipsy
    xr,yr ... dĺžky poloos elipsy
    bod (x,y) môže ležať aj mimo obrazovky
Príkazy na vypĺňanie plôch
  • procedure FloodFill(x,y:integer; farba:word)
    Vyplní z bodu x,y celú plochu aktuálnou výplňou až po hranicu určenú parametrom farba
Príkazy na definovanie plôch
  • procedure SetFillStyle(Vzorka,farba:word)
    Umožní zvoliť si z preddefinovaných vzoriek výplne a tiež voľbu farby. Vzorka môže mať hodnoty 0 - 12. Ak zvolíme číslo 12 ide o užívateľom definovanú vzorku popísanú príkazom setfillpatern. Farba určuje farbu šrafovacích čiar.
    0 .. vypĺňa farbou pozadia
    1 .. vypĺňa nastavenou farbou
    2 .. vypĺňa vodorovnými čiarami ---
    3 .. vypĺňa šikmými čiarami ///
    4 .. vypĺňa silnými šikmýmí čiarami ///
    5 .. vypĺňa silnými šikmýmí čiarami \\\
    6 .. vypĺňa šikmýmí čiarami \\\
    7 .. vypĺňa svetlým šrafovaním
    8 .. vypĺňa krížikovým šrafovaním
    9 .. vypĺňa prekladaným šrafovaním
    10 .. vypĺňa bodkovaním riedkym
    11 .. vypĺňa bodkovaním hustým
    12 .. vypĺňa užívateľom zvoleným vzorkom
    Pozn. Okrem vzorky 1 je pozadie vzorky - okrem šrafovacích čiar - určené farbou pozadia obrazovky.
  • procedure SetFillPattern(Vzorka:FillPatternType;farba:word)
    Nastaví užívateľskú vzorku a farbu. Aktívnou sa stane až príkazom setfillstyle. Typ FillPatternType je definovaný v knižnici graph a ide o pole 8-mych bajtov
Príklady
  1. Namaluj snehuliaka
  2. Namaľuj kvietok s 8-mimi červenými lupeňmi
  3. Namaluj korálkový náhrdelník, na modrej niti v tvare elipsy budú modré korálky
  4. Namaluj slnečnú oblohu s niekoľkými obláčikmi
  5. Namaľuj vyšrafované ozubené koleso o polomere r a počte zubov z, výške zubov vz.
    Pomôcka:Súradnice bodov základne rovnostr. trojuholníkov získame pomocou vzťahov:
    xi=xs+r*cos(2*pi/z*i)
    yi=ys+r*sin(2*pi/z*i)
    Súradnice vrcholov budú na kružnici o polomere (r+vz) a počiatočný uhol bude posunutý o (pi/z)
  6. Namaluj nasledovný obrázok na modrom podklade kruh1.bmp
  7. Namaluj kocku, pričom farby stien sú rôzne a uhly otočenia sa načítajú z klávesnice
  8. Namaluj kocku, podľa predošlého príkladu a cez polovice hlán "odrež" jeden roh kocky, rovinu rezu vyšrafuj
  9. Namaľuj tvár s očami a ústami. Na stlačenie kláves sa postave pohýbu oči, ukážu zuby, pohnú uši
  10. Naprogramuj pohybujúcu sa žltú loptu odrážajúcu sa od stien obrazovky
  11. Naprogramuj hru pre dvoch hráčov, ktorý sa striedajú pri klávesnici a snažia sa pomocou dela súpera zneškodniť Na mieste dopadu náboja sa najprv zobrazí malý žltý kruh potom väčší červený a napokon ešte väčší farmou pozadia.
    Každý hráč volí uhol a rýchlosť strely.
  12. Naprogramuj grafický editor, ktorý dovolí klásť na plochu grafické objekty, tieto objekty evidovať v poli, editovať objety, pridávať, odstraňovať a zapisovať a čítať z disku.
  13. Naprogramuj pohybujúce sa autíčka na križovatke riadenej svetelnými semaformi, autíčka prichádyajú náhodne z rôznych smerov.

Písanie textu
Príkazy na písanie textu
  • Procedure OutText(retazec:string)
    Príkaz od aktuálneho kurzora zapíše daný reťazec aktuálnym typom písma a aktuálnou farbou.
  • Procedure OutTextXY(x,y:integer; retazec:string)
    Príkaz od miesta obrazovky x,y zapíše daný reťazec aktuálnym typom písma a aktuálnou farbou.
Nastavenie vlastností textu
  • Procedure SetTextJustify(Horiz,vertikal :word)
    Príkaz určí spôsob zarovnania textu ku určenému bodu.
    0 .. zarovnanie vlavo
    1 .. zarovnanie na stred - centrovanie
    2 .. zarovnanie sprava
    0 .. zarovnanie na spodný okraj
    2 .. zarovnanie na vrchný okraj
  • Procedure SetTextStyle(font,smer,velkost:word)
    FontSmer
    1. ... DefaultFont -štandartný font
    2. ... TriplexFont
    3. ... SmallFont
    4. ... SansSerifFont
    5. ... GothicFont
    1. ... HorizDir -štandartný smer písma, vodorovne
    2. ... VertDir - text sa píše zdola nahor
    Velkosť
    Velkosť určuje násobok zväčšenia. Maximálne zväčšenie je 10.

Práca s vkladaním a zápisov časti obrazovky
Príklady
  1. Naprogramuj pohyb zelenej guličky po vytehlovanej pracovnej ploche.
    Navod. - vytvor jednu, dve tehly zapíš do pam. a klaď ich za seba
    vytvor v pamäti obraz čiernej guličky na bielom podklade Obr1
    vytvor v pamäti obraz zelenej guličky na čiernom podklade Obr2
    položením Obr1 pomocou AndPut a na to Obr2 pomocou OrPut vznikne správny obraz


Unit Grafika

Unit grafika nie je štandartnou súčasťou borland pascalu, ale vďaka tomu že vznikol podstatne neskôr ako štandartný unit (graph) určený na prácu s grafikou odstraňuje niektoré jeho nedostatky a prináša niektoré nové metódy - podprogramy. Popis štandartného unitu graph možno nájsť tu.
Hlavným nedostatkom unitu grafika.tpu je, že nie je dokončený - niektoré príkazy z graph nie sú implementované, najmä setWriteMode(), ktorý sa s výhodou používa pri animácii objektov.
Hlavné rozdiely
PS: Ak používame unit mys1 s unitom graph musíme pred každým zápisom/čítaním grafického objektu na/z obrazovky. najprv skryť myš a potom zas myš ukázať
Napr.
Procedure LineTo(x,y:integer);
begin
  mysSkry;
  graph.LineTo(x,y);
  mysUkaz;
end;
Zoznam grafických príkazov:
Body ČiaryPlochyVýplneFarbyodpamätanie oknaPísmoWindow
Práca s bodmi
Precvičenie príkazu PutPixel(x,y,farba) a tiež príkazov myši. x,y určujú súradnice a farba určuje farbu bodu (musí byť zadaná číslom).
Vypracujte nasledovné úlohy
Pozn.
Pre "krajší" výsledok sú v príkladoch použité aj objekty na kreslenie:
rámikov - rectangle(xl,zl,xp,yp) ... [xl,zl] súradnice ľavého horného, [xp,zp] súradnice pravého horného
plných obdĺžnikov - filledrectangle(xl,zl,xp,yp), kde farbu nastavím cez setColor() ... takto to ide v grafike.tpu
plných obdĺžnikov - bar(xl,zl,xp,yp), kde farbu nastavím SetFillStyle(1,f) ... takto to ide v graph.tpu
Práca s úsečkami
Precvičenie príkazu lineto(), MoveTo(),
jednoduchá animácia
  • zotriem obr. a namalujem celé ešte raz
  • zotriem čiaru (kresba čiernej úsečky) a na nové miesto kreslím novú
  • úsečku kreslím inverzne - TextWriteMode(xor) - (dva krát ta istá = zotrie)
    definitívnu úsečku kreslím - TextWriteMode(Copy)
Práca s plochami
Precvičenie príkazu FilledRectangle