• Nenhum resultado encontrado

ALGORITMOS PARA DESENHAR RETAS E CÍRCULOS

N/A
N/A
Protected

Academic year: 2021

Share "ALGORITMOS PARA DESENHAR RETAS E CÍRCULOS"

Copied!
7
0
0

Texto

(1)

ALGORITMOS PARA DESENHAR RETAS E C´IRCULOS

Jann Claude Mousquer1, Kenner Alan Kliemann1, Miguel Diogenes Matrakas1

1 Curso de Ci ˆencia da Computac¸ ˜ao – Faculdades Anglo-Americano (FAA)

Foz do Iguac¸u, PR - Brasil

{jannclaude,kenner.hp}@gmail.com, mdmatrakas@yahoo.com

Abstract. This article is a bibliography review about algorithms to draw lines and circles using graphic primatives. The algorithms currently used, are based on cartesian plane and are defined in the SRPG (Simple Ras-ter Graphics Package). Will be discussed some of the algorithms that rasterize graphic objects.

Resumo. Este artigo ´e uma revis ˜ao bibliogr ´afica sobre algor´ıtmos para desenhar retas e circulos utilizando primitivas gr ´aficas. Os algor´ıtmos atualmente utilizados se baseiam no plano cartesiano, e s ˜ao definidos no SRGP (Simple Raster Graphics Package). Ser ´a abordado alguns dos algor´ıtmos que fazem a rasterizac¸ ˜ao de objetos gr ´aficos.

Palavras Chave: Primitivas Gr ´aficas, Retas, C´ırculos;

1. Introduc¸ ˜ao

´

E chamado de primitivas gr ´aficas os comandos e func¸ ˜oes que manipulam e al-teram os elementos gr ´aficos de uma imagem. Tamb ´em entram na definic¸ ˜ao os elementos b ´asicos de gr ´aficos a partir dos quais s ˜ao constru´ıdos outros, mais complexos.(Hetem Annibal Jr.,2006).

Com base nesta afirmac¸ ˜ao, ser ´a abordardado o estudo das primitivas gr ´aficas respons ´aveis pelo desenho de retas e c´ırculos. Computacionalmente, todos os objetos s ˜ao representados por um conjunto de pontos. O ponto ´e a uni-dade gr ´afica fundamental e tamb ´em pode ser chamada de pixel. As proprieuni-dades b ´asicas de um pixel s ˜ao: posic¸ ˜ao no plano gr ´afico (x,y) e cor.

Para se obter um pixel ´e necess ´ario informar o par ordenado (x,y), que possibilita as coordenadas de linha e coluna onde ser ´a pintada a grade do v´ıdeo; de acordo com a resoluc¸ ˜ao especificada no sistema operacional. Com isso, po-demos unir pontos a fim de construir objetos mais complexos.

Para se desenhar uma reta ou qualquer outro objeto, ´e necess ´ario fazer uma rasterizac¸ ˜ao. Rasterizac¸ ˜ao ´e o processo que ´e utilizado para determinar quais s ˜ao os pixels que melhor aproximam uma linha desej ´avel na tela, isso se d ´a ao fato de que dispositivos gr ´aficos n ˜ao conseguem representar uma reta perfeita, como apresentado naFigura 1, apenas uma aproximac¸ ˜ao.

O Simple Raster Graphics Package (SRGP) ´e um pacote gr ´afico, indepen-dente de dispositivo, que explora as habilidades de rasterizac¸ ˜ao dos dispositivos gr ´aficos. Ele implementa primitivas gr ´aficas, fornecendo suporte `a aplicac¸ ˜oes.

(2)

Figura 1. Rasterizac¸ ˜ao.

O SRGP trata a tela de sa´ıda como um plano cartesiano, considerando o ponto de origem (0,0), o canto inferior esquerdo. Partindo deste princ´ıpio, as entradas (x1,y1,x2,y2), s ˜ao tratadas como coordenadas no plano, tendo como unidade o pixel.

2. Retas

O SRGP fornece procedimentos para desenhos de retas, o procedimento para o desenho de uma reta ´e:

1 procedure SRGP_lineCoord (0,0,100,300);

Neste exemplo uma linha do ponto (0,0) ao ponto (100,300) ser ´a dese-nhado na tela. Para que a reta seja representada em tela, a rasterizac¸ ˜ao ser ´a efetuada pelo SRGP uma vez que o procedimento anterior seja invocado. Ser ´a abordardado alguns dos algoritmos de rasterizac¸ ˜ao `a seguir.

2.1. Algor´ıtmo Iterativo Basico

A ideia mais simples para rasterizac¸ ˜ao de linhas ´e 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. Logo, temos que:

Para i pontos em X = (Xi, Round(Yi));

