MÓDULO 1 - COMPUTAÇÃO GRÁFICA

TRANSFORMAÇÕES BIDIMENSIONAIS

 

1 - INTRODUÇÃO

As aplicações de Computação Gráfica prevêm a existência de facilidades que nos permitem modelar no écran do computador a mais variada gama de figuras, as quais podem ser obtidas a partir de elementos básicos mais simples, vulgarmente designados por primitivas gráficas. Assim, para desenharmos um quadrado no écran do computador, podemos recorrer à utilização consecutiva da primitiva gráfica linha, a qual nos permite traçar de uma forma simples e intuitiva os quatro lados desta figura geométrica. As primitivas gráficas encontram-se normalmente inseridas no contexto de uma aplicação orientada para a área da computação gráfica, podendo assumir uma das seguintes formas:

Como exemplo do primeiro tipo de implementação temos o caso das linguagens de programação Pascal e C, estudadas nos primeiros anos do Curso Tecnológico de Informática. O Turbo C, por exemplo, possui uma biblioteca designada por graphics.h a qual integra um poderoso conjunto de funções gráficas prontas a serem utilizadas pelo utilizador na elaboração dos seus programas de grafismos em computador. Por outro lado, o segundo tipo de implementação surge normalmente associado a aplicações de software específicas da área da computação gráfica, cujo exemplo mais representativo será o Desenho Assistido por Computador. Nesta situação, as primitivas gráficas surgem como instruções de desenho, associadas a comandos da aplicação, sendo a sua implementação totalmente transparente ao utilizador final.

Terminada a fase da modelação, coincidente com a criação e descrição dos objectos de desenho, surge a necessidade de manipular as suas representações no écran, transformando-os de acordo com as nossas necessidades. Assim, recorrendo ao exemplo do quadrado anteriormente desenhado, podemos ter necessidade de alterar alguns dos seus parâmetros após termos procedido ao seu posicionamento no écran. As transformações geométricas possibilitam ao utilizador este tipo de actuação sobre os objectos, podendo ser classificadas em três grandes grupos, de acordo com o tipo de actuação sobre os objectos:

Neste capítulo iremos começar por fazer uma pequena revisão sobre os principais conceitos matemáticos associados às transformações geométricas, nomeadamente no que se refere às operações com matrizes. Seguidamente, iremos aplicar estes conceitos no espaço bidimensional, o que nos permitirá compreender a forma como podemos aplicar transformações geométricas simples, em torno da origem, a objectos localizados num plano. Posteriormente, será apresentado o modo como podemos aplicar sucessivas transformações a um objecto, vulgarmente designadas por transformações compostas, por forma a obtermos transformações em torno de um ponto arbitrário do plano. Finalmente, será dado ênfase ao modo como podemos efectuar transformações de visualização, actuando sobre diferentes sistemas de coordenadas, por forma a localizarmos correctamente os nossos objectos de desenho no écran do computador.

 

 

2 - MATRIZES

2.1 - ADIÇÃO DE MATRIZES

A adição de duas matrizes A e B só é possível se elas tiverem a mesma ordem, ou seja, o mesmo número de linhas e de colunas. Consideremos as seguintes matrizes:
 
 

 

Propriedades da adição de matrizes:

 

 

2.2 - MULTIPLICAÇÃO DE UMA MATRIZ POR UM ESCALAR

O resultado da multiplicação de uma matriz A por um escalar k será igual ao produto de k por cada um dos elementos constituintes da matriz A:
 
 

 
 

 

2.3 - MULTIPLICAÇÃO DE MATRIZES

A multiplicação de duas matrizes A e B só é possível quando o número de colunas de A é igual ao número de linhas de B:
 
 

 
 
 
 

Note-se que a multiplicação de matrizes não goza da propriedade comutativa, pelo que A*B ¹ B*A.

 

3 - TRANSFORMAÇÕES GEOMÉTRICAS BIDIMENSIONAIS

3.1 - TRANSLAÇÃO

