ALGORITMOS PARA DESENHAR RETAS E CÍRCULOS

Documentos relacionados
Imagem Vetorial x Imagem Matricial. Conversão Matricial de Primitivas Gráficas. Sistema de Coordenadas do Dispositivo. Problema

Rasterização de primitivas 2D

Computação Gráfica Rasterização de Curvas

Primitivos gráficos - algoritmos

Primitivos gráficos - algoritmos

Conversão por Varrimento

Desenho de Segmentos de Recta

Computação Gráfica. Rasterização. Aula 4. Engenharia de Computação. CEFET/RJ campus Petrópolis. Prof. Luis Retondaro

Sumário. Traçado de Retas. Antialiasing e OpenGL. 1 Introdução. 2 Conversão Segmento de Reta. 3 Algoritmo DDA. 4 Algoritmo de Bresenham

Computação Gráfica. Prof. André Yoshimi Kusumoto

Rasterização de primitivas 2D e Pipeline 2D. Soraia Raupp Musse

Computação Gráfica. Prof. MSc André Yoshimi Kusumoto

Prof. Dr. Leandro Alves Neves. Conceitos Fundamentais. Algoritmos de Conversão Matricial.

Pipeline de Visualização 2D

Primitivas Gráficas. Prof. Márcio Bueno Fonte: Material do Prof. Robson Pequeno de Sousa e do Prof.

Introdução Geral a Computação Gráfica. Universidade Católica de Pelotas Curso de Engenharia da Computação Disciplina de Computação Gráfica

Problema. Conversão Matricial. Octantes do Sistema de Coordenadas Euclidiano. Sistema de Coordenadas do Dispositivo. Maria Cristina F.

Computação Gráfica. Prof. MSc. André Yoshimi Kusumoto

ALGORITMOS RASTER PARA DESENHO DE. Adair Santa Catarina Curso de Ciência da Computação Unioeste Campus de Cascavel PR

Introdução à Computação Gráfica. Claudio Esperança Paulo Roma Cavalcanti

Prof. Fernando V. Paulovich 3 de agosto de SCC Computação Gráca

Figura Uso de coordenadas polares

3. Conhecimentos Básicos

Desenho de Segmentos de Recta

Pipeline de Visualização 3D

Objetos definidos no seu próprio sistema de coordenadas

Aula 3: Algoritmos: Formalização e Construção

Algoritmos de Rasterização e Recorte

Equações Paramétricas e Coordenadas Polares. Copyright Cengage Learning. Todos os direitos reservados.

Visibilidade. Licenciatura em Engenharia Informática e de Computadores Computação Gráfica. Edward Angel, Cap. 7 Apontamentos CG

Computação Gráfica. Primitivas Gráficas Professora Sheila Cáceres

Curso de AutoCAD 2D. Instrutor : Mauro Pio Dos Santos Junior Monitor : Thainá Souza

7 a Lista de Exercícios Assunto: Funções e passagem por referência com vetor e matriz (Tópico 7)

Computaçã. Visão Geral. Sistema Gráfico. Computação Gráfica. Pixels. Sistema Gráfico e o Frame Buffer. Introdução à Computação Gráfica

Introdução ao Processamento e Síntese de imagens -Linhas e superfícies escondidas

Cálculo Numérico Prof. Guilherme Amorim 24/10/2013. Aula 2 Erros e Aritmética de Ponto Flutuante

Aula O Plano Cartesiano

ALGORITMO DE BRESENHAM: O USO MICROCONTROLADORES PARA TRAÇAR RETAS EM LCDs

Resolução das Questões Discursivas

1 Para expressar um ponto intermediário em função dos pontos extremos, precisamos

Elementos básicos das linguagens de programação

BCC402 Algoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1

Rotação e Interpolação

Introdução à Programação uma Abordagem Funcional

Comandos básicos do AutoCAD

Curso de AutoCAD Fundação Gorceix 30/05/2017. Curso de AutoCAD 2D. Instrutor : Mauro Pio Dos Santos Junior Monitor : Brenda Mara Marques

Fundamentos da Computação Gráfica Lista de Exercícios Marcelo Gattass TeCGraf/Departamento de Informática/PUC-Rio 19jun2003

Preliminares de Cálculo

RECONHECIMENTO FACIAL UTILIZANDO EIGENFACES

Prof. Dr. Lucas Barboza Sarno da Silva

ALUNO Natália Blauth Vasques. TUTORIAL RHINOCEROS Embalagem Hidratante Alfazol, Granado

Cálculo Numérico IPRJ/UERJ. Sílvia Mara da Costa Campos Victer ÍNDICE. Aula 1- Introdução. Representação de números. Conversão de números

