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

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

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

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

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

UNIVERSIDADE DA BEIRA INTERIOR

Versão: 15 de Junho de 2007

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

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

• Scripts

• Funções

• Programação

• Gráficos– 2D– 3D– Animação

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

Pro

gram

ação e A

plicaçõ

es G

rá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)

Scripts

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

Pro

gram

ação e A

plicaçõ

es G

ráficas• Exemplo de um script

Vamos escrever um script para resolver o seguinte sistema linear de equações:

5

3

2

312

1263

25

3

2

1

x

x

x

rr

r

rr

Ax=b, onde A depende de uma variável r.

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

Pro

gram

ação e A

plicaçõ

es G

ráficas• Executando o script no MATLAB

>> r = 1

r =

1

>> solvex

det_A =

64

x =

-0.0312 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

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

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

Pro

gram

ação e A

plicaçõ

es G

ráficas

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

Exercício 1Faç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.

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

Pro

gram

ação e A

plicaçõ

es G

rá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.

Funções

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

Pro

gram

ação e A

plicaçõ

es G

rá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.

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

• 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.

Pro

gram

ação e A

plicaçõ

es G

ráficas

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

• Para executar uma funçãoConsidere uma função, cuja 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.

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

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

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

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

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

Pro

gram

ação e A

plicaçõ

es G

rá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

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

• Exercício 1Escreva uma função cuja entrada é um valor x

em graus e o converte para radianos.

• Exercício 2Faça uma função que dadas 2 matrizes calcule a

soma e diferença.

• Exercício 3Construa uma função que converte a pressão de

atm para N/m2.

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

Pro

gram

ação e A

plicaçõ

es G

ráficas

• Programação

– Conjunto de comandos usados para controlar o fluxo das operações.

– Tipos:

(a) “for” e “while” – para “loops”(b) “if-elseif-else” – estrutura condicional simples(c) “switch-case-otherwise” – estrutura

condicional avançada

– Todos esses controladores de fluxo devem terminar com “end”.

Programação

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

Pro

gram

ação e A

plicaçõ

es G

rá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.

% Exemplofor m=1:100 num = 1/(m+1)end

% Exemplofor n = 100:-2:0, k=1/(exp(n)), end

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

Pro

gram

ação e A

plicaçõ

es G

rá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.

% Exemplonum = 1; i = 1;while num<10000 num = 2^i; v = [i; num]; i = i + 1;end

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

Pro

gram

ação e A

plicaçõ

es G

ráficas• Condicional simples – “if-elseif-else”

– Cria blocos condicionais.

% Exemploi = 6; j = 21;if i > 5 k = i;elseif (i > 1) & (j == 20) k = 5*i + jelse k = 1;end

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

Pro

gram

ação e A

plicaçõ

es G

rá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).

% Exemplo 1flag = 1;switch flagcase 1 “1º bloco computacional”case 2 “2º bloco computacional”otherwise “último bloco computacional”end

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

• 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

• Operadores Pro

gram

ação e A

plicaçõ

es G

ráficas

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

Pro

gram

ação e A

plicaçõ

es G

rá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.

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

Pro

gram

ação e A

plicaçõ

es G

ráficas• Exemplos - break

% Exemplo 1u = [2 4 8 4 -1 2]; 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)end

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

Pro

gram

ação e A

plicaçõ

es G

ráficas• Exemplos - error

function c = crossprod(a,b)% Calcula o prod. Escalar de dois vectoresif nargin ~= 2 % se não for 2 variáveis de entrada

error('São necessárias duas variáveis de entrada') endif length(a) == 3 & length(b) == 3 % começa o cálculo c = cross(a,b);else

error('Os vectores devem ter dimensão 3') end

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

Pro

gram

ação e A

plicaçõ

es G

rá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;end

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

Pro

gram

ação e A

plicaçõ

es G

rá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)”).

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

Exercício 1Faç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 3Altere os programas dos capítulos anteriores de modo que

peçam as entradas de modo interactivo.

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

Pro

gram

ação e A

plicaçõ

es G

rá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

Arquivos de entrada e saída

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

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

• Formatação de arquivos

Pro

gram

ação e A

plicaçõ

es G

ráficas

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

Exercício 1Construa 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 3Faç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.

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

Pro

gram

ação e A

plicaçõ

es G

rá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);

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

Pro

gram

ação e A

plicaçõ

es G

ráficas• Exemplos – Ler um arquivo

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

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

Pro

gram

ação e A

plicaçõ

es G

rá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.

Gráficos

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

Pro

gram

ação e A

plicaçõ

es G

rá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’)

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

Pro

gram

ação e A

plicaçõ

es G

ráficas• Opções de estilo

Cor linha Descriçãoy (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

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

Pro

gram

ação e A

plicaçõ

es G

ráficas• Controle do eixo

– Pode-se mudar os limites dos eixos com o

comando “axis”

axis([xmin xmax ymin ymax])

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

Pro

gram

ação e A

plicaçõ

es G

rá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

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

Pro

gram

ação e A

plicaçõ

es G

rá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’, ...)

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

Pro

gram

ação e A

plicaçõ

es G

rá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 = ty3 = t-t3/3!+t5/5!

Usando as funções xlabel, ylabel, axis, gtext, hold on, plot...

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

Pro

gram

ação e A

plicaçõ

es G

ráficas• Exercício (solução)

