Baixe o app para aproveitar ainda mais
Prévia do material em texto
Aula de Laboratório de Matlab Aula 01 – Criação e transformação de objetos 2D e 3D em coordenadas homogêneas 1- Como criar um objeto em Matlab? • É necessário criar a matriz de coordenadas dos pontos. Cada linha representará o conjunto de coordenadas de cada ponto que compõe 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 homogêneas basta acrescentar mais uma linha, a linha dos pesos. O valor dos elementos desta linha pode ser sempre 1, significando que as coordenadas homogêneas são iguais às coordenadas cartesianas. Para representar em coordenadas homogêneas: p2d(3,:)=1; Os “:” usado no comando, ao invés do índice da matriz, significa que todas as colunas da linha 3 da matriz serão preenchidas com valor 1. Agora, para um objeto 3D em coordenadas cartesianas: p3d = [ 0 0 0 1 0 0 1 1 0 0 1 0 0 0 0 0 0 1 1 0 1 1 1 1 0 1 1 0 0 1 0 1 1 0 1 0 0 0 0 1 0 0 1 0 1 1 1 1 1 1 0 1 0 0 ]'; Para representar em coordenadas homogêneas: p3d(4,:)=1; 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 homogêneas e faça a sua visualização gráfica. Para facilitar, você pode fazer scripts para criar seus objetos, basta abrir o Notepad e gravar os comandos de criação da matriz dos pontos como um arquivo .m no seu diretório de trabalho (Ex: criaobj.m). Assim, você poderá executar o comando de dentro do próprio 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 funções para desenhar os gráficos 2D e 3D passando como parâmetro para as funções as matrizes de pontos dos objetos (Ex: des2d.m e des3d.m). 3- Utilizando coordenadas homogêneas para fazer a translação e a rotação de um objeto. Com a utilização de coordenadas homogêneas, operações como translação e rotação podem ser realizadas através de uma simples multiplicação de cada ponto do objeto pela matriz de transformação para se obter a nova localização do ponto. As matrizes de translação com relação à origem e de rotação em torno do eixo Z estão descritas abaixo: T(dx,dy) = 1 0 dx 0 1 dy 0 0 1 T(dx,dy,dz) = 1 0 0 dx 0 1 0 dy 0 0 1 dz 0 0 0 1 RZ(θ) = cos(θ) -sen(θ) 0 sen(θ) cos(θ) 0 0 0 1 RZ(θ) = cos(θ) -sen(θ) 0 0 sen(θ) cos(θ) 0 0 0 0 1 0 0 0 0 1 • Translação em 2D: Para criar a função 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 diretório de trabalho. No Matlab, vá para este diretório e, com o objeto 2D que você criou, execute: np = move2D(obj2d,2,5); plot(np(1,:),np(2,:)); Crie rotina similar para a translação em 3D (move3d.m), aplique ao objeto 3D que você criou anteriormente e faça a visualização gráfica. • Rotação 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 diretório 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 rotação em 3D em torno dos eixos x, y e z, aplique ao objeto 3D que você criou anteriormente e faça a visualização gráfica. Crie agora as rotinas para a mudança de escala em 2D e em 3D, aplique aos objetos que você criou anteriormente e faça a visualização gráfica. Lembre-se que as matrizes de mudança de escala são: Esc2d = sx 0 0 0 sy 0 0 0 1 Esc3d = sx 0 0 0 0 sy 0 0 0 0 sz 0 0 0 0 1 Guarde todas as rotinas que você vez hoje. Elas serão a base para a próxima aula e para os trabalhos que você fará. Aula de Laboratório de Matlab Aula 02 - Movimentação e animação de objetos ou partes de um desenho em computação gráfica 2D. Neste laboratório, criaremos de forma bem simples um “robô” e faremos a movimentação de um braço e antebraço. 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, braço e antebraço do robô serão criadas e mostradas graficamente. Além disto as coordenadas do cotovelo também serão armazenadas em uma variavél. 2- Para movimentar partes do robô Utilizando as rotinas de translação e rotação para 2D que você criou na aula anterior, crie um arquivo .m que implemente uma função para girar o antebraço do robô em torno do cotovelo recebendo como parâmetro todas as matrizes que formam o robô e o ângulo de rotação desejado. Não se esqueça de plotar o resultado final para vermos se o antebraço 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 braço, ou seja, movimentá-lo com relação ao ombro do robô. Crie a função fazendo a visualização em intervalos submúltiplos do ângulo afim de gerar uma animação. Aula de Laboratório de Matlab Aula 03 – Movimentação e animação de objetos 3D Usando as rotinas e comandos aprendidos nas aulas anteriores, crie um objeto 3D e tente fazer uma animação deste objeto com relação a origem usando as rotinas de translação e rotação já vistas. Lembre-se de usar coordenadas homogêneas! Para criar o efeito de animação, divida o processo de movimentação do objeto em intervalos iguais e efetue o mesmo passo a passo, fazendo a sua visualização a cada momento. E se toda esta movimentação fosse em relação a um ponto diferente da origem? Como ficaria? Faça alguns testes com as rotinas que você acabou de implementar. Aula de Laboratório de Matlab Aula 04 – Criação de projeções Nesta aula de laboratório, vamos implementar funções em Matlab para algumas das projeções que geralmente utilizamos. Para facilitar, todas as projeções serão criadas com relação ao eixo Z. Projetar um objeto significa criar uma imagem ou desenho 2D deste objeto 3D a partir de um centro de projeção. Crie um objeto 3D em coordenadas homogêneas e faça a sua visualização. • Projeção Ortográfica com plano de projeção perpendicular ao eixo Z. O plano de projeção é perpendicular ao eixo Z, as projetantes são 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 transformação que represente este tipo de projeção, esta matriz seria: Ort= 1 0 0 0 0 1 0 0 0 0 0 1 Crie o programa abaixo no Notepad e salve o arquivo com o mesmo nome do comando no seu diretório 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 função para projeção ortográfica e faça a visualização2D das coordenadas X e Y para ter a vista do objeto. Como seria a função se quiséssemos fazer as outras vistas perpendiculares aos eixos X e Y? • Projeção Oblíqua Também é um caso de projeção paralela, mas as projetantes não atingem o plano de projeção de forma perpendicular, mas sim, oblíqua. A projeção é definida por dois ângulos, α e β. O primeiro representa o ângulo da projeção e o segundo representa a inclinação ou rotação em relação ao eixo X com que o desenho deverá ser feito. No caso, da projeção ser perpendicular ao eixo Z, as coordenadas X eY da projeção deverão 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(β); onde a escala l = cotg(α). Na forma de matriz: Obliq = 1 0 l cos(β) 0 0 1 l sen(β) 0 0 0 0 1 A função 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 função acima para o objeto que você criou e faça a visualização em 2D. Experimente diferentes valores de ângulos para entender a projeção oblíqua. Como seriam as projeções cavaleira e a cabinet? Crie e teste as rotinas para estas duas projeções. • Projeção Perspectiva Neste caso, as medidas projetadas variam inversamente com a distância em relação ao centro de projeção. Considerando o plano de projeção perpendicular ao eixo Z e com o sistema de coordenadas definidas conforme o desenho abaixo, tem-se: Xp = X/(Z/f + 1) e Yp = Y/(Z/f + 1) Na forma de matriz: Pers = 1 0 0 0 0 1 0 0 0 0 1/f 1 Conforme os exercícios anteriores, faça a rotina para a projeção perspectiva implementando uma função que tenha como parâmetros a distância focal e uma matriz de pontos. Salve a função em um arquivo .m e execute o comando em Matlab para fazer a projeção perspectiva do objeto que você criou. Faça a visualização em 2D. f x y z u v m(u,v) M(x,y,z) C
Compartilhar