Escolar Documentos
Profissional Documentos
Cultura Documentos
Alexandre Massango
Dionildo Eliseu Machaia
Herminio josé Gomacha
Shelton José Macita
Maputo
Outubro , 2019
ESTEC
Alexandre Massango
Dionildo Eliseu Machaia
Herminio josé Gomacha
Shelton José Macita
Universidade pedagógica
Maputo
Outubro , 2019
Introdução
Neste presente trabalho faremos uma síntese daquilo que são os algoritmos de rasterização da
recta usando método de DDA, incremental e de Bressenham e algoritmos de rasterização da
circunferência, na qual falaremos dos métodos de ponto médio, Bressenham, polinomial , e por
fim o algoritmo trigonométrico.
Rasterização de circunferências
Emprega a propriedade de simetria que as circunferências apresentam. Apresenta uma
circunferência de raio R centrada na origem, verificamos que, uma vez calculado o pixel a do
segundo octante, os pixéis B a H dos outros octantes encontram-se imediatamente determinados
por simetria. Se (x, y) forem as coordenadas do pixel a, e como a circunferência se encontra
centrada na origem, as coordenadas dos pixéis a selecionar em todos os octantes.
Se o centro da circunferência se localizar num ponto (Xc, Yc) que não a origem, bastara calcular
os pixeis da circunferência como se ela centrada na origem e adicionar as suas coordenadas as
coordenadas do centro da circunferência. Para evitar a duplicação de pixeis que ocorrera quando
se representarem os pixeis dos extremos dos octantes, como o pixel (O, R), dever-se-a
seleccionar apenas quatro pixeis em vez de oito o que, para este caso, corresponde a seleccionar
os pixéis localizados em (O, R), (O, -R), (R, O) e (-R, O).
Uma circunferência é uma figura simétrica.
- Qualquer algoritmo por varrimento da circunferência pode tirar partido desta Simetria para
desenhar oito pontos a partir de cada valor que o algoritmo calcula:
Método Polinomial
- Uma circunferência pode ser definida pela seguinte equação polinomial:
y2 = r2 – x2 ,
onde r – raio da circunferência
- Então cada coordenada x, no sector que vai de 90º a 45º é determinada por Sucessivos
incrementos de x de 0 a r / 2 (x2 = r 2 − y 2 ⇒ 2x2 = r 2) e ca da coordenada y é calculada por
- Observação:
Este método tem operações aritméticas muito custosas para o computador é muito pouco
eficiente!!!
Organigrama:
1. Inicializar:
r - raio, (h, k) – centro da circunferência:
(x, y) = (0,0); i = incremento; x fim = r / sqrt(2);
2. Testar se a circunferência foi gerada totalmente:
se x > x fim, STOP
3. Calcular o valor de y:
y = sqrt (r2-x2)
4. Desenhar os pontos da simetria:
(x+h, y+k); (-x+h, -y+k);
(y+h, x+k); (-y+h, -x+k);
(-y+h, x+k); (y+h, -x+k);
(-x+h, y+k); (x+h, -y+k)
5. Incrementar x:
x = x+i
6. Continuar no passo 2.
Método Trigonométrico
Uma circunferência pode ser definido mediante a utilização de funções trigonométricas:
x = r*cos(θ); y = r*sen(θ)
onde:
θ – ângulo corrente
r – raio da circunferência
Com este método, θ é sucessivamente incrementado de 0 a π/4 e cada valor de x e y é calculado
Este método tem operações aritméticas ainda mais custosas que o método polinomial é muito
pouco eficiente!!!
1. Inicializar r - raio, (h, k) – centro da circunferência:
(x,y) = (0,0), i = incremento, θfim= (22/7)/4 (=π/4=45º); θ=0
2. Testar se a circunferência foi gerada totalmente:
se θ > θfim, STOP
3. Calcular os valores de x e y:
x = r*cos(θ); y = r*sen(θ)
4. Desenhar os pontos da simetria:
(x+h, y+k); (-x+h, -y+k);
(y+h, x+k); (-y+h, -x+k);
(-y+h, x+k); (y+h, -x+k);
(-x+h, y+k); (x+h, -y+k)
5. Incrementar θ:
θ=θ+i
6. Continuar no passo 2
Exemplo:
Ultima aula: (x,y) = (0,0), i = incremento, θfim= (22/7)/4 (=π/4=45º); θ=0
Exemplo:
di+1 = di + 4xi + 6
Se di ≤ 0 di+1 = di + 4(xi – yi)+ 10
Rasterização da recta
Consiste em, num dispositivo de quadricular dados, os dois pixéis extremos de um segmento de
recta, determinado que pixéis localizados entre eles devem ser selecionados para compor
visualmente o segmento. Este problema tem solução trivial quando o segmento a traçar e
horizontal, vertical ou diagonal, se bem que, como ja referimos, a densidade visual de segmentos
diagonais não seja a mesma dos que são verticais ou horizontais. Fora destes casos, a
determinação dos pixéis que irão constituir um dado segmento de rectal coloca alguns
problemas.se apenas fossem selecionados os pixéis pertencentes ao segmento de recta, no caso
do segmento PV da figura so seriam selecionados os pixéis P, r, T e v, daqui resultando uma
linha de fraca densidade visual.
Este problema acentuar-se-ia no segmento AK, fazendo com que so fossem selecionados os
pixéis A, f e K, e, no limite, o segmento LO ficaria reduzido aos seus extremos. Por esta razão,
esta regra não pode constituir uma solução para o problema proposto.que a densidade visual do
segmento seja o mais uniforme possível, há então que selecionar o maior numero possível de
pixéis entre os dois pixéis dos extremos de um segmento de recta, selecionando os pixeis mais
próximos do segmento. para o caso do segmento Ak, isto corresponderia a ter como possíveis
candidatos os pixeis B, C, D, E, G, H, I e J. a seleção de todos estes pixeis produziria no entanto
uma linha cuja densidade variaria ao longo do segmento. iremos abordar os seguintes algoritmos:
Algoritmo Imediato
O algoritmo imediato para a rasterização de segmentos de recta parte da equação da recta que
suporta o segmento, cuja expressão e
y= mx +b
Para um segmento de recta cujos extremos cujas coordenadas são(x1, y1) e (x2, y2), e imediato
que os coeficientes m e b da equação (2 - 1) deverão ser
B = y1 – mx1
Fazendo então variar x entre x1 e x2 por incrementos de uma unidade, o valor de y calculando
será um valor real que deve ser arredondado para o inteiro mais próximo, o que pode ser
realizado através de uma das seguintes expressões equivalentes.
xi + 1 = xi+1
xi + 1 = xi +1
Exemplo:
int x, y, x1, x2, y1, y2, i, xf, dx, dy;
float m,b;
dx = x2-x1;
dy = y2-y1;
y= mx+b;
m=y-b/x;
while(x<=x2)
{
if(dx<0)
{
if(dx<0)
{
x=x+1;
y=y+m;
else
x=x-1;
y=y-1;
else
if(dy>0)
y++;
x=x+1/m;
else
y--;
x=x-1/m;
}
}
Algoritmo incremental
Podemos melhorar o desempenho da rasterização de segmentos da recta se diminuirmos o
numero de operações matemáticas envolvidas. Para tal considerarmos o valor de y para dois
valores consecutivos de x que diferem entre si de uma unidade.
Algoritmo de Bresenham
• Para as retas do 1o octante, dado um pixel sobre a reta, o próximo pixel é para direita (E) ou
para Direita acima (NE).
• Tendo o pixel (xi, yi) o próximo pixel é NE em (xi+1,yi+1) ou E em (xi+1, yi)?
F(x,y) = ax + by + c = 0.
• Se dy = y2 - y1, e dx = x2 - x1;
• A equação da reta em termos de sua inclinação pode ser
escrita como:
• Na forma implícita: F(x,y) = dy.x – dx.y + dx.B=0. Onde a= dy, b = - dx e c = dx.B. Assim,
verifica-se que:
F(x,y) = 0, ponto sobre a linha
F(x,y) > 0, para pontos abaixo da linha
F(x,y) < 0, para pontos acima da linha
• Para simplificar a definição do próximo ponto em função da posição relativa da reta em relação
ao ponto médio, usa-se uma variável de decisão p.
– p=2dy – dx
• Se p < 0, o próximo ponto será (x+1, y) e recalcula p=p+2dy
• Se p >= 0, o próximo ponto será (x+1, y+1) e recalcula p= p+2dy – 2dx.
• O algoritmo é mostrado a seguir. Sua principal vantagem é usar somente variáveis
inteiras,dispensando operações de ponto flutuante.
• O cálculo de (xi+1, yi+1) é feito incrementalmente usando os cálculos feitos para (xi, yi).
Algoritmo de Bresenham
• Parâmetros de entrada: (x1,y1) e (x2,y2).
1. Calcula-se dx=x2-x1 e dy=y2-y1
2. Calculam-se as variáveis auxiliares: 2dy e 2dy-2dx.
3. Coloca-se nas variáveis de trabalho o ponto inicial:
x<- x1 e y<- y1.
4. Plota-se o ponto (x,y).
5. Calcula-se o parâmetro de decisão: p=2dy – dx.
6. Se p for negativo, então x <-x+1, p <- p+2dy e vai para o passo 8.
7. Se p for positivo ou zero, então: x <- x+1, y <- y+1 e p <- p+2dy – 2dx.
8. Repetem-se os passos 6 a 7 até que o ponto (x2,y2) seja alcançado.