Computação Gráfica
Processo de Visualização Bidimensional
MAPEAMENTO
INTRODUÇÃO
Após o
processo de Instanciamento e de Recorte, nas
coordenadas resultantes não são(em geral) compatíveis
com as coordenadas da tela.
Normalmente
quando se cria um modelo as informações gráficas armazenadas neste,
(coordenadas, tamanhos, cores, espessuras, etc.) dizem
respeito à aplicação e não ao dispositivo que está sendo usado.
Por exemplo,
quando aplicação é um sistema de desenho de plantas, as dimensões de uma porta
ou de uma parede, são armazenadas em metros ou polegadas e não em pontos de
tela. Outro exemplo deste fato são sistemas de traçado de curvas, por exemplo,
no caso do traçado da função "seno" os valores sobre o eixo X variam
entre 0 e 2 PI e sobre Y de -1 até +1. Se tentarmos traçar estes valores
diretamente na tela teremos problemas, pois serão vistos apenas alguns pontos
no canto superior esquerdo da mesma.
Para permitir
a visualização deste tipo de entidades(modelos) faz-se necessário realizar uma
conversão dos valores do modelo para valores compatíveis com as dimensões da
tela. A esta conversão dá-se o nome de MAPEAMENTO. Um exemplo onde é
necessária uma operação de mapeamento pode ser visto
na figura a seguir. Neste exemplo o objeto original(modelo) está descrito em um
sistema de coordenadas de dimensões muito grandes para a tela e além disto os
sistemas tem o eixo Y crescendo em direções opostas.
Para realizar
o mapeamento entre estes dois Sistemas de Referência tomemos um ponto "Pu" de coordenadas (Xu,Yu), no SRU e tentemos obter seu correspondente (Xd, Yd) no SRD, ou seja na tela.
Os dados para
efetuar a conversão, são os seguintes:
Limites do SRU |
Limites do SRD |
|
Mínimo |
(0,0) |
(0,0) |
Máximo |
(1000,1500) |
(640,480) |
Iniciando pela componente X temos, de acordo com o
diagrama abaixo,
de onde
deduz-se a relação:
Xd - 0
640 - 0
-------- = ---------
Xu
- 0 1000 - 0
da qual se
pode concluir que,
Xu * 649
Xd = -----------
1000
Para a
componente Y o processo é análogo, alterando-se apenas os limites dos sistemas
de referência, E ATENTANDO PARA O FATO DE QUE O EIXO "Y" CRESCE EM
SENTIDOS OPOSTOS NOS DOIS SISTEMAS.
de onde
deduz-se a relação
Yd - 480
0 - 480
--------- = ----------
Yu - 0
1500 - 0
da qual se
pode concluir que,
Yu * (-480)
Yd = ----------- + 480
1500
JANELA DE SELEÇÃO e
JANELA DE EXIBIÇÃO
Quando
definimos que a área de trabalho da aplicação vai de (0,0) a (1000,1500),
estamos selecionando a região do plano cartesiano com a qual desejamos
trabalhar. A esta região dá-se o nome de JANELA DE SELEÇÃO ou WINDOW.
Dependendo da aplicação, podemos diminuir esta área, num porcesso
conhecido como ZOOM. Esta modificação é em geral definida pelo usuário
da aplicação.
Quando
definimos que a área de exibição, dentro da tela, vai de (0,0) a (640, 480),
estamos especificando a JANELA DE EXIBIÇÃO ou VIEWPORT. A modificação de
uma Viewport é, em geral, definida pelo programador
da aplicação.
Estas regiões,
dependendo da aplicação, ou mesmo do momento, podem variar. A fim de tornar as
fórmulas de mapeamento genéricas quanto às Janela de Seleção/Exibição
escolhidas, basta definir variáveis que representem as coordenadas de seus
cantos. Por exemplo:
TYPE
XYR
= Record
x,y
: real;
End;
VAR
MIN_SEL,
(* canto inferior esquerdo da Jan. de seleção *)
MAX_SEL : XYR; (* canto superior direito da Jan. de
seleção *)
MIN_EXB (* canto inferior esquerdo da Jan. de exibição *)
MAX_EXB : XYR;(* canto superior direito da Jan. de exibição *)
A partir disto,
as funções de mapeamento ficam da seguinte forma:
(Xu - MIN_SEL.X) * (MAX_EXB.X -
MIN_EXB.X)
Xd =
------------------------------------------------- + MIN_EXB.X
MAX_SEL.X - MIN_SEL.X
(Yu - MIN_SEL.Y) * (MIN_EXB.Y - MAX_EXB.Y)
Yd = ------------------------------------------------- + MAX_EXB.Y
MAX_SEL_.Y - MIN_SEL.Y