Você está na página 1de 103

Matlab - Figuras e Animações

Daniel Martins Lima


Sumário
Introdução

Figuras
Introdução
Plotagem - plot
Customização
Customizações Avançadas
Customizações Avançadas - Anotações
Múltiplos gráficos - subplot
Salvando figuras
Salvando figuras

Animações

Figuras 3D

2/98
Section 1

Introdução

3/98
Introdução - Variáveis
I Variáveis no Matlab não possuem tipo explicito, elas podem
assumir qualquer “tipo"existente no Matlab, por exemplo,
numérico, string, array, célula, função de transferência, símbolos,
etc.
Exemplo:
I x = 6;
I x = ’teste’;
I x = tf(1,[1 1]);

I No Matlab, o gerenciamento de memória é feito pela plataforma,


assim, não é necessário alocar memória, tornando a declaração de
variáveis muito simples.
I Porém, se a variável for um array, por exemplo, não é possível
misturar elementos de tipos diferentes, com exceção da célula (ver
depois).
4/98
Introdução - Array/Vetor
I Array/Vetor são variáveis que possuem mais de um valor que são
armazenados em áreas distintas de memória, apesar de fazerem
parte da mesma variável.
I Para declarar um array linha → x = [1 -2 3 8]; x = [1,-2,3,8];
I os valores do array devem estar entre colchetes [ ].
I pode-se utilizar ’,’ entre os elementos para deixar explicito a
separação dos elementos.
I o símbolo ’;’ ao final do comando serve para evitar que o Matlab
imprima o resultado da operação inserida.
I Para declarar um array coluna → x = [1 ;-2; 3 ;8];
I o símbolo ’;’ dentro dos colchetes indica quebra de linha dentro do
array.
I Para trocar de array linha para array coluna, é possível utilizar o
símbolo ’ para transpor o array → x = [1,2,3,4]’, cria um vetor
coluna

5/98
Introdução - Array/Vetor
I Para acessar os elementos individuais, usa-se o nome da variável
seguida de (i) onde i é o índice do elemento.
I No Matlab, o primeiro índice é 1, ao contrário de outras linguagens.
I O índice deve ser exclusivamente um número inteiro positivo.

Exemplo:
I x = [1 -2 3 8]
I x(1) → retorna 1
I x(4) → retorna 8
I x = [1 ;-2; 3 ;8];
I x(2) → retorna -2
I x(3) → retorna 3

6/98
Introdução - Array/Vetor

I Existem formas mais complexas de acessar os valores de um array.


I É possível passar um conjunto de índices do array.

Exemplo:
I x = [2 -20 4 8 10 9 8];
I x([1 2 3]) → retorna [1 -20 4]
I x([1 1 1]) → retorna [2 2 2]
I x([4 3 2 1]) → retorna [8 4 -20 2]

7/98
Introdução - Array/Vetor
I Um operador interessante para conhecer é o ’:’, que cria uma
sequência de valores → x = -2:2; retorna x = [-2 -1 0 1 2]

Sintaxe:
I v1 :v2 → gera valores começando em v1 e incrementando de 1 em 1
unidade até v2
I v1 :inc:v2 → gera valores começando em v1 e incrementando de inc
em inc unidades até v2 . inc pode ser negativo se desejar criar uma
sequência decrescente.

Exemplo:
I x = -1:1 → retorna [-1 0 1]
I x = -2.1:2 → retorna [-2.1 -1.1 -0.1 0.9 1.9]
I x = -1:0.5:1 → retorna [-1 -0.5 0 0.5 1]
8/98
Introdução - Array/Vetor

I É possível utilizar o operado ’:’ para acessar os índices de um array


de acordo com alguma regra
I Além disso, existe o operador ’end’ que, utilizado no contexto de
índices de array, indica o último elemento do array

Exemplo:
I x = [-1 0 1 2 3 4];
I x(1:2) → retorna [-1 0]
I x(1:2:5) → retorna [-1 1 3]
I x(6:-1:3) → retorna [4 3 2 1]
I x(end:-1:5) → retorna [4 3]
I x(4:end) → retorna [2 3 4]

9/98
Introdução - Matrizes
I Matrizes nada mais são que arrays bidimensionais. A declaração é
feita da seguinte maneira → M = [1,2;3,4]
I O ’;’ quebra as linhas e ’,’ separa os elementos de uma mesma
linha. A ’,’ não é estritamente necessária.Tem-se que tomar
cuidado para que o número de elementos de cada linha sejam
iguais.
I O acesso aos elementos da matriz é feita de forma similar ao array
→ M(i,j), onde i e j se referem ao elemento da i-ésima linha e da
j-ésima coluna.

Exemplo:
I M = [1,2;3,4];
I M(1,1) → retorna 1
I M(1,2) → retorna 2
10/98
Introdução - Matrizes

I É possível utilizar o operador ’:’ e ’end’ para acessar os elementos


de uma matriz.

Exemplo:
I M(1:end,1) → retorna [1;3]
I M(1,1:2) → retorna [1,2]

11/98
Introdução - Matrizes

