71
TRAÇADO EM DISPOSITIVOS GRÁFICOS MATRICIAIS PRIMITIVAS GRÁFICAS: PONTOS, RETAS, CIRCULOS, ELIPSES, POLÍGONOS Prof.ª Elaine Cecília Gatto 2 8 / 0 6 / 2 0 2 2 P r o f . ª M . ª E l a i n e C e c í l i a G a t t o 1

Traçado em dispositivos gráficos matriciais Parte 1

Embed Size (px)

Citation preview

Page 1: Traçado em dispositivos gráficos matriciais Parte 1

03/05/2023Prof.ª M

.ª Elaine Cecília Gatto1

TRAÇADO EM DISPOSITIVOS

GRÁFICOS MATRICIAISPRIMITIVAS GRÁFICAS:

PONTOS, RETAS, CIRCULOS, ELIPSES, POLÍGONOS

Prof.ª Elaine Cecília Gatto

Page 2: Traçado em dispositivos gráficos matriciais Parte 1

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.

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

2

Page 3: Traçado em dispositivos gráficos matriciais Parte 1

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 mm.

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

3

Page 4: Traçado em dispositivos gráficos matriciais Parte 1

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)

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

4

Page 5: Traçado em dispositivos gráficos matriciais Parte 1

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 e vertical, dcx e dcy

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

5

Page 6: Traçado em dispositivos gráficos matriciais Parte 1

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.

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

6

Page 7: Traçado em dispositivos gráficos matriciais Parte 1

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

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

7

Page 8: Traçado em dispositivos gráficos matriciais Parte 1

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 de visualização.

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

8

Page 9: Traçado em dispositivos gráficos matriciais Parte 1

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

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

9

Page 10: Traçado em dispositivos gráficos matriciais Parte 1

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

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

10

Page 11: Traçado em dispositivos gráficos matriciais Parte 1

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

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

11

Page 12: Traçado em dispositivos gráficos matriciais Parte 1

Sistemas de Coordenadas

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

12

Figura 1: Sistemas de Coordenadas

Page 13: Traçado em dispositivos gráficos matriciais Parte 1

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 elementos gráficos expressos em uma representação vetorial.

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

13

Page 14: Traçado em dispositivos gráficos matriciais Parte 1

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 devem ser traçados para gerar uma reta (aproximada) na tela.

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

14

Page 15: Traçado em dispositivos gráficos matriciais Parte 1

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.

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

15

Page 16: Traçado em dispositivos gráficos matriciais Parte 1

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.

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

16

Page 17: Traçado em dispositivos gráficos matriciais Parte 1

Simetria e Reflexão03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

17

Figura 2: Representação de segmentos de reta horizontais, verticais e diagonais

Page 18: Traçado em dispositivos gráficos matriciais Parte 1

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.

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

18

Page 19: Traçado em dispositivos gráficos matriciais Parte 1

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.

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

19

Page 20: Traçado em dispositivos gráficos matriciais Parte 1

Simetria e Reflexão03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

20Figura 3: Reflexão de uma imagem com relação a um eixo diagonal

Page 21: Traçado em dispositivos gráficos matriciais Parte 1

Simetria e Reflexão03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

21

Figura 4a: Rotação de 90 graus obtida através de 2 reflexões, uma horizontal (a) e outra na diagonal (b).

Page 22: Traçado em dispositivos gráficos matriciais Parte 1

Simetria e Reflexão03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

22

Figura 4b: Rotação de 90 graus obtida através de 2 reflexões, uma horizontal (a) e outra na diagonal (b).

Page 23: Traçado em dispositivos gráficos matriciais Parte 1

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

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

23

Page 24: Traçado em dispositivos gráficos matriciais Parte 1

Conversão Matricial de Segmentos de Reta

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

24

Figura 5: Alguns critérios de conversão matricial podem ser vistos através desta figura

Page 25: Traçado em dispositivos gráficos matriciais Parte 1

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

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

25

Figura 5a: 1.º Critério de conversão matricial de segmentos de reta

Page 26: Traçado em dispositivos gráficos matriciais Parte 1

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 anterior

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

26

Figura 5b: 2.º Critério de conversão matricial de segmentos de reta

