Introdução à Computação Gráfica

Secção dedicada à linguagem de programação favorita dos quarkianos: Python!

Introdução à Computação Gráfica

Mensagempor Bruno Oliveira em Sábado Mar 27, 2010 11:28 pm

Este tópico vai tratar de um assunto muito vasto, muito interessante e muito útil.

Útil em que sentido? Principalmente em desmistificar certos comentários ou certas vozes que dizem que a Algebra Linear "não serve para nada e é demasiado abstracta e formal para se tirar alguma utilidade dela." (dito por pessoal das Engenharias em geral...)

Apesar de não ir aqui provar a utilidade da AL directamente para a Física vou procurar fazê-lo indirectamente através de exemplos de Computação Gráfica :wink:

Introdução à Computação Gráfica - Rotações no Plano

A AL é largamente utilizada em n aplicações computacionais usadas em larga escala em Engª. O AUTOCAD recorre à Algebra das matrizes para efectuar rotações a 3D dos modelos lá desenvolvidos.

Apesar de ir apenas fazer isto para uma figura a 2D, pode-se generalizar facilmente para 3D.

Como todos aqui já devem saber, a matriz de rotação é a seguinte:

R(\theta) = \left[\begin{array}{cc} \cos \theta & -\sin \theta \\ \sin \theta & \cos \theta \\ \end{array} \right]

O que esta matriz faz é rodar uma dada entidade matemática (seja um ponto, um segmento de recta, ou uma figura geométrica) por um ângulo \theta no sentido contrário ao dos ponteiros dos relógio (counterclockwise).

A matriz é largamente conhecida e divulgada em quase todos os livros de AL ou de aplicações computacionais da álgebra, e pode ser facilmente deduzida a partir de uma rotação do extremo de um segmento de recta no plano (imaginem por ex. a rotação do extremo do segmento de recta que forma o raio de círculo de raio r de um dado ângulo \theta).

Imaginem então que o segmento de recta acima mencionado forma um dado ângulo por hipótese, \alpha com a horizontal. Assim, as coordenadas do extremo móvel desse mesmo segmento são:

(r \cos \alpha \, , r \sin \alpha )

Imaginem então que o ponto roda da sua posição inicial, para uma outra posição, tendo-se "rodado" de um ângulo \theta. Assim, as novas coordenadas do extremo do segmento de recta são:

(r \cos \left(\alpha + \theta\right) \, , r \sin \left(\alpha + \theta \right))

Usando as relações trigonométricas:

\sin \left(\alpha + \theta \right) = \sin \alpha \, \cos \theta - \cos \alpha \, \sin \theta

e

\cos \left(\alpha + \theta \right) = \cos \alpha \, \cos \theta + \sin \alpha \, \sin \theta

e considerando como (x , y) as coordenadas do ponto original e (x^\prime , y^\prime ) as coordenadas do ponto rodado, temos após algumas (triviais) manipulações que:

x^\prime = x \cos \theta - y \sin \theta

e

y^\prime = x \sin \theta + y \cos \theta

A partir das igualdades acima, podemos concluir, tendo algum à-vontade com o produto de matrizes que:

\left[\begin{array}{cc} \cos \theta & -\sin \theta \\ \sin \theta & \cos \theta \\ \end{array} \right] \cdot \left[\begin{array}{c} x & y \end{array} \right] =  \left[\begin{array}{c} x^\prime & y^\prime \end{array} \right].

Temos então, a matriz de rotação :) .

Note-se que a multiplicação matricial efectuada acima é feita na ordem:

{\bf R} u = u^\prime

pois é esta ordem de multiplicação que assegura que o sentido da rotação é CCW e não o contrário. Caso se efectuasse a multiplicação pela matriz de rotação à direita e sendo agora u e u^\prime vectores linha, o sentido da rotação seria horário em vez de anti-horário...

Só para terminar, deixo aqui um exemplo simples (feito em Excel) que ilustra a rotação de um quadrado no plano xoy:

Imagem

