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
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)
Programação e Aplicações
Gráficas
• Ficheiros Scripts
Vamos escrever um script para resolver o seguinte
sistema linear de equações:
r   x1  2
5 2r
   
3 6

2
r

1
x

3




2


2 r  1 3r   x3  5
Ax=b, onde A depende de uma variável r.
Programação e Aplicações
Gráficas
• Exemplo de um script
>> 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
Programação e Aplicações
Gráficas
• Executando o script no MATLAB
– 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)
Programação e Aplicações
Gráficas
• Cuidados que se deve ter:
Exercício 1
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.
Funções
– 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.
Programação e Aplicações
Gráficas
• Funções (function files)
– 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.
Programação e Aplicações
Gráficas
• Dicas para criação de funções
– 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.
Programação e Aplicações
Gráficas
• Cuidados que se deve ter:
• Para executar uma função
Considere 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);
A
x = A\b;
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”).
– 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
Programação e Aplicações
Gráficas
• Outros Comandos
• Exercício 1
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.
Programação
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 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
% Exemplo
for n = 100:-2:0, k=1/(exp(n)), end
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
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
Programação e Aplicações
Gráficas
•
•
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
Programação e Aplicações
Gráficas
– Cria blocos condicionais. Uma variável é usada
como um dispositivo de direccionamento
(switch), onde cada valor dessa variável
direcciona para um caso (case).
• Operadores
– 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
Programação e Aplicações
Gráficas
• Relacionais
–
<, <=, >, >=, ==, ~=
– 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.
Programação e Aplicações
Gráficas
• Comandos de paragem
Exemplos - break
% Exemplo 1
u = [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
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')
end
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;
end
Programação e Aplicações
Gráficas
•
– 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)”).
Programação e Aplicações
Gráficas
• Outros comandos
Exercício 1
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.
• 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
Programação e Aplicações
Gráficas
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
Programação e Aplicações
Gráficas
• Formatação de arquivos
Exercício 1
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.
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);
Programação e Aplicações
Grá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);
Programação e Aplicações
Gráficas
•
Gráficos
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.
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’)
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
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])
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
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’, ...)
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...
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([0 5 -1 5])
Hold off
Programação e Aplicações
Gráficas
•
•
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
7
» t=linspace(0,2*pi,200);
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
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
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
90
» 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
•
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')
1
0.5
0
-0.5
-1
-1.5
-1
-0.5
0
0.5
1
1.5
•
Gráficos especiais em 2D
– bar
1.4
» 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])
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
1
» x=0:0.1:2;
» aprx2=x-x.^3/6;
» er=aprx2-sin(x);
» errorbar(x,aprx2,er)
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
– 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
– 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.
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”
Programação e Aplicações
Gráficas
•
•
Â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.
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)
Programação e Aplicações
Gráficas
•
•
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
– 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’)
•
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)
3
2.5
2
1.5
1
0.5
0
1
0.5
1
0.5
0
0
-0.5
-0.5
-1
-1
•
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 = 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 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;
end
movie(Frames,2)
Programação e Aplicações
Gráficas
Animação (Fazer um filme)
•
Download

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