1 Grafika v Matlabe Grafika v Matlabe má niekoľko stupňov. Matlab umožňuje užívateľovi vytvárať rôzne grafické objekty. My sa zoznámime s dvoj- alebo troj-rozmernými grafmi a a nimáciami. Túto grafickú časť začneme predsatvením grafických nástrojov, ktoré sú dostupné v Matlabe. Odporúčam vám, aby ste si prezreli demá, ktoré sú pripravené v Helo-Demos-Graphics a zvolili si napríklad 2-D Plots, 3-D Plots a pod. Tieto demá vám tiež poskytnú predstavu, ako vyzerá príslušný kód. 1.1 2-D grafika Základnou funkciou na vytvorenie dvojrozmerných obrázkov je funkcia plot. Príklad 1. Otvorte si súbor graf1.m. Spustite tento súbor napísaním jeho mena do príkazového riadku. Graf sa vykreslí v novom okne nazývanom Figure Window. Vektor x v tomto súbore obsahuje budy z intervalu (-1.5,1.5) s krokom 0.01. Vektor y obsahuje funkčné hodnoty funkcie e x2 v týchto bodoch. 1.1.1 Zdokonaľovanie obrázku Popisy a texty. Nasledujúce príkazy umožňujú pomenovať každú os a umiestniť text na ľubovoľné miesto grafu. Postupne do súboru graf1.m pridávajte: title - pridá do grafu jeho názov, napr. title( Moj prvy graf ) xlabel - pomenuje os x, napr. xlabel( x-ova os ) ylabel - pomenuje os y, napr. ylabel( y-ova os ) legend - do existujúceho grafu pridá legendu, napr. legend( Funkcia exp(-x^2) ) text - zobrazí textový reťazec na špecifikovanom mieste, napr. text(-0.5,0.3, Presne tu je moj text! ) Upravovať graf môžeme aj priamo vo Figure Window. V položke Insert sa nachádzajú položky, ktoré umožňujú pridať do obrázku všetky popisy uvedené vyššie (a aj niektoré ďalšie). Popisy a texty. Príkazom axis([xmin xmax ymin ymax]) môžeme zmeniť rozsah osí. Príkaz axis off nám umožňuje vypnúť zobrazovanie osí. 1
Voľba axis( square ) umožňuje nastaviť osi tak, aby dĺžka x-ovej a y-ovej osi bola rovnaká. 1.1.2 Viac grafov Viac grafov v tom istom obrázku. Najjednoduchším spôsobom, ako zobraziť viacero grafov do toho istého obrázku, je zavolanie postupnosti príkazov: x=-1.5:0.01:1.5; y=exp(-x.^2);z=exp(-x); plot(x,y,x,z) Pridávanie grafov do existujúceho grafu. Pridať graf do už zobrazeného grafu je možné pomocou príkazu hold on. Napríklad: t=1:2:20 plot(ln(t)) hold on plot(log(2*t), -- ) Viacero okien na grafiku. Grafikcé príkazy automaticky vytvárajú váš obrázok vo Figure Window. Pomocou príkazu figure môžete vytvoriť nové okno. Príklad 2. Zmodifikujte predchádzajúcu úlohu tak, aby ste tieto dva grafy zobrazili v dvoch rôznych Figure Window. Viacero samostatných grafov v jednom okne. Matlab umožňuje zobraziť niekoľko grafov v jednom Figure Window. Príkaz subplot(m,n,i) rozdelí Figure Window na pole rozmerov m n, skladajúce sa z malých grafov, a ako aktívny označí graf i. Grafy sú očíslované po riadkoch. Príklad 3. Otvorte si súbor subploty.m. Popis súboru: Príkaz subplot(2,2,1) rozdelí Figure Window na pole rozmeru 2 2 a vytvorí osi v prvom políčku poľa. Políčka sú očíslované po riadkoch. Príkaz [x,y]=meshgrid(t) transformuje definičný obor špecifikovaný vektorom t do matíc x a y. 1.1.3 Typy čiar Symboly pre rôzne typy bodov: + znak plus 2
* znak hviezdička o krúžok x krížik s štvorček s štvorček p päťcípa hviezda d kosoštvorec h šesťcípa hviezda Symboly pre rôzne typy čiar: - plná čiara (default) -- prerušovaná čiara : bodkovaná čiara -. bodkočiarkovaná čiara Príklad 4. Môžeme vytvárať ľubovoľné kombinácie typov bodov a čiar ktoré ich spájajú. Napr. nastavením voľby p-. dostaneme bodkočiarkovanú čiaru, na ktorej sp zadané body vyznačené päťcípou hviezdičkou. 1.1.4 Farby V Matlabe sú definované základné farby: y žltá c modrozelená g zelená w biela m purpurová r červená b modrá k čierna Symbol pre danú farbu môžeme pripojiť k predchádzajúcim voľbám. Príklad 5. Zelenú bodkočiarkovanú čiaru, ktorej body sú vyznačené päťcípou hviezdičkou, dostaneme pomocou gp-.. 1.1.5 Špecifikácia hrúbky a farby čiar Príklad 6. Zistite, čo znamenajú jednotlivé voľby v súbore graf2.m. 3
1.1.6 Špeciálne typy grafov Matlab ponúka niekoľko funkcií na zobrazenie špecializovaných typov 2-D grafov. Bližšie sa pozrieme na funkcie fill, bar, pie, a na hist. Príklad 7. Použitie funkcie fill. n=-6:6; x=sin(n*pi/6); y=cos(n*pi/6); fill(x,y, r ) axis( square ) title( Graf n-uholnika ) text(-0.45,0, Ako sa vola tento utvar? ) Funkcia fill má tri argumenty: dve polia x a y, ktoré udávajú x-ovú a y-ovú súradnicu objektu, ktorý sa dá vyplniť. Tretí parameter udáva zvolenú farbu. Príklad 8. Použitie funkcie hist. yn=randn(10000,1); hist(yn) Vstupným argumentom príkazu hist je vektor (prípadne matica). Ako výstup sa zobrazí histogram. Príklad 9. Pokúste sa samostatne, prípadne s pomocou Helpu nakresliť koláčový graf, v ktorom znázorníte pomer nákladov firmy: fixné náklady 50, variabilné náklady 20, dane 10, reklama 20. 1.2 3-D grafika Matlab má niekoľko zabudovaných funkcií na kreslenie trojrozmerných obrázkov. My sa budeme hlavne venovať funkciám plot3,mesh,surf,contour, a dvom funkciám na kreslenie špeciálnych plôch sphere a cylinder. Ak budete v budúcnosti potrebovať viac, napíšte do príkazového riadku help graph3d. 3-D krivky. Otvorte si súbor graf4.m. Funckia plot3 má tri vstupné parametre: polia popisujúce súradnice bodov telesa, ktoré sa má vykresliť. Jedniný nový príkaz je tu zlabel, ktorého význam je zrejmý. 3-D siete. Otvorte si súbor graf5.m. Funkcia mesh sa používa na kreslenie trojrozmerných parametricky zadaných 4
grafov. Predtým ako začneme pracovať s touto funkciou, musíme sa najprv oboznámiť s funkciou meshgrid. Funkcia meshgrid transformuje definičný obor špecifikovaný jedným alebo dvoma vektormi do matíc X a Y, ktoré sa použijú na vypočítaniehodnôt funkcie dvoch premenných. 3-D plochy. Otvorte si súbor graf6.m. Funkcia surf je podobná ako mesh, avšak navyše od nej umožňuje, aby jednotlivé plôšky grafu boli vyfarbené. Farbu týchto plôšiek určuje súradnica Z a tiež nastavenie colormap. Príkaz colormap definuje maticu m 3, ktorej prvky sú reálne čísla medzi 0 a 1. Každý riadok predstavuje RGB vektor, ktorý definuje jednu farbu. K-ty riadok definuje k-tu farbu, jednotlivé prvky v riadku špecifikujú intenzitu červenej, zelenej a modrej. Matlab má niekoľko preddefinovaných typov farebných máp. Napríklad: autumn, hot, copper, bone, jet, atď. Funkcia shading kontroluje tieňovanie plochy. Matlab ponúka tri možnosti tieňovania: flat, faceted, interp. Pre bližšie informácie pozri Help. Úrovňové množiny. (Pokražujeme analýzou súboru graf6.m). Na kreslenie úrovňových kriviek Matlab používa funkciu contour, resp. contourf. Táto funkcia očakáva ako vstup matic (aspoň 2 2), ktorá reprezentuje výšku v rovine x-y. počet úrovňových množín je zvolený automaticky na základe hodnôt vstupnej matice. Modifikáciou funkcie contour je funkcia contourf. Táto funkcia navyše vyplní plochy ohraničené jednotlivými úrovniami rovnakou farbou. Funkcia clabel zobrazí hodnoty úrovňových kriviek do vrstevnicvého grafu. Príkazy sphere a cylinder. Príkaz sphere(n) generuje guľu s priemerom 1 so stredom v počiatku súradnicového systému s použitím (n + 1) 2 bodov. Ak zavoláme funkciu sphere bez vstupného argumentu, Matlab použije default hodnotu n = 20. Stred gule môžete posúvať nasledujúcim spôsobom: [x,y,z]=sphere(30); surf(x+2,y-1,z+1) Funkcia sphere spolu s funkciou surf alebo mesh sa používa na vykreslenie gule ľubovoľného polomeru. Funkcia cylinder sa používa veľmi podobne. Vyskúšajte: t=0:pi/10:2*pi; [x,y,z]=cylinder(2+cos(t)); surf(x,y,z) axis square 5
1.3 Animácia Matlab okrem vykresľovania statických grafov umožňuje vytvoriť sled obrázkov - animáciu. Animáciu v MAtlabe môžete vytvoriť jedným z dvoch nasledujúcich spôsobov: 1. Uložiť si niekoľko obrázkov a potom ich prehrať ako film. 2. Spojite zmazávať a prekresľovať objekty na obrazovke robiac pritom inkrementálne zmeny na každom ďalšom obrázku. Aby sme si vysvetlili, ako si takýto malý film vytvoriť, analyzujme súbor prvaanimacia.m. Najpr si spustite tento súbor. Mali by ste si všimnúť päť grafov, ktoré sa vám budú postupne zobrazovať. Na konci tejto show sa vám zobrazia ešte raz v rýchlejšom slede. V tomto säbore je iba veľmi málo nových príkazov. Príkaz moviein, so vstupným celočíselným parametrom, udáva, že animácia pozostáva z piatich snímok. Tieto snímky sú postupne generované v rámci for-cyklu. Jediný nový príkaz v tomto cykle je getframe. Funckia getframe vracia kostru filmu. KOstra filmu v sebe obsahuje informáciu o súčasných osiach, okrem pomenovania osí. Každý snímok je uložený v stĺpci matice m. Posledný príkaz v súbore je movie(m). Tento príkaz hovorí Matlabu, aby premietol animáciu, ktorú si predtým vytvoril a uložil do matice m. 1.4 Tlač a uloženie obrázkov z Matlabu V tejto časti si povieme, ako vytlačiť Matlabovské obrázky. Prvou možnosťou je priamo vytlačiť obrázok zobrazený vo Figure Window. Vo Figure Window si zvoľte File->Print, prípadne si pozrite Print Preview. Ak chcete obrázok uložiť do súboru, zvoľte si vo Figure Window File->Export. Tu si môžete zvoliť vhodný formát (jpg,eps,...) a uložiť obrízok do súboru v tomto formáte. 6