Exercício:
I Construir uma matriz 4 × 4 com elementos crescentes de 1 a 16.
1. M = 1:16;
2. M = reshape(M,4,4);
3. M = M’;

Sintaxe:
I M = reshape(x,m,n)
I Reformata a os elementos de x em uma nova matriz M de tamanho
m × n pegando construindo coluna por coluna.
I OBS: x deve possuir m*n elementos

12/98
Introdução - Matrizes

I É possível utilizar o operador ’:’ e ’end’ para fazer comandos de


atribuição

Exemplo:
I x = [] → cria um array vazio
I x(1:4) = 5 → retorna x = [5 5 5 5]
I x(5:7) = [8 6 8] → retorna x = [5 5 5 5 8 6 8]
I x(end+1) = 7 → retorna x = [5 5 5 5 8 6 8 7]

I O mesmo conceito pode ser aplicado a matrizes.

13/98
Introdução - Function Handles
I O Matlab permite a definição de funções de forma simplificada,
equivalente às funções inline em C. Essas funções são chamadas de
anônimas.
Sintaxe:
I h = @(arglist)anonymous_function
I arglist → lista de parâmetros que devem ser passados para a função
I anonymous_function → aqui deve-se definir a função a ser
realizada.
I h passa a ser o ponteiro para a função, o function handle.

Exemplo:
I f = @(x) 5.*sin(x)[] → cria f(x) = 5sin(x)
I y = f(5) → retorna y = -4.7946
I y = f(pi) → retorna y = 0
14/98
Introdução - Function Handles

I É possível definir funções com mais de uma variável.


I É interessante utilizar as operações ponto a ponto ao definir a
função para que possamos passar vetores/matrizes para a função,
assim ela avalia a função para cada elemento do vetor/matriz

Exemplo:
I f = @(x) 5.*sin(x)[] → cria f(x) = 5sin(x)
I y = f([5,pi,pi/2]) → retorna y = [-4.7946,0,5]

15/98
Introdução - Function Handles

Exercício:
I Defina function handles para as funções abaixo e teste as funções
para valores quaisquer e vetores/matrizes.
1. f (x ) = 5√sin(x ) − x 2 + 3
2. g(x ) = x 3 + e −2x − 5
3. h(w , t) = 25 − w 2 − t 2

16/98
Introdução - Function Handles

Exercício:
I Defina function handles para as funções abaixo e teste as funções
para valores quaisquer e vetores/matrizes.
1. f (x ) = 5√sin(x ) − x 2 + 3 → f = @(x) 5*sin(x)-x.^+3
2. g(x ) = x 3 + e −2x − 5
3. h(w , t) = 25 − w 2 − t 2

16/98
Introdução - Function Handles

Exercício:
I Defina function handles para as funções abaixo e teste as funções
para valores quaisquer e vetores/matrizes.
1. f (x ) = 5√sin(x ) − x 2 + 3 → f = @(x) 5*sin(x)-x.^+3
2. g(x ) = x 3 + e −2x − 5 → g = @(x) sqrt(x.^+exp(-2*x)-5)
3. h(w , t) = 25 − w 2 − t 2

16/98
Introdução - Function Handles

Exercício:
I Defina function handles para as funções abaixo e teste as funções
para valores quaisquer e vetores/matrizes.
1. f (x ) = 5√sin(x ) − x 2 + 3 → f = @(x) 5*sin(x)-x.^+3
2. g(x ) = x 3 + e −2x − 5 → g = @(x) sqrt(x.^+exp(-2*x)-5)
3. h(w , t) = 25 − w 2 − t 2 → h = @(w,t) 25-w.^2-t.^2

16/98
Introdução - Gerando dados

I O Matlab possui algumas funções interessantes para gerar vetor de


dados seguindo certas lógicas:
1. x = ini:inc:fim → gera um vetor de dados entre ini e fim com
incrementos de inc.
2. x = linspace(x,y,n) → gera um vetor de dados com n elementos
igualmente espaçados iniciando em x e terminando em y.
3. x = logspace(x,y,n) → gera um vetor de dados com n elementos
espaçados logaritmicamente entre 10x e 10y .

Exercício:
I Utilize uma das funções anteriores para gerar um vetor de dados e
aplique-os em uma das funções definidas anteriormente.

17/98
Introdução - Últimas dicas

I Lembre-se, o Matlab utiliza o


caracter % para fazer
comentários, todo texto após
esse símbolo não faz parte do
código do script.
I Além disso, utilize %% para
criar seções de código, como
mostrado na figura

18/98
Introdução - Últimas dicas

I Alguns atalhos de teclado


interessantes:
1. F5 → executa todo o script
2. CTRL+ENTER → executa a
seção do código atual
(indicada pela posição do
curso de texto)
3. CTRL+SHIFT+ENTER →
executa a seção do código
atual e passa o cursor de
texto para a próxima seção
4. F9 → executa somente o
código selecionado

19/98
Section 2

Figuras

20/98
Figuras - Introdução

I Com o Matlab é muito fácil plotar dados e automatizar o processo


