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

4.2. 3D grafika

Matlab ima nekoliko ugrađenih funkcija za crtanje trodimenzionalnih objekata. U ovom odjeljku razmatraćemo uglavnom funkcije koje se koriste za crtanje krivih u prostoru (plot3), mrežastih površina (mesh), površina (surf) i konturnih crteža (contour). Takođe, biće ukratko razmotrene dve funkcije za crtanje specijalnih površina, sphere i cylinder. Za dodatne informacije o 3-D grafici potrebno je otkucati help graph3d u Command Window.

Neka je  r(t) = < t cos(t), t sin(t), t >-10π < t < 10π, prostorna kriva. Nacrtaćemo njen graf na označenom intervalu pomoću funkcije plot3

% Script file graph4.
% Kriva r(t) = < t*cos(t), t*sin(t), t >.

t = -10*pi:pi/100:10*pi;
x = t.*cos(t);
y = t.*sin(t);
h = plot3(x,y,t);
set(h,'LineWidth',1.25)
title('Curve u(t) = < t*cos(t), t*sin(t), t >')
h = get(gca,'Title');
set(h,'FontSize',12)
xlabel('x')
h = get(gca,'xlabel');
set(h,'FontSize',12)
ylabel('y')
h = get(gca,'ylabel');
set(h,'FontSize',12)
zlabel('z')
h = get(gca,'zlabel');
set(h,'FontSize',12)
grid
Funkcija plot3 se koristi u liniji 4. Uzima tri ulazna parametra – nizove koji sadrže koordinate tačaka na krivoj koja će biti nacrtana. Još jedna nova komanda u ovom kodu je zlabel komanda (četvrta linija odozdo). Njeno značenje je jasno samo po sebi.

graph4


Funkcija mesh je namijenjena za crtanje grafova 3-D mrežastih površina. Prije početka rada sa ovom funkcijom, potrebno je uvesti još jednu funkciju: meshgrid. Ova funkcija generiše dva dvodimenzionalna niza za 3-D crteže. Pretpostavimo da želimo da nacrtamo mrežastu površinu preko rešetke koja je definisana kao Dekartov proizvod dva skupa

x = [0 1 2];
y = [10 12 14];
Komanda meshgrid primijenjena na nizove  x i  y kreira dve matrice
[xi, yi] = meshgrid(x,y)

xi =
       0   1   2
       0   1   2
       0   1   2
yi =
       10  10  10
       12  12  12
       14  14  14
Primijetimo da matrica xi sadrži replicirane redove niza x dok yi sadrži replicirane kolone y. z-vrijednosti funkcije koja će biti nacrtana su izračunate iz nizova xi i yi.
U ovom primjeru nacrtaćemo hiperbolički paraboloid  z = y2 – x2  preko kvadrata  –1 < x < 1, -1< y< 1

x = -1:0.05:1;
y = x;
[xi, yi] = meshgrid(x,y);
zi = yi.^2 – xi.^2;
mesh(xi, yi, zi)
axis off


Za crtanje grafa mrežaste površine zajedno sa konturnim crtežom ispod nacrtane površine, koristimo funkciju meshc

meshc(xi, yi, zi)
axis off


Funkcija surf se koristi da vizualizuje podatke kao osjenčenu površinu.
Programski kod u m-fajlu graph5 će pojasniti neke detalje 3-D grafike u Matlabu.

% Script file graph5.
% Površinski crtež (surface plot)za hiperbolički paraboloid z = y^2 - x^2
% i njegove krive nivoa.

x = -1:.05:1;
y = x;
[xi,yi] = meshgrid(x,y);
zi = yi.^2 - xi.^2;
surfc(xi,yi,zi)
colormap copper
shading interp
view([25,15,20])
grid off
title('Hyperbolic paraboloid z = y^2 – x^2')
h = get(gca,'Title');
set(h,'FontSize',12)
xlabel('x')
h = get(gca,'xlabel');
set(h,'FontSize',12)
ylabel('y')
h = get(gca,'ylabel');
set(h,'FontSize',12)
zlabel('z')
h = get(gca,'zlabel');
set(h,'FontSize',12)
pause(5)
figure
contourf(zi), hold on, shading flat
[c,h] = contour(zi,'k-'); clabel(c,h)
title('The level curves of z = y^2 - x^2.')
h = get(gca,'Title');
set(h,'FontSize',12)
xlabel('x')
h = get(gca,'xlabel');
set(h,'FontSize',12)
ylabel('y')
h = get(gca,'ylabel');
set(h,'FontSize',12)
graph5


Postoji nekoliko novih komandi korištenih u ovom fajlu. U liniji 5 (ne računajući komentare) upotrebljena je komanda surfc. Ona crta površinu zajedno sa linijama nivoa ispod. Za razliku od komande surfc komanda surf crta samo površinu bez krivih nivoa. Komanda colormap se koristi u liniji 6 za bojenje površine pomoću boja koje bira korisnik. Ako komanda colormap nije dodata, Matlab koristi default boje. Ovdje je lista mapa boja koje su raspoložive u Matlabu.

hsv - hue-saturation-value color map
hot - black-red-yellow-white color map
gray - linear gray-scale color map
bone - gray-scale with tinge of blue color map
copper - linear copper-tone color map
pink - pastel shades of pink color map
white - all white color map
flag - alternating red, white, blue, and black color map
lines - color map with the line colors
colorcube - enhanced color-cube color map
vga - windows colormap for 16 colors
jet - variant of HSV
prism - prism color map
cool - shades of cyan and magenta color map
autumn - shades of red and yellow color map
spring - shades of magenta and yellow color map
winter - shades of blue and green color map
summer - shades of green and yellow color map

Komanda shading (linija 7) kontroliše boju sjenčenja korištenu za bojenje površine. Ova komanda uzima jedan argument. Slijede opcije za sjenčenje raspoložive u Matlabu:

shading flat postavlja sjenčenje tekućeg grafa na flat
shading interp postavlja sjenčenje na interpolated
shading faceted postavlja sjenčenje na faceted, što je i default.

Komanda view (linija 8) je specifikacija tačke posmatranja (viewpoint) 3-D grafa. Ona uzima trodimenzionalni vektor, koji postavlja ugao posmatranja u Dekartovim koordinatama.

Sada ćemo obratiti pažnju na komande u linijama 23 do 25. Komanda figure omogućava Matlabu da kreira novi Figure Window u kojem će biti nacrtane linije nivoa. Da bi se poboljšao graf, koristimo komandu contourf umjesto contour. Prva crta popunjene konturne linije dok druga to ne radi. U istoj liniji koristimo komandu hold on da zadrži tekući crtež i sve osobine osa tako da se naredne grafičke komande dodaju na postojeći graf. Prva komanda u liniji 25 vraća matricu c i grafički handle h koji su upotrebljeni kao ulazni parametri za funkciju clabel, koja dodaje oznake visine tekućem konturnom crtežu.

2D grafika    <    Index    >    Animacija