A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Programação e Aplicações Gráficas

Apresentações semelhantes


Apresentação em tema: "Programação e Aplicações Gráficas"— Transcrição da apresentação:

1 Programação e Aplicações Gráficas
UNIVERSIDADE DA BEIRA INTERIOR Versão: 15 de Junho de 2007

2 Programação e Aplicações Gráficas
Scripts Funções Programação Gráficos 2D 3D Animação

3 Programação e Aplicações Gráficas
Scripts Programação e Aplicações Gráficas Ficheiros Scripts Script é um conjunto de comandos do MATLAB gravados num ficheiro (com a extensão .m chamados m-files). Para executar basta escrever o nome do arquivo (sem a extensão .m). É equivalente a escrever todos os comandos na janela principal, só que armazenado num arquivo. Trabalha com variáveis globais (apresentadas no directório de trabalho)

4 Programação e Aplicações Gráficas
Exemplo de um script Vamos escrever um script para resolver o seguinte sistema linear de equações: Ax=b, onde A depende de uma variável r.

5

6 Programação e Aplicações Gráficas
Executando o script no MATLAB >> r = 1 r = 1 >> solvex det_A = 64 x = 0.2344 1.6875 Os valores do “det_A” e “x" aparecem na janela porque não tem ponto e vírgula no final da linha correspondente

7 Programação e Aplicações Gráficas
Cuidados que se deve ter: NUNCA grave o script com o mesmo nome de uma variável nele inscrita. O nome do arquivo script deve começar por uma letra. Seja cuidadoso com os nomes das variáveis no script (todas essas variáveis são gravadas no directório de trabalho)

8 Exercício 1 Exercício 2 Exercício 3
Faça um script que mostra na janela principal uma tabela de conversão de graus Celsius para graus Fahrenheit. ( Considere C=-40:5:100) Exercício 2 Escreva um script que representa a função tangente entre –pi/2 e pi/2 e insere o título e legendas nos eixos. Exercício 3 Construa um script que transforma um número x em graus, num número y em radianos.

9 Programação e Aplicações Gráficas
Funções Programação e Aplicações Gráficas Funções (function files) Funções são m-files contendo um conjunto de comandos do MATLAB, 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 definindo as variáveis de entrada e de saída, e o nome da função. O nome da função deve ter o mesmo nome do arquivo a ser gravado.

10 Programação e Aplicações Gráficas
Dicas para criação de funções Crie uma estrutura lógica e pense na sequência computacional antes de escrever o código. Escreva-a num papel!!! Defina as variáveis de entrada e saída. Traduza o que escreveu no papel para o MATLAB. Defina nomes lógicos para as variáveis e funções. Escreva o máximo de comentários possíveis no código. Divida grandes blocos computacionais e escreva-os em funções separadas. Verifique os erros e a saída com mensagens de erro e use o artifício do “;” para verificar os passos intermédios de cálculo.

11 Programação e Aplicações Gráficas
Cuidados que se deve ter: O termo de definição deve ser escrito com letra minúscula (“function” e não “Function”) . Os comentários começam com “%”, podendo ser colocados em qualquer lugar. Todas as linhas com comentários 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 parênteses rectos [ ]. O nome das variáveis de entrada e de saída na linha do termo de definição são variáveis locais.

12 Para executar uma função
Considere uma função, cuja linha de definição é a seguinte: function [rho,H,F] = motion(x,y,t); As variáveis xt, yt e time devem ser definidas antes de executar o comando. >> [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 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.

13 >> [det_A,y] = solvex(1); >> det_A ans = 64 >> y
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 0.2344 1.6875

14 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”).

15 Programação e Aplicações Gráficas
Outros Comandos pcode nomedoarquivo – protege o direito de uso do código. profile – avalia a performance das funções. profile on [det_A,x] = solvex(r) profile report

