Comments
Description
Transcript
Note sui grafici in Matlab
Corso di Calcolo Numerico C.d.L in Ingegneria Aerospaziale e Meccanica a.a 2014/2015 Prof. Pasqua D’Ambra Appunti di Matlab : grafica Modifica di un oggetto grafico da programma Si possono modificare le proprietà degli oggetti creati da plot: plot(...,'PropertyName',PropertyValue,...) dove 'PropertyName' è LineWidth ampiezza linea MarkerEdgeColor colore marker o bordo marker MarkerFaceColor colore di riempimento marker MarkerSize ampiezza marker x = -pi:pi/10:pi; y = sin(x); plot(x,y,'--rs','LineWidth',2, 'MarkerEdgeColor','k', 'MarkerFaceColor','g', 'MarkerSize',10) Si può modificare in modo più sofisticato l’aspetto di una finestra grafica (colore sfondo, spessore linee, grandezza e tipo caratteri, assi, titolo, …) e dei grafici in essa presenti da programma. Il Matlab ha una gestione dei grafici object-oriented, cioè lo schermo è un albero in cui ogni nodo è un oggetto, proveniente da un nodo padre e che ha nodi figli a cui si accede tramite puntatore (handle) ed a cui sono associate delle proprietà modificabili. La finestra grafica (Figure) attiva è individuata dal puntatore gcf (graphic current figure).Le proprietà di un oggetto Figure sono ad esempio la posizione, il colore di sfondo, le dimensioni. Per vederle tutte: get(gcf) I figli di un oggetto Figure sono i grafici, i menù a tendine, le immagini (Axes) presenti nella finestra. In ogni Figure vi possono essere più Axes, quello attivo è individuato dal puntatore gca (grafhic current Axes).I figli di un oggetto Axes sono i grafici disegnati ed i testi scritti. Le proprietà di un oggetto Axes sono ad esempio title, color, xlabel,…Per vederle tutte: get(gca) x=-pi:0.1:pi; y=cos(x); plot(x,y) il comando set modifica le proprietà. Modifichiamo il colore di fondo della figura corrente da grigio a giallo e portiamo a 15 la dimensione dei caratteri negli assi: set(gcf,'color','y') set(gca,'fontsize',15) Una funzione come plot può generare un handle all’oggetto grafico che produce. Con il comando hsin=plot(x,y); si crea un handle alla curva e se ne possono modificare le caratteristiche set(hsin,'linewidth',4) Con il comando axes si può specificare la posizione dell’oggetto nella figura corrente: axes(‘position’,[a b c d]) c,d = larghezza e altezza del rettangolo in cui inserire la figura a,b= angolo sinistro in basso della figura rispetto alla finestra x = -pi:pi/10:pi; y = sin(x); t = 0:.01:2*pi; axes('position',[.1 .1 .8 .6]) polar(t,sin(2*t).*cos(2*t),'--r') axes('position',[.1 .7 .8 .2]) plot(x,y,'Linewidth',2) Curve di livello Le curve di livello sono le curve sulle quali f(x,y) è costante, esse sono una rappresentazione bidimensionale della superficie analoga a quella delle mappe topografiche. Geometricamente si taglia il grafico della funzione prefissata con un piano parallelo a quello(x,y) e si proietta la curva che si ottiene: contour(X,Y,Z,n) contour3(X,Y,Z,n) x = -2:.2:2; y =-2:.2:2; [X,Y]=meshgrid(x,y); z=X.*exp(-(X.^2+Y.^2)); subplot(2,2,1),surf(X,Y,z); subplot(2,2,2),contour(X,Y,z,20); subplot(2,2,3),contour3(X,Y,z,20); subplot(2,2,4),surfl(X,Y,z),view(40,-10) %modifica l’angolo di vista colormap(hsv) Funzioni relative al suono e all’animazione sound(y,Fs) converte un vettore in suono y= segnale discreto di frequenza Fs Fs frequenza, se omessa Fs=8192Hz y=sin(linspace(0,20000,20000)); sound(y,15000) sound(y,10000) sound(y,5000) sound(y) Si possono creare animazioni memorizzando le immagini come i singoli fotogrammi di un film con i comandi movie,getframe. movie(M,n) visualizza n volte la sequenza di immagini memorizzate nella matrice M tramite il comando getframe. %funzione demo z=peaks; surf(z); % setta gli assi nell’intervallo dei dati axis tight; % fissa gli assi thisax=axis; for j=1:5 surf(sin(2*pi*j/20)*z,z);axis(thisax); % carica le immagini nella matrice F F(j)=getframe; end % muove 5 volte l’immagine movie(F,5) Menù a pulsanti Per creare un semplice menù a pulsanti si può usare la funzione menu: scelta=menu('intestazione','pulsante1','pulsante2', …) scelta=menu('scegliunafunzione','sin','cos', 'exp','fine'); if scelta==1 x=0:0.1:2*pi;y=sin(x); plot(x,y); elseif scelta==2 x=0:0.1:2*pi;y=cos(x); plot(x,y); elseif scelta==3 x=0:0.1:2;y=exp(x); plot(x,y); elseif scelta==4 close all; return; end clear scelta; sceltamenu