Page 27: Traçado em dispositivos gráficos matriciais Parte 1

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 continuidade.

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

27

Figura 5c: 3.º Critério de conversão matricial de segmentos de reta

Page 28: Traçado em dispositivos gráficos matriciais Parte 1

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: descontinuidade

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

28

Figura 5d: 4.º Critério de conversão matricial de segmentos de reta

Page 29: Traçado em dispositivos gráficos matriciais Parte 1

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.

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

29

Figura 6: Linearidade

Page 30: Traçado em dispositivos gráficos matriciais Parte 1

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.

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

30Figura 7: Precisão

Page 31: Traçado em dispositivos gráficos matriciais Parte 1

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.

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

31Figura 8: Espessura

Page 32: Traçado em dispositivos gráficos matriciais Parte 1

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.

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

32Figura 9: Continuidade e Descontinuidade

Page 33: Traçado em dispositivos gráficos matriciais Parte 1

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.

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

33

Page 34: Traçado em dispositivos gráficos matriciais Parte 1

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 extremo seja atingido e traçado.

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

34

Page 35: Traçado em dispositivos gráficos matriciais Parte 1

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.

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

35

Page 36: Traçado em dispositivos gráficos matriciais Parte 1

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.

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

36

EQUAÇÃO 1: Equação da Reta

m =

EQUAÇÃO 2: Equação do Coeficiente Angular da Reta (m)

Page 37: Traçado em dispositivos gráficos matriciais Parte 1

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 dois pontos dados

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

37

EQUAÇÃO 3: Equação do Coeficiente Linear da Reta (b)

Page 38: Traçado em dispositivos gráficos matriciais Parte 1

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 tela do computador

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

38

Figura 10: Ilustração de uma reta desenhada entre dois

pontos

Page 39: Traçado em dispositivos gráficos matriciais Parte 1

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 angularm = (y2 – y1)/(x2 – x1);//iteraçãofor (x = x1; x <= x2; x++) {

//coeficiente lineary = y1 + m * (x – x2);//arredonda y e imprime na telawrite_pixel(x, round(y), cor);

}

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

39

Variando-se x unitariamente, de pixel em pixel, encontramos o valor de y

Page 40: Traçado em dispositivos gráficos matriciais Parte 1

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

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

40

Figura 11: Fluxograma da Equação da Reta

Page 41: Traçado em dispositivos gráficos matriciais Parte 1

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.

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

41

Figura 12: Reta vertical traçada com buracos

Page 42: Traçado em dispositivos gráficos matriciais Parte 1

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)

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

42

Figura 12: Reta vertical traçada sem buracos

Page 43: Traçado em dispositivos gráficos matriciais Parte 1

Equação da Reta: problema

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

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);

Page 44: Traçado em dispositivos gráficos matriciais Parte 1

Algoritmo de Bresenham (1965)

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

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 que compõem um segmento de reta devem ser vizinhos.

Page 45: Traçado em dispositivos gráficos matriciais Parte 1

Algoritmo de Bresenham03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

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 segmento da reta.

Page 46: Traçado em dispositivos gráficos matriciais Parte 1

Algoritmo de Bresenham03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

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).

Page 47: Traçado em dispositivos gráficos matriciais Parte 1

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.

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

47

Page 48: Traçado em dispositivos gráficos matriciais Parte 1

Algoritmo de BresenhamP(xp, yp): ponto inicialE(xp+1, yp) : pixel abaixo e à direitaNE(xp+1, yp+1): pixel acima e à direitaM: localização do ponto médiod: valor do ponto médioQ: ponto de intersecção entre a reta e a coluna

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

48

Page 49: Traçado em dispositivos gráficos matriciais Parte 1

03/05/2023Prof.ª M

.ª Elaine Cecília Gatto49

Algoritmo de Bresenham

Page 50: Traçado em dispositivos gráficos matriciais Parte 1

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).

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

50

Page 51: Traçado em dispositivos gráficos matriciais Parte 1

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

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

51

Page 52: Traçado em dispositivos gráficos matriciais Parte 1

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 próximo.

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

52