16 Exercício 1 Exercício 2 Exercício 3
Escreva uma função cuja entrada é um valor x em graus e o converte para radianos. Exercício 2 Faça uma função que dadas 2 matrizes calcule a soma e diferença. Exercício 3 Construa uma função que converte a pressão de atm para N/m2.

17 Programação e Aplicações Gráficas
Conjunto de comandos usados para controlar o fluxo das operações. Tipos: “for” e “while” – para “loops” “if-elseif-else” – estrutura condicional simples “switch-case-otherwise” – estrutura condicional avançada Todos esses controladores de fluxo devem terminar com “end”.

18 Programação e Aplicações Gráficas
Fazendo “loops” – “for” Um “for” é usado para repetir uma operação ou um grupo de operações para um número fixo de vezes. % Exemplo for m=1:100 num = 1/(m+1) end for n = 100:-2:0, k=1/(exp(n)), end

19 Programação e Aplicações Gráficas
Fazendo “loops” – “while” 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. % Exemplo num = 1; i = 1; while num<10000 num = 2^i; v = [i; num]; i = i + 1; end

20 Programação e Aplicações Gráficas
Condicional simples – “if-elseif-else” Cria blocos condicionais. % Exemplo i = 6; j = 21; if i > 5 k = i; elseif (i > 1) & (j == 20) k = 5*i + j else k = 1; end

21 Programação e Aplicações Gráficas
Condicional avançado – “switch-case-otherwise” Cria blocos condicionais. Uma variável é usada como um dispositivo de direccionamento (switch), onde cada valor dessa variável direcciona para um caso (case). Programação e Aplicações Gráficas % Exemplo 1 flag = 1; switch flag case 1 “1º bloco computacional” case 2 “2º bloco computacional” otherwise “último bloco computacional” end

22 Programação e Aplicações Gráficas
Operadores Programação e Aplicações Gráficas Relacionais <, <=, >, >=, ==, ~= Comparam os elementos correspondentes entre duas matrizes da mesma dimensão Se for comparar uma matriz com um escalar então compara cada elemento da matriz com o escalar O resultado é uma matriz de 1 e 0 Lógicos “&” ou “AND” ; “|” ou “OR” ; “~” ou “NOT” ; “XOR” Devolve variável Booleana, 1 ou 0

23 Programação e Aplicações Gráficas
Comandos de paragem break – dentro de um “for” ou “while”, termina a execução de um “loop” - ciclo. 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.

24 Programação e Aplicações Gráficas
Exemplos - break % Exemplo 1 u = [ ]; v = u;a=0; for i = length(v) if u(i) < 0; % check para u negativo break % termina a execução do loop end a = a + v(i)

25 Programação e Aplicações Gráficas
Exemplos - error function c = crossprod(a,b) % Calcula o prod. Escalar de dois vectores if nargin ~= 2 % se não for 2 variáveis de entrada 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 vectores devem ter dimensão 3')

