abc Matlab - elektronski priručnik
IV dio Grafika u Matlabu

4.1. 2D grafika

Osnovna funkcija koja se koristi za kreiranje 2-D grafova je plot funkcija. Ova funkcija može uzeti različit broj ulaznih argumenata. Za punu definiciju ove funkcije kucamo help plot u Command Window.

U ovom primjeru graf racionalne funkcije   -2≤x≤2  će biti nacrtan pomoću određenog broja tačaka.
% Script file graph1.
% Graf racionalne funkcije y = x/(1+x^2).
for n=1:2:5
  n10 = 10*n;
  x = linspace(-2,2,n10);
  y = x./(1+x.^2);
  plot(x,y,'r')
  title(sprintf('Graf %g. Crtano na osnovu n = %g tacaka.',(n+1)/2, n10))
  axis([-2,2,-.8,.8])
  xlabel('x')
  ylabel('y')
  grid
  pause(3)
end
Analizirajmo sadržaj ovog fajla. Petlja for se izvršava tri puta. Znači, tri grafa iste funkcije će biti prikazana u Figure Window. MATLAB funkcija linspace(a, b, n) generiše jednodimenzionalni niz od n jednako raspoređenih brojeva u intervalu [a b]. y-ordinate tačaka koje treba nacrtati su spremljene u niz y. Komanda plot se poziva sa tri argumenta: dva niza koja sadrže x- i y-koordinate i  string 'r', koji opisuje boju (red) koja će se koristiti za crtanje krive. Treba primijetiti razliku između tri grafa koje kreira ovaj fajl. Postoji značajna razlika između glatkoće grafova 1 i 3. Posmatrajući ove grafove možemo zaključiti sljedeće: što više tačaka obezbijedimo to će graf koji generiše funkcija plot biti glatkija.
Funkcija title daje opisnu informaciju za grafove koje je generisao ovaj m-fajl, a slijedi ga komanda sprintf. Primijetimo da sprintf ovdje uzima tri argumenta: string i imena dve varijable ispisane u naslovu svakog grafa. Da specificiramo format ispisanih brojeva ovdje koristimo konstrukciju %g, koja se preporučuje za ispis cijelih brojeva. Komanda axis saopštava MATLAB-u koje su dimenzije boksa koji sadrži crtež. Za dodavanje više informacija grafovima, označavamo x- i y-ose pomoću komandi xlabel i ylabel, respektivno. Svaka od ovih komandi uzima string kao ulazni argument. Funkcija grid dodaje linije rešetke grafu. Posljednja komanda prije završnog end je pause komanda.
Komanda pause(n) drži tekući graf u trajanju od n sekundi prije nastavljanja, gdje n može takođe biti i razlomak. Ako se pause pozove bez ulaznog argumenta, tada računar čeka na korisnikov odgovor. Napr. pritiskom na Enter će se nastaviti izvršavanje programa.

Funkcija subplot se koristi za crtanje nekoliko grafova u istom Figure Window. Ovdje je manja modifikacija m-fajla graph1
% Script file graph2.
% Nekoliko crtanja racionalne funkcije y = x/(1+x^2)
% u istom prozoru.
k = 0;
for n=1:3:10
  n10 = 10*n;
  x = linspace(-2,2,n10);
  y = x./(1+x.^2);
  k = k+1;
  subplot(2,2,k)
  plot(x,y,'r')
  title(sprintf('Graf %g. Crtano na osnovu n = %g tačaka.' , k, n10))
  xlabel('x')
  ylabel('y')
  axis([-2,2,-.8,.8])
  grid
  pause(3);
end
Komanda subplot je ovdje pozvana sa tri argumenta. Prva dva saopštavaju MATLAB-u da će biti kreirana matrica 2-puta-2 koja se sastoji od 4 crteža. Treći parametar je promjenljivi indeks koji saopštava MATLAB-u koji podgraf (subplot) se trenutno generiše.

graph2


Pomoću komande plot moguće je prikazati nekoliko krivih u istom Figure Window.
Nacrtaćemo dve elipse

pomoću komande plot
% Script file graph3.
% Grafovi dve elipse
% x(t) = 3 + 6cos(t), y(t) = -2 + 9sin(t)
% i
% x(t) = 7 + 2cos(t), y(t) = 8 + 6sin(t).
t = 0:pi/100:2*pi;
x1 = 3 + 6*cos(t);
y1 = -2 + 9*sin(t);
x2 = 7 + 2*cos(t);
y2 = 8 + 6*sin(t);
h1 = plot(x1,y1,'r',x2,y2,'b');
set(h1,'LineWidth',1.25)
axis('square')
xlabel('x')
h = get(gca,'xlabel');
set(h,'FontSize',12)
set(gca,'XTick',-4:10)
ylabel('y')
h = get(gca,'ylabel');
set(h,'FontSize',12)
set(gca,'YTick',-12:2:14)
title('Graphs of (x-3)^2/36+(y+2)^2/81 = 1 and (x-7)^2/4+(y-8)^2/36 = 1.')
h = get(gca,'Title');
set(h,'FontSize',12)
grid