Apesar de o exemplo ser bastante auto-explicativo, nas colunas E e F estão as coordenadas do quadrado fixo, e nas colunas H e I estão as coordenadas do quadrado após sofrerem a transformação (linear) da matriz de rotação.

Parte II - Rotação no espaço

A matriz de rotação que opera sobre um par coordenadas (x, y) é a matriz de rotação R(\theta) que foi apresentada acima.

No entanto, o exemplo apresentado apenas permite compreender a matriz de rotação como sendo uma matriz de transformação, que transforma um vector-coluna de coordenadas, do tipo:

\left[\begin{array}{c} x \\ y \end{array}\right]

em novas coordenas (note-se que as coordenadas dizem-se "novas" pois são coordenadas diferentes das coordenadas acima, pertencendo estas à entidade que está a sofrer a rotação) do tipo:

\left[\begin{array}{c} x^\prime \\ y^\prime \end{array}\right]

Isto é o que preciso compreender sobre a matriz de rotação e é a base para compreender as transformações lineares. Para perceber completamente as transformações lineares, o que se podia fazer era introduzir na representação do referencial com o qual trabalhamos uma nova base, t.q. B \neq B_c, ou seja, usar uma base para trabalhar que não fosse a base canónica, pode ficar como exercicio para quem quiser entender as transformações lineares e valores e vectores próprios, mas isso não vem aqui ao caso...

Um método de computação gráfica muito mais utlizado para além de rodar figuras geométricas é o que consiste em rodar sólidos geométricos ou figuras tridimensionais compostas...Fazendo um paralelismo com a Engª Civil, em AutoCAD, temos de construir soluções estruturais que vão desde simples paredes ou telhados, até pontes, barragens, etc que são soluções bastante mais complexas do ponto de vista estrutural...O método que se segue é o utilizado para realizar rotações e/ou projecções desse mesmo tipo de estruturas.

As matrizes de rotação responsáveis pela rotação de figuras 3D (admite-se a rotação em torno de um ângulo \theta sobre cada eixo) são três, cada uma responsável pela rotação em torno de um dos eixos coordenados. São nomeadamente, as seguintes:

[*]Rotação 3D em torno do eixo dos xx:

\left[\begin{array}{ccc} 1 & 0 & 0 \\ 0 & cos \theta & -sin \theta \\ 0 & sin \theta & cos \theta \end{array} \right]

[*]Rotação 3D em torno do eixo dos yy:

\left[\begin{array}{ccc} cos \theta & 0 & -sin \theta \\ 0 & 1 & 0 \\ sin \theta & 0 & cos \theta \end{array} \right]

[*]Rotação 3D em torno do eixo dos zz:

\left[\begin{array}{ccc} cos \theta & -sin \theta & 0 \\  sin \theta & cos \theta & 0 \\ 0 & 0 & 1 \end{array} \right]

Sendo {\bf R}_x a matriz de rotação 3D em torno do eixo dos xx, {\bf R}_y a matriz de rotação em torno do eixo dos yy e {\bf R}_z a matriz de rotação 3D em torno do eixo dos zz, se se efectuar a multiplicação destas três matrizes, i.e.:

{\bf R}_x \cdot {\bf R}_y \cdot {\bf R}_z

