Вы находитесь на странице: 1из 8

Aula de Laboratrio de Matlab Aula 01 Criao e transformao de objetos 2D e 3D em coordenadas homogneas

1- Como criar um objeto em Matlab?

necessrio criar a matriz de coordenadas dos pontos. Cada linha representar o conjunto de coordenadas de cada ponto que compe o objeto. Cada coluna corresponder a uma das coordenadas. Por exemplo, para um objeto 2D em coordenadas cartesianas:
p2d = [1 2; 2 2; 2 1.5; 1 1.5; 1 2]';

Nas matrizes, os ; indicam quebra de linha e a aspas simples fazem o transposto da matriz. Desta forma, todas as coordenadas x ficam na linha 1 e as coordenas y na linha 2. Para se criar objetos em coordenadas homogneas basta acrescentar mais uma linha, a linha dos pesos. O valor dos elementos desta linha pode ser sempre 1, significando que as coordenadas homogneas so iguais s coordenadas cartesianas. Para representar em coordenadas homogneas:
p2d(3,:)=1;

Os : usado no comando, ao invs do ndice da matriz, significa que todas as colunas da linha 3 da matriz sero preenchidas com valor 1. Agora, para um objeto 3D em coordenadas cartesianas:
p3d = [ 0 1 1 0 0 0 1 1 0 0 0 0 0 1 1 1 1 1 p3d(4,:)=1; 0 0 1 1 0 0 0 1 1 0 1 1 0 0 0 1 1 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 1 1 0 0 ]';

Para representar em coordenadas homogneas:

2- Para visualizar o objeto:

Quando o objeto 2D, usamos:


plot(p(1,:),p(2,:)); axis equal; axis([-5 5 -5 5]); grid on;

Quando o objeto 3D, usamos:


plot3(p(1,:),p(2,:),p(3,:)); axis('equal'); axis([-5 5 -5 5 -5 5]); grid on;

Crie dois objetos, um em 2D e outro em 3D, ambos representados em coordenadas homogneas e faa a sua visualizao grfica. Para facilitar, voc pode fazer scripts para criar seus objetos, basta abrir o Notepad e gravar os comandos de criao da matriz dos pontos como um arquivo .m no seu diretrio de trabalho (Ex: criaobj.m). Assim, voc poder executar o comando de dentro do prprio Matlab, sem precisar ficar digitando toda a matriz de coordenadas a cada vez que precisar criar o mesmo objeto. Da mesma forma, voc poder criar as funes para desenhar os grficos 2D e 3D passando como parmetro para as funes as matrizes de pontos dos objetos (Ex: des2d.m e des3d.m). 3- Utilizando coordenadas homogneas para fazer a translao e a rotao de um objeto. Com a utilizao de coordenadas homogneas, operaes como translao e rotao podem ser realizadas atravs de uma simples multiplicao de cada ponto do objeto pela matriz de transformao para se obter a nova localizao do ponto. As matrizes de translao com relao origem e de rotao em torno do eixo Z esto descritas abaixo: 1 0 0 0 1 0 dx dy 1 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0 dx dy dz 1 0 0 0 1

T(dx,dy) =

T(dx,dy,dz) =

cos() -sen() RZ() = sen() cos() 0 0

0 0 1

cos() -sen() RZ() = sen() cos() 0 0 0 0

Translao em 2D: Para criar a funo em Matlab, abra o Notepad e escreva os comandos abaixo:
function newp=move2d(p,dx,dy) trans= [1 0 dx; 0 1 dy; 0 0 1] newp = trans*p;

Salve o arquivo como move2d.m no seu diretrio de trabalho. No Matlab, v para este diretrio e, com o objeto 2D que voc criou, execute:
np = move2D(obj2d,2,5); plot(np(1,:),np(2,:));

Crie rotina similar para a translao em 3D (move3d.m), aplique ao objeto 3D que voc criou anteriormente e faa a visualizao grfica.

Rotao em 2D: Abra o Notepad e escreva os comandos abaixo:


function newp=rot2d(p,ang) ang=ang*pi/180 rot=[cos(ang), -sin(ang), 0; sin(ang), cos(ang), 0; 0 0 1] newp = rot*p;

Salve o arquivo como rot2d.m no seu diretrio de trabalho. Com o objeto 2D que voc criou, execute no Matlab:
np = rot2D(obj2d, 30); plot(np(1,:),np(2,:));

Crie rotinas similares para a rotao em 3D em torno dos eixos x, y e z, aplique ao objeto 3D que voc criou anteriormente e faa a visualizao grfica. Crie agora as rotinas para a mudana de escala em 2D e em 3D, aplique aos objetos que voc criou anteriormente e faa a visualizao grfica. Lembre-se que as matrizes de mudana de escala so: sx 0 0 0 sy 0 0 0 1 sx 0 0 0 0 sy 0 0 0 0 sz 0 0 0 0 1

Esc2d =

Esc3d =

Guarde todas as rotinas que voc vez hoje. Elas sero a base para a prxima aula e para os trabalhos que voc far.

Aula de Laboratrio de Matlab Aula 02 - Movimentao e animao de objetos ou partes de um desenho em computao grfica 2D.
Neste laboratrio, criaremos de forma bem simples um rob e faremos a movimentao de um brao e antebrao. 1- Para criar o rob: Crie um arquivo no Notepad com os comandos abaixo e salve como robo.m:
corpo=[0 0 1; 1 0 1; 1 2 1; 0 2 1; 0 0 1]'; braco=[1 2 1; 2 2 1; 2 1.5 1; 1 1.5 1; 1 2 1]'; antebraco=[2 2 1; 3 2 1; 3 1.5 1; 2 1.5 1; 2 2 1]'; des2d(corpo); hold; des2d(braco); des2d(antebraco); cotovelo=[2 1.75 1]';

