Upload
internet
View
102
Download
0
Embed Size (px)
Citation preview
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
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
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.
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
• 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
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.
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
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.
• 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
• 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.
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”).
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
• 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.
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
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
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
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
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
• 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
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.
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
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
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
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)”).
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.
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
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
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.
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);
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);
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
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’)
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
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])
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
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’, ...)
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...
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
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])
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
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
• 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
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)
-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')
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])
-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)
• 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)
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');
-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')
• 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
• 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
• 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
• 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
• 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 -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
• 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
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.
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”
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.
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)
• 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
01
23
4
-1
-0.5
0
0.5
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)
-3-2
-10
12
3
-2
0
2
-5
-4
-3
-2
-1
0
• 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
-4-2
02
4
-4
-2
0
2
4-5
-4
-3
-2
-1
0
• 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%
• 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
• 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
• 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’)
• 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.
• 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)
• 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
• 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)
• Handle Graphics
– O que é um handle?
São números associados a todos os objectos de uma figura.
Hierarquia dos objectos gráficos:
• 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 = [] ...
• 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
• 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)
• Animação (Fazer um filme) Pro
gram
ação e A
plicaçõ
es G
ráficas