U ovom fajlu koristimo nekoliko novih MATLAB komandi. Koriste se za poboljšanje čitljivosti grafa. Analizirajmo kod sadržan u m-fajlu graph3. Prvo, jednačine elipsi u pravougaonim koordinatama su transformisane u parametarske jednačine. Ovo je pogodan način za crtanje grafova jednačina u implicitnoj formi. Tačke koje će biti nacrtane i izravnate funkcijom plot, definisane su u prvih pet linija fajla, ne računajući komentare. Obe krive je moguće nacrtati pomoću jedne plot komande. Takođe, moguće je izabrati boje krivih. One su specificirane kao stringovi ( linija 6). MATLAB ima nekoliko boja koje se mogu koristiti za crtanje grafova:

y    yellow
m   magenta
c    cyan
r    red
g   green
b   blue
w  white
k   black

Primijetimo da komanda u liniji 6 počinje sa h1 = plot… Varijabla h1 sadrži informaciju o grafu koji se generiše i naziva se handle grafika. Komanda set u sljedećoj liniji dozvoljava korisniku da manipuliše crtežom. Vidimo da ova komanda uzima kao ulazni parametar varijablu h1. Možemo mijenjati debljinu nacrtanih krivih od default vrijednosti do vrijednosti po našem izboru, napr. 1.25. U sljedećoj liniji koristi se komanda axis za uređivanje crteža. Koristimo opciju 'square' da bi ose imale kvadratne dimenzije. Druge raspoložive opcije su: 'equal', 'normal', 'ij', 'xy', i 'tight'. Više o ovim opcijama se može naći u MATLAB help-u.

Ako se funkcija axis ne koristi, tada cirkularne krive neće tako izgledati. Da bismo ovo pokazali nacrtaćemo graf jediničnog kruga radijusa 1 sa centrom u koordinatnom početku

t = 0:pi/100:2*pi;
x = cos(t);
y = sin(t);
plot(x,y)


Druga važna MATLAB funkcija korištena u ovom fajlu se naziva get (linija 10). Ona uzima kao prvi ulazni parametar varijablu imenovanu kao gca = get current axis. Očigledno je da je osa na koju se odnosi ova funkcija x-osa. Varijabla h = get(gca, … ) je grafički handle ove ose. Sa informacijom spremljenom u varijabli h, mijenjamo veličinu fonta asociranog x-osi pomoću 'FontSize' stringa praćenog veličinom željenog fonta. Pozivanjem funkcije set u liniji 12, promijenićemo tzv. tick oznake duž x-ose pomoću 'XTick' stringa praćenog nizom koji opisuje distribuciju oznaka. Možemo privremeno isključiti liniju 12 dodajući znak % prije riječi set da bismo vidjeli razliku između default tick oznaka i oznaka koje su generisale komande u liniji 12.
Nakon toga obrišimo taj znak za komentar i kliknimo na Save iz File menija u MATLAB Editor/Debugger. Konačno, moguće je napraviti promjene i u naslovu crteža. Napr. možemo izabrati veličinu fonta u naslovu. To je ovdje postignuto pomoću funkcije set. Očigledno je da su dve MATLAB funkcije get i set od velike važnosti u manipulisanju grafovima.

Ovako će izgledati grafovi elipsa

graph3


MATLAB ima nekoliko funkcija namijenjenih za crtanje specijalizovanih 2-D grafova. Djelimičnalista ovih funkcija je fill, polar, bar, barh, pie, hist, compass, errorbar, stem, i
feather.
U ovom primjeru funkcija fill je iskorištena za kreiranje dobro poznatog objekta
n = -6:6;
x = sin(n*pi/6);
y = cos(n*pi/6);
fill(x, y, 'r')
axis('square')
title('Graph of the n-gone')
text(-0.45,0,'What is a name of this object?')
Ova funkcija uzima tri ulazna parametra – dva niza, imenovana kao x i  y. Oni sadrže x- i y-koordinate verteksa poligona koji treba biti ispunjen. Treći parametar je boja koju je odabrao korisnik za bojenje objekta. Nova komanda koja se ovdje javlja je text komanda. Koristi se za ispis teksta. Prva dva ulazna parametra specificiraju lokaciju teksta. Treći ulazni parametar je tekst koji će biti dodat crtežu.

Ovdje je prikazan graf ispunjenog objekta koji je generisao ovaj kod

4. Grafika u Matlabu    <    Index    >    3D grafika