bhhbbhhb

Páginas: 8 (1933 palavras) Publicado: 23 de outubro de 2013
Aula #02
RASTERIZAÇÃO DE LINHAS
Vimos como transformar as coordenadas reais de um ponto nas coordenadas de um pixel no interior de uma janela de visualização (mapeamento window-to-viewport). Não devemos nos esquecer que esse mapeamento converte tanto pontos do SRU em pixels do SRD como o contrário, ou seja, dado um pixel no SRD calcula-se o ponto no SRU. Desta vez, vamos ligar dois pixels paraobtermos uma linha reta.
A motivação é simples. Em vez de mapearmos do SRU para o SRD cada ponto de uma aresta que liga dois vértices, mapeamos apenas os vértices (não esquecendo de efetuar o recorte, se necessário) e completamos as arestas com um algoritmo que considere apenas os pixels do SRD.

Sejam XRi e YRi as coordenadas de um ponto inicial Pi e XRf e YRf as coordenadas de um ponto Pf,final, ambos pertencentes ao R2 (logo, ao SRU). A equação da reta que passa por Pi e Pf é dada por: y = mx + b (figura 1)

figura 1. Elementos da Reta que passa por dois pontos dados (Pi, Pf)

É claro que, em um primeiro momento, precisamos transformar as coordenadas dos pontos Pi e Pf em coordenadas da janela de visualização (viewport) em pixels. Para tanto, procedemos como na aula anterior.Na maioria dos casos, contudo, já temos os pontos Pi e Pf em pixels. Por exemplo: Em um programa de desenho tipo PaintBrush, na ferramenta "linha", pressionamos o botão do mouse para indicar o pixel inicial (Pi). Em seguida, arrastamos o ponteiro através da tela com o botão do mouse pressionado e soltamos, indicando o ponto final (Pf). Neste caso, observe, não houve necessidade de transformação depontos reais em pixels. No entanto, em programas como CAD/CAM ou programas que desenha gráficos (Excel, Grapher, etc...), o mapeamento window-to-viewport dos pontos Pi e Pf são necessárias. No entanto, seja em um caso ou no outro, o PREENCHIMENTO do espaço entre os pontos pode ser feito mais eficientemente calculando-se apenas os pixels que devem ser ativados mais próximos da reta teórica. ARASTERIZAÇÃO DE LINHAS é, portanto, efetuada no espaço dos pixels, através de um algoritmo que ligue os dois pontos dados, Pi e Pf.
Há vários algoritmos para esse fim. O mais simples pertence a categoria chamada DDA (Digital Differencial Analizer) [veja http://en.wikipedia.org/wiki/Digital_Differential_Analyzer_(graphics_algorithm)]

Basicamente, os DDAs são ALGORITMOS INCREMENTAIS que se utilizamdiretamente da definição de reta dada por sua equação: y = mx +b. Algoritmos incrementais são aqueles em que uma das variáveis é obtida apenas incrementando o seu valor, por exemplo X = X + 1, e a outra é calculada por alguma regra a partir da primeira.
Vamos ligar os pontos (pixels) (XPi, YPi) e (XPf, YPf)...
Primeiro calculamos os parâmetros da reta e inicializamos variáveis:
n = XPf-XPi
m =(YPf-YPi)/n
X0 = XPi
Y0 = YPi
Observe que "n" é o número de colunas de pixels entre Pi e Pf e que Y0 também pode ser entendido como Y0 = m*X0 + b.
Em seguida incrementamos sucessivos Xs e calculamos os Ys correspondentes pela definição da reta:
X1 = X0 + 1
Y1 = m.X1 + b = m*(X0+1) + b = m*X0 + m + b = m*X0 + b + m  Y1 = Y0 + m
Continuando (faça as contas!)...
X2 = X1 + 1  X2 = X0 + 2Y2 = Y0 + 2*m
X3 = X0 + 3
Y3 = Y0 + 3*m
...
Por indução, obtemos uma expressão geral para o j-ésimo ponto:
Xj = X0 + j
Yj = Y0 + j*m
O último ponto será o ponto n
Xn = X0 + n
Yn = Y0 + n*m ~ YPf
Observe que Yn ~ YPf porque o resultado da expressão n*m é truncado (ou, se preferir, arredondado), introduzindo um pequeno erro que pode ser de até um pixel.
Os pontos fracos nos algoritmosDDAs são o uso da ARITMÉTICA REAL e uma pequena imprecisão por ERROS DE ARREDONDAMENTO.
Além dessas desvantagens, que são bastante indesejáveis, o algoritmo apresenta uma restrição importante: ele funciona apenas para retas onde |m|  1, ou seja, retas com inclinações entre -45° e 45°. Para obtermos corretamente as demais inclinações, devemos lançar mão de SIMETRIAS.
Por exemplo, podemos dividir...
Ler documento completo

Por favor, assinar para o acesso.

Seja um membro do Trabalhos Feitos

CADASTRE-SE AGORA!