NaFigura 2 podemos observar o resultado da rasterizac¸ ˜ao com esse al-goritmo e notamos ainda que, para retas verticais o alal-goritmo apresenta uma grande falha, isso se d ´a ao fato de n ˜ao haver um c ´alculo dos pontos aproxima-dos no eixo x. Esta falha ´e o principal motivo pelo qual n ˜ao ´e implementado atualmente esse algoritmo, uma vez que se torna pouco vers ´atil.

2.2. Bresenham

Tamb ´em conhecido como algor´ıtmo do ponto m ´edio, baseia-se no argumento de que um segmento de reta, ao ser plotado, deve ser cont´ınuo, os pixels que comp ˜oem o segmento devem ser vizinhos; Isso far ´a com que os pontos das retas

(3)

Figura 2. Demonstrac¸ ˜ao do Algor´ıtmo Iterativo B ´asico.

sejam pr ´oximos n ˜ao havendo separac¸ ˜ao entre os pixels pintados, evitando o erro produzido pelo algor´ıtmo demonstrado anteriormente.

Um outro atrativo ´e que o algor´ıtmo de Bresenham utiliza-se apena de aritm ´etica inteira para c ´alculo dos pontos, evitando a func¸ ˜ao de arredondamento (Round), fornecendo uma economia de processamento. O procedimento em pseudo-c ´odigo abaixo, apresenta a l ´ogica da implementac¸ ˜ao do algor´ıtmo.

1 procedure midpointLine (x0, y0, x1, y1, value : Integer); 2 var

3 dx, dy, incrE, incrNE, d, x, y : Integer;

4 begin 5 dx := x1 - x0; 6 dy := y1 - y0; 7 d := 2*dy - dx; 8 incrE := 2*dy; 9 incrNE:= 2*(dy - dx); 10 x := x0; 11 y := y0; 12 writePixel(x, y, value); 13 while x < x1 DO 14 IF d <= 0 THEN 15 d:= d + incrE; 16 x:= x + 1;

(4)

17 else 18 d:= d + incrNE; 19 x:= x + 1; 20 y:= y + 1; 21 end; 22 writePixel(x, y, value); 23 end; 24 end midpointLine;

NaFigura 3 temos a demonstrac¸ ˜ao de retas desenhadas pelo Algoritmo de Bresenham.

Figura 3. Exemplo de retas desenhadas com Bresenham.

3. C´ırculos

Para trac¸ar c´ırculos, o SRGP trata-os como um caso particular devido a sua simetria. Desta forma, para a rasterizac¸ ˜ao o c´ırculo deve ser transladado de forma que o c´ırculo esteja centrado na origem (0,0). ´E calculado ent ˜ao os pontos do primeiro quadrante e os demais s ˜ao ent ˜ao escritos por simetria. Para calcular os valores em y, ´e considerado que:

y2 = R2− x2 (1)

No entanto, um c ´alculo neste formato para cada ponto ´e computacional-mente invi ´avel, visto que haveria um alto n ´umero de c ´alculos de pot ˆencia e raiz, que exigem consider ´avel processamento.

3.1. Simetria de Ordem 8

Segundo [Foley et al. 1995], o Algoritmo de Simetria de Ordem 8 considera que, o trac¸ado de uma circunfer ˆencia pode tirar proveito de sua simetria. Considere

(5)

