Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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 ]';
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) =
0 0 1
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.
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.
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
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)
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.