Você está na página 1de 5

UNIVERSIDADE JOSÉ DO ROSÁRIO VELLANO 1

Bacharelado em Ciência da Computação


Computação Gráfica – Prof. Celso de Ávila Ramos

Primitivas Gráficas em 2D
Chamamos 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 de primitivas os elementos básicos de
gráficos a partir dos quais são construídos outros mais complexos.

Pontos

A primeira primitiva apresentada será o ponto. No caso da computação gráfica, esse elemento tem
uma definição diversa daquela apresentada na teoria.

Um ponto é a unidade gráfica fundamental, também podendo ser chamado de pixel. As


propriedades de um pixel são:
 Sua posição no plano gráfico e
 Sua cor

Um pixel é um objeto concreto, e não abstrato (ele existe de fato!). Isso significa que um pixel (ao
contrário da definição matemática de um ponto) pode ter uma superfície, que é dada pela
construção física do dispositivo (tela, impressora etc) no qual o pixel está sendo desenhado. O
dispositivo também determina a forma do pixel, e a maioria dos dispositivos utiliza o sistema
cartesiano. Sua forma é retangular, ou para todos os efeitos, quadrada.

Outra característica que diferencia o pixel do ponto matemático é a sua cor. Um pixel pode ter
várias cores (novamente de acordo com o dispositivo, e ser até mesmo transparente, para efeito de
cálculos e projeções.

As duas primitivas associadas ao pixel são:


1. Pintar um pixel: dadas as coordenadas e uma cor, a cor é atribuída ao pixel.
2. Ler um pixel: dadas as coordenadas de um pixel, essa primitiva devolve a cor atual do
pixel.

Linhas retas

Do ponto de vista matemático, uma reta no plano pode ser descrita por:
UNIVERSIDADE JOSÉ DO ROSÁRIO VELLANO 2
Bacharelado em Ciência da Computação
Computação Gráfica – Prof. Celso de Ávila Ramos

y = mx + b
Essa expressão pode ser interpretada da seguinte maneira: para qualquer valor de x, existe um
valor de y, dado por mx + b. O parâmetro m tem uma interpretação especial, sendo chamado de
coeficiente angular, pois está ligado 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, o ângulo encontra-se entre 45º e 90º. O
coeficiente linear b dá o valor do eixo y cruzado pela reta.

Dados dois pontos no plano P1 e P2, pode-se obter m e b, ou seja, a equação da reta que passa
pelos pontos:

m = y2-y1 / x2 – x1
b= y1 – mx1

e essas duas fórmulas serão a base para os algoritmos de retas que veremos a seguir,

Algoritmos para desenhar retas


A partir das equações apresentadas para a reta, podem-se definir passos para desenhar, ponto a
ponto, um segmento de reta. Começando dos algoritmos mais simples e, depois de alguns
comentários, serão apresentados outros mais complexos e eficientes.

Algoritmo DDA
Esse algoritmo é conhecido pelo nome DDA (Digtal Differencial Analyser – Analisador Diferencial
Digital) e baseia-se na aplicação direta das fórmulas que descrevem uma linha reta no plano.
Assim, para traçar um segmento de reta que vai do ponto P1 ao ponto P2, pode-se idealizar um
algoritmo:
1. Escolhe-se (pinta-se) o pixel do ponto P1, isto é, o pixel de coordenadas (x1,y1) e
atribuem-se às variáveis de trabalho (x, y) os valores de (x1, y1).
2. Dá-se um passo adiante: ou seja, passa-se ao pixel seguinte (x,y), onde x = x + 1 e y = y +
m e pinta-se o novo pixel.
3. Repete-se a passagem 2 até que o ponto P2 seja alcançado.

Observe-se que este algoritmo não executa multiplicações, trabalhando apenas com somas. Uma
forma de otimizá-lo, é escolher o ponto de origem, de tal forma que os incrementos nas duas
dimensões sejam apenas positivos, se possível.
UNIVERSIDADE JOSÉ DO ROSÁRIO VELLANO 3
Bacharelado em Ciência da Computação
Computação Gráfica – Prof. Celso de Ávila Ramos

Apesar de seguir rigorosamente as definições de uma reta e sua transcrição ser obviamente
correta, esse algoritmo apresenta graves defeitos quando implementado em computação gráfica.
Um primeiro defeito que salta aos olhos é a escolha do passo em x: 1. É claro que não se podem
dar passos intermediários, pois não existe meio pixel, mas essa escolha do passo só é válida
quando m < =1.

Caso contrário, o passo em y deve ser 1 e em x 1/m. Assim, o algoritmo deveria ser implementado
com essas condições. Infelizmente, não é apenas um problema de coeficiente angular que
prejudica o DDA de ser usado com mais freqüência. Há também um comportamento indesejado
ligado a ângulos próximos de 0º e 90º, quando o segmento de reta fica quase horizontal ou vertical:
nesse caso, um pequeno incremento em x = x + 1 (ou y = y + 1) leva a um salto, e o segmento de
reta apresentar-se descontínuo.

Além disso, m não é necessariamente um número inteiro, e isso obriga os computadores a


trabalhar em matemática de ponto flutuante, o que deve ser sempre evitado quando se deseja
otimização do tempo de execução.

Assim, vê-se que o DDA, que é um algoritmo baseado na interpretação direta das equações, não
corresponde ao algoritmo ideal para se traçar um segmento de reta.

Algoritmo de Breseham
Esse algoritmo 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.

Aqui, o ponto de partida é a seguinte pergunta: se m < 1, e dado um ponto de um segmento de reta
(x,y), o próximo pixel a ser pintado é (x +1, y) ou (x + 1, y+1)? O algoritmo de Breseham responde
a essa questão calculando um valor (p no algoritmo dado abaixo) para cada pixel e passando para
o pixel seguinte, até alcançar o último pixel do segmento de reta.

Algoritmo de Breseham para segmentos de retas


Parâmetros de entrada (x1,y1) e (x2,y2) (pontos inicial e final do segmento de reta)
1. Calcula-se Dx = x2 – x1 e Dy = y2 – y1.
2. Calculam-se algumas 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 passa-se para o passo 8.
UNIVERSIDADE JOSÉ DO ROSÁRIO VELLANO 4
Bacharelado em Ciência da Computação
Computação Gráfica – Prof. Celso de Ávila Ramos

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.

Polilinhas
Linhas retas são a base para uma grande variedade de figuras, que são compostas por segmentos
de retas. Podem-se citar polígonos, caracteres, figuras geométricas complexas etc. Como
veremos a seguir, a maioria desses objetos pode ser desenhada através de um algoritmo simples,
que por sua vez chama o algoritmo de traçar retas, denominado, polilinha.

Um polilinha é um conjunto de segmentos de retas, cujas extremidades coincidem, ou seja, um


segmento começa no ponto em que o segmento anterior termina. Dessa forma, basta que se
determinem quais são os pontos dos extremos dos segmentos para que uma polilinha seja
definida.

Assim, uma polilinha tem as seguintes propriedades:


 É composta de n segmentos de reta, sendo n >=1.
 É definida por n + 1 pontos.

O algoritmo que desenha uma polilinha a partir dos pontos que a definem deve,.portanto,
desenhar um segmento de reta ligando o primeiro ao segundo ponto, depois desenhar um outro
segmento de reta entre o segundo e o terceiro ponto, e assim por diante, até que se desenhe um
segmento de reta entre o penúltimo e o último ponto.

Pode-se ainda usar este mesmo raciocínio para definir um polígono, que pode ser descrito como
uma polilinha fechada. As propriedades dessa figura são:
 É composta de n segmentos de reta, sendo n >= 2.
 É definida por n pontos

O algoritmo que desenha a polilinha fechada a partir dos pontos que a definem deve desenhar um
segmento de reta ligando o primeiro ao segundo ponto, depois desenhar um outro segmento de
reta entre o segundo e o terceiro ponto, e assim por diante, até que se desenhe um segmento de
reta entre o último e o primeiro ponto, fechando o polígono.

Exercícios
UNIVERSIDADE JOSÉ DO ROSÁRIO VELLANO 5
Bacharelado em Ciência da Computação
Computação Gráfica – Prof. Celso de Ávila Ramos

1. Simule num gráfico a aplicação do algoritmo DDA e do algoritmo de Breseham para plotar
os segmento de reta:
a. (20,10) – (30,18)
b. (0,0) – (11,7)
c. (0,0) – (7,11)

2. Escreva um programa que desenhe um segmento de reta utilizando o algoritmo de


Breseham.
3. Escreva um programa que chame o algoritmo do exercício anterior para desenha polilinhas
fechadas.

Você também pode gostar