Quando executamos a translação de um objecto a duas dimensões, acrescentamos simplesmente o deslocamento dx na direcção X a todas as coordenadas x do modelo e o deslocamento dy apropriado na direcção Y a todas as coordenadas y.
 
 

 
 
 

Podemos fazê-lo directamente de tal modo que, dado um deslocamento dx na direcção X e um deslocamento dy na direcção Y, as novas coordenadas podem ser calculadas a partir das antigas recorrendo às seguintes fórmulas:
 
 

 

Para que o objecto seja deslocado para a sua nova posição basta que se realize a translação dos seus vértices, redesenhando-se de seguida toda a figura. Por outro lado, se o deslocamento dx for negativo, o objecto move-se para a esquerda, enquanto que se o deslocamento dy for negativo, o objecto move-se para baixo. Usando notação matricial, podemos representar a transformação geométrica através de uma adição de matrizes, onde o vector P representa as coordenadas iniciais do objecto, o vector P' as suas coordenadas finais e T o vector da transformação aplicada ao objecto, neste caso a translação:
 
 

 
 

3.2 - FACTOR DE ESCALA

Podemos alterar as dimensões de um objecto multiplicando as coordenadas dos seus vértices por factores de escala apropriados, redesenhando de seguida esse mesmo objecto no écran do computador. Tal facto pode ser expresso em termos das seguintes fórmulas, onde as novas coordenadas x' e y' do objecto são obtidas a partir das suas coordenadas iniciais x e y por aplicação de factores de escala dx e dy nas direcções X e Y, respectivamente:

 

 

Usando notação matricial, podemos representar a transformação geométrica através de uma multiplicação de matrizes, onde o vector P representa as coordenadas iniciais do objecto, o vector P' as suas coordenadas finais e S a matriz da transformação aplicada ao objecto, neste caso o factor de escala:
 
 

 

De acordo com os valores atribuídos a sx e sy podem ocorrer as seguintes situações:

 Como exercício de aplicação, verificar as transformações que ocorrem quando se aplicam os seguintes factores de escala a um objecto:  De notar que o factor de escala é aplicado relativamente à origem das coordenadas. Mais tarde veremos como aplicar o factor de escala relativamente a um ponto arbitrário.

 

3.3 - ROTAÇÃO

Aplicando uma rotação de q graus ao ponto P(x, y), este irá rodar em torno da origem, obtendo-se o ponto P'(x', y'). Considerando que um ângulo positivo é medido no sentido contrário ao dos ponteiros do relógio, podemos deduzir as fórmulas para as novas coordenadas do objecto, recorrendo à seguinte figura:
 
 

 

Pela figura verificamos que as coordenadas x e y do ponto P são dadas por:
 
 

 

Por outro lado, as coordenadas x' e y' do ponto P' são dadas por:
 
 

 

Comparando as equações anteriores podemos deduzir as seguintes fórmulas, as quais nos dão as coordenadas da nova posição do objecto em função das suas coordenadas iniciais:
 
 

 

Usando notação matricial, podemos representar esta transformação através de uma multiplicação de matrizes, onde o vector P representa as coordenadas iniciais do objecto, o vector P' as suas coordenadas finais e R a matriz da transformação aplicada ao objecto, neste caso a rotação:
 
 

 

3.4 - COORDENADAS HOMOGÉNEAS

Pelo que foi dito anteriormente, todas as transformações geométricas admitem uma notação matricial, expressa da seguinte forma:

No entanto, devido à natureza do sistema de coordenadas utilizado, o sistema cartesiano, as suas representações são algo inconsistentes em virtude da translação não poder ser expressa sob a forma de uma multiplicação de matrizes. Existe no entanto um outro tipo de coordenadas muito utilizado em computação gráfica que permite um uso mais coerente das matrizes, designado por sistema de coordenadas homogéneas.
As coordenadas homogéneas são usadas para permitir a incorporação de matrizes separadas para a translação, factor de escala e rotação numa matriz única que pode ser usada para transformar coordenadas apenas por multiplicação. As coordenadas homogéneas têm mais uma dimensão do que o espaço a que respeitam. Assim, as coordenadas homogéneas do espaço bidimensional têm a forma (x, y, w), onde w representa um plano paralelo ao plano XY. Fazendo w = 1, obtemos a seguinte representação matricial das transformações geométricas elementares, agora no novo sistema de coordenadas:  
   
   
 
 