26 Programação e Aplicações Gráficas
Exemplos - return x = exp(sqrt(163)) n = input(‘ Escreva o número max de iterações n=') while n >= 1 if n <=0 return end x = log(x) n = n - 1;

27 Programação e Aplicações Gráficas
Outros comandos input(‘mensagem’, opção) – mostra um texto na janela de comandos e espera que o utilizador introduza uma entrada pelo teclado. menu(‘Título’,‘opção1’, ‘opção2’,...) – cria um menu na janela de comandos e efectua as opções do menu. pause – pára a execução da rotina e espera um sinal do utilizador ou efectua uma pausa durante um determinado tempo (“pause(n)”).

28 Exercício 1 Exercício 2 Exercício 3
Faça um programa que verifica se um número é primo. Exercício 2 Um fornecedor faz o seguinte desconto num determinado produto: mais de 200 unidades 7%; de 100 a 200 uni. 5%; de 50 a 100 uni. 3%; menos de 50 unidades tem desconto. Escreva um programa que calcula o preço total dado o nº. de unidades e o preço unitário. Exercício 3 Altere os programas dos capítulos anteriores de modo que peçam as entradas de modo interactivo.

29 Programação e Aplicações Gráficas
Arquivos de entrada e saída Programação e Aplicações Gráficas Entrada e Saída 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: 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: lê informação binário num arquivo fscanf: lê informação formatada num arquivo fprintf: escreve informação formatada num arquivo

30 Programação e Aplicações Gráficas
Formatação de arquivos Formato Descrição %c Simples caracter %d Notação decimal %e Notação exponencial (usando “e” minúsculo ) %E Notação exponencial (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

31 Exercício 1 Exercício 2 Exercício 3
Construa um programa que escreve num ficheiro de texto uma tabela de conversão entre as unidades de temperatura Fahrenheit, Kelvin e Celsius. Exercício 2 Crie um programa que gera aleatoriamente um conjunto de 100 elementos normalmente distribuídos e os escreva num ficheiro. Exercício 3 Faça um programa que lê o ficheiro da alínea anterior, calcule a média dos dados e apresente um gráfico dos valores lidos.

32 Programação e Aplicações Gráficas
Exemplos – Escrever num arquivo 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);

33 Programação e Aplicações Gráficas
Exemplos – Ler um arquivo fid = fopen('temperatura.tab'); lixo=fscanf(fid,'%25c',[1 1]) lixo=fscanf(fid,'%20c',[1 1]) temp = fscanf(fid,'%i %f',[2 inf]) fclose(fid);

34 Programação e Aplicações Gráficas
Gráficos Programação e Aplicações Gráficas Gráficos Boas ferramentas de visualização; Gráficos 2D, 3D e animações; Especial sobre a parte gráfica do MATLAB é fácil o uso e expansibilidade.

35 Programação e Aplicações Gráficas
Gráficos 2D O comando básico e talvez o mais proveitoso para produzir um gráfico em 2 dimensões é: plot(xvalores,yvalores,’estilo-opções’)

36 Programação e Aplicações Gráficas
Opções de estilo Cor 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

37 Programação e Aplicações Gráficas
Controle do eixo Pode-se mudar os limites dos eixos com o comando “axis” axis([xmin xmax ymin ymax])

38 Programação e Aplicações Gráficas
Outras opções do comando “axis” axis(‘equal’) – coloca uma escala igual em ambos os eixos axis(‘square’) – transforma a área do gráfico rectângular num quadrado axis(‘normal’) – restaura os eixos para valores padrões axis(‘off’) – remove a área do gráfico e legendas

39 Programação e Aplicações Gráficas
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’, ...)

40 Programação e Aplicações Gráficas
Exercício Fazer o gráfico da 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! Usando as funções xlabel, ylabel, axis, gtext, hold on, plot...

41 Programação e Aplicações Gráficas
Exercício (solução) 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([ ]) Hold off

42 Aula 03 Gráficos especiais em 2D fplot » fplot('x.*sin(x)',[0 10*pi])

43 Gráficos especiais em 2D
semilogx » t=linspace(0,2*pi,200); » x=exp(-t); » y=t; » semilogx(x,y), grid

44 Gráficos especiais em 2D
semilogy » t=linspace(0,2*pi,200); » semilogy(t,exp(t)), grid

45 Gráficos especiais em 2D
loglog » t=linspace(0,2*pi,200); » x=exp(t); » y=100+exp(2*t); » loglog(x,y), grid

46 Gráficos especiais em 2D
polar » t=linspace(0,2*pi,200); » r=sqrt(abs(2*sin(5*t))); » polar(t,r)

47 Gráficos especiais em 2D
fill » 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')

48 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])

49 Gráficos especiais em 2D
errorbar » x=0:0.1:2; » aprx2=x-x.^3/6; » er=aprx2-sin(x); » errorbar(x,aprx2,er)

