Introdução ao MATLAB 5.3 para Hidrólogos Aula 03 – Scripts, funções e Gráficos Programando e plotando no MATLAB Carlos Ruberto Fragoso Júnior Christopher Freire Souza Porto Alegre, setembro de 2005 Aula 03 • • • • • • • Scripts Funções Linguagem de programação Gráficos 2D 3D Animação Aula 03 Scripts • Scripts files Aula 03 – Script é um m-file com um conjunto de comandos do MATLAB dentro dele. – Para executar basta digitar o nome do arquivo (sem a extensão .m). – É equivalente a digitar todos os comandos na tela principal, só que armazenado em um arquivo. – Trabalha com variáveis globais (apresentadas no diretório de trabalho) • Exemplo de um script Vamos escrever um script para resolver o seguinte sistema linear de equações: A.x=b, onde A depende de uma variável r. Aula 03 r x 1 2 5 2r 3 6 2r 1 x 3 2 2 r 1 3r x 3 5 • Executando o script no MATLAB >> r = 1 r= Aula 03 1 >> solvex det_A = 64 x= -0.0312 0.2344 1.6875 Os valores do “det_A” e “x" aparecem na tela porque não tem ponto e virgula no final da linha correspondente • Cuidados que se deve ter: – NUNCA salve o script com o mesmo nome de uma variável nele digitada. – O nome do arquivo script deve iniciar com uma letra. – Seja cuidadoso com os nomes das variáveis digitadas no script (todas essas variáveis são gravadas no diretório de trabalho) Exercício 1 A equação de uma uma reta é y = mx+b, onde m e b são constantes compute os valores de y para os seguintes valores de x: x = 0,1.5,3,4,5,7,9,10 Exercício 2 Crie um vetor t com 10 elementos de: 1,2,...,10. Depois compute os seguintes valores: x = t.sen(t) y = (t-1)/(t+1) z = sen(t2)/t2 Aula 03 Funções • Dicas para criação de funções Aula 03 – Crie uma estrutura lógica e pense na seqüência computacional antes de escrever o código. Escreva isso em um papel!!! – Defina as variáveis de entrada e saída. – Traduza o que você escreveu no papel para o MATLAB. – Defina nomes lógicos para suas variáveis e funções. – Escreva o máximo de comentários possíveis no código. – Quebre grandes blocos computacionais e escreva em função separadas. – Check erros e a saída com mensagens de erros e use o artifício do “;” para verificar os passos de cálculo. • Cuidados que se deve ter: – O termo de definição deve ser digitado com letra minúscula (“function” e não “Function”) . – Linhas comentadas começam com “%”, podendo ser colocado em qualquer lugar. Todas as linhas comentadas imediatamente após o termo de definição são mostradas no MATLAB help. – Uma simples variável de saída não precisa ser fechada por colchetes. – O nome das variáveis de entrada e de saída na linha do termo de definição são variáveis locais. • Para executar uma função Considere uma função, cuja a linha de definição é a seguinte: function [rho,H,F] = motion(x,y,t); >> [r,angmom,force] = motion(xt,yt,time); >> [r,h,f] = motion(rx,ry,[0:100]); >> [r,h,f] = motion(2,3.5,0.001); >> [radius,h] = motion(rx,ry); >> motion(xt,yt,t); As variáveis xt, yt e time devem ser definidas antes de executar o comando. As variáveis rx e ry devem ser definidas antes de executar o comando e t é especificada. Todas as variáveis são especificadas. A terceira variável de entrada tem que ser especificada dentro da função. A terceira variável e saída não é disponível. Nenhuma variável de saída fica disponível. function [det_A,x]=solvex(r) % SOLVEX Resolve um sistema de equações lineares de um matriz 3x3 % com parâmetro r. % Para chamar esta função, digite: % [det_A,x] = solvex(r) % r é a entrada e det_A e x são as saídas A = [5 2*r r; 3 6 2*r-1; 2 r-1 3*r] b = [2;3;5]; det_A = det(A); x = A\b; >> [det_A,y] = solvex(1); >> det_A ans = 64 >> y ans = -0.0312 0.2344 1.6875 • Executando uma função dentro de outra function [det_A,x]=solvex(r) % SOLVEX Resolve um sistema de equações lineares de um matriz 3x3 % com parâmetro r. % Para chamar esta função, digite: % [det_A,x] = solvex(r) % r é a entrada e det_A e x são as saídas A = [5 2*r r; 3 6 2*r-1; 2 r-1 3*r] b = [2;3;5]; det_A = det(A); x = A\b; A função “det” é chamada dentro da função solvex. Porém, quando o nome da função é dinâmico é feito de forma diferente (use “feval”). • Funções (function files) Aula 03 – funções são m-files contendo um conjunto de comandos do MATLAB dentro dele, como um script, só que todas as variáveis são locais e não globais. – São como programas ou subrotinas no Fortran. – A 1ª linha do arquivo começa definido as variáveis de entradas e de saídas, e o nome da função. – O nome da função deve ser o mesmo nome do arquivo a ser salvo. • Macetes Aula 03 – pcode nomedoarquivo – proteger o direito de uso do código. – profile – avalia a performance das funções. profile on [det_A,x] = solvex(r) profile report • Exercício 3 Todos os pontos com coordenadas x = r.cosө, y = r.senө, sendo r uma constante, satisfazem a equação x2 + y2 = r. Crie um vetor coluna: ө = 0,π/4, π/2, 3π/4, π e 5π/4 E calcule as coordenadas x e y em função do raio r. Aula 03 Linguagem de Programação • Linguagem de Programação – – São usadas para controlar o fluxo das operações. Tipos: – Todos esses controladores de fluxo devem terminar com “end”. Aula 03 (a) “for” e “while” – para “loops” (b) “if-elseif-else” – estrutura condicional simples (c) “switch-case-otherwise” – estrutura condicional avançada • Linguagem de Programação (a) “for” e “while” – para “loops” (b) “if-elseif-else” – estrutura condicional simples (c) “switch-case-otherwise” – estrutura condicional avançada Aula 03 – São usadas para controlar o fluxo das operações. – Tipos: • Fazendo “loops” – “for” – % Exemplo for m=1:100 num = 1/(m+1) end % Exemplo for n = 100:-2:0, k=1/(exp(n)), end Aula 03 Um “for” é usado para repetir uma operação ou um grupo de operações para um número fixo de vezes. • Condicional simples – “if-elseif-else” – % Exemplo num = 1; i = 1; while num<10000 num = 2^i; v = [i; num]; i = i + 1; end Aula 03 Um “while” é usado para repetir uma operação ou um grupo de operações para um número indefinido de vezes até que a condição especificada pelo “while” seja satisfeita. • Condicional simples – “if-elseif-else” – Cria blocos condicionais. Aula 03 % Exemplo i = 6; j = 21; if i > 5 k = i; elseif (i > 1) & (j == 20) k = 5*i + j else k = 1; end • Condicional avançado – “switch-caseotherwise” % Exemplo 1 flag = 1; switch flag case 1 “1º bloco computacional” case 2 “2º bloco computacional” otherwise “último bloco computacional” end Aula 03 – Cria blocos condicionais. Uma variável é usada como um dispositivo de direcionamento (switch), onde cada valor dessa variável direciona para um caso (case). • Macetes Aula 03 – break – dentro de um “for” ou “while”, termina a execução de um loop. – error(‘mensagem’) – dentro de uma função ou script, sai da execução da rotina e mostra uma mensagem de erro. – return - dentro de uma função ou script, sai da execução da rotina. • Exemplos - break Aula 03 % Exemplo 1 u = [2 4 8 4 -1 2}; v = u; for i = length(v) if u(i) < 0; % check para u negativo break % termina a execução do loop end a = a + v(i) end • Exemplos - error error('São necessárias duas variáveis de entrada') end if length(a) == 3 & length(b) == 3 % começa o cálculo c = cross(a,b); else error('Os vetores devem ter 3 dimensões') end Aula 03 function c = crossprod(a,b) % Cálcula o prod. Escalar de dois vetores if nargin ~= 2 % se não for 2 variáveis de entrada • Exemplos - return Aula 03 x = exp(sqrt(163)) n = input('Entre com o número max.de iterações') while n >= 1 if n <=0 return end x = log(x) n = n - 1; end • Outros macetes Aula 03 – input(‘mensagem’, opção) – mostra um texto na tela e espera pelo o usuário dá uma entrada no teclado. – menu(‘Título’,‘opção1’, ‘opção2’,...) – cria um menu na tela e lista as opções no menu. – pause – pausa a execução da rotina e espera um sinal do usuário ou pausa um determinado tempo (“pause(n)”). Aula 03 Arquivos de entrada e saída • Entrada e Saída – – – – – – fopen: abre um arquivo existente ou cria um novo arquivo fclose: fecha um arquivo aberto fwrite: escreve uma informação binário para um arquivo fread: ler uma informação binário de um arquivo fscanf: ler uma informação formatada de um arquivo fprintf: escreve uma informação formatada para um arquivo Aula 03 – O MATLAB possui algumas funções para ler e escrever dados em arquivos do tipo binário ou ASCII formatados. As funções são: • Formatação de arquivos Formato Descrição %c Simples caracter %d Notação decimal %e Notação exponecial (usando “e” minúsculo ) %E Notação exponecial (usando “e” maiúsculo ) %f Notação fixando ponto %g O mais compactado de %e ou %f %o Notação Octal %s Grupos de caracteres %x Notação Hexadecimal Exercício 1 Gerar e escrever em um arquivo ASCII uma tabela de conversão de temperatura de Fahrenheit para Celsius. Sabendo que: F = -40:5:100 C = (F-32)*5/9 Exercício 2 Ler os dados de temperatura do arquivo gerado em um matriz de temperatura. • Exemplos – Escrever em um arquivo Aula 03 F = -40:5:100; C = (F-32)*5/9; t = [F;C]; fid = fopen('temperatura.tab','w'); fprintf(fid,' Tabela de Temperatura\n'); fprintf(fid,'~~~~~~~~~~~~~~~~~~~~~~~~\n'); fprintf(fid,'Fahrenheit Celsius\n'); fprintf(fid,' %4i %8.2f\n',t); fclose(fid); • Exemplos – Ler um arquivo Aula 03 fid = fopen('temperatura.tab'); lixo=fscanf(fid,'%25c',[1 1]) lixo=fscanf(fid,'%25c',[1 1]) lixo=fscanf(fid,'%20c',[1 1]) temp = fscanf(fid,'%i %f',[2 inf]) fclose(fid); Aula 03 Gráficos • Gráficos Aula 03 – Boas ferramentas de visualização; – Gráficos 2D, 3D e animações; – O especial sobre a parte gráfica do MATLAB é o fácil uso e expansibilidade. • Plots 2D plot(xvalores,yvalores,’estilo-opções’) Aula 03 – O comando básico e talvez o mais proveitoso comando para produzir um gráfico em 2 dimensões é: • Opções de estilo linha Descrição y (amarelo) - (sólido) + (sinal de soma) m (margenta) -- (tracejado) o (cículo) c (ciano) : (pontinhado) * (asterisco) r (vermelho) -. (tracejado-potinhado) x (sinal x) g (verde) . (ponto) b (azul) ^ (triangulo) w (branco) s (quadrado) k (preto) d (diamante), etc Aula 03 Cor • Outras opções do comando “axis” – – – Aula 03 – axis(‘equal’) – coloca uma escala igual em ambos os eixos axis(‘square’) – transforma a área de plotagem retangular em um quadrado axis(‘normal’) – restaura os eixos para valores padrões axis(‘off’) – remove a área de plotagem e legendas • Controle do eixo axis([xmin xmax ymin ymax]) Aula 03 – Você pode mudar os limites dos eixos com o comando “axis” • Inserindo textos nos gráficos xlabel(‘eixo x’) – legenda do eixo x ylabel(‘eixo y’) – legenda do eixo y title(‘título’) – título do gráfico text(2,6,‘texto’) – escreve ‘texto’ na coordenada (2,6) – legend(‘texto1’, ‘texto2’, ...) Aula 03 – – – – • Sobreposição de gráficos – Usando o comando plot – Usando o comando “hold on” plot(x1,y1,‘estilo1’) hold on plot(x2,y2, ‘estilo2’) Aula 03 plot(x1,y1,‘estilo1’,x2,y2,‘estilo2’) • Exercício Usando as funções xlabel, ylabel, axis, gtext, hold on, plot... Aula 03 – Plotar a função seno em conjunto com duas funções de aproximação por série de Taylor (1ª e 3ª ordem). As funções são: y1 = sen(t) y2 = t y3 = t-t3/3!+t5/5! • Exercício (solução) Aula 03 x=linspace(0,2*pi,100); y1=sin(x); plot(x,y1) hold on y2=x; plot(x,y2,‘--’) y3=x-(x.^3)/6+(x.^5)/120; plot(x,y3,‘o’) axis([0 5 -1 5]) Hold off • Gráficos especiais em 2D – fplot Aula 03 30 » fplot('x.*sin(x)',[0 10*pi]) 20 10 0 -10 -20 -30 0 5 10 15 20 25 30 • Gráficos especiais em 2D – semilogx » t=linspace(0,2*pi,200); Aula 03 7 6 » x=exp(-t); 5 » y=t; 4 » semilogx(x,y), grid 3 2 1 0 -3 10 -2 10 -1 10 0 10 • Gráficos especiais em 2D – semilogy Aula 03 3 10 » t=linspace(0,2*pi,200); » semilogy(t,exp(t)), grid 2 10 1 10 0 10 0 1 2 3 4 5 6 7 • Gráficos especiais em 2D – loglog Aula 03 6 10 » t=linspace(0,2*pi,200); » x=exp(t); 5 10 » y=100+exp(2*t); » loglog(x,y), grid 4 10 3 10 2 10 0 10 1 10 2 10 3 10 • Gráficos especiais em 2D – polar » t=linspace(0,2*pi,200); » r=sqrt(abs(2*sin(5*t))); » polar(t,r) 1.5 60 120 1 30 150 0.5 180 0 330 210 300 240 270 Aula 03 90 • Gráficos especiais em 2D – fill Aula 03 » t=linspace(0,2*pi,200); » r=sqrt(abs(2*sin(5*t))); » x=r.*cos(t); » y=r.*sin(t); » fill(x,y,'k') » axis(‘equal') 1 0.5 0 -0.5 -1 -1.5 -1 -0.5 0 0.5 1 1.5 • Gráficos especiais em 2D – bar » t=linspace(0,2*pi,200); » r=sqrt(abs(2*sin(5*t))); » y=r.*sin(t); » bar(t,y) » axis([0 pi 0 inf]) Aula 03 1.4 1.2 1 0.8 0.6 0.4 0.2 0 0 0.5 1 1.5 2 2.5 3 • Gráficos especiais em 2D – errorbar » x=0:0.1:2; » aprx2=x-x.^3/6; » er=aprx2-sin(x); » errorbar(x,aprx2,er) Aula 03 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 -0.5 0 0.5 1 1.5 2 2.5 • Gráficos especiais em 2D – barh » cont=char('Asia','Europa','Africa','America do Norte', 'America do Sul'); » pop=[3332;696;694;437;307]; » barh(pop) População do Mundo (1992) » for i=1:5, America do Sul 5 gtext(cont(i,:)); end America do Norte 4 » xlabel('Polulação em Milhões') » title('População do Mundo (1992)') 3 Africa 2 Europa Asia 1 0 500 1000 1500 2000 Polulação em Milhões 2500 3000 3500 • Gráficos especiais em 2D – plotyy 4 » x=1:0.1:10; » y1=exp(-x).*sin(x); » y2=exp(x); » Ax=plotyy(x,y1,x,y2) 72.0021 74.0096 » hy1=get(Ax(1),'ylabel'); » hy2=get(Ax(2),'ylabel'); » set(hy1,'string','e^-x*sin(x)'); » set(hy2,'string','e^x'); 0.4 0.3 2 0.2 1.5 0.1 1 ex e-x*sin(x) Ax = x 10 2.5 0.5 0 -0.1 1 2 3 4 5 6 7 8 9 0 10 • Gráficos especiais em 2D – area 0.4 0.2 0 sin(x)./x » x=linspace(-3*pi,3*pi,100); » y=-sin(x)./x; » area(x,y) » xlabel('x') » ylabel('sin(x)./x') » hold on » x1=x(46:55); » y1=y(46:55); » area(x1,y1,'facecolor','y') -0.2 -0.4 -0.6 -0.8 -1 -8 -6 -4 -2 0 x 2 4 6 8 • Gráficos especiais em 2D – pie » cont=char('Asia','Europa','Africa','America do Norte', 'America do Sul'); » pop=[3332;696;694;437;307]; » pie(pop) America do Sul 6% » for i=1:5, 8% America do Norte gtext(cont(i,:)); end 13% Africa 61% Asia 13% Europa • Gráficos especiais em 2D – hist » y=randn(50,1); » hist(y) 9 8 7 6 5 4 3 2 1 0 -2.5 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 2.5 • Gráficos especiais em 2D – stairs » t=linspace(0,2*pi,200); » r=sqrt(abs(2*sin(5*t))); » y=r.*sin(t); » stairs(t,y) » axis([0 pi 0 inf]) 1.4 1.2 1 0.8 0.6 0.4 0.2 0 0 0.5 1 1.5 2 2.5 3 • Gráficos especiais em 2D – stem » t=linspace(0,2*pi,100); » f=exp(-0.2*t).*sin(t); » stem(t,f) 1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 0 1 2 3 4 5 6 7 • Gráficos especiais em 2D – compass » zx=cos(th); » zy=sin(th); » z=zx+i*zy; » compass(z) 90 1 120 60 0.8 0.6 150 30 0.4 0.2 180 0 210 330 240 300 270 • Gráficos especiais em 2D – Comet (faz uma pequena animação) » q=linspace(0,10*pi,200); » y=q.*sin(q); » comet(q,y) • Gráficos especiais em 2D – contour » r=-5:0.2:5; » [X,Y]=meshgrid(r,r); » Z=-0.5*X.^2 + X.*Y + Y.^2; » cs=contour(X,Y,Z); » clabel(cs) 5 20 30 4 3 10 2 1 -10 0 0 -1 -2 10 0 -3 20 -10 -4 -5 -5 30 -4 -3 -2 -1 0 1 2 3 4 5 • Gráficos especiais em 2D – quiver » r=-2:0.2:2; » [X,Y]=meshgrid(r,r); » Z=-0.5*X.^2 + X.*Y + Y.^2; » [dx,dy]=gradient(Z,.2,.2); » quiver(X,Y,dx,dy,2); 2.5 2 1.5 1 0.5 0 -0.5 -1 -1.5 -2 -2.5 -2.5 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 2.5 • Gráficos especiais em 2D – quiver » r=-2:0.2:2; » [X,Y]=meshgrid(r,r); » Z=-0.5*X.^2 + X.*Y + Y.^2; » pcolor(Z) » axis('off') » shading interp • Gráficos Múltiplos subplot(m,n,p) Dividi a janela em m x n sub-janelas, e plota o gráfico na sub-janela p. Aula 03 – Se vc quer fazer alguns gráficos e colocá-los lado a lado (sem sobrepor gráficos), use o comando “subplot”: • Plots 3D plot3(x,y,z,’estilo-opções’) Use agora o comando “zlabel” Aula 03 – O comando básico para produzir uma curva em 3 dimensões é: • Ângulo de visão Aula 03 – view(azimute,elavação) – onde o azimute é em graus partir do eixo y sendo o sentido antihorário o sentido positivo, e a elevação em graus é o ângulo medido a partir do plano x-y. – rotate3d on – mais versátil e de fácil uso, você mesmo manipula a melhor visão. • Plotando superfícies mesh(X,Y,Z) surf(X,Y,Z) – Utilize o comando “meshgrid” para gerar uma grade de pontos quadrangular. Aula 03 – Os comandos básicos para plotar uma superfície são: mesh e surf. • Superfícies em 3D – mesh e surf >> x=linspace(-3,3,100); >> [X,Y]=meshgrid(x,x); >> Z=X.*Y.*(X.^2-Y.^2)./((X.^2+Y.^2)); >> mesh(X,Y,Z) >> surf(X,Y,Z) >> mesh(X,Y,Z) • Especiais em 3D – fill3 » X=[0 0 0 0;1 1 -1 1;1 -1 -1 1]; » Y=[0 0 0 0; 4 4 4 4; 4 4 4 4]; » Z=[0 0 0 0; 1 1 -1 -1; -1 1 1 -1]; » fill3(X,Y,Z,rand(3,4)) » view(120,30) 1 0.5 0 -0.5 -1 -0.5 -1 0 0 1 2 0.5 3 4 1 • Especiais em 3D – contour3 » r=linspace(-3,3,50); » [x,y]=meshgrid(r,r); » z=-5./(1+x.^2+y.^2); » contour3(x,y,z) 0 -1 -2 -3 -4 -5 2 0 -2 -3 -2 -1 0 1 2 3 • Especiais em 3D – contour3 » r=linspace(-3,3,50); » [x,y]=meshgrid(r,r); » z=-5./(1+x.^2+y.^2); » contour3(x,y,z) 0 -1 -2 -3 -4 -5 2 0 -2 -3 -2 -1 0 1 2 3 • Especiais em 3D – surfc » u=-5:0.2:5; » [X,Y]=meshgrid(u,u); » Z = cos(X).*cos(Y).*exp(-sqrt(X.^2+Y.^2)/4); » surfc(X,Y,Z) » axis('off') • Especiais em 3D – surfl » u=-5:0.2:5; » [X,Y]=meshgrid(u,u); » Z = cos(X).*cos(Y).*exp(-sqrt(X.^2+Y.^2)/4); » surfl(X,Y,Z) » shading interp » colormap hot • Especiais em 3D – meshz » x=linspace(-3,3,50); » y=x; » [x,y]=meshgrid(x,y); » z=-5./(1+x.^2+y.^2); » meshz(x,y,z) • Especiais em 3D – waterfall » x=linspace(-3,3,50); » y=x; » [x,y]=meshgrid(x,y); » z=-5./(1+x.^2+y.^2); » waterfall(x,y,z) » hidden off 0 -1 -2 -3 -4 -5 4 2 4 2 0 0 -2 -2 -4 -4 • Especiais em 3D – pie3 » pop=[3332;696;694;437;307]; » pie3(pop) » title('população do mundo') população do mundo 6% 8% 13% 13% 61% • Especiais em 3D – stem3 » t=linspace(0,6*pi,200); » x=t; » y=t.*sin(t); » z=exp(t/10)-1; » stem3(x,y,z) 6 5 4 3 2 1 0 20 10 20 15 0 10 -10 5 -20 0 • Especiais em 3D – ribbon » t=linspace(0,5*pi,100); » y=sin(t); » ribbon(t,y,0.1) 1 0.5 0 -0.5 -1 20 1.1 15 1.05 10 1 5 0.95 0 0.9 • Especiais em 3D – sphere » sphere(20) ou » [x,y,z]=sphere(20); » surf(x,y,z) » axis('equal') • Especiais em 3D – cylinder » z=0:0.02:1; » r=sin(3*pi*z)+2; » cylinder(r) • Especiais em 3D – slice » v=[-3:0.2:3]; » [x,y,z]=meshgrid(v,v,v); » f=(x.^2+y.^2-z.^2); » xv=[-2 2.5]; » yv=2.5; » zv=0; » slice(x,y,z,f,xv,yv,zv) » view(-30,30) » xlabel('x') » ylabel('y') » zlabel('z') » colorbar(‘horiz’) • Plotando informações volumétricas – As funções disponíveis para visualização de informação volumétrica são: “slice”, “isosurface”, “isonormal”, “isocaps”, “subvolume”, “reducevolume”, “smooth3”, “reducepatch”. Veja helpdesk para mais informações. • Plotando superfícies interpoladas – Muitas vezes, nós temos alguma informação em forma (x,y,z) e queremos ajustar uma superfície a essa informação. Para isso usamos o comando “griddata”. [Xi,Yi,Zi]=griddata(x,y,z,xi,yi,‘método) • Plotando superfícies interpoladas » xv=2*rand(1,100)-1; » yv=2*rand(1,100)-1; » zv=3./(1+xv.^2+yv.^2); » stem3(xv,yv,zv) 3 2.5 2 1.5 1 0.5 0 1 0.5 1 0.5 0 0 -0.5 -0.5 -1 -1 • Plotando superfícies interpoladas » xi=linspace(-1,1,30); » yi=xi; » [xi,yi]=meshgrid(xi,yi); » [Xi,Yi,Zi]=griddata(xv,yv,zv,xi,yi,'v4'); » surf(Xi,Yi,Zi) • Handle Graphics – O que é um handle? São números associados a todo objeto de uma figura. Hierarquia dos objetos gráficos: • Propriedade dos objetos » h=plot(1:20) h= 1.0056 » get(h) Color = [0 0 1] EraseMode = normal LineStyle = LineWidth = [0.5] Marker = none MarkerSize = [6] MarkerEdgeColor = auto MarkerFaceColor = none XData = [ (1 by 20) double array] YData = [ (1 by 20) double array] ZData = [] ... • Propriedade dos objetos » h=plot(1:20) h= 1.0056 » get(h) Color = [0 0 1] EraseMode = normal LineStyle = LineWidth = [0.5] Marker = none MarkerSize = [6] MarkerEdgeColor = auto MarkerFaceColor = none XData = [ (1 by 20) double array] YData = [ (1 by 20) double array] ZData = [] ... • Propriedade dos objetos » h=plot(1:20) h= 1.0056 » set(h,'Linewidth',2) %muda a espessura da linha » set(h,'Color',[0 1 1]) %muda a cor da linha • Animação (Fazer um filme) nframes = 36; Frames = moviein(nframes); angulo = linspace(0,360,36); x=linspace(-3,3,100); [X,Y]=meshgrid(x,x); Z=X.*Y.*(X.^2-Y.^2)./((X.^2+Y.^2)); mesh(X,Y,Z) for i=1:nframes view(angulo(i),30) Frames(:,i)=getframe; end movie(Frames,2)