6. Előadás Matlab grafikus lehetőségei, 2D 3D 2D, 3D-ss grafikák grafikák. Salamon Júlia Előadás I. éves mérnök hallgatók számára
Grafikák A Matlab programcsomag egyik nagy erőssége az igen hatékony és rugalmas grafikai rendszere. Kétdimenziós Kétdi ió grafikák fikák A Matlab használatával bárki kirajzolhat egy olyan grafikont, amelyet úgy adtak meg, hogy felsorolták az összetartozó koordinátákat. Ezt egyszerűen plot l t utasítással t ítá l érhetjük é h tjük el. l Háromdimenziós grafikák Rajzolhatunk háromdimenziós görbéket, ezt a plot3 utasítással érhetjük el, hálós felületeket a mesh parancs használatával, vagy felületeket a surf utasítást alkalmazva.
2010.12.01.
VI. előadás
2
Plot utasítás Az első paraméter mindig az argumentumokat, míg a második az ábrázolandó függvény gg y értékeit tartalmazza. plot(x,y)
Kirajzolja az y vektort az x vektornak megfelelően, vagyis az (xi,yi) valós pontpárokat ábrázolja az x,y k di át koordinátarendszerben. d b
plot(z)
A z vektorban levő komplex számokat ábrázolja, vagyis kirajzolja a (real(z), imag(z)) pontokat a komplex koordinátarendszerben. koordinátarendszerben
plot(...,str)
Az aktuális plot utasításban szereplő str sztring paraméterrel a rajz színét és a rajz vonaltípusát definiálhatjuk.
plot(x1,y1,str1, x2,y2,str2,...)
Több grafikont készít ugyanabban a koordinátarendszerben, a megfelelő str1, str2,... szín- és vonaltípusok szerint. Ebben a parancsban valós és komplex adatokat nem lehet egyszerre használni Ha nem adjuk meg a szín és a vonalfajtát, használni. vonalfajtát akkor a Matlab fogja megválasztani azt.
2010.12.01.
VI. előadás
3
Vonalfajták jelek és színek Pont
Vonal
Szín
. pont * csillag x x betű b ű o kör + plusz jel s négyzet d rombusz <,>,v,^ háromszögek <,>,v, p ötszög h hexagon
- folytonos - - szaggatott : pontozott -. folyonos és pontozott
y sárga r piros g zöld ld w fehér m magenta c cián b kék k fekete
Vonalfajtákat és színeket lehet együtt is megadni. 2010.12.01.
VI. előadás
4
Értelmezési tartományok Függvény típusa
Értelmezési tartomány
Polinom függvény
Valós számok halmaza
Törtfüggvény
Nevező nem lehet nulla
Gyökfüggvény
Páros hatványú gyökök, gyök alatti kifejezése nem lehet negatív
Exponenciális függvény
Valós számok halmaza
Logaritmus függvény
A logaritmus alapja és argumentuma szigorúan pozitív kell legyen
Trigonometrikus függvények
Valós számok halamza, kivéve a tg.
Arcsin, arccos
A kifejezés [-1,1] beli érték kell gy legyen
Arctg, arcctg
Valós számok halmaza
2010.12.01.
VI. előadás
5
Hibás függvényábrázolás
2010.12.01.
VI. előadás
6
Példák 1. Rajzoljunk egy háromszöget. x=[[1 3 2 1]; x=[1 y=[00 0 1 0]; y=[ plot(x,y)
2. Rajzold ki a f(x) f(x)=cos(8x)+cos(9x) cos(8x) cos(9x) függvény grafikonját. x=-3.2:0.01:9.5; x=y=cos y= cos(8*x)+ (8*x)+cos cos(9*x); (9*x); plot(x,y plot( x,y))
2010.12.01.
VI. előadás
7
Példák 3. Rajzold ki a f(t)=1/(1+(1+2i)t) függvény grafikonját. tt=-100:0.01:100; t=100 0 01 100 y=1./(1+(1+2i)*t); plot(y, 'dm')
4 Rajzold ki a f(x)=sin(x)/x függvény grafikonját 4. grafikonját. x=-20:0.1:20 x=y=sin(x)./x; y sin(x)./x; plot(x,y,'-plot(x,y,' --*r') *r')
2010.12.01.
VI. előadás
8
Címkék és rácsok elhelyezése A vízszintes és függőleges tengelyekre az xlabel és az ylabel parancsokkal, míg a rajz tetejére a title paranccsal tudunk szöveget kiíratni. kiíratni A text parancs segítségével pedig a rajz bármelyik, koordinátájával megadott pontjára feliratot, szöveget helyezhetünk. A grid paranccsal egy olyan rácsot illeszthetünk a koordinátarendszerre, amely illeszkedik a tengelyek beosztására. Ha nem vagyunk teljesen elégedetek az ábránk megjelenésével az axis utasítással megváltoztathatjuk akár a vízszintes akár a függőleges tengely mentén. p; x=0:0.01:2*pi; y=sin(x); plot(x,y) xlabel('x tengely') ylabel('y tengely') title('szinusz fuggveny') grid on axis i equall 2010.12.01.
VI. előadás
9
2010.12.01.
VI. előadás
10
2010.12.01.
VI. előadás
11
Több rajz egy ábrán Plot utasításban, utasításban egymásután felsorolva az ábrázolandó grafikonokat x=0:0.1:2; plot(x,sin(x),'or',x,cos(x),'k',x,exp(x)-2,'*b')
Hold parancsot használva. Hold on esetén minden későbbi rajzunk ugyan abba a koordinátarendszerbe rajzolódik, a hold off hatására a következő rajz törli az ablakot és új koordinátarendszert vesz fel. x=0:0.1:2; hold on plot(x,sin(x),'or') plot(x,cos(x),'k') plot(x,exp(x)-2,'*b')
Subplot utasítást használva subplot(m n p) – m*n rajzot illesztünk be egy ábrába, subplot(m,n,p) ábrába p azt jelöli, jelöli hogy sorsor folytonosan számolva hányadik rajz aktív. 2010.12.01.
VI. előadás
12
Példa subplot utasításra Akkor használjuk, amikor több rajz grafikonját összeszeretnénk hasonlítani, de nem azonos koordinátarendszerben szeretnénk őket ábrázolni. sin(x) sin(x) Hasonlítjuk össze a f1 (x)=sin(x),f 2 (x)= függvények ,f 3 (x)= 2 x x +1 grafikonjait. x=-10:0.1:10; 10 0 1 10 y=sin(x); subplot(1,3,1); plot(x y) plot(x,y) y=sin(x)./x; subplot(1,3,2); p ( ,y) plot(x,y) y=sin(x)./(x.^2+1); subplot(1,3,3); plot(x,y)
2010.12.01.
VI. előadás
13
Koordinátarendszerek loglog(x,y)
Logaritmikus beosztást használ mindkét tengelyen.
semilogx(x,y) semilogy(x,y)
Csak az x (illetve y) tengelyen használ logaritmikus skálát, az y (illetve x) tengelyen marad a lineáris skála.
polar(t,r,s) p (,, )
Polár-koordinátarendszerben rajzolja j j ki az adatokat,, ahol t vektorban vannak a szögek radiánban, r-ben a megfelelő szögekhez tartozó sugárérték, s az ábrázolás stílusát tárolja.
bar(x,y)
Az y vektorban lévő értékek oszlopdiagramját rajzolja ki.
errorbar(x,y,e)
Hibavonalas rajzolás, ahol az y értékek kerülnek kirajzolásra a megadott x helyeken egy, az e vektorban megadott nagyságú hibavonallal együtt.
[t,r]=cart2pol(x,y) Az x,y derékszögű koordinátarendszerből polárkoordinátás megfelelőjét. [x,y]=pol2cart(t,r) A polárkoordinátákat transzformálja. 2010.12.01.
VI. előadás
derékszögű
elkészíti
a
koordinátarendszerbe
14
Példák 1.Exponenciális függvény ábrázolása különböző sálázás mellett a [-10,10] intervallumon. x=-10:0.1:10; y=exp(x); subplot(1 4 1); subplot(1,4,1); plot(x,y) subplot(1,4,2); loglog(x,y) subplot(1,4,3); semilogx(x,y) subplot(1 4 4); subplot(1,4,4); semilogy(x,y)
2. Rajzoljuk meg az arkhimédeszi csigát. sz=0:0.1:8*pi; r=2./sz; polar(sz r); polar(sz,r);
3. Rajzoljuk meg az f(x)=cos(x) függvény oszlopdiagramját. x=-1:0.1:1; y=cos(x); bar(x,y)
4 Hibavonalas rajzot adunk meg. 4. meg x=0:0.1:3; y=exp(-x); e=rand(size(x))/10; errorbar(x,y,e);
2010.12.01.
VI. előadás
15
Koordinátarendszer váltás 1. Polár koordinátarendszerről áttérünk derékszögű koordinátarendszerre. t=0:0.01:2*pi; r=sin(4*t).*cos(2*t); subplot(1,2,1); p polar(t,r); ( , ); [x,y]=pol2cart(t,r); subplot(1,2,2); plot(x,y);
2. Derékszögű koordinátarendszerről áttérünk polár koordinátarendszerre. x=-10:0.01:10; y=sin(x); i ( ) subplot(1,2,1); plot(x,y); [t,r]=cart2pol(x,y); subplot(1,2,2); b l t(1 2 2) polar(t,r); 2010.12.01.
VI. előadás
16
Adatok leolvasása rajzról [x,y]=ginput
Ha utána az egérrel az ábrára váltunk, majd tetszés szerint az ábra bizonyos pontjaira kattintunk az egér bal gombjával, akkor azon koordináták eltárolódnak az x és y vektorokban. A beolvasás végét az Enter billentyű lenyomása jelenti.
[ ] i [x,y]=ginput(n) ( )
IItt előre lő rögzítjük, ö í jük hogy h a beolvasandó b l dó pontokk száma á l legyen n.
[x,y,t]=ginput
Ebben az esetben azt is eltároljuk, hogy az ábrára az egér melyik l ik gombjával bjá l katintottunk, k ti t tt k illetve ill t milyen il bill t űt billentyűt nyomtuk le időközben. Ez a t vektorban lesz tárolva. Háromgombos egér esetén a t vektorba 1 tárolódik a bal ggomb lenyomása y esetén,, 2 a középső p és 3 a jjobb ggomb lenyomásakor. Billentyű lenyomásakor, pedig az illető karakter ascii kódja tárolódik .
waitforbuttonpress
Megállítja a Matlabot amíg egy billentyűt vagy egérgombot meg nem nyomunk.
2010.12.01.
VI. előadás
17
Példaprogram Egy ábrára a bal gomb lenyomásával rajzoljunk, addig amíg az egér jobb gombjával nem kattintunk a rajzra. rajzra figure; hold on axis([0 1 0 1]); [x,y,t]=ginput(1); plot(x,y,'o'); xx=x; yy=y; while t~=3 [x,y,t]=ginput(1); p ( ,y, ); plot(x,y,'o'); xx=[xx x]; yy=[yy y]; plot(xx,yy) end 2010.12.01.
VI. előadás
18
Görbék rajzolása A háromdimenziós görbéket ugyanúgy rajzoljuk, mint a kétdimenziósakat. A utasítás Az t ítá hasonló h ló azaz a szintaktikája i t ktikáj ugyanaz. plot3(x,y,z)
Kirajzolja és egy vonallal összeköti az x, y, z vektorok által megadott összes (xi,yi,zi) pontot a három háromdimenziós koordinátarendszerben. A vektorok csak egyenlő hosszúak lehetnek.
plot3(x y z str) plot3(x,y,z,str)
Az aktuális plot3 utasításban szereplő str sztring paraméterrel a rajz színét és a rajz vonaltípusát definiálhatjuk.
plot3(x1,y1,z1,str1, plot3(x1 y1 z1 str1 Több grafikont készít ugyanabban a x2,y2,z2,str2,...) koordinátarendszerben, a megfelelő str1, str2,... színés vonaltípusok szerint. Ha nem adjuk meg a szín és a j , akkor a Matlab fogja gj megválasztani g azt. vonalfajtát, 2010.12.01.
VI. előadás
19
Példaprogramok 1. Ábrázold a f(t)=(sin(t),t,cos2(t)) függvényt függvényt. t=0:0.1:8*pi; x=sin(t); y=t; z=cos(t).^2; (t) ^2 plot3(x,y,z); grid on
2010.12.01.
2. Ábrázold a f(t)=(cos(4t)sin(t),sin(2t),t) függvényt függvényt. t=0:0.01:10*pi; x=cos(4*t).*sin(t); y=sin(2*t); z=t; plot3(x,y,z); grid on
VI. előadás
20
Hálószerű felületek A Matlab a megadott háromdimenziós adatok alapján egy hálószerű felületet definiál a z koordináták alapján az x, y vektorok által meghatározott téglalaprács fölött Egyenes fölött. E vonallal ll l összeköti ö köti a szomszédos éd pontokat, t k t így í olyan l eredményt d é t kapunk, mintha egy olyan hálót borítottunk volna a felületre, amelynek a csomópontjai megadott pontok, és csak a hálót látnánk. [u v]=meshgrid(x [u,v] meshgrid(x,y) y)
Két mátrixot állít elő, elő amelyek az x, x y rácsrendszert definiálják. Haszna: összes lehetséges (uij,vij) pontokkal definiált rácson z=f(u,v) utasítással pontonként értékeket definiálhassunk.
mesh(z,c)
Kirajzolja a z mátrix hálós rajzát. Ekkor a rácsozatot az (i,j) mátrixindexek definiálják, a függvényértékek a mátrix zij elemei. A c paraméterben a színmátrixot adhatjuk meg.
mesh(x,y,z,c)
Kirajzolja a z mátrix hálós rajzát a c mátrixnak megfelelő színekkel, csak most a rácsozatot az (xij,yij) pontpárok definiálják. (ha x hossza m, y-e n, akkor z mxn-es mátrix)
meshc(...) h ( )
Ugyanolyan U l háló rajzot hálós j t készít, ké ít mint i t a mesh, h csakk itt még é a grafikon alá az x, y síkra egy szintvonalrajz is készül.
2010.12.01.
VI. előadás
21
Példaprogramok 1. Ábrázold a következő felületet: z=sin(x2+y2)
2. Ábrázold a következő felületet: z=x3cos(y)
[x,y]=meshgrid(-2:.01:2); z=sin(x ^2+y ^2); z=sin(x.^2+y.^2); mesh(x,y,z)
[x,y]=meshgrid(-10:.1:10); z=x ^3 *cos(y) z=x.^3.*cos(y) mesh(x,y,z)
2010.12.01.
VI. előadás
22
Felületek rajzolása surf(x,y,z,c)
Megrajzolja az (xij,yij,zij) pontokra illeszkedő felületeket. Ha x, y vektorok hossza m és n, akkor z mátrixnak mxn-esnek kell lennie, a felületeket az (xi,yj,zij) pontok definiálják. Ha az x, y paraméterek hiányoznak, a Matlab egyenletes té l l á t vesz fel. téglalaprácsot f l c a színmátrix. í át i
surfc(x,y,z,c)
Kirajzolja még a szintvonalakat az xy síkban a felület alá.
pcolor(z) pcolor(x,y,z)
A z mátrix színes rajzát készíti el úgy, hogy a mátrix minden zij elemének egy színt feleltet meg, és ezt ábrázolja az (i,j) rácsozaton.
fill(x,y,c) fill3(x,y,z,c)
Egy kiszínezet két- illetve háromdimenziós poligont rajzol. A poligon csúcsait az x, y vektorok határozzák meg, a c adja meg a kitöltés színét. színét
2010.12.01.
VI. előadás
23
Példaprogramok 1. Ábrázold a következő felületet: z=sin(x2+y2)/(x2+y2)
2. Ábrázold a következő felületet: z= (x2-y2-1) (x2-y2+1)
[x,y]=meshgrid(-4:0.05:4); ( y ) ( y ); z=sin(x.^2+y.^2)./(x.^2+y.^2); surfc(x,y,z) shading interp
[x,y]=meshgrid(-4:0.1:4); ( y ) ( y ); z=(x.^2-y.^2-1).*(x.^2-y.^2+1); surf(x,y,z) shading interp
2010.12.01.
VI. előadás
24
Pcolor parancs Egy gy 4x4-ös rácsot szinez ki,, veletlenszerűen. [x,y]=meshgrid(1:5) c=fix(rand(5)*16); pcolor(x,y,c)
2010.12.01.
VI. előadás
25
Fill és fill3 parancsok subplot(2,1,1); x=[1 3 2]; y=[0 3 2.5]; fill(x,y,'b') subplot(2,1,2) B=[2 [ 2 0]; ]; A=[1 1 0]; C=[3 1 0]; D=[2 2.5 2]; fill3([A(1) B(1) C(1)] [A(2) B(2) C(2)] fill3([A(1),B(1),C(1)],[A(2),B(2),C(2)],... [A(3),B(3),C(3)],'b') hold on fill3([C(1),A(1),D(1)],[C(2),A(2),D(2)],... [C(3) A(3) D(3)] 'k') [C(3),A(3),D(3)], k) fill3([A(1),B(1),D(1)],[A(2),B(2),D(2)],... [A(3),B(3),D(3)],'c') fill3([D(1),C(1),B(1)],[D(2),C(2),B(2)],... [D(3) C(3) B(3)] ' ') [D(3),C(3),B(3)],'m') grid on 2010.12.01.
VI. előadás
26
Animációk készítése 1) Készíts egy programot, ahol egy körön mozogjon egy pont. pont
2) Készíts az előző feladathoz egy animációt (avi állományt) állományt).
x = -pi:.1:pi; for k=1:length(x) k 1:length(x) plot(cos(x),sin(x)); hold on plot(cos(x(k)),sin(x(k)),'*r'); hold off axis([-2 2 -2 2]); pause(0.1) end
mov = avifile('e4.avi') x = -pi:.1:pi; -pi: 1:pi; for k=1:length(x) plot(cos(x),sin(x)); hold o d oon plot(cos(x(k)),sin(x(k)),'*r'); hold off axis([-2 2 -2 2]); F = getframe(gca); mov = addframe(mov,F); end mov = close(mov);
2010.12.01.
VI. előadás
27
Körön mozgó pont x = -pi:.1:pi; f kk=1:length(x) for 1l h( ) plot(cos(x),sin(x)); hold on plot(cos(x(k)),sin(x(k)),'*r'); hold off axis([-2 2 -2 2]); F = getframe(gca); nev=strcat('fnev',num2str(k+1000),'.jpg'); imwrite(F.cdata,nev); end
2010.12.01.
VI. előadás
28