![]() |
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:
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:
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:
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:
![]() |
![]() |
![]() |
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:
![]() |
![]() |
![]() |
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:
![]() |
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:
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.