3D no OpenGL. Visualização e Transformações Perspectiva. Transformações do Modelview. Processo

Coordenadas Polares. Exemplos: Representar em um sistema de coordenadas polares, os seguintes pontos: d) P 4,

TÉCNICAS DE CAD PARA ENGENHARIA CIVIL AULA 3 2. SELEÇÃO DE PONTOS PRECISOS EM OBJETOS

Sumário COMPUTAÇÃO GRÁFICA E INTERFACES. Modelos e modelagem. Modelos e modelagem. Transformações Geométricas e Visualização 2D

6.Elaboração de algoritmos...13

Programação Introdução

Cálculo Numérico Noções básicas sobre erros

1º Teste Computação Gráfica

Universidade Federal do Pará Curso de Licenciatura em Matemática PARFOR Lista de Exercícios Referentes a Prova Substitutiva de Geometria Analítica

Coordenadas Polares. Exemplos: Representar em um sistema de coordenadas polares, os seguintes pontos: d) P 4,

Desenho auxiliado por computador

Iteração e Pontos Fixos

INTRODUÇÃO AO SCILAB

Primeiro Projeto de PG: Lista de Temas Selecionados

Resumo. Computação Gráfica: Uma Proposta de Plano Pedagógico. Áreas Correlatas. Definição. Uma Visão Integrada da C.G.

Para mais exemplos veja o vídeo:

Algoritmos e Estrutura de Dados - II Estrutura de Dados Espaciais

Teoria da Computação e Algoritmos. Introdução à Linguagem Pascal. ALGORITMO <Nome do algoritmo>; <definições>; INÍCIO <Comandos>; FIM.

Processamento Digital de Imagens

Organização e Arquitetura de Computadores I

Transcrição:

ALGORITMOS PARA DESENHAR RETAS E CÍRCULOS Jann Claude Mousquer 1, Kenner Alan Kliemann 1, Miguel Diogenes Matrakas 1 1 Curso de Ciência da Computação Faculdades Anglo-Americano (FAA) Foz do Iguaç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 Raster Graphics Package). Will be discussed some of the algorithms that rasterize graphic objects. Resumo. Este artigo é uma revisão bibliográfica sobre algorítmos para desenhar retas e circulos utilizando primitivas gráficas. Os algorítmos atualmente utilizados se baseiam no plano cartesiano, e são definidos no SRGP (Simple Raster Graphics Package). Será abordado alguns dos algorítmos que fazem a rasterização de objetos gráficos. Palavras Chave: Primitivas Gráficas, Retas, Círculos; 1. Introdução É chamado de primitivas gráficas os comandos e funções que manipulam e alteram os elementos gráficos de uma imagem. Também entram na definição os elementos básicos de gráficos a partir dos quais são construídos outros, mais complexos.(hetem Annibal Jr.,2006). Com base nesta afirmação, será abordardado o estudo das primitivas gráficas responsáveis pelo desenho de retas e círculos. Computacionalmente, todos os objetos são representados por um conjunto de pontos. O ponto é a unidade gráfica fundamental e também pode ser chamada de pixel. As propriedades básicas de um pixel são: posição no plano gráfico (x,y) e cor. Para se obter um pixel é necessário informar o par ordenado (x,y), que possibilita as coordenadas de linha e coluna onde será pintada a grade do vídeo; de acordo com a resolução especificada no sistema operacional. Com isso, podemos unir pontos a fim de construir objetos mais complexos. Para se desenhar uma reta ou qualquer outro objeto, é necessário fazer uma rasterização. Rasterização é o processo que é utilizado para determinar quais são os pixels que melhor aproximam uma linha desejável na tela, isso se dá ao fato de que dispositivos gráficos não conseguem representar uma reta perfeita, como apresentado na Figura 1, apenas uma aproximação. O Simple Raster Graphics Package (SRGP) é um pacote gráfico, independente de dispositivo, que explora as habilidades de rasterização dos dispositivos gráficos. Ele implementa primitivas gráficas, fornecendo suporte à aplicações.

Figura 1. Rasterização. 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ão 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 é: 1 procedure SRGP_lineCoord (0,0,100,300); Neste exemplo uma linha do ponto (0,0) ao ponto (100,300) será desenhado na tela. Para que a reta seja representada em tela, a rasterização será efetuada pelo SRGP uma vez que o procedimento anterior seja invocado. Será abordardado alguns dos algoritmos de rasterização à seguir. 2.1. Algorítmo Iterativo Basico 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. Logo, temos que: Para i pontos em X = (Xi, Round(Yi)); Na Figura 2 podemos observar o resultado da rasterização com esse algoritmo e notamos ainda que, para retas verticais o algoritmo apresenta uma grande falha, isso se dá ao fato de não haver um cálculo dos pontos aproximados no eixo x. Esta falha é o principal motivo pelo qual não é implementado atualmente esse algoritmo, uma vez que se torna pouco versátil. 2.2. Bresenham Também conhecido como algorítmo do ponto médio, baseia-se no argumento de que um segmento de reta, ao ser plotado, deve ser contínuo, os pixels que compõem o segmento devem ser vizinhos; Isso fará com que os pontos das retas