Page 53: Traçado em dispositivos gráficos matriciais Parte 1

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 escolhido e a linha

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

53

Page 54: Traçado em dispositivos gráficos matriciais Parte 1

03/05/2023Prof.ª M

.ª Elaine Cecília Gatto54

Algoritmo de Bresenham• Método para calcular de que lado da

reta está o ponto M

• Considere a função implícita da reta:

EQUAÇÃO 4: Função Implícita da Reta

Page 55: Traçado em dispositivos gráficos matriciais Parte 1

03/05/2023Prof.ª M

.ª Elaine Cecília Gatto55

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:

EQUAÇÃO 5: Inclinação da Reta

Page 56: Traçado em dispositivos gráficos matriciais Parte 1

03/05/2023Prof.ª M

.ª Elaine Cecília Gatto56

Algoritmo de Bresenham• Dessa forma tem-se:

• Em que:a = dyb = −dxc = b.dx

= 0

EQUAÇÃO 6: Reescrita da inclinação da Reta

Page 57: Traçado em dispositivos gráficos matriciais Parte 1

03/05/2023Prof.ª M

.ª Elaine Cecília Gatto57

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

EQUAÇÃO 7: Função para calcular o ponto médio

Page 58: Traçado em dispositivos gráficos matriciais Parte 1

03/05/2023Prof.ª M

.ª Elaine Cecília Gatto58

Algoritmo de Bresenham

Page 59: Traçado em dispositivos gráficos matriciais Parte 1

03/05/2023Prof.ª M

.ª Elaine Cecília Gatto59

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

EQUAÇÃO 8: Variável de Decisão

Page 60: Traçado em dispositivos gráficos matriciais Parte 1

03/05/2023Prof.ª M

.ª Elaine Cecília Gatto60

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.

Page 61: Traçado em dispositivos gráficos matriciais Parte 1

03/05/2023Prof.ª M

.ª Elaine Cecília Gatto61

Algoritmo de Bresenham

Page 62: Traçado em dispositivos gráficos matriciais Parte 1

03/05/2023Prof.ª M

.ª Elaine Cecília Gatto62

Algoritmo de Bresenham• Se E for escolhido, M é incrementado de 1 na

direção x, então

• Entretanto

= EQUAÇÃO 9: Cálculo do novo ponto da variável de decisão

Page 63: Traçado em dispositivos gráficos matriciais Parte 1

03/05/2023Prof.ª M

.ª Elaine Cecília Gatto63

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) diretamente.

Page 64: Traçado em dispositivos gráficos matriciais Parte 1

03/05/2023Prof.ª M

.ª Elaine Cecília Gatto64

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

Page 65: Traçado em dispositivos gráficos matriciais Parte 1

03/05/2023Prof.ª M

.ª Elaine Cecília Gatto65

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).

Page 66: Traçado em dispositivos gráficos matriciais Parte 1

03/05/2023Prof.ª M

.ª Elaine Cecília Gatto66

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.

Page 67: Traçado em dispositivos gráficos matriciais Parte 1

03/05/2023Prof.ª M

.ª Elaine Cecília Gatto67

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 + ½) )

Page 68: Traçado em dispositivos gráficos matriciais Parte 1

03/05/2023Prof.ª M

.ª Elaine Cecília Gatto68

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 */

Page 69: Traçado em dispositivos gráficos matriciais Parte 1

03/05/2023Prof.ª M

.ª Elaine Cecília Gatto69

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 THENd:= d + incrE;x:= x + 1; 17

elsed:= d + incrNE;x:= x + 1;y:= y + 1;

end;writePixel(x, y, value);

end;end midpointLine;

Page 70: Traçado em dispositivos gráficos matriciais Parte 1

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

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

70

Page 71: Traçado em dispositivos gráficos matriciais Parte 1

Referências • Cavalcanti, J. Computação Gráfica. UNIVAST, 2014.

Disponível em: http://www.univasf.edu.br/~jorge.cavalcanti/comput_graf04_prim_graficas2.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_Graficas.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/SeminarioCientifico2014/files/CC/01.pdf. Acessado em 20 de Janeiro de 2016.

03/05/2023

Prof.ª M.ª Elaine Cecília Gatto

71