h3. Obdĺžniky Vypĺňať plochu s pomocou čiar je možné (ako ste sa mohli presvedčiť v predošlej lekcii). Ak to však nerobíte pozorne, môže sa vám stať, že niektoré bodíky na obrazovke ujdú vašej pozornosti a nevyplníte ich. Môže z toho síce vzísť pekná vzorka (ako sa stalo pri prvom príklade predošlej lekcie), ale to nie je vždy to, čo si človek želá. Preto má RUDL funkcie určené špeciálne na vypĺňanie určených plôch. Najjednoduchšie je vyplniť obdĺžnik. Napríklad obdĺžnik, ktorého protiľahlé vrcholy majú súradnice [30,70] a [160,140] sa vyplní príkazom $screen.rectangle. Ako parametre uvedieme obdĺžnik, čo treba vyplniť, a jeho farbu. Obdĺžniky sa ale v RUDL nezadávajú ako [x1,y1,x2,y2], ale ako [x,y,šírka,výška]. Šírka obdĺžnika bude 130 (rozdiel x-súradníc) a výška bude 70 (rozdiel y-súradníc), takže to bude: $screen.filled_rectangle([30,70,130,70], [255,198,198]) (Existuje aj funkcia rectangle, ktorá nakreslí nevyplnený obdĺžnik.) h3. N-uholníky Trojuholníky, štvoruholníky atď. sa kreslia pomocou príkazu polygon: $screen.polygon([[130,30], [420,70], [270,342]], [255,198,198]) (polygon chce pole vrcholov a farbu.) Keď treba vyplnené viacuholníky, použije sa filled_polygon. $screen.filled_polygon([[320,20], [420,460], [100,140], [540,140], [220,460]], [255,0,0]) (Ak hranica mnohouholníka pretína sama seba, vypĺňanie sa správa podivne -- ako sa koniec koncov môžete presvedčiť na uvedenom príklade.) h3. Krúžky Kruhy sa kreslia pomocou funkcií circle a filled_circle. $screen.filled_circle([400,300], 100, [255,255,0]) Zadáva sa polomer, nie priemer (takže ten príklad hore nakreslí krúžok veľký 200x200 px). Elipsy sa zase kreslia pomocou ellipse a filled_ellipse: $screen.filled_ellipse([400,300], 200, 50, [0,0,255]) Pri elipse sa zadávajú dva polomery: x-ový a y-ový (takže ten príklad hore nakreslí elipsu širokú 400 px a vysokú 100 px). *Úloha č. 1:* Napíšte, pochopte, spustite uvedené príklady. Všetky dajte do jedného programu (samozrejme pred každým vymažte obrazovku a za každý dajte $screen.flip a keypress). *Úloha č. 2:* Náhodné celé číslo od 0 do 99 vyrobíte pomocou funkcie rand(100). Nakreslite 1000 náhodných trojuholníkov náhodnej farby. *Úloha č. 3:* Nakreslite šachovnicu aj s bielymi a čiernymi poľami. *Špeciálna úloha:* Nakresliť červenú hviezdu bez diery v prostriedku. (Ak vám to pomôže, nemusí nutne mať súradnice rovnaké ako tá z toho príkladu vyššie.) *Špeciálna úloha č. 2:* Predstavte si tento program: $screen.rectangle([290,210,60,60], [0,255,0]) $screen.rectangle([260,180,120,120], [0,255,0]) $screen.floodfill([320,200], [0,128,0]) floodfill v angličtine znamená "vyplň" (funguje to ako ten nástroj v Paint-e). Bohužiaľ v RUDL žiadna takáto funkcia neexistuje, takže uvedený program vyhlási chybu. Skúste zistiť, čo by ten program nakreslil, keby existovala (napríklad si to môžete nakresliť na papier), a vytvoriť svoj vlastný spustiteľný (t.j. chybu nevyhlasujúci) program, ktorý to nakreslí. h3. Dodatky h4. filled_rectangle vs fill Okrem Surface#filled_rectangle(rect,color) sa na vypĺňanie obdĺžnikov dá použiť aj stará známa funkcia fill. Tá normálne vyplní celý obrázok jednou farbou, ale má aj druhý nepovinný parameter, ktorý obmedzuje, ktorá časť obrázka sa má vyplniť. Prečo je kreslenie obdĺžnikov v RUDL dvakrát? Nuž, ako som zmienil v prvej lekcii, RUDL spája dokopy SDL aj mnohé ďalšie dodatkové knižnice. SDL samotná neobsahuje takmer žiadne funkcie na prácu s obrázkami, v podstate iba kopírovanie z obrázka do obrázka a vypĺňanie častí nejakou farbou. (Nie je tam ani plot, resp. putpixel) Väčšina kresliacich funkcií v RUDL pochádza z knižnice SDL_gfx. Tá už je omnoho kompletnejšia a obsahuje všetko možné, _aj_ ďalšiu funkciu na vypĺňanie obdĺžnikov. RUDL všetky tieto knižnice spája dohromady, takže v RUDL sú obidve tieto funkcie. fill je z SDL a filled_rectangle je z SDL_gfx. Podľa dokumentácie RUDL (http://rudl.sf.net/docs/): "Choose whichever you like best." Čiže: "Používajte si, ktorý chcete." (Pozor na to, že majú opačné poradie parametrov - fill chce najprv farbu a filled_rectangle chce najprv obdĺžnik.) h4. Zoznam kresliacich funkcií - zhrnutie Funkcie na vyfarbovanie obrázkov (v angličtine sa mimochodom volajú "drawing primitives"): line, rectangle, circle, ellipse, filled_pie, polygon, print, plot. "filled_" verzie funkcií rectangle, circle, ellipse, polygon nakreslia nie len obrys, ale vyplnený útvar. "antialiased_" verzie funkcií line, circle, ellipse, polygon nakreslia antialiasované útvary. filled_pie kreslí výsek z elipsy, konkrétne použitie a parametre nájdete v dokumentácii RUDL. plot(súradnice, farba) nakreslí na dané miesto bodku veľkú jeden pixel. Má aj skratku, ktorá niekedy môže byť čitateľnejšia: $screen[x,y] = [r,g,b] - s plochami sa dá narábať ako s nejakými dvojrozmernými poľami.