50 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) » for i=1:5, gtext(cont(i,:)); end » xlabel('Polulação em Milhões') » title('População do Mundo (1992)')

51 Gráficos especiais em 2D
plotyy » x=1:0.1:10; » y1=exp(-x).*sin(x); » y2=exp(x); » Ax=plotyy(x,y1,x,y2) Ax = » hy1=get(Ax(1),'ylabel'); » hy2=get(Ax(2),'ylabel'); » set(hy1,'string','e^-x*sin(x)'); » set(hy2,'string','e^x');

52 Gráficos especiais em 2D
area » 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')

53 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) » for i=1:5, gtext(cont(i,:)); end

54 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])

55 Gráficos especiais em 2D
stem » t=linspace(0,2*pi,100); » f=exp(-0.2*t).*sin(t); » stem(t,f)

56 Gráficos especiais em 2D
compass » zx=cos(th); » zy=sin(th); » z=zx+i*zy; » compass(z)

57 Gráficos especiais em 2D
Comet (faz uma pequena animação) » q=linspace(0,10*pi,200); » y=q.*sin(q); » comet(q,y)

58 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)

59 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);

60 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

61 Programação e Aplicações Gráficas
Gráficos Múltiplos Se pretender fazer alguns gráficos e colocá-los lado a lado (sem sobrepor gráficos), use o comando “subplot”: subplot(m,n,p) Dividi a janela em m x n sub-janelas, e desenha o gráfico na sub-janela p.

62 Programação e Aplicações Gráficas
Plots 3D O comando básico para produzir uma curva em 3 dimensões é: plot3(x,y,z,’estilo-opções’) Use agora o comando “zlabel”

63 Aula 03 Ângulo de visão view(azimute,elavação) – onde o azimute é em graus partir do eixo y sendo o sentido anti-horá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.

64 Programação e Aplicações Gráficas
Gráfico de superfícies Os comandos básicos para fazer um gráfico de uma superfície são: mesh e surf. Utilize o comando “meshgrid” para gerar uma grelha de pontos quadrangular. mesh(X,Y,Z) surf(X,Y,Z)

65 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)

66 Especiais em 3D fill3 » X=[0 0 0 0;1 1 -1 1;1 -1 -1 1];
» Y=[ ; ; ]; » Z=[ ; ; ]; » fill3(X,Y,Z,rand(3,4)) » view(120,30)

67 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)

68 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')

69 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

70 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)

71 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

72 Especiais em 3D pie3 » pop=[3332;696;694;437;307]; » pie3(pop)
» title('população do mundo')

73 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)

74 Especiais em 3D ribbon » t=linspace(0,5*pi,100); » y=sin(t);
» ribbon(t,y,0.1)

75 Especiais em 3D sphere » sphere(20) ou » [x,y,z]=sphere(20);
» surf(x,y,z) » axis('equal')

76 Especiais em 3D cylinder » z=0:0.02:1; » r=sin(3*pi*z)+2;
» cylinder(r)

77 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’)

78 Representando gráficamente 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.

79 [Xi,Yi,Zi]=griddata(x,y,z,xi,yi,‘método)
Gráfico de superfícies interpoladora 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)

80 Gráfico de superfícies interpoladoras
» xv=2*rand(1,100)-1; » yv=2*rand(1,100)-1; » zv=3./(1+xv.^2+yv.^2); » stem3(xv,yv,zv)

81 Gráfico de superfícies interpoladoras
» 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)

82 Handle Graphics O que é um handle?
São números associados a todos os objectos de uma figura. Hierarquia dos objectos gráficos:

83 Propriedade dos objectos
» 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 = [] ...

84 Propriedade dos objectos
» 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

85 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)

86 Programação e Aplicações Gráficas
Animação (Fazer um filme)


Carregar ppt "Programação e Aplicações Gráficas"

Apresentações semelhantes


Anúncios Google