uma circunfer ˆencia centrada na origem. Se o ponto ( x, y ) pertence `a circun-fer ˆencia, pode-se calcular de maneira trivial sete outros pontos da circuncircun-fer ˆencia Figura 4. Consequentemente, basta computar um arco de circunfer ˆencia de 45o

para obter a circunfer ˆencia toda. Para uma circunfer ˆencia com centro na origem, os oito pontos sim ´etricos podem ser trac¸ados usando o procedimento Circle-Points. Este algor´ıtmo n ˜ao calcula os valores de entrada x e y, mas uma vez calculados nos d ´a outros sete pontos do c´ırculo.

Figura 4. Simetria de Ordem 8.

1 void CirclePoints(int x, int y, int color){ 2 write_pixel( x, y, color);

3 write_pixel( x, -y, color); 4 write_pixel(-x, y, color); 5 write_pixel(-x, -y, color); 6 write_pixel( y, x, color); 7 write_pixel( y, -x, color); 8 write_pixel(-y, x, color); 9 write_pixel(-y, -x, color); 10 }/* end CirclePoints */ ´

E recomend ´avel que x seja diferente de y, pois seria calculado 4 valores repetidos, subutilizando assim o algoritmo.

3.2. Algoritmo do Ponto M ´edio

Bresenham desenvolveu em 1965 um algoritmo cl ´assico que usa apenas vari ´aveis inteiras e que permite que o c ´alculo de (xi + 1, yi + 1) seja feito in-crementalmente, usando os c ´alculos j ´a feitos para (xi , yi), uma variac¸ ˜ao do al-gor´ıtmo de mesmo nome, para retas. Este algoritmo assume que a inclinac¸ ˜ao da linha est ´a entre 0 e 1 (outras inclinac¸ ˜oes podem ser tratadas por simetria). O ponto (x1, y1) ´e o inferior esquerdo, e (x2, y2) ´e o superior direito.

(6)

Considere a curva na Figura 5. Assumindo que o pixel que acabou de ser selecionado ´e P, em (xp, yp), e o pr ´oximo deve ser escolhido entre o pixel `a direita (pixel E) e o pixel abaixo `a direita (SE). Seja M o ponto intermedi ´ario entre os pixels E e SE. O que se faz ´e observar de que lado da reta est ´a o ponto M.

E f ´acil verificar que se M est ´a abaixo da curva, o pixel E est ´a mais pr ´oximo da reta; se M est ´a acima, SE est ´a mais pr ´oximo da curva. A seguir ´e apresentado o algoritmo simples para conversao matricial de retas.

1 void MidpointCircle(int radius, int value) 2 { 3 int x = 0; 4 int y = radius; 5 int d = 1 - radius; 6 CirclePoints(x, y, value); 7 while(y > x) { 8 if (d < 0) 9 d += 2 * x + 3; 10 else { 11 d += 2 * (x - y) + 5; 12 y--; 13 } 14 x++; 15 CirclePoints(x, y, value); 16 } 17 }

Figura 5. Algoritimo do Ponto M ´edio M e as escolhas E e SE.

Como demonstrado por [Traina and de Oliveira 2006], o teste do ponto-m ´edio perponto-mite a escolha do pixel ponto-mais pr ´oxiponto-mo da curva. Al ´eponto-m disso, o erro (a dist ˆancia vertical entre o pixel escolhido e a linha) ´e sempre inferior a 0.5. A aritm ´etica necess ´aria para calcular o pr ´oximo ponto a cada passo ´e adic¸ ˜ao simples, nenhuma multiplicac¸ ˜ao ´e necess ´aria. Ap ´os o c ´alculo dos pontos no

(7)

primeiro quadrante, de 0o `a 45o, utiliza-se o algoritmo de simetria de ordem 8

para calcular os restantes, acelerando o processo.

4. Conclus ˜ao

A interac¸ ˜ao visual que hoje ocorre entre usu ´ario e m ´aquina pelos dispositivos gr ´aficos, s ´o ´e poss´ıvel devido ao estudo da rasterizac¸ ˜ao e abstrac¸ ˜ao dos dados reais para o meio digital. Os algoritmos de rasterizac¸ ˜ao nos auxiliam a fazer a abstrac¸ ˜ao dos elementos gr ´aficos mais b ´asicos, possibilitando a construc¸ ˜ao de infinitos objetos. Para que fosse poss´ıvel a velocidade e qualidade de exibic¸ ˜ao de objetos gr ´aficos que possu´ımos hoje, n ˜ao somente o hardware precisou evoluir, mas algoritmos eficientes e eficazes foram necess ´arios.

Refer ˆencias

Foley, J. D., van Dam, A., Feiner, S. K., and Hughes, J. F. (1995). Computer graphics: Principles and practice.

Traina, A. J. M. and de Oliveira, M. C. F. (2006). Apostila de computac¸ ˜ao gr ´afica. Dispon´ıvel em: http://www.inf.ufes.br/˜thomas/graphics/ www/apostilas/GBdI2006.pdf. Acesso em Maio/2014.

Referências

Documentos relacionados

17 CORTE IDH. Caso Castañeda Gutman vs.. restrição ao lançamento de uma candidatura a cargo político pode demandar o enfrentamento de temas de ordem histórica, social e política

O enfermeiro, como integrante da equipe multidisciplinar em saúde, possui respaldo ético legal e técnico cientifico para atuar junto ao paciente portador de feridas, da avaliação

Para classificá-lo, diferentes elementos foram tomados como referência; diante do material utilizado no jogo ele apresenta-se como jogo de cartas, jogo de dados,

As geleias foram avaliadas com relação aos parâmetros físico-químicos (teor de umidade, atividade de água, sólidos totais, sólidos solúveis totais, cinzas,

[r]

 Para os agentes físicos: ruído, calor, radiações ionizantes, condições hiperbáricas, não ionizantes, vibração, frio, e umidade, sendo os mesmos avaliados

Nos termos do artigo 48.º, n.º 5, da Diretiva 2014/65/UE relativa aos instrumentos financeiros (MiFID II), os Estados-Membros devem exigir que os mercados

Figura 3 - Sistema de geração tipo inversor central. Para que seja possível o fluxo de potência dos painéis para a rede, é necessário que o valor da tensão da associação série