Figura 2. Demonstração do Algorítmo Iterativo Básico. sejam próximos não havendo separação entre os pixels pintados, evitando o erro produzido pelo algorítmo demonstrado anteriormente. Um outro atrativo é que o algorítmo de Bresenham utiliza-se apena de aritmética inteira para cálculo dos pontos, evitando a função de arredondamento (Round), fornecendo uma economia de processamento. O procedimento em pseudo-código abaixo, apresenta a lógica da implementação 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;

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; Na Figura 3 temos a demonstração de retas desenhadas pelo Algoritmo de Bresenham. Figura 3. Exemplo de retas desenhadas com Bresenham. 3. Círculos Para traçar círculos, o SRGP trata-os como um caso particular devido a sua simetria. Desta forma, para a rasterização o círculo deve ser transladado de forma que o círculo esteja centrado na origem (0,0). É calculado então os pontos do primeiro quadrante e os demais são então escritos por simetria. Para calcular os valores em y, é considerado que: y 2 = R 2 x 2 (1) No entanto, um cálculo neste formato para cada ponto é computacionalmente inviável, visto que haveria um alto número de cálculos de potência e raiz, que exigem considerável processamento. 3.1. Simetria de Ordem 8 Segundo [Foley et al. 1995], o Algoritmo de Simetria de Ordem 8 considera que, o traçado de uma circunferência pode tirar proveito de sua simetria. Considere

uma circunferência centrada na origem. Se o ponto ( x, y ) pertence à circunferência, pode-se calcular de maneira trivial sete outros pontos da circunferência Figura 4. Consequentemente, basta computar um arco de circunferência de 45 o para obter a circunferência toda. Para uma circunferência com centro na origem, os oito pontos simétricos podem ser traçados usando o procedimento Circle- Points. Este algorítmo não calcula os valores de entrada x e y, mas uma vez calculados nos dá 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 */ É recomendável que x seja diferente de y, pois seria calculado 4 valores repetidos, subutilizando assim o algoritmo. 3.2. Algoritmo do Ponto Médio Bresenham desenvolveu em 1965 um algoritmo clássico que usa apenas variáveis inteiras e que permite que o cálculo de (xi + 1, yi + 1) seja feito incrementalmente, usando os cálculos já feitos para (xi, yi), uma variação do algorítmo de mesmo nome, para retas. Este 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.

Considere a curva na Figura 5. Assumindo que o pixel que acabou de ser selecionado é P, em (xp, yp), e o próximo deve ser escolhido entre o pixel à direita (pixel E) e o pixel abaixo à direita (SE). Seja M o ponto intermediário entre os pixels E e SE. O que se faz é observar de que lado da reta está o ponto M. E fácil verificar que se M está abaixo da curva, o pixel E está mais próximo da reta; se M está acima, SE está mais próximo da curva. A seguir é 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édio M e as escolhas E e SE. Como demonstrado por [Traina and de Oliveira 2006], o teste do pontomédio permite a escolha do pixel mais próximo da curva. Além disso, o erro (a distância vertical entre o pixel escolhido e a linha) é sempre inferior a 0.5. A aritmética necessária para calcular o próximo ponto a cada passo é adição simples, nenhuma multiplicação é necessária. Após o cálculo dos pontos no

primeiro quadrante, de 0 o à 45 o, utiliza-se o algoritmo de simetria de ordem 8 para calcular os restantes, acelerando o processo. 4. Conclusão A interação visual que hoje ocorre entre usuário e máquina pelos dispositivos gráficos, só é possível devido ao estudo da rasterização e abstração dos dados reais para o meio digital. Os algoritmos de rasterização nos auxiliam a fazer a abstração dos elementos gráficos mais básicos, possibilitando a construção de infinitos objetos. Para que fosse possível a velocidade e qualidade de exibição de objetos gráficos que possuímos hoje, não somente o hardware precisou evoluir, mas algoritmos eficientes e eficazes foram necessários. Referências Foley, J. D., van Dam, A., Feiner, S. K., and Hughes, J. F. (1995). graphics: Principles and practice. Computer Traina, A. J. M. and de Oliveira, M. C. F. (2006). Apostila de computação gráfica. Disponível em: http://www.inf.ufes.br/ thomas/graphics/ www/apostilas/gbdi2006.pdf. Acesso em Maio/2014.