UTILIZAREA SISTEMULUI MATLAB PENTRU APLICAŢII GRAFICE 1. Generalităţi MATLAB este un mediu de programare şi un limbaj de înaltă performanţă utilizat în tehnică care integrează calcul numeric, grafică avansată, vizualizare şi programare. Acesta oferă cercetătorilor, inginerilor şi oricărui om de ştiinţă un sistem interactiv, puternic şi uşor de utilizat, în care problemele şi soluţiile sunt exprimate într-un mod natural. Utilizările sale tipice includ: - calcul matematic (numeric şi simbolic); - algoritmi de dezvoltare; - modelare şi simulare; - analiză de date, explorarea şi vizualizarea acestora; - grafică ştiinţifică şi inginerească; - aplicaţii de dezvoltare, incluzând realizarea de interfeţe grafice utilizator. MATLAB are o familie de aplicaţii specifice numite "toolboxes", care aplică o tehnologie specializată şi care sunt o colecţie de funcţii MATLAB ("M-files") ce extind mediul MATLAB să rezolve clase particulare de probleme. Aria în care sunt disponibile toolbox – urile include: procesare de semnal, procesare de imagine, comanda sistemelor, simulare, reţele neurale, fuzzy logic şi multe altele. Toată familia de produse MATLAB aparţine firmei The MathWorks Inc. Ultima versiune este MATLAB 7. MATLAB este un sistem interactiv, al cărui element de bază este o matrice care nu trebuie declarată înainte de folosire şi care nu are o dimensiune ce trebuie specificată. În sens larg, un vector este o matrice cu o linie sau o coloană, iar un scalar este un vector cu dimensiunea 1. Acest mod de lucru permite exprimarea simplă şi naturală a operaţiilor matematice (aşa cum s-ar scrie pe hârtie) şi rezolvarea multor probleme de calcul tehnic cu formulări matriceale şi vectoriale. Numele de MATLAB provine de la "matrix laboratory". MATLAB – lucrează fie în modul linie de comandă, situaţie în care fiecare linie este prelucrată imediat, rezultatele putând fi afişate, fie cu programe (mai multe instrucţiuni MATLAB, cu posibilitatea apelării altor fişiere de acelaşi tip şi a apelării recursive) conţinute in fişiere numite fişiere – M ("M-files") deoarece au extensia .m. Sistemul MATLAB cuprinde 5 părţi principale. 1) Limbajul MATLAB este un limbaj de nivel înalt de tip matrice / vector cu instrucţiuni de control, funcţii, structuri de date, intrări / ieşiri şi trăsături de programare orientată pe obiecte. 2) Mediul de lucru MATLAB este un set de instrumente şi facilităţi cu care intră în contact utilizatorul sau programatorul MATLAB. Include facilităţi pentru gestiunea variabilelor (acces, vizualizare, informaţii) în spaţiul de lucru şi importarea / exportarea datelor. În plus, permite dezvoltarea, depanarea şi lucrul cu fişiere de tip M ("M-files"). 3) "Handle Graphics" este sistemul grafic MATLAB care include comenzi de nivel înalt pentru vizualizări 2-D şi 3-D, procesare de imagine, animaţie şi prezentări grafice. Include şi comenzi de nivel redus pentru personalizarea modului de prezentare a graficelor şi construirea interfeţelor grafice utilizator (GUI) pentru aplicaţii. 4) Librăria de funcţii matematice MATLAB este o colecţie vastă de algoritmi de calcul şi analiză. Există peste 500 de funcţii matematice, pentru statistică şi inginerie optimizate pentru calcul matriceal. Acestea includ: - algebră liniară şi calcul matriceal; - funcţii Fourier şi de analiză statistică; - rezolvare de ecuaţii diferenţiale; 1
- operaţii trigonometrice şi alte operaţii matematice fundamentale. 5) Interfaţa Program Aplicaţie ("Application Program Interface") – API - este o librărie specializată care permite interacţiunea cu programe externe mediului MATLAB. Este permisă astfel apelarea programelor scrise în C sau Fortran, importarea / exportarea datelor şi stabilirea de relaţii de tip client / server între MATLAB şi alte programe. Cursul îşi propune să descrie facilităţile grafice MATLAB pentru vizualizarea datelor şi stabilirea modului de prezentare a graficelor, precum şi pentru crearea unor interfeţe grafice utilizator. În acest sens, MATLAB furnizează: - o serie de funcţii (rutine) grafice de nivel înalt care implementează cele mai utilizate tehnici pentru afişarea datelor precum reprezentările grafice în coordonate rectangulare sau polare, reprezentările grafice speciale (cu bare, histograme ş.a.), reprezentările grafice ale liniilor de contur sau suprafeţelor şi animaţia; În plus, prin funcţii specializate, pot fi controlate unele aspecte privind modul de prezentare al graficelor (culoare, umbrire, etichete pe axe ş.a.) fără a fi necesară accesarea explicită a unor proprietăţi ale obiectelor. - sistemul grafic orientat pe obiecte ("Handle Graphics"), care permite inclusiv realizarea de interfeţe grafice programabile; "Handle Graphics" defineşte un set de obiecte grafice (linii, suprafeţe, text ş.a.) şi oferă mecanismul de manipulare a acestor obiecte pentru a obţine rezultatele dorite. Se poate avea astfel un control mult mai precis asupra modului de afişare al datelor şi se pot dezvolta aplicaţii grafice proprii. Utilizând "Handle Graphics" , utilizatorul poate crea meniuri şi elemente de control interactiv pentru reprezentările grafice (butoane prin apăsare, potenţiometre, casete de control, liste de opţiuni ş.a.). Fişierele - M utilizator, create pentru a executa operaţii grafice, pot utiliza atât funcţii grafice de nivel înalt cât şi sistemul "Handle Graphics" în mod direct.
2. Sistemul grafic MATLAB orientat pe obiecte ("Handle Graphics") MATLAB foloseşte programarea orientată pe obiecte pentru controlul interactiv al reprezentărilor grafice. Conform acesteia, ferestrele figură sunt obiecte figură (“figure”) şi sunt copii ai obiectului grafic rădăcină "root" (fereastra ecran). De asemenea, sunt părinţi ai oricăror alte obiecte grafice: ai axelor ("axes"), elementelor de control ale interfeţelor grafice ("uicontrol") şi meniurilor ("uimenu").
Există 11 tipuri de obiecte grafice: - “root” , care este în topul ierarhiei şi corespunde ecranului computer-ului; în mod automat, la începutul unei sesiuni MATLAB, este creat obiectul “root”; - “figure” – corespunde ferestrei figură; - “uicontrol” – sunt obiecte asociate controalelor unei interfeţe grafice butoane prin apăsare, butoane radio, slidere), care execută o funcţie când sunt activate de utilizator; - “axes” – obiect care defineşte o zonă din fereastra figură asociată unui sistem de axe; - “uimenu” – obiecte asociate meniurilor unei interfeţe grafice utilizator, dispuse în partea de sus a ferestrei figură; - “image” – obiecte de tip imagine; 2
-
“line” – obiecte grafice primitive de bază pentru cele mai multe grafice 2D; “patch”- obiecte care constau în poligoane pline şi laturile acestora; “surface” – obiecte 3D care corespund repreyentărilor grafice 3D a matricelor de date; “text” – obiecte de tipul şir de caractere; “light” – obiecte care definesc surse de lumină care afectează toate obiectele în interiorul unui sistem de axe. Fiecare tip de obiect grafic are o serie de proprietăţi ce pot fi modificate (setate). Sistemul MATLAB asociază fiecărui obiect grafic creat un identificator ("handle"). Pentru a putea accesa proprietăţile obiectului, este util ca, la crearea acestuia, să se reţină identificatorul într-o variabilă. Modificarea proprietăţilor obiectelor grafice se realizează apelând comanda set, care are următoarea sintaxă: set (identificator, ' numele_proprietăţii' , valoarea_proprietăţii) Pentru a obţine valoarea curentă a unei proprietăţi se apelează funcţia get cu următoarea sintaxă: get (identificator, ' numele_proprietăţii' ) Identificatorul obiectului rădăcină este totdeauna 0. Pentru obiectul figură, în mod implicit acesta este un număr întreg afişat în bara de titlu a ferestrei grafice. În versiunile mai noi de MATLAB (începând cu 5), prin setarea proprietăţii IntegerHandle a figurii la valoarea off, identificatorul figurii poate fi un număr în virgulă flotantă. Identificatorii oricăror alte obiecte grafice sunt numere în virgulă flotantă. Există şi următorii identificatori predefiniţi: gcf – pentru fereastra figură curentă (“Get Current Figure”) gca – pentru sistemul de axe curent (“Get Current Axes”) Exemple de utilizare a funcţiilor set şi get set(gcf, 'color', 'w') – stabileşte culoarea alb pentru figura curentă set(gca, 'color', 'y') – stabileşte culoarea galben pentru sistemul de axe curent get(gcf, 'color') – returnează culoarea figurii curente get(gca, 'color') – returnează culoarea sistemului de axe curent
3. Fereastra figură MATLAB afişează reprezentările grafice într-o fereastră diferită de cea de comandă numită fereastra figură ("Figure window"). Caracteristicile acesteia sunt controlate de posibilităţile sistemului de afişare al calculatorului şi de proprietăţile obiectului figură. Funcţiile grafice creează în mod automat o nouă fereastră figură, dacă nu există deja una curentă. Dacă există, aceasta va fi folosită pentru afişare. În cazul în care există mai multe ferestre figură, afişarea va avea loc în figura desemnată a fi cea curentă, în mod uzual ultima fereastră utilizată. Pentru a crea o nouă fereastră figură care va deveni curentă, se apelează funcţia figure, cu una din următoarele sintaxe posibile: figure h = figure
Varianta a doua se foloseste pentru ca identificatorul noii figuri să fie reţinut în variabila h în scopul accesării ulterioare a figurii. Dacă există mai multe obiecte figură, stabilirea figurii cu identificatorul h ca fiind cea curentă, se realizează cu sintaxa figure(h)
Se poate folosi ca identificator al ferestrei grafice curente funcţia gcf ("GetCurrentFigure"). 3
Există 54 de proprietăţi ale obiectului figură. Dintre acestea: • 'Color' - vector [ r g b]- stabileşte culoarea fondului; • 'IntegerHandle' –{ 'on'}/'off'- identificatorul figurii este un număr întreg sau un număr în virgulă flotantă; • 'MenuBar' - 'none'/{'figure'}- nu afişează/afişează bara de meniuri a ferestrei figură; • 'Name' – şir de caractere- numele din bara de titlu; • 'NumberTitle' –{ 'on'}/'off'- afişează sau nu identificatorul figurii în bara de titlu; • 'Position' – vector cu 4 elemente [left bottom width height] care stabileşte poziţia şi dimensiunea ferestrei figură în cadrul ferestrei ecran; • 'Resize' – { 'on'}/'off' – permite sau nu redimensionarea cu mouse-ul a ferestrei figură; • 'Visible' – { 'on'}/'off' – stabileşte vizibilitatea ferestrei figură; • 'Tag' – şir de caractere (etichetă) asociat de utilizator obiectului grafic • 'Units' – 'inches' | 'centimeters' | 'normalized' | 'points' | {'pixels'} | 'characters' satbileşte unităţile de măsură folosite la proprietatea 'Position';
Spre exemplu, sintaxa get (gcf, curente.
'Position')
furnizează vectorul poziţie al figurii
Observaţie În mod implicit, fondul ferestrei figură este negru pentru versiunile MATLAB inferioare lui 5 şi gri începând cu MATLAB 5. Pentru a modifica fondul ferestrei figură, există două posibilităţi: - se foloseşte comanda set pentru a modifica proprietatea 'Color' la valoarea dorită; - se foloseşte whitebg. Sintaxe posibile: whitebg(fig, c) – stabileşte fondul implicit al sistemului de axe pentru figurile ai căror identificatori sunt incluşi în vectorul fig la valoarea specificată în c. Fondul ferestrei figură se schimbă (o nuanţă apropiată culorii fondului sistemului de axe) astfel încât să fie menţinut un contrast adecvat. Argumentul c poate fi un vector de dimensiunea 1x3 (vector RGB), sau un şir de caractere care defineşte culoarea (spre exemplu 'white' or 'w'). Dacă proprietatea ‘color’ a sistemului de axe este 'none', culoarea figurii (în locul culorii sistemului de axe) este setată la culoarea specificată. whitebg(fig) lucrează ca un comutator şi comută culoarea obiectelor grafice din figurile specificate în fig la valoarea complementară cele actuale. Sintaxa este folosită în mod uzual pentru comutarea între alb şi negru. Dacă pentru fig se specifică 0 (“root window”) va fi afectată culoarea implicită pentru noile figuri. whitebg şi whitebg(c) – sintaxe fără specificarea identificatorilor unor figuriafectează fereastra curentă şi noile figuri. 4
4. Reprezentări grafice 2-D 4.1. Reprezentări grafice elementare MATLAB oferă o varietate de funcţii pentru afişarea vectorilor şi matricelor de date sub formă grafică, precum şi funcţii pentru adnotarea şi tipărirea acestor grafice. Funcţiile prezentate diferă prin modul în care sunt scalate axele sistemului. plot - reprezintă grafice în coordonate liniare; loglog - reprezintă grafice în coordonate logaritmice; semilogx - reprezintă grafice într-un sistem în care axa x este scalată logaritmic, iar axa y liniar; semilogy - reprezintă grafice într-un sistem în care axa x este scalată liniar, iar axa y logaritmic; plotyy - reprezintă două grafice în aceeaşi fereastră figură: unul cu axa y afişată în stânga, iar celălalt cu axa y afişată în dreapta. Este o funcţie disponibilă începând cu versiunea MATLAB 5; fill - reprezintă grafic poligoane. 4.1.1. Reprezentarea grafică 2D în coordonate liniare Funcţia plot permite reprezentarea grafică a datelor în coordonate liniare şi are diferite forme de utilizare în funcţie de argumentele de intrare. După apelul funcţiei, sunt create unul sau mai multe obiecte grafice de tip line care sunt copii ai unui obiect grafic de tip axes. Dacă acesta din urmă nu există, este creat în mod automat. Sintaxe posibile: a) plot (y)
• •
Dacă y este un vector de dimensiune n, sintaxa trasează graficul y = y(i), unde i = 1…n este indexul elementelor vectorului. Dacă y este o matrice de dimensiune m x n, vor fi trasate n grafice de forma yj = yj(i), unde i = 1…m este indexul elementelor de pe coloana j.
b) plot (x, y)
• • • c)
Dacă x şi y sunt vectori de aceeaşi dimensiune, se reprezintă grafic funcţia y = y(x). Dacă x şi y sunt matrice de aceeaşi dimensiune, se reprezintă grafic coloanele lui y în funcţie de coloanele lui x. Dacă x este un vector de dimensiune n şi y o matrice de dimensiune n x m, se reprezintă grafic coloanele lui y în funcţie vectorul x, deci se obţin m grafice. plot (x1 ,y 1,x 2, y2…)
Această sintaxă este folosită pentru a reprezenta simultan mai multe grafice, corespunzând mai multor perechi de argumente (x1, y1), (x2, y2) ş.a.m.d. în acelaşi sistem de coordonate. d) plo t(… , ‘nume_proprietate1', valoare_proprietate1, valoare_proprietate2… )
‘nume_proprietate2',
permite specificarea valorilor unor proprietăţi pentru obiectele de tip line încă din momentul creării acestora; acestea se aplică tuturor liniilor create. e)
plot (x, y, 'cu l oare _ti pli nie _m ar cato r')
Ultimul argument este un şir de caractere format din simbolurile unuia sau tuturor 3 caracteristicilor liniei de trasare, ordinea precizării acestora neavând importanţă. Simbolurile disponibile şi semnificaţiile acestora sunt prezentate în tabelul 1. Simbol y m c r
Culoare Semnificaţie galben mov albastru-deschis roşu
Tip linie Simbol Semnificaţie continuă -întreruptă : punctată -. linie-punct 5
Simbol . o x +
Tip marcator Semnificaţie punct cerc marcatorul x plus
g b w k
verde albastru alb negru
* s d v ^ < > p h
asterisc pătrat diamant triunghi isoscel cu un vârf în jos triunghi isoscel cu un vârf în sus triunghi isoscel cu un vârf la stânga triunghi isoscel cu un vârf la dreapta pentagrama (stea cu 5 colţuri) hexagrama (stea cu 6 colţuri)
Tab.1 Simbolurile şi semnificaţiile caracteristicilor liniei de trasare f) plo t(x1 , 'cul 2_t ipl ini e2 _m arc2 ', …)
y 1,' cu l1_t ipl ini e1_ ma rc 1',x 2,
y2,
stabileşte cele trei caracteristici pentru liniile asociate fiecarei perechi de argumente de intrare x,y. g) h = plot(...)
Pe lângă efectele grafice corespunzătoare argumentelor de intrare, această sintaxă înregistrează identificatorii tuturor obiectelor de tip line create în variabila h (vector dacă sunt mai multe obiecte line). 4.1.2. Reprezentarea grafică în coordonate logaritmice şi semilogaritmice Funcţiile destinate acestor reprezentări au modul de utilizare identic cu cel al funcţiei plot, diferind doar tipul de scalare a axelor. Astfel: logl og( x,y ) scalează ambele axe utilizând logaritmul în baza 10 (reprezintă grafic funcţia log(y) = f (log(x)) ); semi log x(x ,y) scalează logaritmic doar axa x, axa y fiind scalată liniar (reprezintă grafic funcţia y = f (log(x)) ); semi log y(x ,y) scalează logaritmic doar axa y, axa x fiind scalată liniar (reprezintă grafic funcţia log(y) = f (x) ). 4.1.3. Proprietăţile obiectului grafic de tip LINE (obţinut cu plot, loglog, semilogx, semilogy) Dintre proprietăţile obiectelor de tip line se prezintă următoarele: • Color – culoarea de trasare • LineStyle: [ {-} | -- | : | -. | none ] – tipul liniei de trasare • LineWidth – scalar care semnifică grosimea liniei • Marker: [ + | o | * | . | x | square | diamond | v | ^ | > | < | pentagram | hexagram | {none} ] – tipul de marcator • MarkerSize - scalar care semnifică dimensiunea marcatorului • MarkerEdgeColor: [ none | {auto} ] sau o culoare specificată – stabileste culoarea de contur a marcatorului • MarkerFaceColor: [ {none} | auto ] sau o culoare specificată – stabileste culoarea interioara a marcatorului, dacă acesta este delimitat de un contur inchis • Xdata – vector cu datale reprezentate în abscisă • YData– vector cu datale reprezentate în ordonată • UIContextMenu – identificatorul unui meniul contextual asociat • Visible: [ {on} | off ] – starea de vizibilitate
6
Exemplu de creare a unui meniu contextual pentru un obiect de tip line care va permite alegerea tipului de linie de trasare 1. Se creează obiectul linie cu salvarea identificatorului într-o variabilă: l = plot(1:5, 1:5); 2. Se creează obiectul de tip uicontextmenu: mc = uicontextmenu; 3. Se definesc articolele de meniu contextual ;i operaíile care vor fi executate la selectarea lor: op1=[’set(l, ”linestyle”, ”--”)’]; op2=[’set(l, ”linestyle”, ”:”)’]; op3=[’set(l, ”linestyle”, ”-”)’]; op4=[’set(l, ”linestyle”, ”-.”)’]; articol1=uimenu(mc,’label’, ’linie intrerupta’,’callback’, op1); articol2=uimenu(mc,’label’, ’linie punctata’,’callback’, op2); articol3=uimenu(mc,’label’, ’linie continua’,’callback’, op3); articol4=uimenu(mc,’label’, ’linie-punct’,’callback’, op4); 4. Se asociază meniul contextual obiectului linie set(l,’ uicontextmenu’,mc);
4.1.4. Funcţia plotyy Atunci când domeniile datelor ce se doresc a fi reprezentate pe axa y sunt mult diferite sau când se doreşte reprezentarea grafică în acelaşi sistem de axe a unor funcţii cu axele y scalate diferit, este utilă funcţia plotyy. Aceasta reprezintă două perechi de grafice ale căror gradaţii pe axele y sunt în stânga, respectiv dreapta graficelor şi este disponibilă începând cu versiunea MATLAB 5.2. După apelul funcţiei, sunt create, ca şi copii ai obiectului “figure” curent, două obiecte grafice de tip “axes” suprapuse, fiecare având drept copii unul sau mai multe obiecte de tip „line” corespunzătoare celor două perechi de date de intrare. Pentru apelul funcţiei plotyy se poate folosi una din sintaxele: • plotyy(x1,y1,x2,y2) – trasează grafic funcţia y1=f(x1) cu axa y plasată la marginea stângă a zonei delimitate de sistemul de axe şi funcţia y2=f(x2) cu axa y plasată în dreapta. Reprezentările grafice sunt în coordonate liniare (cu funcţia plot). • plotyy(x1,y1,x2,y2,fun) – permite, faţă de sintaxa precedentă, specificarea modului de scalare a axelor, deci a funcţiei folosite la reprezentări, prin argumentul fun. Acesta trebuie să fie un şir de caractere ce conţine numele unei funcţii care acceptă sintaxa fun(x,y). Exemplu: 'plot', 'loglog', 'semilogx', 'semilogy'. • plotyy(x1,y1,x2,y2,fun1,fun2) – utilizează fun1(x1,y1) pentru reprezentarea grafică a datelor în sistemul de axe cu axa y în stânga şi fun2(x2,y2) pentru reprezentarea grafică a datelor în sistemul de axe cu axa y în dreapta. • [a,h1,h2] = plotyy(...) – sintaxă prin care, în vederea unei accesări ulterioare, sunt reţinuţi: - în vectorul a, identificatorii celor două sisteme de axe (componenta a(1) pentru sistemul cu axa y în stânga şi componenta a(2) pentru sistemul cu axa y în dreapta); - identificatorii obiectelor grafice corespunzătoare celor două perechi (în h1 şi h2). Precizări:
7
1) Oricare din perechile x,y pot fi, în mod independent, de tipul vector-vector, vectormatrice sau matrice-matrice. Este permisă astfel reprezentarea grafică, în oricare din cele două sisteme de axe, a mai multor grafice. 2) Utilizând funcţia plotyy, nu se pot controla caracteristicile liniilor de trasare în momentul trasării acestora. Vor fi folosite ciclic 7 culori. 3) Dacă una din perechile de date este de tip vector-vector (afişarea unui singur grafic în sistemul de axe respectiv), axa y corespunzătoare va avea aceeaşi culoare cu graficul asociat. În caz contrar, culoarea axei y este negru. 4) Modificarea proprietăţilor liniilor de trasare cu ajutorul editorului de plot nu este posibilă decât pentru graficele asociate perechii x2,y2. 5) Caracteristicile liniilor de trasare corespunzătoare perechii x1,y1 pot fi totuşi modificate prin specificarea unor noi valori pentru proprietăţile obiectelor grafice ai căror identificatori sunt conţinuţi în variabila h1. Se poate astfel specifica, spre exemplu: culoarea, prin proprietatea 'Color'; stilul de linie, prin proprietatea 'LineStyle'; grosimea liniei, prin proprietatea 'LineWidth'; tipul de marcator, prin proprietatea 'Marker'; dimensiunea marcatorului, prin proprietatea 'MarkerSize'. Valorile acceptate pentru 'Color', 'LineStyle' şi 'Marker' sunt şiruri de caractere ce conţin simbolurile prezentate în tabelul 1 din lucrarea 2. În plus, pentru proprietatea 'Color' poate fi folosit şi vectorul RGB cu 3 componente având valori cuprinse între 0 şi 1 care reprezintă ponderea culorilor roşu, verde şi albastru în culoarea dorită. Pot fi astfel obţinute şi nuanţe de culori. 6) Pentru stabilirea valorii unei proprietăţi a oricărui obiect grafic, se apelează funcţia set, care are sintaxa set(identificator,'nume_proprietate', valoare_proprietate)
Exemple: set(h1,'Color',[1 0.4 0.6])
- asociază culoarea roz reprezentării grafice cu
identificatorul h1; set(h2,'Color','g')
- asociază culoarea verde reprezentării grafice cu
identificatorul h2; set(h1(2),'LineStyle',':') - stabileşte tipul de linie punctată pentru reprezentarea grafică cu identificatorul h1(2), care este al doilea grafic specificat în perechea de date x1,y1; set(h1(1),'LineWidth',2) - stabileşte valoarea 2 pentru grosimea liniei cu care s-a realizat reprezentarea grafică cu identificatorul h1(1), care este primul grafic specificat în perechea de date x1,y1; 7) Pentru a obţine valoarea curentă a unei proprietăţi se apelează funcţia get cu următoarea sintaxă: get (identificator, ' nume_proprietate' )
4.1.5. Reprezentarea grafică a poligoanelor Pentru a reprezenta grafic un poligon plin cu o anumită culoare, se foloseşte funcţia fill cu una din sintaxele de mai jos. fill(x,y,'c') fill(x,y,c) h = fill(x,y,c)
Argumentele x şi y sunt vectori ce conţin coordonatele x, respectiv y ale vârfurilor poligonului. Al treilea argument poate fi un caracter din lista de culori sau un vector cu trei componente [r g b], componentele vectorului fiind numere reale în intervalul [0 1] cu 8
semnificaţia ponderii culorilor de bază (roşu, verde şi albastru) în culoarea respectivă. În acest ultim caz, pot fi obţinute şi nuanţe de culori. Corespondenţa dintre culorile de bază şi forma vectorului [r g b] este cea din tabelul 2. Simbol [r g b] y [1 1 0] m [1 0 1] c [0 1 1] r [1 0 0] g [0 1 0] b [0 0 1] w [1 1 1] k [0 0 0] Tab.2 Corespondenţa dintre simbolurile culorilor de bază şi vectorii [r g b]
Dacă al treilea argument este un vector c cu aceeaşi dimensiune ca x şi y, elementele acestuia sunt scalate şi utilizate apoi ca indici într-o matrice care specifică culorile vârfurilor. Culorile dintre vârfuri sunt obţinute prin interpolare biliniară a culorilor vârfurilor. În urma apelului, este creat un obiect grafic de tip “patch”. Dintre proprietăţile acestui tip de obiect grafic se exemplifică următoarele: EdgeColor: [ none | flat | interp ] -or- {a ColorSpec}- culoarea liniei de contur FaceColor: [ none | flat | interp ] -or- {a ColorSpec} – culoarea de umplere LineStyle: [ {-} | -- | : | -. | none ] -tipul liniei de contur LineWidth - grosimea liniei de contur numai dacă linia este continuă Marker: [ + | o | * | . | x | square | diamond | v | ^ | > | < | pentagram | hexagram | {none} ] marcatorii din vârfuri MarkerEdgeColor: [ none | {auto} | flat ] -or- a ColorSpec - culoarea liniei de contur a marcatorilor MarkerFaceColor: [ {none} | auto | flat ] -or- a ColorSpec - culoarea de umplere a marcatorilor MarkerSize – dimensiunea marcatorilor Vertices - matrice de dimensiunea n x 2 cu cele n coordonate ale vârfurilor Xdata – vectorul cu abscisele vârfurilor Ydata – vectorul cu ordonatele vârfurilor UIContextMenu – meniu contextual asociat Visible: [ {on} | off ] - vizibilitatea
Reprezentarea grafică a mai multor poligoane, printr-un singur apel al funcţiei fill, se face cu una din sintaxele: fill(x1,y1,'c1',x2,y2,'c2',...) fill(x1,y1,c1,x2,y2,c2, ...) h = fill(...)
Fiecare poligon este specificat printr-un triplet x, y, c, cu semnificaţia precizată anterior.
4.2. Reprezentarea grafică a funcţiilor predefinite între limite impuse Pentru reprezentarea grafică a uneia sau mai multor funcţii predefinite de MATLAB sau conţinute în fişiere funcţie utilizator (M – files), între limite specificate, se poate apela funcţia fplot cu una din sintaxele de mai jos. În toate sintaxele, primul argument este şirul de caractere ce reprezintă numele funcţiei, iar al doilea un vector ale cărui elemente sunt limitele inferioară şi superioară ale abscisei şi eventual ale ordonatei. 9
1) fplot('fun', limite) reprezintă grafic funcţia fun între limitele specificate de argumentul limite. Vectorul limite poate fi de forma [xmin xmax] dacă se impun doar limitele abscisei sau de forma [xmin xmax ymin ymax] dacă se impun şi limitele ordonatei. Exemplu: fplot('cos(x)', [0 2*pi 0 1]) reprezintă grafic funcţia cos(x) pentru x∈ [0, 2π], afişând doar porţiunea din grafic pentru care cos(x)∈ [0, 1]. 2) fplot('fun', limite, tol ), unde tol <1 permite, faţă de prima sintaxă, specificarea toleranţei relative acceptate la reprezentare. Implicit, aceasta este 2e-3, adică 0,2%. Toleranţa determină numărul maxim de paşi utilizaţi la plotare pentru axa x (numărul de puncte prin care se trasează funcţia) cu relaţia [(1/tol)+0,5] + 1 , în care [ ] semnifică operatorul parte întreagă. Numărul implicit de paşi este astfel 501. 3) fplot('fun', limite, N ), unde N≥ 1 permite, specificarea numărului de intervale în care este împărţit domeniul absciselor. Astfel, numărul de puncte utilizate la trasare va fi (N + 1). Pasul maxim va fi astfel (1/N)*(xmax xmin). În scopul realizării unei reprezentări grafice corecte, în zonele în care derivata îşi schimbă rapid valoarea, este utilizat în mod implicit un pas mult mai mic (pas adaptiv), indiferent de valoarea specificată în argumentul N≥ 1. 4) fplot('fun', limite, 'culoare_linie_marcator') permite, în plus faţă de sintaxa 1), specificarea culorii de reprezentare şi/sau a tipului de linie şi/sau marcator, printr-un şir de maxim 3 caractere, ca la apelul funcţiei plot. Exemplu: fplot('cos(x)', [0 2*pi], 'r:o') 5) fplot('fun', limite, … ) acceptă combinaţii ale argumentelor tol, N, 'culoare_linie_marcator' în orice ordine. 6) [X, Y] = fplot('fun', limite … ) nu afişează nici o reprezentare grafică, dar are ca efect crearea variabilelor X şi Y care conţin valorile absciselor, respectiv ordonatelor funcţiei Y = fun(X). Reprezentarea grafică se poate face ulterior cu funcţia plot. Utilizând funcţia fplot pot fi realizate şi reprezentări grafice multiple pentru acelaşi domeniu al absciselor. Pentru aceasta, există două posibilităţi. - Se specifică pentru primul argument un şir de caractere ce conţine funcţiile de reprezentat simultan, care să poată fi evaluat cu funcţia eval. Exemplu: fplot('[cos(x) sin(x)]',[0 2*pi]) va reprezenta simultan funcţiile sin(x) şi cos(x) pentru x∈[0, 2π]. - Se creează o funcţie utilizator (un M - file) având ca parametru de ieşire o matrice, urmărindu-se ca fiecare coloană a acesteia să reprezinte valorile câte unei funcţii de reprezentat. La apelul funcţiei fplot, ca prim argument, se specifică numele funcţiei (care este şi numele fişierului .m) - Exemplu: function y=f(x) y(:,1) = sin(x(:)); y(:,2) = cos(x(:)); iar apoi, fplot('f' ,[0 2*pi])
4.3. Reprezentări grafice dinamice 2D Executarea unei reprezentări grafice 2D poate fi însoţită de afişarea unui marker (cometă) format dintr-un cerculeţ urmat de un segment de dreaptă (corpul cometei), care urmăreşte traiectoria. Se obţine astfel un grafic animat (dinamic). Acest efect se obţine folosind funcţia comet cu una din sintaxele de mai jos. - comet(y) - realizează reprezentarea dinamică a vectorului y (elementele vectorului funcţie de indexul acestora). 10
-
comet(x,y) - realizează reprezentarea dinamică a vectorului y în funcţie de vectorul x. comet(x,y,p) - face aceeaşi reprezentare ca sintaxa anterioară, dar permite specificarea lungimii corpului cometei ca fiind p∗length(y). Valoarea implicită a lui p este 0.1. Remarci: 1) Nu se pot obţine reprezentări grafice dinamice multiple (dacă unul din primele două argumente este o matrice, nu se obţine o reprezentare grafică multiplă ca şi cu funcţia plot). 2) Reprezentarea grafică realizată, cu excepţia cometei, nu pot fi tipărite (sunt invizibile) şi nu vor fi afişate dacă sunt copiate în altă parte. De asemenea, aceasta va dispărea la redimensionarea figurii sau la încercarea de afişare a detaliilor cu comanda zoom.
4.4. Reprezentări grafice speciale 2D 4.4.1. Reprezentarea grafică în coordonate polare Reprezentarea grafică în coordonate polare se realizează cu funcţia polar, apelată cu una din sintaxele: - polar(theta,rho) - polar(theta,rho,cul_linie) Primul argument (theta) trebuie să fie vectorul care conţine unghiurile faţă de direcţia pozitivă a axei x, exprimate în radiani, ale componentelor vectorului rază (rho). Cei doi vectori trebuie deci să aibă aceeaşi dimensiune. Sistemul de axe afişat şi reţeaua grid vor fi cele specifice coordonatelor polare. Cel de-al treilea argument (opţional) permite precizarea culorii, tipului de linie şi de marcator, utilizate la reprezentare, aceleaşi cu cele de la funcţia plot. Exemplu: t = 0:0.01:2*pi; polar(t,sin(2*t).*cos(2*t),'--r')
5. Controlul modului de afişare a sistemului de axe Obiectul de tipul “Axes” este “copil” al obiectului de tip “Figure” şi poate fi “tatăl” a şase tipuri de obiecte grafice: “Line”, „Text”, „Surface”, „Image”, „Patch” şi “Light”. Un obiect de tipul “Axes” se poate crea astfel: - în mod automat, la crearea unuia dintre copiii săi, dacă nu există un sistem de axe curent în care să se facă afişarea; 11
-
explicit, cu comanda axes, care permite afişarea unui sistem de axe într-o poziţie specificată şi având dimensiuni specificate; sintaxa comenzii este: axes('Position',[xinitial yinitial lungimex lungimey])
Elementele vectorului [xinitial yinitial lungimex lungimey] sunt exprimate în unitaţi normalizate şi măsurate faţă de colţul din stânga jos al ferestrei figură curente. axes
– creează un sistem de axe cu poziţia şi dimensiunile implicite (umple fereastra
figură). h = axes(...) axes(h)
– reţine identificatorul obiectului creat în variabila h.
– face ca sistemul de axe cu identificatorul h să fie cel curent.
Obs. Identificatorul obiectul grafic “axes” curent este gca.
5.1. Controlul modului de prezentare a spaţiului dreptunghiular asociat sistemului de axe În acest sens, există o serie de proprietăţi ale obiectului grafic axe şi valori posibile ale acestora. 1) 'Box' 'on' /'off' specifică încadrarea sau nu a spaţiului destinat reprezentării grafice într-un dreptunghi. 2) 'Position' vector cu 4 componente specifică poziţia şi lungimea axelor în fereastra figură, prin vectorul de forma [xinitial yinitial lungimex lungimey].
Componentele xinitial şi yinitial sunt distanţele, pe orizontală şi verticală, de la colţul din stânga jos al ferestrei figură la colţul din dreapta jos al reprezentării grafice. Componentele lungimex şi lungimey sunt lungimile celor două axe. Unităţile de măsură ale componentelor vectorului poziţie sunt, în mod implicit, unităţile normalizate, pentru care colţul din stânga jos al ferestrei figură are coordonatele (0, 0), iar colţul din dreapta sus are coordonatele (1, 1). Acestea pot fi schimbate prin proprietatea 'units'. 3) 'Units' 'pixels'/'normalized'/'inches'/'centimeters'/'points' specifică sistemul de unităţi de măsură ce vor fi utilizate la interpretarea proprietăţii 'position'. Indiferent de unităţile specificate, măsurarea se face faţă de colţul din stânga jos al ferestrei grafice. 4) 'color' culoare specificată /'non' specifică culoarea folosită pentru fondul reprezentării grafice din axele curente. 5) 'Visible' 'on' /'off' specifică vizibilitatea sistemului de axe.
5.2. Limitele axelor Pentru reprezentările grafice, MATLAB determină automat limitele axelor pe baza domeniului datelor ce sunt reprezentate. Este permisă totuşi modificarea acestora prin apelarea comenzii axis cu sintaxa axis ([x min ,xm ax ,y min, yma x])
Noile limite pe cele două axe sunt definite în vectorul cu 4 elemente [xmi n,x max ,ym in ,y max] . În acest vector, xmin şi xmax sunt limita inferioară, respectiv superioară iar ymin şi ymax sunt limita inferioară, respectiv superioară pentru ordonată.
12
pentru abscisă,
Dacă se doreşte ca unele limite să fie autoscalate, în vectorul argument, la poziţia respectivă se foloseşte variabila Inf pentru o limită superioară, respectiv -Inf pentru o limită inferioară. Exemplu: axis([-Inf 2 3 Inf]) Acelaşi efect se obţine specificând pentru proprietăţile 'xlim', respectiv 'ylim' ale obiectului axe câte un vector de forma [xmin xmax], respectiv [ymin ymax]. Exemplu: set(gca,'xlim',[-Inf 2]) set(gca,'ylim',[3 Inf])
Pentru a determina autoscalarea reprezentării grafice curente, prin alegerea de către sistemul MATLAB a celor mai bune limite, astfel încât reprezentarea să fie integrală, se foloseşte sintaxa axis('auto') sau axis auto
5.3. Gradarea axelor MATLAB localizează marcajele de gradare pe axe şi valoarea gradaţiilor în funcţie de valorile extreme ale datelor de reprezentat. Modul de gradare al celor două axe poate fi însă schimbat modificând valorile proprietăţilor 'xtick', respectiv 'ytick' ale obiectului grafic axe ("axes"). Pentru acestea, se specifică vectori ale căror componente reprezintă valoarea gradaţiilor ce vor fi utilizate pentru axe. Setarea acestor proprietăţi se face cu comanda set. Exemple:
set(gca,'xtick',2:10) set(gca,'ytick',[2 2.1 2.2 2.4 2.5])
Specificând intervalele de gradare a axelor, nu pot fi modificate limitele axelor. Astfel, valorile specificate în vectori care depăşesc limitele axelor nu vor fi afişate. Referitor la liniuţele folosite la gradarea axelor, sunt disponibile următoarele proprietăţi şi valori posibile ale acestora: -
'ticklength'
vector cu două elemente
care specifică lungimea liniuţei de gradare prin raportul dintre lungimea ei şi lungimea axei celei mai lungi. Primul element al vectorului se referă la reprezentările 2D, iar al doilea la cele 3D. Vectorul implicit este [0.01 0.025]. -
'tickdir'
'in' /'out'
care precizează orientarea liniuţelor de gradare spre interior ('in') sau spre exterior ('out'). -
'xMinortick' 'yMinortick'
'on' /'off' 'on' /'off'
care activează sau nu afişarea liniuţelor de gradare secundare (între cele principale). Acestea sunt distanţate automat, în funcţie de spaţiul dintre liniuţele de gradare principale.
5.4. Aspectul sistemului de axe În mod implicit, MATLAB afişează graficele într-un sistem rectangular de axe poziţionate în fereastra figură astfel încât spaţiul acesteia să fie utilizat în mod optim. Modificarea simultană a modului de afişare a celor două axe se realizează cu comanda axis astfel: a) axis('square') sau axis square face ca axele x şi y să aibă aceeaşi lungime (chenarul care le încadrează să fie un pătrat). b) axis('equal') sau axis equal determină aceeaşi factori de scală pentru ambele axe (o unitate de pe axa x va fi egală cu o unitate de pe axa y). Dacă, în plus, se doreşte ca reprezentarea grafică să fie complet inclusă în sistemul de axe, se foloseşte sintaxa axis('equal', 'tight') sau axis equal tight sau axis normal
c) axis('normal')
13
rescalează reprezentarea grafică curentă astfel încât aceasta să fie cuprinsă integral în dreptunghiul utilizat la reprezentare, anulând efectele sintaxelor axis('square') şi axis('equal'). d) axis('off')
sau axis off şterge sistemul de axe şi etichetele acestora; e) axis('on') sau axis on reface sistemul de axe şi etichetele acestora; f) axis('xy') sau axis xy realizează reprezentarea grafică în coordonate carteziene, cu originea în colţul din stânga jos; g) axis('ij') sau axis ij realizează reprezentarea grafică în coordonate matriceale, cu originea în colţul din stânga sus (axa i este verticală şi orientată în jos, iar axa j este orizontală şi orientată spre dreapta). Pentru controlul independent al aspectului fiecărei axe, se accesează şi se modifică unele proprietăţi ale obiectului axe. Se vor prezenta cele referitoare la axa x, pentru celelalte axe lucrurile fiind similare. 'Xcolor' 'simbolculoare' / vector [r g b] permite specificarea culorii cu care va fi afişată axa x şi etichetele acesteia prin şirul de caractere reprezentând simbolul culorii sau prin vectorul [r g b]. 'Xdir' 'normal' / 'reverse' stabileşte direcţia de creştere a valorilor numerice pe axă: de la stânga la dreapta ('normal') sau de la dreapta la stânga ('reverse'). 'Xscale' 'linear' / 'log' stabileşte modul de scalare a axelor. 'Xaxislocation' 'bottom' / 'top' stabileşte poziţia axei Ox 'Yaxislocation' 'left' / 'right' stabileşte poziţia axei Oy.
5.5. Afişarea şi controlul reţelei ajutătoare grid Gridul este o reţea de linii verticale şi orizontale trasate pe grafic prin fiecare punct de gradare a axelor care uşurează citirea datelor. Afişarea şi ştergerea acesteia se fac cu comanda grid care lucrează ca un comutator. Se mai pot folosi sintaxele: grid on - pentru afişare grid off - pentru ştergere. grid minor - lucrează ca un comutator şi afişează/ascunde liniuţele grid secundare. grid (h,’on’)- activează reţeaua grid principală în sistemul de axe cu identificatorul h. Controlul afişării liniilor reţelei grid se realizează prin următoarele proprietăţi ale obiectului grafic axe: 'xgrid' 'on' /'off' care afişează (on) sau nu (off) liniile grid perpendiculare pe axa x, prin fiecare diviziune de gradare a axei (în mod similar, pentru axa y, există proprietatea 'ygrid'); 'gridlinestyle' 'tiplinie' care stabileşte tipul de linie folosit pentru reţeaua grid (continuă, întreruptă, linie-punct sau din puncte), prin caracterele corespunzătoare, aceleaşi cu cele utilizate la stabilirea liniei de trasare a graficelor. 'minorgridlinestyle' 'tiplinie' care stabileşte tipul de linie folosit pentru reţeaua grid secundară (continuă, întreruptă, liniepunct sau din puncte).
14
6. Adăugarea succesivă a reprezentărilor grafice într-un sistem de axe existent (suprapunerea succesivă ) Utilizând comanda hold se pot adăuga grafice alături de altele existente într-un sistem de axe. hold on - care va determina adăugarea graficelor următoare peste cel curent, fără a-l şterge, producându-se o rescalare a axelor dacă este cazul; hold off - care va determina revenirea la setarea iniţială, conform căreia, la apelul unei funcţii de reprezentare grafică, graficul anterior este şters. După activarea mecanismului de suprapunere succesivă, oricare ar funcţia apelată pentru o nouă reprezentare grafică, aceasta nu mai schimbă modul de scalare a axelor.
7. Divizarea ferestrei grafice Sistemul MATLAB permite împărţirea ferestrei figură în mai multe ferestre grafice şi afişarea în fiecare a câte unui sistem de axe. Crearea acestor ferestre şi controlul lor este realizat de funcţia subplot care are mai multe sintaxe. 1) subplot(m,n,i)
împarte fereastra figură în m x n zone dreptunghiulare de afişare (m pe fiecare coloană şi n pe fiecare linie) şi specifică fereastra cu numărul i ca fiind cea curentă (în care se va face următoarea reprezentare grafică). Zonele de afişare sunt numerotate de la stânga la dreapta, începând cu linia de sus. Dacă fereastra figură a fost împărţită anterior, apelul funcţiei face numai specificarea subferestrei curente în care se va crea noul sistem de axe. 2) subplot('Position',[xinitial yinitial lungimex lungimey])
creează un nou sistem de axe în poziţia şi cu dimensiunile precizate în vectorul [xinitial yinitial lungimex lungimey]. 3) h = subplot(...)
salvează identificatorul noului sistem de axe în variabila h. 4) subplot(h)
permite ca sistemul de axe cu identificatorul h să fie cel curent. În cazul în care apelul unei funcţii subplot determină suprapunerea noului sistem de axe peste unul existent, are loc ştergerea primului.
8. Vizualizarea detaliilor Pentru a vizualiza porţiuni ale reprezentării grafice curente se foloseşte comanda zoom. După primul apel al acesteia sau folosind sintaxa zoom on, se pot realiza efectele: - folosind butonul stâng al mouse –ului este permisă specificarea zonei grafice ce va fi detaliată; - la fiecare apăsare a butonului stâng al mouse –ului limitele axelor vor fi schimbate cu un factor de 2, permiţând evidenţierea detaliilor; - printr-o dublă apăsare a butonului stâng al mouse –ului, se revine la limitele iniţiale. După al doilea apel al acesteia sau folosind sintaxa zoom off se renunţă la aceste efecte. Cu sintaxa zoom out, se revine la afişarea reprezentării grafice iniţiale.
15
9. Ştergerea axelor curente Pentru ştergerea reprezentărilor grafice din axele curente se poate folosi funcţia cla cu două sintaxe posibile: 1) cla - va şterge toate graficele trasate în sistemul de axe curent; 2) cla reset - în plus faţă de prima sintaxă, resetează toate proprietăţile obiectului axe la valorile implicite, cu excepţia poziţiei acestuia. 10. Afişarea textului în spaţiul reprezentării grafice Sistemul grafic MATLAB oferă multiple facilităţi privind afişarea textelor. Acestea pot fi accesate fie prin comenzi MATLAB, fie utilizând editorul de plot. Orice efect obţinut cu editorul de plot poate fi obţinut şi prin apelul comenzilor MATLAB. Există însă efecte, ca spre exemplu afişarea unor etichete proprii pentru marcatorii de gradare a axelor, care nu pot fi obţinute cu ajutorul editorului de plot. Atunci când se decide utilizarea comenzilor grafice MATLAB sau a editorului de plot trebuie ţinut seama că există următoarele diferenţe: - adnotările create prin apelul de comenzi sunt obiecte grafice ancorate de sistemul de axe, deci se vor muta odată cu acesta; - adnotările create cu editorul de plot sunt independente de sistemul de axe; - dacă se creează o adnotare cu editorul de plot, aceasta poate fi accesată pentru editarea ulterioară cu ajutorul unei comenzi folosind identificatorul gco (”get current object”); - dacă se utilizează caractere speciale în text (simboluri matematice sau litere greceşti) şi acestea sunt create cu opţiunea Symbol din fereastra de dialog Edit Font Properties a editorului de plot, textul obţinut nu mai poate fi editat ulterior prin comenzi MATLAB. 10.1. Utilizarea comenzilor MATLAB pentru afişarea textelor în orice poziţie a sistemului de axe Pentru sistemul grafic MATLAB, orientat pe obiecte, orice adnotare în spaţiul sistemului de axe este un obiect grafic de tip text, care este copil al obiectului grafic axes. Inserarea unui text în orice poziţie a spaţiului ferestrei figură care conţine un sistem de axe se poate realiza prin comenzile text şi gtext. Utilizarea comenzii text Pentru a crea un obiect grafic de tip text într-o poziţie precizată în cadrul sistemului de axe, se apelează comanda text. 1) text(x,y,'text')
afişează şirul de caractere 'text' începând cu poziţia dată de coordonatele (x,y) exprimate în unităţile de măsură ale ultimului grafic. 2) text(x,y,'text','NumeProprietate',ValoareProprietate....)
permite, în plus faţă de sintaxa precedentă, utilizarea unor valori specificate pentru anumite proprietăţi ale obiectului text, încă de la crearea acestuia. În tabelul 3 sunt prezentate câteva din proprietăţile obiectelor grafice de tip text şi valorile posibile ale acestora. Se precizează câteva aspecte. - În mod implicit, coordonatele prin care se specifică locaţia textului sunt exprimate în unitatea de măsură a datelor din sistemul de axe şi sunt raportate la originea acestuia. - Proprietăţile VerticalAlignment şi HorizontalAlignment controlează poziţia textului faţă de punctul precizat ca locaţie a acestuia. Figurile 1 şi 2 ilustrează opţiunile fiecărei proprietăţi şi corespondenţa acestora cu plasarea textului.
16
Fig. 1 Efectele valorilor proprietăţii HorizontalAlignment în cazul în care VerticalAlignment este setată la valoarea Middle (valoarea implicită)
Fig. 2 Efectele valorilor proprietăţii VerticalAlignment în cazul în care HorizontalAlignment este setată la valoarea Left (valoarea implicită)
Descrierea proprietăţii
Valoarea proprietăţii
Numele proprietăţii Poziţia şi dimensiunea obiectului grafic text (dreptunghiului care încadrează textul).
Valori: vector cu 4 elemente [left, bottom, width, height] Proprietate accesibilă doar pentru citire.
HorizontalAlignment
Alinierea pe orizontală o şirului de caractere care formează textul
Valori: left, center, right Implicit: left
Position
Poziţia dreptunghiului definit prin proprietatea Extent
Valori: vector coordonate [x, y, z] exprimat în unităţile de măsură specificate prin proprietatea Units
Rotation
Orientarea obiectului text
Valori: scalar (grade) Implicit: 0
Units
Unităţile de măsură pentru proprietăţile Extent şi Position
Valori: pixels, normalized, inches, centimeters, points, data Implicit: data (unitatea de măsură
Extent
folosită pentru datele reprezentate în sistemul de axe părinte)
VerticalAlignment
Alinierea pe verticală o şirului de caractere care formează textul
Valori: top, cap, middle, baseline, bottom Implicit: middle
FontAngle
Înclinarea caracterelor
Valori: normal, italic, oblique Implicit: normal
FonfName
Familia de fonturi
Valori: un şir de caractere semnificând un font acceptat de sistem sau şirul de caractere FixedWidth Implicit: Helvetica
FontSize
Dimensiunea fontului
Valori: dimensiune exprimtată în măsură exprimată prin proprietatea Implicit: 10 points
FontUnits
Unitatea de măsură pentru proprietatea FontSize
Valori: points, normalized, inches, centimeters, pixels Implicit: points
FontWeight
Grosimea caracterelor
Valori: light, normal, demi, bold Implicit: normal
Color
Culoarea textului
Valori: vector [R G B] sau nume predefinit Implicit: white
Tab. 3 Proprietăţi de bază ale obiectelor de tip text
17
unitatea de FontUnits
-
Există şi posibilitatea de a crea, printr-un singur apel al funcţiei text, mai multe obiecte de tip text. Astfel: o Pentru a afişa acelaşi text în mai multe locaţii din sistemul de axe, argumentele x şi y sunt vectori ce conţin coordonatele punctelor de referinţă pentru plasarea textului; o Pentru a afişa texte diferite în locaţiile determinate de perechile abscisă-ordonată, x şi y vor fi vectori de aceeaşi dimensiune, iar pentru argumentul al treilea există variantele: matrice de tip char array având numărul de linii egal cu dimensiunea vectorilor x şi y, fiecare linie conţinând textul dorit pentru locaţia corespunzătoare; Exemplu: text([0.1,0.2,0.3],[0.1,0.2,0.3], [’text1’ ;’text2’ ;’text3’])
Există limitarea că numărul de caractere ale liniilor trebuie să fie acelaşi. vector linie de tip char array, textele dorite a fi afişate în fiecare poziţie fiind separate prin caracterul “|”. Exemplu : text([0.1,0.2,0.3],[ 0.1,0.2,0.3], ’text1|t2|t3’) În acest caz, numărul caracterelor specificate între “|” poate fi diferit. vector de tip cell array, având dimensiunea egală cu cea a vectorilor x şi y. Exemplu:
-
text([0.1,0.2,0.3],[ 0.1,0.2,0.3],{ ’text1’ ;’t2’ ;’t3’}) text([0.1,0.2,0.3],[ 0.1,0.2,0.3],{ ’text1’ ,’t2’ ,’t3’})
Numărul de caractere specificat pentru fiecare celulă a vectorului poate fi diferit. Se pot afişa mai multe linii de text într-o anumită locaţie dacă şirurile de caractere ale liniilor de text formează liniile sau coloanele unui vector de tip cell array sau liniile unei matrici de tip char array. Exemple:
text(0.1, 0.1,{'text1' 't2' 't3'}) text(0.1, 0.1,{'text1'; 't2'; 't3'}) text(0.1, 0.1,['text1'; 'text2'; 'text3'])
3) h = text(...) returnează, în vectorul coloană h, identificatorii obiectelor text ce vor fi create prin această comandă. Indiferent de forma de apel a funcţiei (argumentele specificate), aceasta acceptă reţinerea identificatorilor într-o variabilă. Utilizarea comenzii gtext Pentru o plasare interactivă a textului, cu ajutorul mouse-ului, se poate folosi comanda gtext('text')
Aceasta afişează şirul de caractere 'text' în câmpul grafic, aşteaptă deplasarea acestuia pe grafic cu ajutorul mouse –ului, plasarea realizându-se la apăsarea oricărui buton al mouse – ului sau a unei taste. 10.2. Etichetarea axelor Precizarea şi afişarea semnificaţiei mărimilor reprezentate pe fiecare axă se face cu funcţiile: în
xlabel('text') ylabel('text') care text este şirul de caractere
care va fi afişat. Deoarece textul afişat cu aceste comenzi constituie pentru sistemul grafic MATLAB un obiect grafic de tip text, prin modificarea proprietăţilor acestui obiect pot fi stabilite caracteristicile textului (tab.1). Valorile proprietăţilor pot fi specificate încă de la crearea obiectului text. Exemplu: xlabel('x','fontname','TimesNewRoman','fontsize',12,'color',[1 0.4 0.6])
18
Pentru afişarea etichetelor pe axe există şi proprietăţile 'xlabel', respectiv 'ylabel' cărora trebuie să li se asocieze identificatorii obiectelor text ce se doresc a fi afişate. Exemple de sintaxe valide: set(gca,’xlabel’, text(x,y,’eticheta’)) set(gca,’xlabel’, h)
Pentru a specifica textul care să fie utilizat alături de fiecare linie de gradare a axelor, se modifică valorile proprietăţilor 'xticklabel', respectiv 'yticklabel', ale obiectului axe. Valoarea acceptată pentru o astfel de proprietate este un vector de tip cell array sau o matrice de tip char array, componentele acestora conţinând şirurile de caractere ce se doresc a fi folosite pentru etichetare. Exemple: Oricare din sintaxele set(gca, 'xticklabel', {'d1', 'd2'}) set(gca, 'xticklabel', ['d1'; 'd2']) va înlocui etichetele numerice generate de MATLAB în mod implicit, cu etichetele d1 şi d2 care vor fi afişate succesiv sub liniile de gradare ale axei x.
Dacă dimensiunea vectorului sau matricii specificate este mai mică decât numărul de gradaţii al axei, textele vor fi repetate ciclic. 10.3 Afişarea titlului reprezentării grafice Pentru fiecare sistem de axe se poate specifica un titlu, care va fi afişat deasupra spaţiului delimitat de sistemul de axe şi centrat pe orizontală. Acesta va fi plasat cu funcţia title care poate avea oricare din sintaxele de mai jos. 1)
2)
title('text') în care 'text' este şirul de caractere ce va fi afişat. title('text','NumeProprietate',ValoareProprietate....)
specifică, la creare, valorile unor proprietăţi ale obiectului grafic de tip text pe care comanda îl creează. 3) h = title(...) furnizează, în variabila h, identificatorul obiectul text creat. Obs. Pentru că una din proprietăţile sistemului de axe are este 'title', un titlu poate fi asociat sistemului de axe prin precizarea valorii acestei proprietăţi. Exemple de sintaxe valide: set(gca,’title’, text(x,y,’TITLUL DORIT’)) set(gca,’xlabel’, h)
10.4 Inserarea caracterelor speciale în obiectele de tip text Obiectele de tip text (inclusiv titluri şi etichete de axe) suportă un subset de caractere TeX (tabelul 4) care permit utilizarea simbolurilor (litere greceşti şi simboluri matematice). Proprietatea Interpreter a obiectelor de tip text controlează modul de interpretare a caracterelor. Astfel, dacă valoarea acesteia este Tex (valoare implicită), codurile de caractere TEX sunt interpretate ca atare, cu condiţia ca secvenţa TEX să fie precedată de caracterul "\". Dacă se setează proprietatea Interpreter la valoarea none, MATLAB interpretează caracterele speciale în mod literar. Secvenţa de caractere TEX
Simbolul
Secvenţa de caractere TEX
Simbolul
Secvenţa de caractere TEX
\alpha
\upsilon
\sim
\beta
\phi
\leq
\gamma
\chi
\infty
\delta
\psi
\clubsuit
\epsilon
\omega
\diamondsuit
19
Simbolul ~
\zeta
\Gamma
\heartsuit
\eta
\Delta
\spadesuit
\theta
\Theta
\leftrightarrow
\vartheta
\Lambda
\leftarrow
\iota
\Xi
\uparrow
\kappa
\Pi
\rightarrow
\lambda
\Sigma
\downarrow
\Upsilon
\circ
º
\nu
\Phi
\pm
±
\xi
\Psi
\geq
\pi
\Omega
\propto
\rho
\forall
\partial
\sigma
\exists
\bullet
•
\varsigma
\ni
\div
÷
\tau
\cong
\neq
\equiv
\approx
\aleph
\Im
\Re
\wp
\otimes
\oplus
\oslash
\cap
\cup
\supseteq
\supset
\subseteq
\subset
\int
\in
\o
\rfloor
\lceil
\nabla
\lfloor
\cdot
·
\ldots
...
\perp
\neg
¬
\prime
'
\wedge
\times
x
\0
\rceil
\surd
\mid
|
\vee
\varpi
\copyright
©
\langle
\rangle
µ
\mu
Tab. 4 Lista secvenţelor de caractere TEX utilizate pentru afişarea simbolurilor
De asemenea, există secvenţe TEX prin care se pot controla caracteristicile fontului utilizat: • •
\bf - font bold \it - font italic 20
• • • •
\sl - font oblic (când este disponibil) \rm - font normal \fontname{fontname} – specifică numele familiei de fonturi utilizate \fontsize{fontsize} – specifică dimensiunea fontului în FontUnits.
Efectul acestor caracteristici rămâne numai până la sfârşitul şirului de caractere sau numai în interiorul contextului definit de acolade{ }. Pentru a utiliza indici şi exponenţi, se folosesc caracterele " _" , respectiv " ^ ", modificarea afectând textul cuprins între acoladele imediat următoare. Exemplu de utilizare a caracterelor TEX: Asociind unui şir de caractere secvenţa '\bullet\leftarrow\fontname{times}0.25{\ite}^{-0.005{\itt}} '
textul afişat va fi
.
10.5 Afişarea legendei Pentru a afişa o legendă asociată graficelor din sistemul de axe curent se apelează comanda legend. Referitor la aceasta, există mai multe sintaxe. legend('text1',' text2',...)
1)
afişează o legendă în sistemul de axe curent utilizând şirurile de caractere specificate pentru a eticheta obiectele grafice create în sistemul de axe. Dacă numărul obiectelor grafice este mai mare decât al textelor specificate, vor apărea în legendă doar etichetele pentru care s-au specificat textele. Dacă s-au specificat mai multe texte pentru etichete decât numărul obiectelor grafice, în legendă vor apărea toate textele, iar cele care nu au corespondent în obiecte grafice nu au în faţă nici un model de linie sau marcator. Legenda este poziţionată în interiorul spaţiului delimitat de sistemul de axe, în colţul din dreapta sus. 2)
legend(h, 'text1',' text2',...)
afişează o legendă, asociind componentelor vectorului h al identificatorilor obiectelor grafice care se doresc a fi etichetate în legendă textele specificate în şirurile de caractere 'text1',' text2', ... legend(matrice_caractere)
3)
inserează o legendă care va avea liniile matricei şir de caractere drept etichete. Se obţine acelaşi efect ca la sintaxa legend(matrice_caractere(1,:), matrice_caractere(2,:),...). legend(h, matrice_caractere) asociază fiecare linie a matricei matrice_caractere cu obiectul grafic corespunzător
4)
din
vectorul h al identificatorilor. 5)
legend(h_axe,...)
afişează legenda pentru sistemul de axe identificat prin h_axe 6)
legend('off'), legend(h_axe,'off')
şterg legenda din sistemul de axe curent, respectiv din sistemul de axe specificat prin h_axe h_legenda = legend
7)
furnizează, în variabila h_legenda, identificatorul legendei din sistemul de axe curent sau un vector gol dacă nu există o legendă. 8)
legend(...,pos) • • • • •
utilizează argumentul pos pentru a determina unde să fie poziţionată legenda. pos = -1 plasează legenda în afara sistemului de axe, în dreapta acestuia şi sus. pos = 0 plasează legenda în interiorul sistemului de axe, astfel încât să acopere cât mai puţine puncte din reprezentările grafice. pos = 1 plasează legenda în colţul din dreapta sus al sistemului de axe (implicit). pos = 2 plasează legenda în colţul din stânga sus al sistemului de axe. pos = 3 plasează legenda în colţul din stânga jos al sistemului de axe. 21
• 9)
pos = 4 plasează legenda în colţul din dreapta jos al sistemului de axe. [h_legenda,h_object] = legend(...) furnizează identificatorul legendei (h_legenda) şi identificatorii obiectelor grafice (de tip line, text ş.a.) folosite în legendă (h_object). Aceşti identificatori permit modificarea
proprietăţilor respectivelor obiecte grafice. Precizări: - Fiecare sistem de axe poate avea numai o legendă, iar ordinea în care sunt asociate textele cu obiectele grafice este, în mod implicit, cea în care sunt reţinute obiectele în proprietatea Children a obiectului Axes. - Poziţia legendei poate fi modificată uşor, prin tragere cu ajutorul mouse-ului. - Textele asociate etichetelor din legendă pot fi editate după un dublu clic cu mouse stânga pe respectivul text.
11. Reprezentarea grafică 2D cu bare Datele conţinute în vectori sau matrice pot fi reprezentate grafic sub forma unor bare. În general, un grafic cu bare afişează datele ca bare orizontale sau verticale. 11.1. Reprezentarea grafică cu bare verticale Reprezentarea grafică cu bare verticale, pline cu culoare, a valorilor unui vector sau matrice se realizează prin apelul funcţiei bar. De reţinut! Fiecare reprezentare grafică cu bare astfel creată este un obiect grafic de tip “patch”, ca în cazul comenzii fill. Există mai multe sintaxe posibile ale funcţiei bar. •
bar(y)
-
Este sintaxa cea mai simplă (un singur argument), dar cea mai rar folosită pentru că nu poate fi controlată valoarea datelor reprezentate pe abscisă, argumentul funcţiei conţinând doar datele reprezentate pe ordonată. Dacă y este un vector, se va trasa o bară pentru fiecare componentă, având înălţimea valorii componentei şi abscisa egală cu indexul (numărul de ordine al acesteia). Lăţimea barelor este de 0,8 unităţi de reprezentare. Exemplu: secvenţa » a=[2 5 9 12]; » bar(a) ; grid on; are ca efect afişarea reprezentării 15
10
5
0
-
1
2
3
4
Dacă y este o matrice de dimensiunea m x n, vor fi afişate n seturi de bare de aceeaşi culoare (câte una pentru fiecare coloană), fiecare formată din m bare; Exemplu: secvenţa » a=[2 5 9 12;10 8 6 4;3 6 9 12]'; are ca efect crearea matricei
22
2 10 3 5 8 6 a= 9 6 9 4 12 12
iar apelul » bar(a) ; grid on; are ca efect afişarea, cu culori diferite, a trei grafice cu bare, câte unul pentru fiecare coloană 15
10
5
0
•
0
1
2
3
4
5
bar(x,y)
Este cea mai folosită sintaxă, pentru că permite precizarea datelor reprezentate atât pe ordonată, cât şi pe abscisă. - Dacă x şi y sunt vectori de aceeaşi dimensiune, elementele lui x trebuie să fie în ordine crescătoare, sintaxa având ca efect afişarea unei bare pentru fiecare element al lui y în poziţia specificată de elementul cu aceeaşi poziţie din x. Exemplu: secvenţa » x=[2 5 9 12];y=[10 20 5 2]; » bar(x,y); grid on; are ca efect afişarea reprezentării 20 15 10 5 0
-
2
5
9
12
Dacă x este un vector de dimensiunea n, iar y o matrice de dimensiunea n x m, vor fi reprezentate m grafice cu baruri, câte unul pentru fiecare coloană a matricei. Exemplu: secvenţa » x=[2 5 9 12];y=[10 20 5 2;1 2 3 4;2 4 6 8]'; » bar(x,y); grid on are ca efect afişarea reprezentării 20 15 10 5 0
2
5
9
23
12
•
bar(..., latime)
Funcţia bar acceptă ca argument final un număr prin care se specifică lăţimea tuturor barelor şi se controlează separarea acestora în interiorul unui grup. Lăţimea implicită este 0.8, iar dacă nu se specifică argumentul x, barele dintr-un grup au un separator îngust. Dacă se specifică valoarea 1, barele grupului vor fi lipite, iar pentru un număr supraunitar, barele se vor suprapune. •
bar(..., culoare) Argumentul culoare
(un caracter sau un şir de caractere) permite specificarea culorii de reprezentare a barelor, la fel ca la funcţia plot. •
bar(..., stil)
-
-
Prin argumentul stil (un şir de caractere), este permisă specificarea stilului de bare folosit atunci când se reprezintă mai multe grafice cu bare în acelaşi sistem de axe. Există două stiluri posibile de bare: 'group' sau 'grouped' - este stilul implicit, care afişează barele corespunzătoare aceleiaşi abscise grupate în jurul acesteia. Fiecărei linii a matricei y îi corespunde o abscisă şi deci un grup care conţine un număr de bare egal cu numărul de coloane ale matricei. 'stack' sau 'stacked'- afişează barele din grup suprapuse, obţinând astfel doar o bară pentru fiecare linie din y. Înălţimea barei este suma elementelor liniei. Fiecare bară este multicolorată cu culorile corespunzătoare elementelor şi arată ponderea fiecărui element al liniei în sumă. Exemplu: secvenţa » x=[2 5 9 12];y=[10 20 5 2;1 2 3 4;2 4 6 8]'; » bar(x,y ,0.2,'stack'); grid on are ca efect afişarea reprezentării 30
20
10
0
•
2
5
9
12
[xb,yb] = bar(... )
nu reprezintă graficele, dar calculează vectorii xb şi yb astfel încât graficul cu bare să fie trasat ulterior cu funcţia plot(xb,yb). Această sintaxă este utilă atunci când se doreşte un control mai mare asupra graficului, spre exemplu includerea reprezentării cu bare într-o reprezentare grafică mai complexă sau combinarea mai multor grafice cu bare. •
h = bar(... )
înregistrează, în variabila h (de tip scalar sau vector dacă sunt mai multe grafice de tip bar), identificatorii obiectelor de tip “patch” create la apelul comenzii. 11.2. Reprezentarea grafică cu bare orizontale Reprezentarea grafică cu bare orizontale nu este posibilă decât începând cu versiunea MATLAB 5.0. În acest scop, se apelează funcţia barh, sintaxele fiind aceleaşi cu cele ale funcţiei bar. Exemplu: Secvenţa » y=[2 4 6;9 7 5]; » barh(y,'stack'); grid on; 24
realizează reprezentarea grafică de mai jos
APLICAŢIE – Suprapunerea unei reprezentări grafice cu bare cu o reprezentare grafică în coordonate liniare Etape de lucru: • Se pregătesc datele de reprezentat: (x, y1) pentru reprezentarea grafică cu bare şi (x, y2) pentru reprezentarea grafică în coordonate liniare (cu funcţia plot) » x=0:2:10;y1=x.^2;y2=10*y1;
•
• •
•
Se realizează reprezentarea grafică cu bare cu funcţia bar având caracteristicile dorite (culoare, ..) » bar(x,y1,'w'); Se personalizează modul de prezentare a sistemului de axe(etichete pe axe, ..) » xlabel('x');ylabel('y_1'); Se salvează identificatorul sistemului de axe curent într-o variabilă » h1 = gca;
Se creează un nou sistem de axe cu aceeaşi poziţie ca cel anterior » h2 = axes('Position',get(h1,'Position'));
•
Se realizează reprezentarea grafică în coordonate liniare cu funcţia plot şi caracteristicile dorite (culoare, ..)
•
Se stabileşte locaţia axei y a noului sistem de axe la dreapta, caracteristica de a fi transparent (fără culoare) şi de a nu avea etichete la liniuţele de gradare de pe axa x
» plot(x,y2,'k','LineWidth',3)
» set(h2,'YAxisLocation','right','Color','none','XTickLabel',[])
•
Se etichetează axa y a noului sistem de axe » ylabel('y_2');
•
Se afişează reţeaua grid » grid on
Efectul secvenţei anterioare de operaţii va fi următorul:
80
800
60
600
40
400
20
200
y2
1000
y1
100
0
0
2
4
6 x
25
8
10
0
12. Reprezentarea discretă a datelor Reprezentarea grafică a semnalelor discrete, sub forma unor linii verticale terminate cu un marcator (un cerculeţ gol în mod implicit) la extremitatea opusă axei, se realizează cu funcţia stem. În mod implicit, linia de trasare este continuă şi are aceeaşi culoare cu marcatorul. Există mai multe sintaxe posibile. • stem(y) – reprezintă datele conţinute în vectorul y, abscisele fiind indecşii elementelor. Exemplu: secvenţa » y=[2 5 9 12]; » stem(y) » grid on;
are ca efect afişarea reprezentării 15
10
5
0
1
1.5
2
2.5
3
3.5
4
– reprezintă grafic dependenţa y = y(x). Dacă x este un vector linie cu n componente, iar y o matrice de dimensiune n x m, vor fi reprezentate m grafice suprapuse, câte unul pentru fiecare coloană, folosind culorile predefinite în mod ciclic. • stem(x,y, stil_linie) – permite, faţă de sintaxa precedentă, specificarea stilului de linie (pentru liniile verticale), tipului de marcator (pentru marcatorul din capăt) şi a culorii de reprezentare (aceeaşi pentru ambele), ca la funcţia plot. • stem(x,y, 'fill') – determină umplerea cu culoare a marcatorului. Pot fi specificate simultan ambele argumente suplimentare (stil_linie şi 'fill'), fără a avea importanţă ordinea acestora. • h = stem(...) – reţine, în variabila h de tip vector, identificatorii obiectelor grafice create, respectiv a obiectelor de tip “line”. De reţinut! În Matlab 6.5, la apelul funcţiei stem, dacă g este numărul de grafice afişate, vor fi create 2g+1 obiecte grafice de tip “line”, câte unul pentru marcatorii din vârfuri şi liniile verticale (atenţie, aceasta este ordinea) şi încă unul corespunzător datelor [xmin, xmax], [0 0] (o linie orizontală definită de două puncte şi suprapusă peste axa x). Exemplu: secvenţa •
stem(x,y)
» y=[2 5 9 12]; » h=stem(y); grid on; » set(h(1),'color','b','marker','p','markersize',16,'linewidth',1,'markerfacecolor','c') » set(h(2),'color','k','linewidth',3)
are ca efect afişarea reprezentării 12 10 8 6 4 2 0
1
1.5
2
2.5
Observaţie: Nu este admisă o sintaxă de genul [xs,
3
3.5
4
ys]=stem(x,y) , similară funcţiei bar, care să permită reţinerea doar datele de reprezentat, fără a avea efect grafic.
26
13. Reprezentarea graficelor în trepte Reprezentarea în trepte a graficelor este utilă pentru diagramele sistemelor numerice de eşantionare şi prelucrare a datelor. Este ca o reprezentare cu bare alipite, la care lipsesc liniile verticale interne. Această reprezentare se realizează cu funcţia stairs apelată cu una din sintaxele: • stairs(y) – reprezintă graficul în trepte al elementelor vectorului y; Exemplu: secvenţa » y=[2 5 9 12]; » stairs(y) » grid on;
are ca efect afişarea reprezentării 12 10 8 6 4 2
1
1.5
2
2.5
3
3.5
4
• stairs(x,y) - reprezintă grafic, în trepte, dependenţa y = y(x). Dacă x este un vector linie cu n componente, iar y o matrice de dimensiune n x m, vor fi reprezentate m grafice suprapuse, câte unul pentru fiecare coloană. Vor fi folosite culorile predefinite, în mod ciclic. Este permisă specificarea, printr-un argument suplimentar (ca la funcţia plot), a culorii şi liniei de reprezentare. • stairs(x,y,stil_linie ) Observaţie: datele conţinute în vectorul x al absciselor trebuie să fie în ordine crescătoare şi echidistante.
Sintaxele • [xs,ys] = stairs(y) • [xs,ys] = stairs(x,y)
nu realizează nici o reprezentare grafică, dar furnizează vectorii xs şi ys astfel încât plot(xs,ys) să poată trasa graficul în trepte. •
h = stairs(. . .) reţine, în variabila h, identificatorul/identificatorii obiectelor grafice de tip “line” create. De reţinut! Apelul funcţiei stairs determină crearea unuia sau mai multor obiecte de tip
“line” care pot fi modificate ulterior cu editorul de plot sau prin proprietăţile acestora, cu funcţia set. Exemplu: secvenţa » x=0.5:0.5:2.5;y=[10:5:30;20:10:60]'; » h=stairs(x,y); »set(h(1),'color','k','marker','p','markersize',12,'linewidth',1.5,'markerfacecolor','c') » set(h(2),'color','b','marker','o','markersize',10,'linewidth',2) » grid on;
are ca efect afişarea reprezentării 60 50 40 30 20 10 0.5
1
1.5
27
2
2.5
14. Obţinerea coordonatelor punctelor din spaţiul sistemului de axe, utilizând mouse-ul Funcţia MATLAB ginput permite indicarea punctelor din spaţiul ferestrei figură, utilizând mouse-ul pentru poziţionarea cursorului, în scopul obţinerii coordonatelor acestora. Există trei sintaxe posibile ale acesteia. 1)
[x,y] = ginput(n)
permite indicarea succesivă a n puncte şi furnizează coordonatele în vectorii coloană x şi y. Încheierea operaţiei înainte de selectarea celor n puncte se poate realiza apăsând tasta Enter. 2)
[x,y] = ginput
permite reţinerea în vectorii coloană x şi y a coordonatelor unui număr nelimitat de puncte, până la apăsarea tastei Enter. 3)
[x,y,b] = ginput(...)
permite, în plus faţă de celelalte două sintaxe, reţinerea în vectorul b a informaţiilor privind modul cum a fost realizată selectarea punctului. Astfel: - pentru selectare prin apăsarea butonului stâng al mouse-ului, se obţine valoarea 1; - pentru selectare prin apăsarea butonului din mijloc al mouse-ului, se obţine valoarea 2; - pentru selectare prin apăsarea butonului drept al mouse-ului, se obţine valoarea 3; - pentru selectare prin apăsarea unei taste, se obţine un număr semnificând codul ASCII asociat; Observaţii - Dacă la apelul funcţiei ginput, nu există un sistem de axe în fereastra figură, la indicarea primului punct, este creat în mod automat un sistem de axe cu limitele implicite (valorile minime 0 şi valorile maxime 1). - Dacă se indică puncte din mai multe sisteme de axe, coordonatele acestora sunt raportate la sistemele de axe respective.
15. Reprezentări grafice 3D Sistemul MATLAB oferă o serie de funcţii pentru crearea şi controlul modului de afişare a graficelor în spaţiul tridimensional. 15.1. Reprezentarea grafică tridimensională a datelor conţinute în vectori sau matrice Pentru a afişa sub forma unui grafic tridimensional datele conţinute în trei vectori sau matrice se foloseşte funcţia plot3 cu una din sintaxele: plot3(X1,Y1,Z1,...) plot3(X1,Y1,Z1, Specificare_Atribute,...) plot3(..., 'Nume_Proprietate', Valoare_Proprietate, ...) h = plot3(...) Funcţia plot3(X1,Y1,Z1,...), unde X1, Y1, Z1 sunt vectori de aceeaşi
dimensiune, afişează, în spaţiul tridimensional, o curbă obţinută prin interpolarea liniară a punctelor ale căror coordonate sunt elementele vectorilor X1, Y1 şi Z1. Ca şi în cazul funcţiei plot, sunt acceptate mai multe seturi de date, deci mai multe triplete de argumente. Dacă X1, Y1, Z1 sunt matrice de aceeaşi dimensiune, MATLAB reprezintă câte o curbă pentru fiecare coloană a matricelor, folosind ciclic culorile de bază. Argumentul opţional Specificare_Atribute (un şir de maxim trei caractere) permite specificarea stilului de linie, de marcator şi culoarea liniilor plotate (ca la funcţia plot). Prin perechi de argumente de tipul 'Nume_Proprietate', Valoare_Proprietate, se pot stabili, încă de la creare, oricâte valori ale proprietăţilor obiectelor grafice de tip Line create prin acest apel de funcţie. 28
Sintaxa h = plot3(...) furnizează vectorul coloană h, care conţine identificatorii tuturor obiectelor grafice de tip Line create. 15.2. Reprezentarea grafică a suprafeţelor tridimensionale Sistemul MATLAB poate crea suprafeţe 3D fie sub forma unei reţele (“mesh”) de linii colorate care conectează punctele de definiţie, fie sub forma unei suprafeţe pline. Reprezentarea grafică 3D a matricelor de date, sub cele două forme, se realizează cu funcţiile mesh, respectiv surf şi alte funcţii derivate din acestea. Suprafeţele sunt parametrizate, în sensul că fiecare punct de definiţie al acesteia este specificat printr-un triplet (X(i,j), Y(i,j), Z(i,j)), în care parametrii numere întregi i şi j variază continuu într-un domeniu impus (1≤ i ≤ m, 1≤ j ≤ n). Astfel, nodurile care definesc suprafaţa sunt trei matrice X, Y şi Y, de dimensiune m x n. Pentru specificarea culorii, este necesară încă o matrice C, de aceeaşi dimensiune m x n. 15.3. Reprezentarea suprafeţelor sub forma unei reţele (“mesh”) Există trei funcţii MATLAB pentru reprezentarea grafică 3D a matricelor de date sub forma unei reţele de linii colorate: - mesh, care realizează o suprafaţă “mesh” fără linii de contur; - meshc, care adaugă reţelei linii de contur reprezentate sub suprafaţă; - meshz, care adaugă reţelei un plan de referinţă la cota zero (un piedestal). Fiecare dintre acestea poate avea una din sintaxele de mai jos, exemplificate pentru funcţia mesh. mesh(X,Y,Z,C) mesh(X,Y,Z) mesh(Z) h = mesh(...)
În cazul cel mai general, când funcţiile au patru argumente, sunt create suprafeţe parametrizate specificate prin matricele X, Y şi Z, cu culorile specificate prin matricea C. MATLAB realizează o transformare lineară asupra datelor din C pentru a obţine culorile din paleta de culori curentă. Dacă X, Y şi Z sunt matrice, C trebuie să aibă aceeaşi dimensiune ca şi acestea. Sintaxa mesh(X,Y,Z), în care matricea C este omisă, consideră C=Z, culoarea fiind proporţională cu înălţimea suprafeţei. Dacă X şi Y sunt vectori de dimensiune n, respectiv m, iar Z este o matrice de dimensiune m x n, punctele de coordonate (X(j), Y(i), Z(i,j)) sunt intersecţiile liniilor de grid care compun reţeaua “mesh”. Se constată că indexul lui Y corespunde coloanelor lui Z, în timp ce indexul lui X corespunde liniilor lui Z. Dacă X şi Y sunt matrice, intersecţiile liniilor reţelei au coordonatele (X(i,j), Y(i,j), Z(i,j)). Cu sintaxa mesh(Z) se creează o reţea „mesh” care utilizează X = 1:n şi Y = 1:m, unde [m,n]=size(Z), iar culoarea este proporţională cu înălţimea suprafeţei. Identificatorul obiectului grafic de tip surface creat de aceste funcţii poate fi reţinut într-o variabilă, dacă se utilizează sintaxa h=mesh(...), respectiv h=meshc(...) sau h=meshz(...). 15.4. Reprezentarea suprafeţelor pline Pentru reprezentarea grafică a suprafeţelor pline se folosesc funcţiile surf şi sulfc. Sintaxele acestora şi semnificaţia argumentelor sunt similare celor ale funcţiilor utilizate pentru reprezentarea suprafeţelor sub forma unei reţele de linii. Spre deosebire de surf, funcţia surfc afişează şi liniile de nivel, pe acelaşi grafic şi sub suprafaţă. 29
15.5. Reprezentarea grafică a funcţiilor de două variabile Pentru a reprezenta grafic o funcţie de două variabile, y = f(x,y), sub forma unei suprafeţe de tip reţea de linii colorate sau suprafaţă plină, înainte de apelul funcţiei grafice dorite este necesară generarea matricelor X şi Y ce definesc domeniul de definiţie prin suprafeţe parametrizate. Pentru transformarea domeniului specificat prin doi vectori x şi y de dimensiuni 1 x n, respectiv 1 x m, în matricele X şi Y de dimensiuni m x n, astfel încât liniile lui X sunt copiile lui x, iar coloanele lui Y sunt copiile lui y, se foloseşte funcţia meshgrid, care poate avea una din sintaxele: [X,Y] = meshgrid(x,y) [X,Y] = meshgrid(x)
De remarcat că sintaxa [X,Y] = meshgrid(x) este echivalentă cu [X,Y] = meshgrid(x,x).
15.6. Reprezentarea obiectelor 3D predefinite În MATLAB există funcţii predefinite pentru reprezentarea unei sfere şi a unui cilindru. Generarea unei sfere cu raza egală cu unitatea se realizează cu funcţia sphere, care poate fi utilizată cu una din sintaxele de mai jos. sphere(n) sphere [X,Y,Z] = sphere(...)
Apelată cu prima sintaxă, funcţia reprezintă grafic suprafaţa unei sfere formată din n x n suprafeţe elementare. Nespecificarea argumentului n presupune utilizarea valorii implicite a acestuia, n=20. Cu ultima sintaxă, sunt create cele trei matrice X, Y şi Z cu coordonatele sferei unitate, fără a afişa suprafaţa sferei. Aceste coordonate vor fi utilizate ulterior ca argumente ale funcţiei surf sau mesh pentru reprezentarea grafică a suprafeţei sferei. Generarea unui cilindru (sau forme geometrice derivate din acesta) cu înălţimea egală cu unitatea se realizează cu una din sintaxele de mai jos ale funcţiei cylinder. [X,Y,Z] = cylinder [X,Y,Z] = cylinder(r) [X,Y,Z] = cylinder(r,n) cylinder(...)
Apelată cu argumentele de ieşire X, Y şi Z, funcţia nu are nici un efect grafic, creându-se doar matricele cu coordonatele necesare reprezentării grafice ulterioare cu una din funcţiile mesh sau surf. Prin argumentele de intrare, în cazul cel mai general r şi n, se particularizează aspectul obiectului grafic, fiind posibilă astfel şi reprezentarea grafică a conurilor, piramidelor, trunchiurilor de con, trunchiurilor de piramidă sau a unui corp obţinut ca o dispunere succesivă a unor astfel de corpuri de-a lungul axei z. Prin argumentul r (vector sau scalar), se specifică razele cercurilor circumscrise ale poligoanelor regulate care formează bazele formelor geometrice 3D (de înălţime egală) ce compun obiectul grafic de tip surface, dispuse consecutiv în intervalul de o unitate al axei Z. Dacă r este un vector cu m elemente, vor exista (m-1) astfel de forme geometrice 3D. Dacă r este un scalar, va fi generată o singură formă geometrică şi va fi considerată aceeaşi valoare a razei pentru baza inferioară şi baza superioară. Valoarea implicită a argumentului r este 1. Argumentul n, întotdeauna un scalar, specifică numărul de laturi ale poligoanelor regulate care formează bazele formelor geometrice 3D. Valoarea implicită a acestuia este 20. 30
Sintaxele fără argumente de intrare sunt echivalente specificării valorilor implicite ale acestora. Sintaxele fără argumente de ieşire reprezintă grafic, în fereastra figură curentă, cu funcţia surf, obiectul de tip suprafaţă cu aspectul particularizat prin argumentele de intrare (dacă există). 15.7. Stabilirea culorilor -
Pentru afişarea culorilor asociate suprafeţelor, sistemul MATLAB foloseşte două tehnici: culori indexate, care asociază fiecărui punct din datele ce definesc suprafaţa un index din paleta de culori a ferestrei figură; truecolor, conform căreia suprafeţele sunt colorate prin specificarea explicită a culorilor, spre exemplu prin triplete RGB. Indiferent de metoda folosită, afişarea culorilor depinde de modul de colorare (“shading”)
folosit. Referitor la culori, la crearea unei suprafeţe 3D există trei posibilităţi: să nu fie specificate explicit culorile, caz în care MATLAB generează matricea de culori asociate datelor folosind datele din matricea Z; - specificarea unei matrice de culori, egală ca dimensiune cu matricea Z; - specificarea unui triplet RGB pentru fiecare element din matricea de date Z, fapt ce presupune utilizarea tehnicii truecolor. Paleta de culori (“colormap”) este o matrice cu trei coloane, fiecare linie definind o culoare printr-un vector RGB. Conţinutul acesteia este controlat prin funcţia colormap (vezi lucrarea 8). În sistemul grafic MATLAB există mai multe modele predefinite de culori: • autumn, care foloseşte nuanţe bazate pe roşu, portocaliu şi galben; • bone, o paletă cu nuanţe de albastru şi gri; • colorcube, care determină afişarea mai multor suprafeţe mici cu culori din spaţiul RGB; • cool constă în nuanţe de culori care variază lent de la albastru deschis spre mov; • copper afişează nuanţe de culori de la negru spre arămiu; • flag afişează zone colorate cu roşu, alb, albastru şi negru; • gray foloseşte nuanţe de gri; • hot variază lent de la negru la alb prin nuanţe de roşu, portocaliu şi galben; • hsv (“hue-saturation-value”) începe cu roşu, trece prin galben, verde, albastru şi mov, revenindu-se la roşu; • jet trece de la albastru la roşu prin albastru deschis, galben şi portocaliu; • lines creează o paletă cu culorile specificate prin proprietatea ColorOrder şi nuanţe de gri; • pink conţine nuanţe derivate din culoarea roz; • prism repetă şase culori: roşu, portocaliu, galben, verde, albastru şi violet; • spring constă în culori derivate din mov şi galben; • summer constă în culori derivate din verde şi galben; • white nu foloseşte decât culoarea alb; • winter constă în culori derivate din albastru şi verde. Pentru a crea o paletă de culori bazată pe un anumit model şi care să conţină un număr impus de culori, se foloseşte sintaxa -
colormap(model(n))
în care model este numele modelului, iar n numărul de culori dorite. Dacă nu se specifică un număr de culori, noua paletă va avea dimensiunea paletei de culori curente. Paleta implicită de culori este jet(64).
31
Pentru afişarea paletei de culori curente în fereastra figură, într-un dreptunghi lângă sistemul de axe, se foloseşte funcţia colorbar. Cu sintaxa colorbar('vert') se inserează o bară de culori verticală, iar cu sintaxa colorbar('horiz') se inserează o bară de culori orizontală. 15.8. Controlul modului de colorare Stabilirea modului de colorare a obiectelor grafice de tip surface şi patch se realizează prin funcţia shading, care are trei sintaxe posibile: shading flat – fiecare zonă de culoare şi segment al reţelei de linii este umplut cu o culoare constantă determinată de punctul final al segmentului sau colţului zonei care are cel mai mic index sau indici; shading faceted – corespunde modului shading flat, afişându-se şi liniile din reţea colorate cu negru; este modul de colorare implicit; shading interp – stabileşte culoarea de reprezentare a fiecărui segment şi zonă elementară a suprafeţei ca o nuanţă rezultată din interpolarea liniară a culorilor capetelor liniei sau colţurilor suprafeţei.
32