o que vamos obter, vai ser uma nova matriz que é a matriz (que se pode denotar por {\bf R}_{xyz}) que nos mostra o que se passa quando a nossa entidade sofre uma rotação que não é linear. (Digo aqui rotação não linear, para me referir a uma rotação que não se dê sobre um dos eixos, mas sim sobre os 3 eixos ao mesmo de tempo de forma não isotrópica [roda-se a entidade de um dado ângulo \gamma_x segundo o eixo dos xx, de um ângulo \gamma_y segundo o eixo dos yy e de um ângulo \gamma_z segundo o eixo dos zz. Ser rodado de forma não isotrópica significa simplesmente que \gamma_x \neq \gamma_y \neq \gamma_z].

A maneira mais usual de se obter uma rotação que não seja linear, é simples. Basta fazer uma combinação linear de rotações "triviais", para obtermos uma posição muito estranha para a peça que nos propomos rodar.

Para ilustrar melhor todos os conceitos explicados acima, nada melhor do que um exemplo concreto. Considerem então que pretendemos aplicar os conceitos aqui trabalhados à seguinte peça:

Imagem

Agora, se dermos alguns valores concretos à peça em questão, é possível, representá-la em 3D no Excel!! Aqui a questão é que só podemos ver "de uma só vez" um de 4 alçados possíveis: ou vemos a vista de topo, ou um dos alçados laterais (esquerdo ou direito), ou olhamos para a peça em verdadeira grandeza (de frente) sendo que estas vistas correspondem a projecções nos planos XoY, XoZ ou YoZ respectivamente.

Após manipularmos um pouco a posição inicial da peça, podemos acabar com uma posição parecida com a da figura acima, como se ilustra abaixo:

Imagem

Esta aplicação é um exemplo muito simples do que é a Computação gráfica e também de um dos (vários!) dominios onde é utilizada.

Este post está completo. :wink:
última vez editado por Bruno Oliveira s Quinta Abr 29, 2010 5:54 pm, editado 13 vezes no total
e^{ix}=cos x + i\,sin x
Avatar do utilizador
Bruno Oliveira
top-Quark!
top-Quark!
 
Mensagens: 1553
Registado: Quarta Nov 14, 2007 10:19 pm
Localização: Lisboa

Re: Introdução à Computação Gráfica

Mensagempor jap em Segunda Mar 29, 2010 12:06 am

Obrigado pelo post, Bruno! :friends:
José António Paixão
Departamento de Física da FCTUC
Avatar do utilizador
jap
Site Admin
Site Admin
 
Mensagens: 6790
Registado: Quinta Nov 09, 2006 9:34 pm
Localização: Univ. de Coimbra

Re: Introdução à Computação Gráfica

Mensagempor Bruno Oliveira em Segunda Mar 29, 2010 3:43 pm

Obrigado prof.

Este assunto é de facto muito interessante :wink:

Quando puder escrevo a parte 2 das rotações no espaço :D
e^{ix}=cos x + i\,sin x
Avatar do utilizador
Bruno Oliveira
top-Quark!
top-Quark!
 
Mensagens: 1553
Registado: Quarta Nov 14, 2007 10:19 pm
Localização: Lisboa

Re: Introdução à Computação Gráfica

Mensagempor Bruno Oliveira em Segunda Abr 26, 2010 10:34 pm

Estou a voltar a este tópico para dizer que assim que encontrar tempo, completarei o post/tópico, com a parte das rotações no espaço.

Procurarei fazer isso, asap. :wink:

Abraço,
Bruno
e^{ix}=cos x + i\,sin x
Avatar do utilizador
Bruno Oliveira
top-Quark!
top-Quark!
 
Mensagens: 1553
Registado: Quarta Nov 14, 2007 10:19 pm
Localização: Lisboa

Re: Introdução à Computação Gráfica

Mensagempor Bruno Oliveira em Quinta Abr 29, 2010 5:56 pm

peço desculpa desde já pelo double post, mas fica o aviso de que o post acima, está terminado com a parte das rotações no espaço :P
e^{ix}=cos x + i\,sin x
Avatar do utilizador
Bruno Oliveira
top-Quark!
top-Quark!
 
Mensagens: 1553
Registado: Quarta Nov 14, 2007 10:19 pm
Localização: Lisboa

Re: Introdução à Computação Gráfica

Mensagempor jap em Quinta Abr 29, 2010 7:54 pm

Obrigado Bruno! :D

Muito fixe! :friends:
José António Paixão
Departamento de Física da FCTUC
Avatar do utilizador
jap
Site Admin
Site Admin
 
Mensagens: 6790
Registado: Quinta Nov 09, 2006 9:34 pm
Localização: Univ. de Coimbra


Voltar para Pitónica

Quem está ligado

Utilizadores a navegar neste fórum: Nenhum utilizador registado e 2 visitantes

cron