de criação. Basicamente:
1. Gere ou obtenha os dados para plotar.
2. Execute a função de plotagem adequada.
3. Customize a plotagem da maneira desejada
I Trabalharemos com todas essas etapas durante o curso,
especialmente a parte de customização.

21/98
Figuras - Introdução

I Aprenderemos a transformar uma figura simples:

22/98
Figuras - Introdução

I Em uma figura complexa com várias customizações e, além disso,


de forma automatizada:

23/98
Figuras - Introdução

I Existem várias funções para plotar dados:


1. plot e plotyy
2. semilogy, semilogx e loglog
3. stem, bar, polarplot
4. etc.
I Todas tem suas particularidades mas todas funcionam de maneira
muito. Assim, vamos começar da mais básica → plot

24/98
Figuras - plot

Sintaxe:
I plot(x,y)
I x → vetor de dados do eixo x
I y → vetor de dados do eixo y
I Os vetores x e y precisam ter mesma dimensão!

Exemplo:
I x = [1 2 3 4 5]
I x=y
I plot(x,y)

25/98
Figuras - plot
I Para se trabalhar com um conjunto maior de dados, utiliza-se dados
“prontos"provenientes de algum outro lugar, ou gera-se dados
novos utilizando, por exemplo, os comandos linspace e logspace

Exercício:
I Implemente a função f (x ) = 5 sin(x ) − x 2 + 3
I Crie um vetor x com valores entre -5 e 5 com incrementos de 1
unidade.
I Plote o resultado

26/98
Figuras - plot
I Para se trabalhar com um conjunto maior de dados, utiliza-se dados
“prontos"provenientes de algum outro lugar, ou gera-se dados
novos utilizando, por exemplo, os comandos linspace e logspace

Exercício:
I Implemente a função f (x ) = 5 sin(x ) − x 2 + 3
I Crie um vetor x com valores entre -5 e 5 com incrementos de 1
unidade.
I Plote o resultado

I Observe que a função plot interpola linearmente os pontos da


função, assim, quando menor o espaçamento entre os pontos no
eixo x, mais suave fica a curva resultante.
I Repita o exercício anterior mas agora com incrementos de 0.1.

26/98
Figuras - plot

I E se quiséssemos plotar mais de uma curva? Há algumas maneiras


de se fazer isso.

Sintaxe:
I plot(x1,y1,x2,y2,...,xn,yn) → cada par xi/yi é um conjunto
diferente de dados
I plot(x,[y1 y2 y3 ... yn]) → os dados de x é comum a todos os
dados e yi é um vetor coluna com o mesmo número de elementos
de x.
I plot(x1,y1); hold on ; plot(x2,y2); plot(x3,y3) ... → o comando
hold on obriga o Matlab a manter as curvas já plotadas.
I Em todos os casos é possível repetir a sequência quantas vezes for
necessário.

27/98
Figuras - plot

Exercício:
I Crie dois novos conjuntos de dados → y2 = 1+f(x); y2 = 2+f(x);
I Crie três figuras distintas e em cada uma delas plote as três curvas
utilizando os diferentes métodos.
I Utilize o comando figure para gerar uma nova figura.

28/98
Figuras - plot

29/98
Figuras - Customização

I Com as plotagens prontas é possível customizar a figura gerada.


Existem várias customizações possíveis, por exemplo:
1. Título, rótulos dos eixos x e y.
2. Legenda.
3. Linhas dos espaçamentos (grid), os espaçamentos entre essas linhas,
limites dos eixos.
4. Fonte utilizada nos textos, tamanho da fonte, cores.
5. Cor do traçado da curva, tipo do traçado, espessura, etc.
6. Anotações com linhas, setas, texto, círculos, etc.
7. E muito mais.

30/98
Figuras - Customização

I Todas essa customizações podem ser feitas de forma manual


utilizando as ferramentas de plotagem (Plot Tools) do matlab:

31/98
Figuras - Customização

32/98
Figuras - Customização
I Apesar das customizações poderem serem feitas de maneira
manual, é interessante aprender como utilizar as funções do matlab
para realizar isso. Dessa maneira, é possível utilizar scripts
automatizados para geração de figuras. Algumas funções básicas
para customização de figuras:

Sintaxe:
I title(’texto’) → Insere um título na figura
I ylabel(’texto’) → Insere um texto no eixo y.
I xlabel(’texto’) → Insere um texto no eixo x.
I grid on → Insere as linhas de espaçamento
I xlim([min max]), ylim([min max]) → limita os eixos x ou y ao
intervalor compreendido entre min e max.
I legend(’str1’,’str2’,...,’strn’) → Insere legenda e nomeia cada curva.
33/98
Figuras - Customização

Exercício:
I Utilize os cada um dos comandos anteriores para customizar a
última figura gerada.