3.5 - TRANSFORMAÇÕES COMPOSTAS

Para realizar movimentos e rotações compostas, podemos aplicar consecutivamente as matrizes de transformação das operações elementares ou concatenar as transformações numa única matriz. Este último método é provavelmente o mais eficiente quando se torna necessário transformar um grande número de pontos.

 
3.5.1 - ROTAÇÃO DE UM OBJECTO EM TORNO DE UM PONTO ARBITRÁRIO

Nestas condições, para realizar a rotação de um objecto em torno de um ponto arbitrário P(x1,y1), segundo um ângulo de q graus, é necessário efectuar as seguintes transformações:

 
 

A matriz da transformação composta pode ser calculada da seguinte forma:
 

 
 
 

Atenção à ordem das matrizes porque como já anteriormente foi referido, a multiplicação não goza da propriedade comutativa.
 
 

3.5.2 - FACTOR DE ESCALA RELATIVAMENTE A UM PONTO ARBITRÁRIO

Para aplicarmos a um objecto um factor de escala em torno de um ponto arbitrário P(x1,y1) é necessário efectuar as seguintes transformações:

 
A matriz da transformação composta pode ser calculada da seguinte forma:
 
 
 
 

 Novamente se chama a atenção para a ordem das matrizes usadas na multiplicação. Como exercício de aplicação, demonstrar a forma como se obtém a matriz M, referente à composição das transformações geométricas elementares acima mencionadas.

 

4 - TRANSFORMAÇÕES DE VISUALIZAÇÃO

As transformações de visualização permitem efectuar uma transferência de coordenadas do tipo window ® viewport, possibilitando uma conversão adequada dos objectos descritos em termos de coordenadas mundo para coordenadas do dispositivo de visualização. Deste modo, consideremos a seguinte figura, que representa uma window de dimensões (xwmin, ywmin) ® (xwmax, ywmax) e um viewport de dimensões (xvmin, yvmin) ® (xvmax, yvmax), nos quais se encontram localizados dois pontos de coordenadas (xw, yw) e (xv, yv), respectivamente:
 

Pretende-se que o ponto de coordenadas (xw, yw) seja transferido correctamente da window para o viewport, aplicando-lhe uma transformação de visualização adequada. Assim, para que o ponto mantenha a mesma posição relativa na window e no viewport têm que se verificar as seguintes igualdades:
 
 

Resolvendo as equações anteriores em ordem a xv e yv, obtemos as fórmulas que nos permitem converter as coordenadas mundo em coordenadas do dispositivo de visualização:
 

 
 
 

De notar que devemos fazer sx = sy por forma a que o objecto não apareça distorcido no viewport. Por outro lado, para que a origem das coordenadas fique localizada no canto inferior esquerdo do viewport temos que subtrair yv ao valor de yvmax:
 

y'v = yvmax - yv
5 - EXERCÍCIOS DE SIMULAÇÃO

Para exercitar a aplicação dos conceitos acima apresentados sobre transformações geométricas bidimensionais, aconselha-se a realização de alguns exercícios práticos no simulador de Java disponibilizado nesta página. Através da sua utilização torna-se possível uma melhor percepção dos resultados obtidos pela aplicação das transformações sobre determinados objectos geométricos. Para uma visualização correcta da aplicação em Java recomenda-se a utilização dos browsers Internet Explorer v. 4 ou Netscape Communicator v.4.6. 



 
TRANSFORMAÇÕES BIDIMENSIONAIS - SIMULADOR DE JAVA


PROFESSOR - António João da Silva Lopes