x=linspace(0,2*pi,100);y1=sin(x);plot(x,y1)hold ony2=x;plot(x,y2,‘--’)y3=x-(x.^3)/6+(x.^5)/120;plot(x,y3,‘o’)axis([0 5 -1 5])Hold off

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

Aula 03

• Gráficos especiais em 2D – fplot

0 5 10 15 20 25 30-30

-20

-10

0

10

20

30

» fplot('x.*sin(x)',[0 10*pi])

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

10-3

10-2

10-1

100

0

1

2

3

4

5

6

7

• Gráficos especiais em 2D – semilogx

» t=linspace(0,2*pi,200);

» x=exp(-t);

» y=t;

» semilogx(x,y), grid

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

0 1 2 3 4 5 6 710

0

101

102

103

• Gráficos especiais em 2D – semilogy

» t=linspace(0,2*pi,200);

» semilogy(t,exp(t)), grid

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

• Gráficos especiais em 2D – loglog

» t=linspace(0,2*pi,200);

» x=exp(t);

» y=100+exp(2*t);

» loglog(x,y), grid

100

101

102

103

102

103

104

105

106

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

0.5

1

1.5

30

210

60

240

90

270

120

300

150

330

180 0

• Gráficos especiais em 2D – polar

» t=linspace(0,2*pi,200);» r=sqrt(abs(2*sin(5*t)));» polar(t,r)

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

-1.5 -1 -0.5 0 0.5 1 1.5

-1

-0.5

0

0.5

1

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

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

0 0.5 1 1.5 2 2.5 30

0.2

0.4

0.6

0.8

1

1.2

1.4

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

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

-0.5 0 0.5 1 1.5 2 2.50

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

• Gráficos especiais em 2D – errorbar

» x=0:0.1:2;» aprx2=x-x.^3/6;» er=aprx2-sin(x);» errorbar(x,aprx2,er)

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

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

0 500 1000 1500 2000 2500 3000 3500

1

2

3

4

5

Asia

Europa

Africa

America do Norte

America do Sul

Polulação em Milhões

População do Mundo (1992)

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

1 2 3 4 5 6 7 8 9 10-0.1

0

0.1

0.2

0.3

0.4

e- x*si

n(x)

1 2 3 4 5 6 7 8 9 100

0.5

1

1.5

2

2.5x 10

4

ex

• 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 =

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

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

-8 -6 -4 -2 0 2 4 6 8-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

x

sin(

x)./

x

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

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

• 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

61%

13%

13%

8%

6%

Asia Europa

Africa

America do Norte

America do Sul

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

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

0 0.5 1 1.5 2 2.5 30

0.2

0.4

0.6

0.8

1

1.2

1.4

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

• Gráficos especiais em 2D – stem

» t=linspace(0,2*pi,100);» f=exp(-0.2*t).*sin(t);» stem(t,f)

0 1 2 3 4 5 6 7-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

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

• Gráficos especiais em 2D – compass

» zx=cos(th);» zy=sin(th);» z=zx+i*zy;» compass(z)

0.2

0.4

0.6

0.8

1

30

210

60

240

90

270

120

300

150

330

180 0

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

• Gráficos especiais em 2D – Comet (faz uma pequena animação)

» q=linspace(0,10*pi,200);» y=q.*sin(q);» comet(q,y)

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

• 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 -4 -3 -2 -1 0 1 2 3 4 5-5

-4

-3

-2

-1

0

1

2

3

4

5

-10

-10

0

0

10

10

20

20

30

30

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

• 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

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

• 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

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

Pro

gram

ação e A

plicaçõ

es G

rá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.

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

Pro

gram

ação e A

plicaçõ

es G

rá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”

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

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.

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

Pro

gram

ação e A

plicaçõ

es G

rá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)

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

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

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

• 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

01

23

4

-1

-0.5

0

0.5

1

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

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

-3-2

-10

12

3

-2

0

2

-5

-4

-3

-2

-1

0

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

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

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

• 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

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

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

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

• 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

-4-2

02

4

-4

-2

0

2

4-5

-4

-3

-2

-1

0

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

• Especiais em 3D – pie3

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

13%

13%

população do mundo

8%6%

61%

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

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

05

1015

20

-20

-10

0

10

200

1

2

3

4

5

6

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

• Especiais em 3D – ribbon

» t=linspace(0,5*pi,100);» y=sin(t);» ribbon(t,y,0.1)

0.90.95

11.05

1.1

0

5

10

15

20-1

-0.5

0

0.5

1

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

• Especiais em 3D – sphere

» sphere(20)

ou

» [x,y,z]=sphere(20);» surf(x,y,z)» axis('equal')

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

• Especiais em 3D – cylinder

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

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

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

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

• 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.

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

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

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

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

-1-0.5

00.5

1

-1

-0.5

0

0.5

10

0.5

1

1.5

2

2.5

3

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

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

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

• Handle Graphics

– O que é um handle?

São números associados a todos os objectos de uma figura.

Hierarquia dos objectos gráficos:

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

• Propriedade dos objectos» h=plot(1:20)

h =

1.0056

» get(h)Color = [0 0 1]EraseMode = normalLineStyle = -LineWidth = [0.5]Marker = noneMarkerSize = [6]MarkerEdgeColor = autoMarkerFaceColor = noneXData = [ (1 by 20) double array]YData = [ (1 by 20) double array]ZData = [] ...

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

• 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

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

• 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;endmovie(Frames,2)

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

• Animação (Fazer um filme) Pro

gram

ação e A

plicaçõ

es G

ráficas