34/98
Figuras - Customização
I Note que ao plotar as curvas, o Matlab define automaticamente as
cores e o tipo do traçado. É possível alterar isso:
Sintaxe:
I plot(x,y,’cst’ → plota uma curva com os dados x/y e customiza a
curva gerada. Cada letra do terceiro parâmetro tem uma função. A
primeira diz respeito à cor, e as duas últimas ao tipo de traçado. É
possível omitir o primeiro caractere para não especificar cor.

35/98
Figuras - Customização

Exercício:
I Teste alguns dessas opções e veja como a plotagem da curva muda.

36/98
Figuras - Customização

I Com relação às cores, a tabela mostra apenas as opções básicas. É


possível utilizar um comando mais complexo para customizar a cor
do traçado para qualquer valor RGB.

Sintaxe:
I plot(x,y,’Color’,[r g b]) → plota uma curva com os dados x/y e
customiza a cor da curva gerada. r , g, b ∈ [0, 1] e fazem referência
às cores vermelha, verde e azul, respectivamente.
1. [1, 0, 0] → vermelho puro
2. [0, 1, 0] → verde puro
3. [0, 0, 1] → azul puro
4. [0, 0, 0] → preto
5. [1, 1, 1] → verde puro
6. [0.5, 0.5, 0.5] → cor intermediária

37/98
Figuras - Customização

Exercício:
I Faça novos plotagens com novas combinações de cores e traçados..

38/98
Figuras - Customizações Avançadas

I Assim como a propriedade de cor da curva, existem outras


propriedades que podem ser alteradas de maneira similar. Exemplo:

1. LineStyle → tipo do traçado.


2. LineWidth → espessura do traçado.
3. Marker → escolhe o tipo do marcador.
4. MarkerFaceColor → cor do marcador.
5. MarkerSize → tamanho do marcador.

39/98
Figuras - Customizações Avançadas
Exemplo:
I plot([0 1],[0 1],’LineStyle’,’–’,
’LineWidth’,2,’Marker’,’o’,’MarkerFaceColor’,’red’,’MarkerSize’,10)

40/98
Figuras - Customizações Avançadas
I Como descobrir as propriedades disponíveis? Utilizando o ponteiro
do objeto criado.
I Objetos são variáveis especiais que são compostas de outras
variáveis. Objetos são como conjuntos de variáveis. As variáveis de
um objeto são chamadas de propriedades.
I Para obter o ponteiro do objeto, ao utilizar funções como plot,
faça: pObj = plot(x,y). pObj é o ponteiro.

Exemplo:
I p = plot(x,y);
I p → em versões mais novas do Matlab basta utilizar o nome do
objeto para imprimir as suas propriedades.
I get(p) → em versões mais antigas, é necessário utilizar o comando
get(.) para obter o mesmo resultado.
41/98
Figuras - Customizações Avançadas

I Utilizando o ponteiro do objeto, é possível alterar todas as


propriedades associadas a ele.

Exemplo (Versão Nova):


I p = plot(x,y)
Exemplo: I p.LineWidth = 3

I plot(x,y,’LineWidth’,3) Exemplo (Versão Antiga):


I p = plot(x,y)
I set(p,’LineWidth’,3)

42/98
Figuras - Customizações Avançadas
Exercício:
I Faça um código que execute o comando abaixo só que agora
utilizando o ponteiro do objeto para definir as propriedades.
I plot(x,y,’LineStyle’,’–’,
’LineWidth’,2,’Marker’,’o’,’MarkerFaceColor’,’red’,’MarkerSize’,10)

Solução

I p = plot(x,y)

43/98
Figuras - Customizações Avançadas
Exercício:
I Faça um código que execute o comando abaixo só que agora
utilizando o ponteiro do objeto para definir as propriedades.
I plot(x,y,’LineStyle’,’–’,
’LineWidth’,2,’Marker’,’o’,’MarkerFaceColor’,’red’,’MarkerSize’,10)

Solução
I p.Marker = ’o’ ou
I p = plot(x,y)
set(p,’Marker’,’o’)
I p.LineStyle = ’–’ ou
I p.MarkerSize = 10 ou
set(p,’LineStyle’,’–’)
set(p,’MarkerSize’,10)
I p.LineWidth = 2 ou
I p.MarkerFaceColor = ’red’ ou
set(p,’LineWidth’,2)
set(p,’MarkerFaceColor’,’red’)

43/98
Figuras - Customizações Avançadas

I Praticamente todos os comandos relacionados a figuras geram


objetos. Assim, a partir de seus ponteiros, é possível alterar
qualquer uma de suas propriedades.
Exemplo:
I h = figure → ponteiro para o objeto da figura.
I h = gcf → retorna o ponteiro do objeto relacionado à figura atual.
I h = legend(...) → ponteiro para o objeto da legenda.
I h = gca → retorna o ponteiro para o objeto "Axis"(eixos) do gráfico
atual. Uma alternativa sem chance de erros de se obter o objeto do
eixos de um gráfico é através do objeto do gráfico:
I p = plot(x,y)
I pEixo = p.Parent (versão nova)
I pEixo = get(p,’Parent’) (versão antiga)

44/98
Figuras - Customizações Avançadas
I Algumas customizações do eixo do gráfico são bem interessante. Já
aprendemos algumas, tais como xlabel(.), ylabel(.), xlim(.), ylim(.).
I Algumas propriedades dos eixos que são interessantes:
I Color → cor dos eixos.
I FontSize → tamanho da fonte.
I FontName → nome da fonte.
I FontWeight → ’normal’ ou ’bold’ (negrito)
I FontAngle → ’normal’ ou ’italic’ (itálico)
I GridColor → cor dos espaçamentos.
I GridLineStyle → tipo do traçado dos espaçamentos.
I LineWidth → tamanho das bordas do gráfico.
I Title → objeto associado ao título.
I XLabel, YLabel → objeto associado aos rótulos dos eixos.
I Xlim, YLim → limites dos eixos.
I XTick, YTick → marca os pontos onde deve existir espaçamentos.
I XTickLabel, YTickLabel → texto associado aos espaçamentos (deve
ser uma célula).
45/98
Figuras - Customizações Avançadas

Exercício:
I Faça alguns testes utilizando as propriedades listadas. Veja quais
são os valores atuais das propriedades e depois tente fazer
alterações.

46/98
Figuras - Customizações Avançadas
I No caso específico de legendas, uma propriedade interessante é a
Location (localização), que determina a posição da legenda no
gráfico.

Sintaxe:
I legend(’x1’,’x2’,’Location’,local)
→ local define a posição da
legenda
I é possível definir a posição da
legenda de forma numérica
através da propriedade Position

47/98
Figuras - Customizações Avançadas
I Como visto, cada objeto de uma figura do Matlab possui diversas
propriedades que podem ser alteradas da maneira que desejar.
I Nesse curso, veremos apenas as principais, pois tratar de todas de
forma exaustiva levaria muito tempo.
I Porém, lembre-se, o Matlab possui uma documentação extensa que
esclarece muitas dúvidas!

48/98
Figuras - Customizações Avançadas - Anotações

I Para finalizar, uma última categoria de customizações: annotations


(anotações).
I Anotações são objetos que podem ser adicionados aos gráficos.
Existem alguns tipos diferentes:
I line → adiciona uma linha.
I arrow → adiciona uma linha com seta.
I doublearrow → adiciona uma linha com seta dos dois lados.
I textarrow → adiciona uma seta com texto.
I rectangle → adiciona um retângulo.
I ellipse → adiciona uma elipse.
I textbox → adiciona uma caixa de texto.

49/98
Figuras - Customizações Avançadas - Anotações

Sintaxe:
I annotation(’line’,[xini xfim],[yini yfim]) → xini/yini e xfim/yfim
indicam as posições x/y iniciais e finais da linha. A unidade de
distância padrão é normalizada, assim, os valores devem estar
compreendidos entre 0 e 1, a não ser que o tipo de unidade seja
modificada.
I annotation(’line’,[xini yini dx dy]) → dx e dy estabelecem a
variação em x e y em relação a xini e yini.

Exemplo:
I plot(x,y)
I x = annotation(’line’,[0.5 1],[0.5 0.5])

50/98
Figuras - Customizações Avançadas - Anotações

Sintaxe:
I annotation(’line’,[xini xfim],[yini yfim]) → xini/yini e xfim/yfim
indicam as posições x/y iniciais e finais da linha. A unidade de
distância padrão é normalizada, assim, os valores devem estar
compreendidos entre 0 e 1, a não ser que o tipo de unidade seja
modificada.
I annotation(’line’,’Position’,[xini yini dx dy]) → dx e dy estabelecem
a variação em x e y em relação a xini e yini.

Exemplo:
I plot(x,y)
I x = annotation(’line’,[0.5 0.5 0.5 0])

51/98
Figuras - Customizações Avançadas - Anotações
I arrow, doublearrow possuem sintaxe e propriedades similares à
anotação line.
I Para textarrow:

Sintaxe:
I annotation(’textarrow’,[xini xfim],[yini yfim],’String’,texto) → texto
define o texto no lado sem a flecha da seta.
I annotation(’line’,’Position’,[xini yini dx dy],’String’,texto) →
sintaxe similar ao caso da anotação line.

Exemplo:
I plot(x,y)
I x = annotation(’textarrow’,[0.5 0.5 0.5 0],’String’,’y = f(x)’)

52/98
Figuras - Customizações Avançadas - Anotações

I Para o caso de elipses e retângulos a sintaxe é similar:

Sintaxe:
I annotation(’rectangle’,[xini yini dx dy]) → xini/yini define a posição
do canto inferior esquerdo e dx/dy define o tamanho dos lados.
I annotation(’ellipse’,’Position’,[xini yini dx dy],’String’,texto) →
xini/yini e dx/dy definem o retângulo “invisível"no qual a elipse se
encaixa.
I Algumas propriedades interessantes:
I Color → cor das bordas.
I FaceColor → cor de preenchimento.
I FaceAlpha → somente para retângulo, transparência do
preenchimento [0,1], sendo 0 totalmente transparente.

53/98
Figuras - Customizações Avançadas - Anotações

I Para o caso de elipses e retângulos a sintaxe é similar:

Sintaxe:
I plot(x,y)
I x1 = annotation(’rectangle’,[0.5 0.5 0.3 0.2],’Color’,’blue’)
I x2 = annotation(’ellipse’,[0.5 0.5 0.3 0.2],’Color’,’red’)
I x3 = annotation(’rectangle’,[0.2 0.5 0.2
0.2],’Color’,’blue’,’FaceColor’,’red’,’FaceAlpha’,0.5)

54/98
Figuras - Customizações Avançadas - Anotações

I Por último, textbox:

Sintaxe:
I annotation(’textbox’,[xini yini dx dy],’String’,str) → str define o
texto a ser colocado.
I annotation(’textbox’,[xini yini dx
dy],’String’,str,’FitBoxToText’,’on’); → FitBoxToText on força a
caixa de texto a ter tamanho suficiente para englobar o texto.
I Algumas propriedades interessantes:
I FontName, FontSize, FontWeight, FontAngle
I Color

55/98
Figuras - Customizações Avançadas - Anotações

I Por último, textbox:

Exemplo:
I plot(x,y)
I x1 = annotation(’textbox’,[.2 .5 .3 .3],’String’,’Testo de teste blah
blah blah’)
I x2 = annotation(’textbox’,[.7 .2 .2 .2],’String’,’Testo de teste blah
blah blah’,’FitBoxToText’,’on’)

56/98
Figuras - Customizações Avançadas - Anotações
I Existem algumas funções alternativas para algumas dessas
anotações com interface mais simples:

Sintaxe:
I line([xini xfim],[yini yfim]) → cria uma linha que inicia na
coordenada [xini,yini] e termina em [yini yfim]. A diferença para o
annotation é que a posição utiliza as unidades do gráfico.
I text(x,y,str) → cria um texto na posição x,y e com o texto str.
I rectangle(’Position’, [x y w h]) → cria um retângulo na posição x y
com largura w e altura h.
I rectangle(’Position’, [x y w h],’Curvature’,[a b]) → cria um
retângulo na posição x y com largura w e altura h e com curvatura
em x de a e em y de b. Curvatura 1 em a e b define uma elipse.

57/98
Figuras - Múltiplos gráficos
I E se quiséssemos plotar vários gráficos numa mesma figura?
Também é possível!
Sintaxe:
I subplot(m,n,p) → cria um grid na figura atual de m × n posições.
Em cada posição dessa pode ser plotada um gráfico diferente. O
parâmetro p indica a posição atual selecionada, contando da
esquerda para a direita e de cima para baixo.

Exemplo:
I figure
I subplot(2,1,1)
I plot(x,y)
I subplot(2,1,2)
I plot(x,y2)
58/98
Figuras - Múltiplos gráficos

I Com o subplot é possível especificar quantas posições quiser, basta


escolher m e n adequadamente

Exercício
I Plote as três curvas dos exercícios anteriores numa mesma figura
mas em gráficos dispostos em uma linha.
I Plote as três curvas dos exercícios anteriores numa mesma figura
mas em gráficos dispostos em uma coluna. Se quiser, tente fazer
customizações em cada um das plotagens.

59/98
Figuras - Múltiplos gráficos
I É possível utilizar o subplot de maneira mais complexa. Por
exemplo:

60/98
Figuras - Múltiplos gráficos

61/98
Figuras - Múltiplos gráficos

Exemplo: Exemplo:
I subplot(2,2,[1 3]) I subplot(2,2,[1 2])
I plot(x,y) I plot(x,y)
I subplot(2,2,2) I subplot(2,2,3)
I plot(x,y2) I plot(x,y2)
I subplot(2,2,4) I subplot(2,2,4)
I plot(x,y3) I plot(x,y3)

62/98
Figuras - Múltiplos gráficos

I Outras funções de plotagem:


I semilogy(x,y) → plota figura com o eixo y em escala logaritmica. Os
valores de y precisam ser positivos.
I semilogx(x,y) → plota figura com o eixo x em escala logaritmica. Os
valores de x precisam ser positivos.
I loglog(x,y) → plota figura com ambos os eixos em escala
logaritmica. x e y precisam ser positivos.
I stem(x,y) → plota figura com hastes.
I stairs(x,y) → equivalente ao plot, mas não faz interpolação linear
dos dados.
I plotyy(x1,y1,x2,y2) → plota uma figura com dois eixos y. É
bastante útil quando se quer mostrar duas curvas com unidades
diferentes ou escalas diferentes.

63/98
Figuras -Salvando
I Depois de fazer a figura na forma desejada, chegou a hora de
salvar em um arquivo!
I Para isso, usa-se o comando print.

Sintaxe:
I print(nomeArquivo,form,opcoes) → salva a figura atual no arquivo
nomeArquivo considerando o formato form e as opções dadas.
I tipos de formato:
1. ’-djpeg’ → formato JPEG.
2. ’-dpng’ → formato PNG (melhor que JPEG).
3. ’-dpf’ → salva em pdf (vetorizado).
4. ’-depsc’ → formato EPS colorido (vetorizado).
I Há muitas opções de formato, vale a pena ler o HELP da função
para customizar melhor a figura gerada.

64/98
Figuras -Salvando

I Depois de fazer a figura na forma desejada, chegou a hora de


salvar em um arquivo!
I Para isso, usa-se o comando print.

Exemplo:
I plot(x,y)
I customizar gráfico.
I print(’teste’,’-dpng’)

65/98
Section 3

Animações

66/98
Animações

I Com o conhecimento passado até o momento, temos tudo que


precisamos para fazer animações!
I Animações nada mais são uma sequência de quadros (figuras)
levemente diferentes uns dos outros que, quando mostrados em
sequência com um pequeno intervalo entre cada um se dá a
impressão de movimento.
I Assim, para fazer uma animação com o Matlab basta atualizar as
propriedades da figura em questão de acordo com alguma lógica e
forçar o Matlab a atualizar a mesma.

67/98
Animações
Exemplo:
I Movendo um ponto no gráfico:

68/98
Animações

I o comando drawnow força o Matlab a atualizar as figuras


I O comando pause(x) força o Matlab a esperar x segundos (é
possível passar valores fracionários) e, além disso, implicitamente
chama a função drawnow.

Exercício
I Refaça o exercício anterior mas agora utilize uma trajetória para a
bolinha de tal forma que os valores de posição y também sejam
modificados. Por exemplo: y = sin(x).

69/98
Animações
Exercício
I Resolução: percorrendo uma circunferência.

70/98
Animações

Exercício
I Agora, ao mesmo tempo em que a bolinha anda, trace uma curva
de sua trajetória.

71/98
Animações
Exercício:
I Resolução:

72/98
Animações

Exercício:
I E se agora quiséssemos colocar uma caixa de texto mostrando a
posição x da bolinha? Tente!
I Dicas:
I num2str(n) → converte o número n para uma string.

73/98
Animações
Exercício:
I Resolução:

74/98
Animações

Exercício:
I E se, além disse, quiséssemos que o texto acompanha-se a bolinha?
Tente!

75/98
Animações
Exercício:
I Resolução:

76/98
Animações - Agrupamentos

I Note que é possível fazer animações utilizando a lógica ensina


utilizando qualquer anotação.
I Porém, se você quiser fazer essa movimentação sincronizada com
vários objetos, fica maçante reescrever o mesmo a alteração de
posição.
I Para resolver esse problema, o Matlab possui comandos especiais
que combinam os objetos e de tal forma que é possível mover suas
posições e outras propriedades de maneira simples.

77/98
Animações - Agrupamentos
Exemplo:
I Vejamos o exemplo abaixo:

78/98
Animações - Agrupamentos

I A função hgtransform retorna um objeto que serve justamente para


agrupar outros objetos.
I bloco = hgtransform();
I Para indicar que um objeto deve pertencer a um determinado bloco
é preciso explicitamente determinar que o o objeto do bloco é o
“Pai"do novo objeto.
I p = plot(x(1),y(1),’Marker’,’o’,
’MarkerFaceColor’,’blue’,’Parent’,bloco)
I ht = text(x(1)+0.1,y(1)-0.1,’xxx’,’Parent’,bloco);

79/98
Animações - Agrupamentos

I Definido o bloco, agora é possível utilizar a função makehgtform


para realizar operações sobre o bloco como um todo.

Sintaxe:
I M = makehgtform(’translate’,[tx ty tz]) → translada o bloco por
tx,ty e tz unidade em relação à posição inicial em cada um dos
eixos.
I M = makehgtform(’scale’,s) → aumenta/diminui as dimensões do
bloco por um fator s
I M = makehgtform(’scale’,[sx,sy,sz]) → aumenta/diminui as
dimensões do bloco nas dimensões x,y e z por um fator de sx,sy e
sz, respectivamente.

80/98
Animações - Agrupamentos

Sintaxe:
I M = makehgtform(’xrotate’,t) → rotaciona em relação ao eixo x
por t radianos.
I M = makehgtform(’yrotate’,t) → rotaciona em relação ao eixo y
por t radianos.
I M = makehgtform(’zrotate’,t) → rotaciona em relação ao eixo z
por t radianos.
I M = makehgtform(’axisrotate’,[ax,ay,az],t) → rotaciona em
relação aos três eixos por t radianos.

I Definido o bloco, agora é possível utilizar a função makehgtform


para realizar operações sobre o bloco como um todo.

81/98
Animações - Agrupamentos

I As matrizes geradas precisam ser incorporadas numa mesma


matriz. Para isso, basta multiplicá-las.
I As operações também podem ser feitas com um único comando,
retornando uma única matriz M que faz todas as operações
estipuladas.
I Com a matriz M que faz a transformação, agora é necessário
aplicá-la ao bloco, e isso é feito da seguinte maneira:

Sintaxe:
I bloco.Matrix = M, em versões novas do Matlab
I set(bloco,’Matrix’,M), em versões antigas do Matlab.

82/98
Animações - Agrupamentos
Exemplo:

83/98
Animações - Agrupamentos

Exercício:
I Agora é sua vez! Invente uma forma complexa com pelo menos
três elementos e tente fazer uma animação!

84/98
Animações - Salvando
I Imagine... Você acabou de criar uma obra prima das animações e
agora quer compartilhar no Face! Tem jeito? Sim!
I Como comentado anteriormente, uma animação nada mais é do
que uma sequência de quadros. Precisamos então salvar esses
quadros!
Sintaxe:
I v = VideoWriter(nomeAquivo,tipo) → cria um ponteiro para o
arquivo nomeArquivo de formato tipo, que pode ser: ’MPEG-4’,
’Motion JPEG AVI’, entre outros.
I open(v) → abre o arquivo apontado por v.
I frame = getframe(gcf) → obtém o quadro atual da figura principal
(gcf).
I writeVideo(v,frame) → salva o quadro frame em v.
I close(v) → fecha o arquivo.
85/98
Animações - Salvando
Exemplo:
I Uma propriedade importante é o FrameRate, cuja padrão é 30
quadros por segundo. A quantidade de quadros e o frame rate
definirá o tempo do vídeo.

86/98
Section 4

Figuras 3D

87/98
Figuras 3D - Introdução

I Chegamos na etapa final do curso! Figuras e Animações 3D!


I Essencialmente, nada muda, apenas as chamadas de funções são
diferentes.
I Para gerar gráficos 3D, existem três métodos principais:
1. plot3(x,y,z) → funciona de forma similar ao plot, ou seja, gera uma
cruva. Só que agora são necessárias as informações do eixo z.
2. mesh(x,y,z) → gera uma superfície onde os vértices são definidos
pelas matrizes X,Y,Z.
3. surf(x,y,z) → similar ao mesh, mas agora a superfície é preenchida.

88/98
Figuras 3D - Introdução

I plot3

89/98
Figuras 3D - Introdução

I mesh

90/98
Figuras 3D - Introdução

I surf

91/98
Figuras 3D - Introdução
I Para trabalhar com mesh e surf, lembre-se de gerar matrizes!
I Essa tarefa pode ser facilitada com a função meshgrid.

Sintaxe:
I [X,Y] = meshgrid(xgv,ygv) → X e Y são as matrizes de saída e
xgv e ygx são os valores que x e y vão assumir.

Exemplo
I [x1,y1] = meshgrid(-2:.2:2,-4:.4:4); → observe a saída das
matrizes x1 e x2 em relação aos parâmetros de entrada da função
meshgrid.
I z1 = x1.*exp(-x1.^2-y1.^2);
I figure, mesh(x1,y1,z1);
I figure, surf(x1,y1,z1);
92/98
Figuras 3D - Introdução

I Para ajustar o ângulo de visão da figura gerada, utiliza-se o


comando view.

Sintaxe:
I view(az,el) → onde az é o
ângulo azimute e el é a
elevação (veja figura).
I view(2) → seta o ângulo no
plano XY, ou seja
perpendicular ao eixo Z: az =
0, el = 90.
I view(3) → ângulo de visão
padrão: az = –37.5, el = 30.

93/98
Figuras 3D - Formas

I Assim como existiam algumas anotações que geravam formas


geométricas, no caso 3D há funções similares.

Sintaxe:
I [x,y,z] = sphere(n) → gera as matrizes para obter uma
aproximação de uma esfera por um poliedro de n.
I [x,y,z] = cylinder(r,n) → gera as matrizes para obter uma
aproximação de um cilindro de raio r por um poliedro de n faces.

94/98
Figuras 3D - Formas

Exemplo:
I [x,y,z] = sphere(10);
I surf(x,y,z);
I figure
I [x,y,z] = cylinder(5,20)
I mesh(x,y,z)

95/98
Figuras 3D - Formas
I Por último, temos a função patch, que gera um poliedros
especificando os vértices e as faces do mesmo.

Sintaxe:
I p = patch(x,y,z,c) → retorna um ponteiro para objeto p e plota
um polígono de acordo as coordenadas dos vértices x,y,z (onde
cada coluna define um poliedro diferente). z pode ser omitido, mas
não a cor c.

Exemplo:
I x1 = [-1 0 1]’;y1 = [1 2 1]’;
I x2 = [1 2 3]’,y2 = [1 2 1]’;
I patch([x1 x2],[y1 y2],’green’)

96/98
Figuras 3D - Formas
I Uma segunda forma de utilizar o patch.

Sintaxe:
I p = patch(’Faces’,f,’Vertices’,v,’FaceColor’,c) → v é o conjunto de
vértices onde cada coluna indica uma direção (x,y,z), cada linha de
f indica um polígono, seus elementos são os índices dos vértices de
v, c é a cor do polígono.

Exemplo:
I v = [0 0 0;2 0 0;1 2 0;1 1 2]
I f = [1 2 3;1 2 4;1 3 4;2 3 4];
I patch(’Faces’,f,’Vertices’,v,’FaceColor’,’green’)
I view(3), grid on

97/98
Obrigado!
Contato:
daniel.lima@ufsc.br

Você também pode gostar