Agora, todas as vezes que voc executar o comando robo no Matlab, as matrizes correspondentes ao corpo, brao e antebrao do rob sero criadas e mostradas graficamente. Alm disto as coordenadas do cotovelo tambm sero armazenadas em uma variavl. 2- Para movimentar partes do rob Utilizando as rotinas de translao e rotao para 2D que voc criou na aula anterior, crie um arquivo .m que implemente uma funo para girar o antebrao do rob em torno do cotovelo recebendo como parmetro todas as matrizes que formam o rob e o ngulo de rotao desejado. No se esquea de plotar o resultado final para vermos se o antebrao do rob se mexeu corretamente. Dica: Lembre-se que para girar um objeto em torno de um ponto, preciso transladar este objeto at a origem, rotacionar e transladar novamente para o ponto. Tente fazer este tipo de movimento para o brao, ou seja, moviment-lo com relao ao ombro do rob. Crie a funo fazendo a visualizao em intervalos submltiplos do ngulo afim de gerar uma animao.

Aula de Laboratrio de Matlab Aula 03 Movimentao e animao de objetos 3D


Usando as rotinas e comandos aprendidos nas aulas anteriores, crie um objeto 3D e tente fazer uma animao deste objeto com relao a origem usando as rotinas de translao e rotao j vistas. Lembre-se de usar coordenadas homogneas! Para criar o efeito de animao, divida o processo de movimentao do objeto em intervalos iguais e efetue o mesmo passo a passo, fazendo a sua visualizao a cada momento. E se toda esta movimentao fosse em relao a um ponto diferente da origem? Como ficaria? Faa alguns testes com as rotinas que voc acabou de implementar.

Aula de Laboratrio de Matlab Aula 04 Criao de projees


Nesta aula de laboratrio, vamos implementar funes em Matlab para algumas das projees que geralmente utilizamos. Para facilitar, todas as projees sero criadas com relao ao eixo Z. Projetar um objeto significa criar uma imagem ou desenho 2D deste objeto 3D a partir de um centro de projeo. Crie um objeto 3D em coordenadas homogneas e faa a sua visualizao. Projeo Ortogrfica com plano de projeo perpendicular ao eixo Z. O plano de projeo perpendicular ao eixo Z, as projetantes so paralelas (foco no infinito) e formam a imagem atingindo este plano perpendicularmente. Neste caso, basta desenhar a vista do objeto a partir das suas coordenadas X e Y. Se quisermos criar uma matriz de transformao que represente este tipo de projeo, esta matriz seria: Ort= 1 0 0 0 1 0 0 0 0 0 0 1

Crie o programa abaixo no Notepad e salve o arquivo com o mesmo nome do comando no seu diretrio de trabalho:
function newp=projort(p) ort = [1 0 0 0; 0 1 0 0; 0 0 0 1]; newp = ort*p;

V para o Matlab. Utilizando o objeto 3D que voc criou aplique a funo para projeo ortogrfica e faa a visualizao 2D das coordenadas X e Y para ter a vista do objeto. Como seria a funo se quisssemos fazer as outras vistas perpendiculares aos eixos X e Y?

Projeo Oblqua Tambm um caso de projeo paralela, mas as projetantes no atingem o plano de projeo de forma perpendicular, mas sim, oblqua. A projeo definida por dois ngulos, e . O primeiro representa o ngulo da projeo e o segundo representa a inclinao ou rotao em relao ao eixo X com que o desenho dever ser feito. No caso, da projeo ser perpendicular ao eixo Z, as coordenadas X eY da projeo devero ser as coordenadas originais acrescidas de deslocamentos proporcionais a sua coordenada Z e em escala definida por . Xp = X + Z* l *cos(); Yp = Y + Z* l * sen(); Na forma de matriz: 1 0 0 0 1 0 l cos() l sen() 0 0 0 1

onde a escala l = cotg().

Obliq =

A funo seria:
function newp=projobliq(p,alfa,beta) beta=beta*pi/180; alfa=alfa*pi/180; l=cot(alfa); obliq= [1 0 l*cos(beta) 0; 0 1 l*sin(beta) 0; 0 0 0 1]; newp = obliq*p;

Aplique a funo acima para o objeto que voc criou e faa a visualizao em 2D. Experimente diferentes valores de ngulos para entender a projeo oblqua.

Como seriam as projees cavaleira e a cabinet? Crie e teste as rotinas para estas duas projees.

Projeo Perspectiva Neste caso, as medidas projetadas variam inversamente com a distncia em relao ao centro de projeo. Considerando o plano de projeo perpendicular ao eixo Z e com o sistema de coordenadas definidas conforme o desenho abaixo, tem-se:
x u z m(u,v) v C f y M(x,y,z)

Xp = X/(Z/f + 1) Na forma de matriz:

Yp = Y/(Z/f + 1)

Pers =

1 0 0

0 1 0

0 0 1/f

0 0 1

Conforme os exerccios anteriores, faa a rotina para a projeo perspectiva implementando uma funo que tenha como parmetros a distncia focal e uma matriz de pontos. Salve a funo em um arquivo .m e execute o comando em Matlab para fazer a projeo perspectiva do objeto que voc criou. Faa a visualizao em 2D.