1) O documento discute sistemas de coordenadas e algoritmos para conversão matricial de primitivas gráficas em dispositivos gráficos matriciais.
2) São apresentados quatro sistemas de coordenadas - coordenadas do dispositivo, coordenadas normalizadas do dispositivo, coordenadas físicas e coordenadas do mundo - e como primitivas gráficas são mapeadas entre esses sistemas.
3) Vários critérios para a conversão matricial de segmentos de reta são descritos, visando propried
2. Resolução Gráfica
• Virtualmente todos os dispositivos de I/O
gráficos usam uma malha retangular de
posições endereçáveis – a qual é
denominada “retângulo de visualização”.
• A “resolução gráfica” de um dispositivo é o
número de posições (ou pontos, ou pixels)
horizontais e verticais que ele pode
distinguir.
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
2
3. Resolução Gráfica
• Existem 4 parâmetros que definem a resolução:
1. ndh: o número de posições endereçáveis
horizontalmente
2. ndv: o número de posições endereçáveis
verticalmente
3. width: a largura do retângulo de visualização em
mm
4. height - a altura do retângulo de visualização em
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
3
4. Resolução Gráfica
• A partir desses 4 parâmetros, vários números
interessantes podem ser calculados:
1. resolução horizontal: horiz_res = ndh/width
2. resolução vertical: vert_res = ndv/height
3. total pontos endereçáveis: total_nr_dots =
ndh.ndv
4. resolução de área: area_res = total_nr_dots
/ (width.height)
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
4
5. Sistemas de Coordenadas
• Na CG é necessário definir sistemas de
coordenadas para quantificar os dados que
estão
• sendo manipulados.
• Já vimos que os dispositivos de visualização
gráfica matriciais consistem de uma matriz
de pixels endereçáveis, e um gráfico é
formado “acendendo” ou “apagando” um
pixel.
• Os pixels são endereçados por dois números
inteiros que dão suas coordenadas horizontal
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
5
6. Sistemas de Coordenadas
• Número da coluna da matriz de pixels: dcx + 1
• Número da linha da matriz de pixels: dcy + 1
• O pixel endereçado como (0, 0) está geralmente
no canto inferior esquerdo do retângulo de
visualização
• As coordenadas (dcx, dcy) são chamadas de
coordenadas do dispositivo, e podem assumir
apenas valores inteiros.
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
6
7. Sistemas de Coordenadas
• Coordenadas do dispositivo podem variar
bastante para diferentes equipamentos, o que
levou à utilização de coordenadas normalizadas
do dispositivo (NDC - normalized device
coordinates), para efeito de padronização (ndcx,
ndcy).
• NDCs são variáveis reais, geralmente definidas
no intervalo de 0 a 1
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
7
8. Sistemas de Coordenadas
• A coordenada NDC(0,0) corresponde à origem (0, 0) nas
coordenadas do dispositivo
• A coordenada NDC(1,1) refere-se ao pixel no canto
superior direito
• A vantagem da utilização de NDCs é que padrões gráficos
podem ser discutidos usando um sistema de coordenadas
independente de dispositivos gráficos específicos.
• Obviamente, os dados gráficos precisam ser
transformados do sistema de coordenadas independente
para o sistema de coordenadas do dispositivo no momento
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
8
9. Sistemas de Coordenadas
• Sistema de cordenadas físico (pcx, pcy)
• pcx: distância física ao longo do eixo x a partir
do extremo esquerdo do retângulo de
visualização
• pcy: a distância física ao longo do eixo y a partir
do extremo inferior.
• As unidades de medida utilizadas são
polegadas ou milímetros
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
9
10. Sistemas de Coordenadas
• Sistema de coordenadas do mundo
• Ou sistema de coordenadas do usuário
• Consiste de coordenadas cartesianas (x, y), num
intervalo qualquer definido pelo usuário
• Os parâmetros que definem o intervalo de valores
de x e y, xmin, ymin, xmax e ymax, definem uma
área retangular no espaço bidimensional,
denominada de janela
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
10
11. Sistemas de Coordenadas
• Para visualizar dados num dispositivo gráfico
qualquer, é necessário transformá-los das
coordenadas do usuário para NDCs, e de NDCs
para coordenadas do dispositivo.
• Da mesma forma, dados de entrada gráficos
precisam ser transformados de coordenadas do
dispositivo para NDCs, e depois para coordenadas
do usuário
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
11
13. Traçado
• O traçado de primitivas gráficas
elementares, como segmentos de reta ou
arcos de circunferência, requer a construção
de algoritmos capazes de determinar na
matriz de pixels da superfície de exibição,
quais pixels devem ser alterados de forma a
simular-se a aparência do elemento gráfico
desejado.
• Estes algoritmos recebem o nome de
Algoritmos de Conversão Matricial, por
converterem em representação matricial
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
13
14. Traçado
• Um elemento geométrico básico a ser
traçado num terminal gráfico é o segmento
de reta.
• Atualmente, é comum que rotinas de traçado
de linhas estejam disponíveis em hardware
(em chips controladores).
• O chip recebe as coordenadas dos pixels
extremos, e calcula quais pixels
intermediários da superfície de exibição
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
14
15. Traçado
• Gráficos complexos requerem o traçado
de uma grande quantidade de segmentos
de reta, e a velocidade é importante
• Daí a opção de traçado por meio de
hardware especializado, que libera o
processador hospedeiro para outras
atividades enquanto o chip controlador
calcula os pixels a serem traçados.
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
15
16. Traçado
• Se a função de traçado precisa ser
implementada em software, a rotina deve
ser escrita em código de máquina
otimizado para atingir o máximo de
velocidade.
• Entretanto, é instrutivo estudar alguns
algoritmos para traçado de linhas usando
uma linguagem de alto nível.
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
16
18. Simetria e Reflexão
• Simetria e Reflexão são
propriedades
importantes do espaço
onde os diversos
elementos gráficos
serão traçados.
• Pode-se dizer que
estas direçõe formam
na realidade eixos de
simetria no espaço
matricial.
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
18
19. Simetria e Reflexão
• Logo, qualquer imagem
representada no espaço
matricial pode ser refletida
em relação a qualquer reta
horizontal, vertical ou
diagonal sem apresentar
qualquer deformação
• A Simetria é explorada na
conversão matricial de
primitivas gráficas que
apresentem simetria e
relação a qualquer um
destes eixos.
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
19
23. Ponto
• Um PONTO em CG como é um pixel, cujas
propriedades são:
– Posição no plano
– Cor
• O tamanho do pixel vai depender da resolução gráfica
e tamanho físico do dispositivo de exibição da
imagem.
• As operações de manipulação de pixels representam
uma das essências da CG, pois a partir dessa
manipulação, imagens são construídas ou alteradas.
• Os elementos gráficos mais complexos exigem uma
sequência de ações para que possam ser construídos
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
23
24. Conversão Matricial de
Segmentos de Reta
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
24
Figura 5: Alguns critérios de conversão matricial podem ser vistos através desta figura
25. Conversão Matricial de
Segmentos de Reta
• 1.º Critério:
• Selecionamos os dois
pixels imediatamente
acima e abaixo do
ponto de intersecção
ao do segmento com
cada vertical, a menos
quando o segmento
passa por um pixel.
• Restrição: linhas
densas são obtidas,
como se o segmento
fosse espesso
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
25
Figura 5a: 1.º Critério de conversão
matricial de segmentos de reta
26. Conversão Matricial de
Segmentos de Reta
• 2.º Critério:
• Selecionamos todos os
pixels cujas
coordenadas são
obtidas arredondando-
se os valores das
coordenadas de algum
ponto do segmento.
• Restrição: com
segmentos a 45 graus,
este critério produz
resultados
semelhantes ao
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
26
Figura 5b: 2.º Critério de conversão
matricial de segmentos de reta
27. Conversão Matricial de
Segmentos de Reta
• 3.º Critério:
• Selecionamos, em
cada vertical, o pixel
mais próximo do
ponto de intersecção
do segmento com a
reta vertical.
• Vantagens:
aparência leve e
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
27
Figura 5c: 3.º Critério de conversão
matricial de segmentos de reta
28. Conversão Matricial de
Segmentos de Reta
• 4.º Critério:
• Selecionamos, em
cada horizontal, o
pixel mais próximo
do ponto de
intersecção do
segmento com a reta
horizontal.
• Restrição:
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
28
Figura 5d: 4.º Critério de conversão
matricial de segmentos de reta
29. Características Desejáveis para
os Algoritmos de conversão
Matricial
de Segmentos de Retas• Linearidade:
• Os pixels traçados devem dar a aparência de que
estão sobre uma reta.
• Isto é trivial no caso de segmentos paralelos aos eixos
x ou y, ou com inclinação de 45 graus, mas não nos
outros casos.
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
29
Figura 6: Linearidade
30. Características Desejáveis para
os Algoritmos de conversão
Matricial
de Segmentos de Retas
• Precisão:
• Os segmentos devem iniciar e terminar nos pontos
especificados.
• Caso isso não ocorra, pequenos gaps podem surgir
entre o final de um segmento e o início de outro.
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
30
Figura 7: Precisão
31. Características Desejáveis para
os Algoritmos de conversão
Matricial
de Segmentos de Retas
• Espessura (Densidade) uniforme:
• A densidade da linha é dada pelo número de pixels
traçados dividido pelo comprimento da linha.
• Para manter a densidade constante, os pixels
devem ser igualmente espaçados.
• A imagem do segmento não varia de intensidade ou
espessura ao longo de sua extensão.
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
31
Figura 8: Espessura
32. Características Desejáveis para
os Algoritmos de conversão
Matricial
de Segmentos de Retas
• Continuidade:
• A imagem não apresenta interrupções
indesejáveis.
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
32
Figura 9: Continuidade e Descontinuidade
33. Características Desejáveis para
os Algoritmos de conversão
Matricial
de Segmentos de Retas
• Intensidade independente da inclinação:
para segmentos de diferentes inclinações
• Rapidez no Traçado dos segmentos.
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
33
34. Conversão Matricial de
Segmentos de Reta
• Os algoritmos que vamos estudar usam o
método incremental, que consiste em
executar os cálculos iterativamente,
mantendo um registro (ou memória) do
progresso da computação a cada passo
da iteração.
• Nesse método, começando por um dos
extremos da linha, o próximo ponto é
calculado e traçado até que o outro
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
34
35. Conversão Matricial de
Segmentos de Reta
• O problema da conversão matricial consiste
essencialmente em ajustar uma curva, no
caso, um segmento de reta, a qual é
precisamente definida por coordenadas
reais, a uma malha de coordenadas inteiras.
• Isto pode ser feito calculando as
coordenadas reais, (xr, yr), do próximo ponto
na linha, e escolhendo na malha os pixels
cujas coordenadas (x, y) mais se aproximam
das coordenadas reais, obtidos por
arredondamento ou truncamento.
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
35
36. Equação da Reta
• Matematicamente, uma reta pode ser
descrita como:
• Coeficiente Angular (m): relacionado ao
ângulo que a reta faz com o eixo x.
– Para m <=1, a reta faz um ângulo entre 0º e 45º com o eixo
x.
– Para m >1, a reta faz um ângulo entre 45º e 90º com o eixo
x.
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
36
𝑦 = 𝑚𝑥 + 𝑏
EQUAÇÃO 1: Equação da Reta
m =
(𝑦2 −𝑦1)
(𝑥2 −𝑥1)
EQUAÇÃO 2: Equação do Coeficiente Angular da Reta (m)
37. Equação da Reta
• Coeficiente linear (b): dá o valor no eixo y
que é cruzado pela reta.
• Dados os pontos no plano P1 e P2, pode-se
obter m e b, ou seja, a equação da reta que
passa pelos pontos.
• A partir das equações apresentadas para a
reta, pode-se definir algoritmos para
desenhar um segmento de reta a partir de
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
37
𝑏 = 𝑦1 − 𝑚𝑥1
EQUAÇÃO 3: Equação do Coeficiente Linear da Reta (b)
38. Equação da Reta
• A ideia mais simples para
rasterização de linhas é
determinar a qual valor
inteiro no eixo y, uma reta
se aproxima.
• De modo geral, para cada
valor x, calcula-se o
arredondamento de y.
• Obs.: RASTERIZAÇÃO é a
forma de tratar
vetorialmente imagens na
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
38
Figura 10: Ilustração de uma
reta desenhada entre dois
pontos
39. Equação da Reta: algoritmo
• Um trecho de código em linguagem C que ilustra a
implementação da ideia mais simples de traçado de reta:
int x, x1, x2, y1, y2, cor;
float y, m;
//coeficiente angular
m = (y2 – y1)/(x2 – x1);
//iteração
for (x = x1; x <= x2; x++) {
//coeficiente linear
y = y1 + m * (x – x2);
//arredonda y e imprime na tela
write_pixel(x, round(y), cor);
}
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
39
Variando-se x
unitariamente, de
pixel em pixel,
encontramos o
valor de y
40. Equação da Reta: fluxograma
Um fluxograma que
pode ser utilizado
para implementar
uma FUNÇÃO da
ideia simples de
traçado de
segmento de reta
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
40
Figura 11: Fluxograma da
Equação da Reta
41. Equação da Reta: problema
• Para retas verticais o
algoritmo apresenta uma
falha: Não há um cálculo
dos pontos aproximados
no eixo x, então, o
segmento de reta é
traçado erroneamente na
tela.
• Essa falha é o principal
motivo pelo qual não é
implementada atualmente
essa ideia.
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
41
Figura 12: Reta vertical
traçada com buracos
42. Equação da Reta: problema
• O algoritmo apresentado
só funciona para
segmentos em que 0 < m <
1.
• Se 0 < m < 1 a variação
em x é superior à variação
em y.
• Se esse não for o caso, vai
traçar um segmento com
buracos!!
• Se m > 1, basta inverter os
papéis de x e y
x = x1 + ((y-y1)/m)
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
42
Figura 12: Reta vertical
traçada sem buracos
43. Equação da Reta: problema
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
43
Linha(x1, x2, y1, y2, cor)
m = (y2 – y1)/(x2 – x1);
Se ( m > 1 )
x1 até x2
y = y1 + m * (x – x2);
write_pixel(x, round(y), cor);
continue
return
x1 até x2
x = x1 + ((y-y1)/m)
write_pixel(x, round(y), cor);
44. Algoritmo de Bresenham
(1965)
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
44
• ALGORITMO DO PONTO MÉDIO
(MidPointLineAlgorithm)
• O algoritmo de Bresenham trabalha somente com
inteiros
• É mais eficiente pois evita o uso da função de
arredondamento (Round), o que fornece economia de
processamento
• O algoritmo anterior trabalha com numeros de ponto
flutuante (float)
• Baseia-se no argumento de que um segmento de reta,
ao ser plotado, deve ser contínuo, ou melhor, os pixels
45. Algoritmo de Bresenham
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
45
• Será analisado o caso de m <1, pois para
m>=1, basta inverter as coordenadas x e
y.
• Se m<1, e dado um ponto na reta, o
próximo ponto é (x+1+y) ou (x+1, y+1)?
• O algoritmo de Bresenham responde a
essa questão calculando um valor (p) para
cada pixel, e passando para o pixel
seguinte, até alcançar o último pixel do
46. Algoritmo de Bresenham
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
46
• Isso fará com que os pontos das retas
sejam próximos não havendo separação
entre os pixels pintados, evitando o erro
produzido pelo algoritmo demonstrado
anteriormente
• Bresenham permite que o cálculo de (xi +
1, yi + 1) seja feito incrementalmente,
usando os cálculos já feitos para (xi, yi).
47. Algoritmo de Bresenham
• O algoritmo assume
que a inclinação da
linha está entre 0 e 1
• Outras inclinações
podem ser tratadas
por simetria)
• O ponto (x1, y1) é o
inferior esquerdo, e
(x2, y2) é o superior
direito.
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
47
48. Algoritmo de Bresenham
P(xp, yp): ponto inicial
E(xp+1, yp) : pixel
abaixo e à direita
NE(xp+1, yp+1): pixel
acima e à direita
M: localização do ponto
médio
d: valor do ponto médio
Q: ponto de
intersecção entre a reta
e a coluna
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
48
50. Algoritmo de Bresenham
• Assuma que o pixel
que acabou de ser
selecionado é P, em
(xp, yp)
• O próximo deve ser
escolhido entre o
pixel à direita (pixel
E) e o pixel acima à
direita (NE).
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
50
51. Algoritmo de Bresenham
• A partir do pixel
inicial, é calculado o
ponto médio entre os
próximos dois pixels
a serem
selecionados
• O escolhido depende
da posição do ponto
médio em relação à
reta
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
51
52. Algoritmo de Bresenham
• O que se faz é
observar de que lado
da reta está o ponto
M.
• Se M está acima da
reta, o pixel E está
mais próximo da reta
• Se M está abaixo,
NE está mais
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
52
53. Algoritmo de Bresenham
• Dessa forma, o teste
do ponto-médio
permite a escolha do
pixel mais próximo
da reta.
• O erro é sempre <=
½
• Erro: distância
vertical entre o pixel
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
53
54. Algoritmo de Bresenham
• Método para calcular de que lado da reta
está o ponto M
• Considere a função implícita da reta:
25/02/2016Prof.ªM.ªElaineCecíliaGatto54
𝐹 𝑥, 𝑦 = 𝑎𝑥 + 𝑏𝑦 + 𝑐 = 0
EQUAÇÃO 4: Função Implícita da Reta
55. Algoritmo de Bresenham
• Se dy = y2 − y1
• e dx = x2 − x1
• Então, a equação da reta em termos de
sua inclinação pode ser escrita como:
25/02/2016Prof.ªM.ªElaineCecíliaGatto55
𝑦 =
𝑑𝑦
𝑑𝑥
𝑥 + 𝑏
EQUAÇÃO 5: Inclinação da Reta
56. Algoritmo de Bresenham
• Dessa forma tem-se:
• Em que:
a = dy
b = −dx
c = b.dx
25/02/2016Prof.ªM.ªElaineCecíliaGatto56
𝐹 𝑥, 𝑦 = 𝑑𝑦. 𝑥 − 𝑑𝑥. 𝑦 + 𝑏. 𝑑𝑥 = 0
EQUAÇÃO 6: Reescrita da inclinação da Reta
57. Algoritmo de Bresenham
• F(x, y) = 0: f(x,y) é igual a zero quando está sobre a
linha
• F(x,y) > 0: é positiva para pontos abaixo da linha
• F(x,y) < 0: é negativa para pontos acima da linha
• Para o teste do ponto-médio, calcular
• e verificar o seu sinal
25/02/2016Prof.ªM.ªElaineCecíliaGatto57
𝐹 𝑀 = 𝐹 𝑥 𝑝 + 1, 𝑦𝑝 +
1
2
EQUAÇÃO 7: Função para calcular o ponto médio
59. Algoritmo de Bresenham
• Como a decisão será tomada com base no valor da
função no ponto
• definimos uma variável de decisão
25/02/2016Prof.ªM.ªElaineCecíliaGatto59
𝑑 = 𝑎 𝑥 𝑝 + 1 + 𝑏 𝑦 𝑝 +
1
2
+ 𝑐
EQUAÇÃO 8: Variável de Decisão
𝑝𝑜𝑛𝑡𝑜 = 𝑥 𝑝 + 1, 𝑦𝑝 +
1
2
60. Algoritmo de Bresenham
• d > 0: NE é o pixel escolhido
• d < 0: E é o pixel escolhido
• d = 0: pode-se escolher qualquer um deles
• O que acontece com a localização de M e o valor
de d no próximo ponto da reta?
• Ambos dependem, obviamente, da escolha de E ou
NE.
25/02/2016Prof.ªM.ªElaineCecíliaGatto60
62. Algoritmo de Bresenham
• Se E for escolhido, M é incrementado de 1 na
direção x, então
• Entretanto
25/02/2016Prof.ªM.ªElaineCecíliaGatto62
𝑑 𝑛𝑒𝑤 = 𝑓(𝑥𝑝 + 2, 𝑦𝑝 +
1
2
) =
= 𝑎 𝑥 𝑝 + 2 + 𝑏 𝑦 𝑝 +
1
2
+ 𝑐
EQUAÇÃO 9: Cálculo do novo ponto da variável de decisão
𝑑 𝑜𝑙𝑑 = 𝑎 𝑥 𝑝 + 1 + 𝑏 𝑦 𝑝 +
1
2
+ 𝑐
63. Algoritmo de Bresenham
• Subtraindo 𝑑 𝑜𝑙𝑑 de 𝑑 𝑛𝑒𝑤 , para obter a diferença
incremental, tem-se:
• ∆E: é o incremento a ser adicionado depois da escolha
de E
• Em outras palavras, pode-se derivar o valor da variável
de decisão no próximo passo incrementalmente, a partir
do seu valor atual, sem necessidade de calcular F(M)
25/02/2016Prof.ªM.ªElaineCecíliaGatto63
𝑑 𝑛𝑒𝑤 = 𝑑 𝑜𝑙𝑑 + 𝑎
∆𝐸 = 𝑎 = 𝑑𝑦
64. Algoritmo de Bresenham
• Se NE é escolhido, M é incrementado de 1 em
ambas as direções, x e y
• Portanto, Subtraindo 𝑑 𝑜𝑙𝑑 de 𝑑 𝑛𝑒𝑤, tem-se:
• ∆NE: é o incremento a ser adicionado depois da
escolha de NE
25/02/2016Prof.ªM.ªElaineCecíliaGatto64
𝑑 𝑛𝑒𝑤 = 𝑑𝑜𝑙 𝑑 + 𝑎 + 𝑏
∆𝑁𝐸 = 𝑎 + 𝑏 = 𝑑𝑦 − 𝑑𝑥
65. Algoritmo de Bresenham
• Para eliminar a fração em d, F é multiplicada por 2.
• Isto multiplica cada constante e a variável de
decisão por 2, mas não afeta o sinal da variável de
decisão, que é o que interessa para o teste do
ponto-médio.
• A aritmética necessária para calcular o valor da
variável de decisão d a cada passo é adição
simples, nenhuma multiplicação é necessária (veja
o fluxograma).
25/02/2016Prof.ªM.ªElaineCecíliaGatto65
𝐹 𝑥, 𝑦 = 2(𝑎𝑥 + 𝑏𝑦 + 𝑐)
66. Algoritmo de Bresenham
• A figura ao lado
apresenta a reta
que vai do ponto
(5,8) ao ponto
(9,11), traçada por
este algoritmo.
25/02/2016Prof.ªM.ªElaineCecíliaGatto66
67. Algoritmo de Bresenham:
RESUMO
• A cada passo, o algoritmo escolhe entre 2 pixels,
com base no sinal da variável de decisão calculada
na iteração anterior
• A seguir, a variável de decisão é atualizada
adicionando-se ∆E ou ∆NE ao valor anterior,
dependendo do pixel escolhido
• Como o primeiro pixel corresponde ao ponto (x1,
y1), pode-se calcular diretamente o valor inicial de d
para escolher entre E e NE.
• O primeiro ponto-médio está em (x1 + 1, (y1 + ½) )
25/02/2016Prof.ªM.ªElaineCecíliaGatto67
68. Algoritmo de Bresenham:
Implementação 1
void bresenham (int x1,int x2, int y1,int y2)
int dx,dy, incSup, incInf, p, x, y;
int valor;
{
dx = x2-x1;
dy = y2-y1;
p = 2*dy-dx; /* fator de decisão: valor inicial */
incInf = 2*dy; /* Incremento Superior */
incSup = 2*(dy-dx); /* Incremento inferior */
x = x1;
y = y1;
write_Pixel(x,y,valor); /* Pinta pixel inicial */
while (x < x2){
if (p <= 0){ /* Escolhe Inferior */
p = p + incInf;
}
else { /* Escolhe Superior */
p = p + incSup;
y++;
} /* maior que 45o */
x++;
write_pixel (x, y, valor);
} /* m do while */
} /* m do algoritmo */
25/02/2016Prof.ªM.ªElaineCecíliaGatto68
69. Algoritmo de Bresenham:
Implementação 2
procedure midpointLine (x0, y0, x1, y1, value : Integer);
var
dx, dy, incrE, incrNE, d, x, y : Integer;
begin
dx := x1 - x0;
dy := y1 - y0;
d := 2*dy - dx;
incrE := 2*dy;
incrNE:= 2*(dy - dx);
x := x0;
y := y0;
writePixel(x, y, value);
while x < x1 DO
IF d <= 0 THEN
d:= d + incrE;
x:= x + 1; 17
else
d:= d + incrNE;
x:= x + 1;
y:= y + 1;
end;
writePixel(x, y, value);
end;
end midpointLine;
25/02/2016Prof.ªM.ªElaineCecíliaGatto69
70. Referências
• Ammeral, L. Computação Gráfica para programadores
Java. Rio de Janeiro: LTC, 2008
• Traina, A. J. M.; Oliveira, M. C. F. Apostila de
Computação Gráfica. São Carlos: USP/ICMC, 2006.
Disponível em:
http://www.inf.ufes.br/~thomas/graphics/www/apostilas
/GBdI2006.pdf. Acessado em 22 de Janeiro de 2016.
• Paulovich, F. V. Conversão Matricial. São Paulo:
USP/ICMC, 2011. Disponível em:
http://wiki.icmc.usp.br/images/4/4a/SCC0250-slides-
12-Conversao_matricial.pdf. Acessado em 22 de
Janeiro de 2016
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
70
71. Referências
• Cavalcanti, J. Computação Gráfica. UNIVAST, 2014. Disponível em:
http://www.univasf.edu.br/~jorge.cavalcanti/comput_graf04_prim_gr
aficas2.pdf. Acessado em 20 de janeiro de 2016.
• Bueno, M. Primitivas Gráficas. Disponível em:
http://marciobueno.com/arquivos/ensino/cg/CG_03_Primitivas_Grafi
cas.pdf. Acessado em 20 de janeiro de 2016.
• Mousquer, J. C.; Kliemann, K. A.; Matrakas, M. D. ALGORITMOS
PARA DESENHAR RETAS E CÍRCULOS. Paraná, Foz do Iguaçu:
FAC. Disponível em:
http://www.udc.edu.br/v5/resources/producoes/SeminarioCientifico2
014/files/CC/01.pdf. Acessado em 20 de Janeiro de 2016.
25/02/2016
Prof.ªM.ªElaineCecíliaGatto
71