Escolar Documentos
Profissional Documentos
Cultura Documentos
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 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.
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,
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.
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.
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.
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)