Apostila de Computa¸c˜ao Gr´afica

Agma Juci Machado Traina
Maria Cristina Ferreira de Oliveira
24 de setembro de 2004
Resumo
Este ´e o material utilizado no Instituto de Ciˆencias matem´aticas e de Computa¸c˜ao da USP-S˜ao Carlos
para as disciplinas de computa¸c˜ao gr´afica ministradas pelas Profa. Dra. Agma Juci Machado Traina e
Profa. Dra. Maria Cristina Ferreira de Oliveira.
Sum´ario
Sum´ario 2
Lista de Figuras 5
1 Introdu¸c˜ao `a Computa¸c˜ao Gr´afica 8
1.1 Sistemas Gr´aficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2 Aplica¸c˜oes da CG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3 Hardware Gr´afico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.4 Resolu¸c˜ao Gr´afica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.5 Sistemas de Coordenadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.6 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2 Dispositivos de Visualiza¸c˜ao 15
2.1 Dispositivos Gr´aficos Vetoriais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1.1 Tra¸cadores Digitais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1.2 Dispositivos de V´ıdeo Vetoriais (Vector Refresh Display Tubes) . . . . . . . . . . . 15
2.1.3 Terminais CRT com mem´oria (Direct View Storage Tubes) . . . . . . . . . . . . . 17
2.2 Primitivas de Software para Dispositivos Vetoriais . . . . . . . . . . . . . . . . . . . . . . 17
2.3 Dispositivos Gr´aficos Matriciais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.3.1 Impressoras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.3.2 Dispositivos de V´ıdeo de Varredura (Raster Scanning VDUs) . . . . . . . . . . . . 18
2.3.3 Primitivas de Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.4 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.5 Dispositivos de Entrada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.5.1 Teclado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.5.2 Ligth Pen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.5.3 Joystick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.5.4 Mouse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.5.5 Mesa Digitalizadora (Tablet) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.5.6 Data Glove . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.5.7 Outros dispositivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3 Tra¸cado de Curvas em Dispositivos Gr´aficos Matriciais 23
3.1 Simetria e Reflex˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.2 Convers˜ao Matricial de Segmentos de Reta . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.2.1 Caracter´ısticas Desej´aveis para os Algoritmos de convers˜ao Matricial de Segmentos
de Retas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.2.2 Crit´erio Adotado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.2.3 Algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.2.4 Algoritmo do “Ponto-M´edio” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.3 Convers˜ao Matricial de Circunferˆencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.3.1 Simetria de ordem 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.3.2 Algoritmo do “Ponto-M´edio” para Circunferˆencias . . . . . . . . . . . . . . . . . . 31
3.4 Convers˜ao Matricial de Elipses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.5 Corre¸c˜ao no Tra¸cado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.6 Antialising . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.6.1 Amostragem de
´
Areas n˜ao Ponderada . . . . . . . . . . . . . . . . . . . . . . . . . 38
2
4 Preenchimento de Pol´ıgonos 42
4.1 Retˆangulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.2 Pol´ıgonos de Forma Arbitr´aria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.2.1 Arestas Horizontais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.2.2 Slivers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.2.3 Algoritmo para Convers˜ao Matricial de Segmento de Reta que Utiliza “Coerˆencia
de Arestas” de um Pol´ıgono . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5 Transforma¸c˜oes 2D e 3D 50
5.1 Transforma¸c˜oes em 2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.2 Coordenadas Homogˆeneas e Matrizes de Transforma¸c˜ao . . . . . . . . . . . . . . . . . . . 52
5.3 Transforma¸c˜oes 2D Adicionais: Espelhamento e Shearing . . . . . . . . . . . . . . . . . . 55
5.3.1 Espelhamento (Mirror) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5.3.2 Shearing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
5.4 Transforma¸c˜oes entre sistemas de coordenadas . . . . . . . . . . . . . . . . . . . . . . . . 57
5.5 Composi¸c˜ao de Transforma¸c˜oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
5.6 Transforma¸c˜ao Janela - Porta de Vis˜ao (“Window-to-Viewport”) . . . . . . . . . . . . . . 59
5.7 Eficiˆencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.8 Transforma¸c˜oes em 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.8.1 Composi¸c˜ao de Transforma¸c˜oes em 3D . . . . . . . . . . . . . . . . . . . . . . . . . 64
6 Observa¸c˜ao de Cenas 3D 69
6.1 Pipeline de observa¸c˜ao (“viewing pipeline”) . . . . . . . . . . . . . . . . . . . . . . . . . . 69
6.2 Coordenadas de Observa¸c˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
6.2.1 Especifica¸c˜ao do sistema de coordenadas de observa¸c˜ao . . . . . . . . . . . . . . . 70
6.2.2 Transforma¸c˜ao do sistema de coordenadas do mundo para o sistema de coordenadas
de observa¸ c˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
6.3 Proje¸c˜oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
6.3.1 Proje¸c˜ao Perspectiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
6.3.2 Desenvolvimento Matem´atico para Proje¸c˜oes Paralelas . . . . . . . . . . . . . . . . 77
7 Recorte de Primitivas 2D 78
7.1 Recorte de segmentos de reta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
7.1.1 Recorte de Pontos Extremos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
7.1.2 Algoritmo de Cohen-Sutherland para Recorte de Segmentos de Reta . . . . . . . . 79
7.2 Recorte de Circunferˆencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
8 Curvas e Superf´ıcies em Computa¸c˜ao Gr´afica 86
8.1 Representa¸c˜ao de Curvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
8.2 Curve Fitting x Curve Fairing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
8.2.1 Ajuste de curvas (curve fitting) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
8.2.2 Aproxima¸c˜ao de curvas (curve fairing) . . . . . . . . . . . . . . . . . . . . . . . . . 87
8.3 Representa¸c˜oes Param´etricas e N˜ao Param´etricas (expl´ıcita e impl´ıcita) . . . . . . . . . . 87
8.3.1 Limita¸c˜oes das representa¸c˜oes n˜ao param´etricas . . . . . . . . . . . . . . . . . . . . 88
8.4 Curvas de B´ezier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
9 Apostila Modelagem 93
10 Rendering 94
11 Cores e Sistemas de Cores 95
11.1 Percep¸c˜ao de Cor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
11.2 Sistemas de Cores Prim´arias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
11.3 Modelo XYZ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
11.4 Modelo RGB (Red, Green, Blue) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
11.5 Modelo HSV (Hue, Saturation, Value) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
11.6 Modelo HLS (Hue, Lightness, Saturation) . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
3
12 Processamento Digital de Imagens 102
12.1 Introdu¸c˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
12.2 Considera¸c˜oes Sobre Imagens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
12.3 Tabelas “Look-up” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
12.4 Tipos de Manipula¸c˜ao de Imagens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
12.5 Transforma¸c˜oes Radiom´etricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
12.5.1 Opera¸c˜oes Pontuais sobre Imagens . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
12.5.2 Opera¸c˜oes Locais Sobre a Imagem . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Bibliografia 113
A Hist´orico 114
4
Lista de Figuras
1.1 Relacionamento entre as 3 sub´areas da Computa¸c˜ao Gr´afica. . . . . . . . . . . . . . . . . 8
1.2 Esquema b´asico de um hardware de computa¸c˜ao gr´afica. . . . . . . . . . . . . . . . . . . . 12
1.3 Sistemas de coordenadas e suas transforma¸c˜oes. . . . . . . . . . . . . . . . . . . . . . . . . 13
2.1 Estrutura interna de um CRT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.2 Convers˜ao Digital-Anal´ogica para Visualiza¸c˜ao num CRT. . . . . . . . . . . . . . . . . . . 16
2.3 Uma seq¨ uˆencia de bits na mem´oria de imagem ´e convertida para uma seq¨ uˆencia de pixels
na tela. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.4 Representa¸c˜ao esquem´atica de uma imagem matricial e sua representa¸c˜ao num frame buffer. 18
2.5 Varredura por rastreio fixo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.6 Representa¸c˜ao esquem´atica de um CRT por varredura colorido. . . . . . . . . . . . . . . . 19
2.7 Organiza¸c˜ao de uma v´ıdeo look-up table. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.1 Representa¸c˜ao de segmentos de reta horizontais, verticais e diagonais. . . . . . . . . . . . 23
3.2 Reflex˜ao de uma imagem com rela¸c˜ao a um eixo diagonal. . . . . . . . . . . . . . . . . . . 24
3.3 Rota¸c˜ao de 90
o
obtida atrav´es de 2 reflex˜oes, uma horizontal (a) e outra na diagonal (b). 24
3.4 Convers˜oes matriciais de um segmento de reta resultante de diferentes crit´erios. . . . . . . 25
3.5 Imagens de segmentos de reta convertidos pelo crit´erio expl´ıcito acima. . . . . . . . . . . . 26
3.6 Grade de pixels para o Algoritimo o Ponto-M´edio (M) e as escolhas E e NE. . . . . . . . . 27
3.7 Grade de pixels para o Algoritimo o Ponto-M´edio (M) e as escolhas E e NE. . . . . . . . . 29
3.8 Um arco de
1
4
de circunferˆencia, obtido variando-se x em incrementos unit´arios, e calcu-
lando e arrendondando y. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.9 Oito pontos sim´etricos em uma circunferˆencia. . . . . . . . . . . . . . . . . . . . . . . . . 31
3.10 Malha de pixels para o Algoritmo do Ponto-M´edio para circunferˆencias, ilustrando a escolha
entre os pixels E e SE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.11 Segundo octante da circunferˆencia gerado com o algor´ıtimo do Ponto-M´edio e primeiro
octante gerado por simetria. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.12 Elipse padr˜ao centrada na origem. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.13 As duas regi˜oe adotadas, definidas pela tangente a 45
o
. . . . . . . . . . . . . . . . . . . . . 36
3.14 Segmento de reta renderizado com o algor´ıtmo do ponto m´edio em diferentes escalas. (a)
´e uma aplia¸c˜ao da regi˜ao central de (b). . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.15 Segmento de reta definido com uma espessura diferente de zero. . . . . . . . . . . . . . . . 39
3.16 A intensidade do pixel ´e proporcional `a area coberta. . . . . . . . . . . . . . . . . . . . . . 39
3.17 Filtro definido por um cubo para um pixel definido por um quadrado. . . . . . . . . . . . 40
3.18 Filtro cˆonico com diˆametro igual ao dobro da largura de um pixel. . . . . . . . . . . . . . 40
4.1 Esta figura ilustra o processo de linha de varredura para um pol´ıgono arbitr´ario. As
intersec¸c˜oes da linha de varredura 8 com os lados FA e CD possuem coordenadas inteiras,
enquanto as intersec¸c˜oes com os lados EF e DE possuem coordenadas reais. . . . . . . . . 43
4.2 Linhas de varredura em um pol´ıgno. Os extremos em preto, e os pixels no interior em
cinza. (a) Extremo calculado pelo algoritmo do ”Meio-Ponto”. (b) Extremo interior ao
pol´ıgno. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.3 Tratamento dos lados horizontais de um pol´ıgono. . . . . . . . . . . . . . . . . . . . . . . 45
4.4 Exemplo de uma convers˜ao matricial de um Sliver . . . . . . . . . . . . . . . . . . . . . . 46
4.5 ET para o pol´ıgono de Figura 4.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.6 AET para o pol´ıgono da Figura 4.1 a) linha de varredura 9 b) linha de varredura 10. Note
que a coordenada x da aresta DE em (b) foi arredondada para cima.. . . . . . . . . . . . . 48
5.1 Transla¸c˜ao de uma casa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.2 Mudan¸ca de escala de uma casa. Como a escala ´e n˜ao uniforme, sua propor¸c˜ao ´e alterada. 51
5
5.3 Esta figura mostra a rota¸c˜ao da casa por 45

. Da mesma forma que para a escala, a rota¸c˜ao
tamb´em ´e feita em rela¸c˜ao a origem. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5.4 Derivando a equa¸c˜ao de rota¸c˜ao. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5.5 O espa¸co de Coordenadas Homogˆeneas XY W, com o plano W = 1 e o ponto P(X, Y, W)
projetado sobre o plano W = 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.6 Um cubo unit´ario ´e rodados 45 graus, posteriormente escalado n˜ao uniformemente. Obtem-
se dessa forma uma transforma¸c˜ao afim. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
5.7 Reflex˜ao de um objeto em torno do eixo x. . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5.8 Reflex˜ao de um objeto em torno de um eixo perpendicular ao plano xy, passando pela origem. 56
5.9 Rota¸c˜ao em rela¸c˜ao ao Ponto P1, por um ˆangulo θ. . . . . . . . . . . . . . . . . . . . . . . 58
5.10 Escala e rota¸c˜ao de uma casa em rela¸c˜ao ao ponto P
1
. . . . . . . . . . . . . . . . . . . . . 59
5.11 Janela em Coordenadas do mundo e porta de vis˜ao em coordenadas de tela. . . . . . . . . 60
5.12 Duas portas de vis˜ao associadas a mesma janela. . . . . . . . . . . . . . . . . . . . . . . . 60
5.13 Os passos da transforma¸c˜ao janela - porta de vis˜ao. . . . . . . . . . . . . . . . . . . . . . . 61
5.14 Primitivas gr´aficas de sa´ıda em coordenadas do mundo s˜ao recortadas pela janela. O seu
interior ´e apresentado na tela (viewport). . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.15 Sistema de Coordenadas dado pela Regra da M˜ao Direita. . . . . . . . . . . . . . . . . . . 63
5.16 Transformando P
1
, P
2
e P
3
da posi¸c˜ao inicial em (a) para a posi¸c˜ao final em (b). . . . . . 65
5.17 Rota¸c˜ao dos pontos P
1
, P
2
e P
3
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
5.18 Rota¸c˜ao em rela¸c˜ao ao eixo x. P1 e P2 de comprimento D2 ´e rotacionado em dire¸c˜ao ao
eixo z, pelo ˆangulo positivo f. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
5.19 Rota¸c˜ao em rela¸c˜ao ao eixo z. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.20 Os vetores unit´arios R
x
, R
y
e R
z
, os quais s˜ao transformados nos eixos principais. . . . . 68
6.1 Atributos da cˆamera [Schr¨oeder, 1998]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
6.2 Movimentos de cˆamera [Schr¨oeder, 1998]. . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
6.3 Movimentos de cˆamera [Schr¨oeder, 1998]. . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
6.4 Um VCS baseado na regra da m˜ao direita com x
v
, y
v
e z
v
.relativos ao sistema de coorde-
nadas do mundo [Hearn and Baker, 1994]. . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
6.5 Orienta¸c˜oes do plano de observa¸c˜ao conforme o vetor normal. O vetor (1, 0, 0) d´a a ori-
enta¸c˜ao em (a) e (1, 0, 1), a orienta¸c˜ao em (b) [Hearn and Baker, 1994]. . . . . . . . . . . 72
6.6 Taxomia de proje¸c˜oes [Plastock and Kalley, 1999]. . . . . . . . . . . . . . . . . . . . . . . 73
6.7 Linha AB e sua proje¸c˜ao A’B’: (a) perspectiva; (b) ortogonal. . . . . . . . . . . . . . . . . 73
6.8 Proje¸c˜oes de um cubo (com 1 ponto de fuga) sobre um plano cortando o eixo Z, apresen-
tando o ponto de fuga. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
6.9 Proje¸c˜oes perspectivas com 2 pontos de fuga ( o plano de proje¸c˜ao intercepta 2 eixos (x e
z)). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
6.10 Proje¸c˜oes perspectivas com 3 pontos de fuga ( o plano de proje¸c˜ao intercepta os 3 eixos). 75
6.11 A esfera B ´e bem maior que a esfera A, por´em ambas aparecem com o mesmo tamanho
quando projetadas no plano de vis˜ao. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
6.12 Confus˜ao visual da perpectiva (objeto atr´as do centro de proje¸c˜ao). . . . . . . . . . . . . . 76
6.13 Proje¸c˜ao em perspectiva de um ponto P=(x, y, z) na posi¸c˜ao (xp, yp, zp) sobre o plano
de proje¸c˜ao [Hearn and Baker, 1994]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
6.14 Proje¸c˜ao ortogonal de um ponto no plano de proje¸c˜ao [Hearn and Baker, 1994]. . . . . . . 77
7.1 Exemplos de recorte de segmentos de reta. . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
7.2 C´odigos das regi˜oes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
7.3 Funcionamento do algoritmo de Cohen-Sutherland para recorte de segmentos. . . . . . . . 80
7.4 Algoritmo de Sutherland-Hodgman para Recorte de Pol´ıgonos. . . . . . . . . . . . . . . . 83
7.5 Exemptos de recorte de pol´ıgonos. (a) M´ ultiplos componentes. (b) Caso convexo (c) Caso
cˆoncavo com muitas arestas exteriores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
7.6 Quatro situa¸c˜oes poss´ıveis no recorte de pol´ıgonos. . . . . . . . . . . . . . . . . . . . . . . 84
8.1 Representa¸c˜ao de superf´ıcies atrav´es de malhas. . . . . . . . . . . . . . . . . . . . . . . . . 86
8.2 Aproxima¸c˜ao de curvas por segmentos de reta conectados. . . . . . . . . . . . . . . . . . . 87
8.3 Aproxima¸c˜ao de curvas por segmentos de reta conectados. . . . . . . . . . . . . . . . . . . 88
8.4 Pontos de uma circunferˆencia. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
8.5 Representa¸c˜ao de uma curva de B´ezier definida pelos pontos B
0
, B
1
, B
2
e B
3
. . . . . . . . 90
8.6 Fun¸c˜oes de blending para v´arios valores de n. . . . . . . . . . . . . . . . . . . . . . . . . . 91
11.1 Espectro eletromagn´etico [Gro94]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
6
11.2 Ilustra¸c˜ao da mistura de cores aditivas [For94]. . . . . . . . . . . . . . . . . . . . . . . . . 97
11.3 Ilustra¸c˜ao da mistura de cores subtrativas [For94]. . . . . . . . . . . . . . . . . . . . . . . 97
11.4 Ilustra¸c˜ao da obten¸c˜ao de tints, shades e tones. . . . . . . . . . . . . . . . . . . . . . . . . 97
11.5 Diagrama de cromaticidade do CIE [Hea94]. . . . . . . . . . . . . . . . . . . . . . . . . . . 98
11.6 Representa¸c˜ao de escalas de cor no diagrama de cromaticidade do CIE [Hea94]. . . . . . . 99
11.7 Cubo do RGB [Fol96]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
11.8 Cone hexagonal do HSV [Fol96]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
11.9 Cone duplo do HLS [Fol96]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
12.1 Efeitos sobre uma imagem, de se reduzir o tamanho da grade de amostragem. . . . . . . . 103
12.2 Uma imagem de 512 x 512 pixels, quantizada em (a) 256 n´ıveis, (b) 128 n´ıveis, (c) 64
n´ıveis, (d) 32 n´ıveis, (e) 16 n´ıveis, (f) 8 n´ıveis, (g) 4 n´ıveis e (h) 2 n´ıveis de cinza. . . . . . 104
12.3 Representa¸c˜ao de um pixel P com 8-bits (8 planos) de profundidade. . . . . . . . . . . . . 104
12.4 Organiza¸c˜ao de uma LUT, para um sistema de pixels de 8 bits. . . . . . . . . . . . . . . . 105
12.5 Imagens e histogramas de intensidade. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
12.6 Efeito de uma transforma¸c˜ao dos n´ıveis de cinza efetuado sobre o histograma. . . . . . . . 107
12.7 Manipula¸c˜ao de janelas de intensidade da imagem atrav´es do histograma. . . . . . . . . . 107
12.8 Sinais “ru´ıdo” (a) e “degrau” (b). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
12.9 Sinais “ru´ıdo” (a) e “degrau” (b). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
12.10Efeitos de filtros lineares ao “ru´ıdo” e `a “borda”: (a) efeitos de atenua¸c˜ao; (b) borramento
da borda; (c) amplia¸c˜ao do ru´ıdo; (d) realce da borda. . . . . . . . . . . . . . . . . . . . . 110
12.11Efeito do filtro da mediana sobre o “ru´ıdo” e o “degrau”. . . . . . . . . . . . . . . . . . . 110
12.12Uma transforma¸c˜ao geom´etrica de 90
o
graus. . . . . . . . . . . . . . . . . . . . . . . . . . . 111
7
Cap´ıtulo 1
Introdu¸c˜ao `a Computa¸c˜ao Gr´afica
A Computa¸c˜ao Gr´afica ´e a ´area da ciˆencia da computa¸c˜ao que estuda a gera¸c˜ao, manipula¸c˜ao e inter-
preta¸ c˜ao de modelos e imagens de objetos utilizando computador. Tais modelos vˆem de uma variedade
de disciplinas, como f´ısica, matem´atica, engenharia, arquitetura, etc.
Pode-se relacionar a Computa¸c˜ao Gr´afica com 3 sub-´areas [Persiano and Oliveira, 1989]:
• S´ıntese de Imagens: ´area que se preocupa com a produ¸c˜ao de representa¸c˜oes visuais a partir
das especifica¸c˜oes geom´etrica e visual de seus componentes.
´
E freq¨ uentemente confundida com a
pr´opria Computa¸c˜ao Gr´afica. As imagens produzidas por esta sub-´area s˜ao geradas a partir de
dados mantidos nos chamados Display-Files.
• Processamento de Imagens: envolve as t´ecnicas de transforma¸c˜ao de Imagens, em que tanto
a imagem original quanto a imagem resultado apresentam-se sob uma representa¸c˜ao visual (ge-
ralmente matricial). Estas transforma¸c˜oes visam melhorar as caracter´ısticas visuais da imagem
(aumentar contraste, foco, ou mesmo diminuir ru´ıdos e/ou distor¸c˜oes). As imagens produzi-
das/utilizadas por esta sub-´area s˜ao armazenadas/recuperadas dos chamados Raster-Files.
• An´alise de Imagens: ´area que procura obter a especifica¸c˜ao dos componentes de uma imagem a
partir de sua representa¸c˜ao visual. Ou seja a partir da informa¸c˜ao pict´orica da imagem (a pr´opria
imagem!) produz uma informa¸c˜ao n˜ao pict´orica da imagem (por exemplo, as primitivas geom´etricas
elementares que a comp˜oem).
Figura 1.1: Relacionamento entre as 3 sub´areas da Computa¸c˜ao Gr´afica.
Na ´ ultima d´ecada somou-se a esse contexto a ´area de Visualiza¸c˜ao de Dados, tamb´em chamada
Visualiza¸c˜ao Computacional [Minghim and Oliveira, 1997, Schr¨oeder et al., 1996], que usa t´ecnicas de
Computa¸c˜ao Gr´afica para representar informa¸c˜ao, de forma a facilitar o entendimento de conjuntos de
dados num´ericos de alta complexidade. Exemplos de ´areas de aplica¸c˜ao s˜ao: visualiza¸c˜ao de imagens
m´edicas, meteorologia, dados financeiros, visualiza¸c˜ao de programas, dinˆamica dos fluidos, e muitas
8
outras. Nelas, o que existe em comum ´e que a representa¸c˜ao gr´afica (superf´ıcies, part´ıculas, ´ıcones) s˜ao
geradas automaticamente a partir do conjunto de dados. Ao usu´ario cabe definir parˆametros e atributos
da imagem para melhor “navegar” seu conjunto de dados. Dessa maneira, a visualiza¸c˜ao de dados partilha
de caracter´ısticas da s´ıntese, do processamento e da an´alise de dados.
Atualmente a Computa¸c˜ao Gr´afica ´e altamente interativa: o usu´ario controla o conte´ udo, a estrutura
e a aparˆencia dos objetos e suas imagens visualizadas na tela, usando dispositivos como o teclado e o
mouse. Entretanto, at´e o in´ıcio dos anos 80, a computa¸c˜ao gr´afica era uma disciplina restrita e alta-
mente especializada. Devido principalmente ao alto custo do hardware, poucos programas aplicativos
exploravam gr´aficos. O advento dos computadores pessoais de baixo custo, como o IBM-PC e o Apple
Macintosh, com terminais gr´aficos de varredura (raster graphics displays), popularizou o uso de gr´aficos
na intera¸ c˜ao usu´ario-computador.
Os displays gr´aficos de baixo custo possibilitaram o desenvolvimento de in´ umeros aplicativos baratos
e f´aceis de usar, que dispunham de interfaces gr´aficas - planilhas, processadores de texto, programas de
desenho... As interfaces evoluiram e introduziu-se o conceito de desktop - uma met´afora para uma mesa
de trabalho. Nessas interfaces gr´aficas, atrav´es de um gerenciador de janelas (window manager) o usu´ario
pode criar e posicionar janelas que atuam como terminais virtuais, cada qual executando aplicativos in-
dependentemente. Isso permite que o usu´ario execute v´arios aplicativos simultaneamente, e selecione um
deles a um simples toque no mouse.
´
Icones (icons) s˜ao usados para representar arquivos de dados, progra-
mas e abstra¸c˜oes de objetos de um escrit´orio - como arquivos, caixas de correio (mailboxes), impressoras,
latas de lixo - nas quais s˜ao executadas opera¸c˜oes an´alogas `as da vida real. Para ativar os programas, o
usu´ario pode selecionar ´ıcones, ou usar buttons e menus dinˆamicos. Objetos s˜ao manipulados diretamente
atrav´es de opera¸c˜oes de pointing e clicking feitas com o mouse. Atualmente, mesmo aplicativos que ma-
nipulam texto (como processadores de texto) ou dados num´ericos (como planilhas) usam interfaces desse
tipo, reduzindo sensivelmente a intera¸c˜ao textual por meio de teclados alfanum´ericos.
A computa¸c˜ao gr´afica n˜ao ´e mais uma raridade: ´e parte essencial de qualquer interface com o usu´ario,
´e indispens´avel para a visualiza¸c˜ao de dados em 2D e 3D e tem aplica¸c˜oes em ´areas como educa¸c˜ao,
ciˆencias, engenharia, medicina, publicidade, lazer, militar, ...
A computa¸c˜ao gr´afica trata da s´ıntese de imagens de objetos reais ou imagin´arios a partir de modelos
computacionais. Processamento de imagens ´e uma ´area relacionada que trata do processo inverso: a
an´alise de cenas, ou a reconstru¸c˜ao de modelos de objetos 2D ou 3D a partir de suas imagens.
Note que a s´ıntese de imagens parte da descri¸c˜ao de objetos tais como segmentos de reta, pol´ıgonos,
poliedros, esferas, etc.; e produz uma imagem que atende a certas especifica¸c˜oes e que pode, em ´ ultima
instˆancia, ser visualizada em algum dispositivo (terminal de v´ıdeo, plotter, impressora, filme fotogr´afico...).
As imagens em quest˜ao constituem uma representa¸c˜ao visual de objetos bi- ou tridimensionais descritos
atrav´es de especifica¸c˜oes abstratas.
O processamento de imagens parte de imagens j´a prontas para serem visualizadas, as quais s˜ao trans-
feridas para o computador por mecanismos diversos - digitaliza¸c˜ao de fotos, tomadas de uma cˆamera de
v´ıdeo, ou imagens de sat´elite - para serem manipuladas visando diferentes objetivos.
1.1 Sistemas Gr´aficos
A Computa¸c˜ao Gr´afica (especialmente as componentes relativas a gr´aficos 3D e a gr´aficos 3D interativos)
desenvolveu-se de modo bem diverso: de simples programas gr´aficos para computadores pessoais `a pro-
gramas de modelagem e de visualiza¸c˜ao em workstations e supercomputadores. Como o interesse em CG
cresceu, ´e importante escrever aplica¸c˜oes que possam rodar em diferentes plataformas. Um padr˜ao para
desenvolvimento de programas gr´aficos facilita esta tarefa eliminando a necessidade de escrever c´odigo
para um driver gr´afico distinto para cada plataforma na qual a aplica¸c˜ao deve rodar. Para se padronizar
a constru¸ c˜ao de aplicativos que se utilizam de recursos gr´aficos e torn´a-los o mais independentes poss´ıvel
de m´aquinas, e portanto facilmente port´aveis, foram desenvolvidos os chamados Sistemas Gr´aficos.
V´arios padr˜oes tiveram sucesso integrando dom´ınios espec´ıficos. Por exemplo, a linguagem Postscript
que se tornou um padr˜ao por facilitar a publica¸c˜ao de documentos est´aticos contendo gr´aficos 2D e textos.
Outro exemplo ´e o sistema XWindow, que se tornou padr˜ao para o desenvolvimento de interfaces gr´aficas
2D em workstations UNIX. Um programador usa o X para obter uma janela em um display gr´afico no
qual um texto ou um gr´afico 2D pode ser desenhado. A ado¸c˜ao do X pela maioria dos fabricantes de
workstation significa que um ´ unico programa desenvolvido em X pode ser rodado em uma variedade de
workstation simplesmente recompilando o c´odigo. Outra facilidade do X ´e o uso de redes de computadores:
um programa pode rodar em uma workstation e ler a entrada e ser exibido em outra workstation, mesmo
de outro fabricante.
Para gr´aficos 3D foram propostos v´arios padr˜oes. A primeira tentativa foi o Sistema Core - Core
Graphics System - (1977 e 1979) pelos americanos. Mas a primeira especifica¸c˜ao gr´afica realmente pa-
9
dronizada foi o GKS - Graphical Kernel System, pela ANSI e ISO em 1985. O GKS ´e uma vers˜ao mais
elaborada que o Core. O GKS suporta um conjunto de primitivas gr´aficas interrelacionadas, tais como:
desenho de linhas, pol´ıgonos, caracteres, etc., bem como seus atributos. Mas n˜ao suporta agrupamentos
de primitivas hier´arquicas de estruturas 3D. Um sistema relativamente famoso ´e PHIGS (Programmer’s
Hierarchical Interactive Graphics System). Baseado no GKS, PHIGS ´e um padr˜ao ANSI. PHIGS (e seu
descendente, PHIGS+) provˆeem meios para manipular e desenhar objetos 3D encapsulando descri¸c˜oes de
objetos e atributos em uma display list. A display list ´e utilizada quando o objeto ´e exibido ou manipu-
lado, uma vantagem ´e a possibilidade de descrever um objeto complexo uma ´ unica vez mesmo exibindo-o
v´arias vezes. Isto ´e especialmente importante se o objeto a ser exibido deve ser transmitido por uma
rede de computadores. Uma desvantagem da display list ´e a necessidade de um esfor¸co consider´avel
para reespecificar um objeto que est´a sendo modelado interativamente pelo usu´ario. Uma desvantagem
do PHIGS e PHIGS+ (e GKS) ´e que eles n˜ao tˆem suporte a recursos avan¸cados como mapeamento de
textura.
O XWindow ganhou uma extens˜ao para o PHIGS, conhecida como PEX, de modo que o X pudesse
manipular e desenhar objetos 3D. Entre outras extens˜oes, PEX soma-se de modo imediato ao PHIGS,
assim um objeto pode ser exibido durante a sua defini¸c˜ao sem a necessidade da display list. O PEX
tamb´em n˜ao suporta recursos avan¸cados e s´o est´a dispon´ıvel aos usu´arios do XWindow.
O sistema gr´afico mais popular atualmente ´e o OpenGL (GL - Graphics Library) que provˆe carac-
ter´ısticas avan¸cadas e pode ser utilizado em modo imediato ou com display list. OpenGL ´e um padr˜ao
relativamente novo (sua primeira vers˜ao ´e de 1992) e ´e baseado na biblioteca GL das workstations IRIS da
Silicon Graphics. Atualmente um cons´orcio de ind´ ustrias ´e respons´avel pela gerenciamento da evolu¸c˜ao do
OpenGL. Existe uma implementa¸c˜ao livre (c´odigo fonte dispon´ıvel) do OpenGL conhecida com MesaGL
ou Mesa3D.
Como os outros sistemas gr´aficos, OpenGL oferece uma interface entre o software e o hardware gr´afico.
A interface consiste em um conjunto de procedimentos e fun¸c˜oes que permitem a um programador es-
pecificar os objetos e as opera¸c˜oes que os envolvem produzindo imagens de alta qualidade. Como o
PEX, o OpenGL integra/permite a manipula¸c˜ao de objetos (desenhos) 3D ao X, mas tamb´em pode ser
integrado em outros sistemas de janela (por exemplo, Windows/NT) ou pode ser usado sem um sistema
de janela. OpenGL provˆe controle direto sobre opera¸c˜oes gr´aficas fundamentais em 3D e 2D, incluindo
a especifica¸c˜ao de parˆametros como matrizes de transforma¸c˜ao e coeficientes de ilumina¸c˜ao, m´etodos
de antialiasing e opera¸c˜oes sobre pixels, mas n˜ao provˆe mecanismos para descrever ou modelar objetos
geom´etricos complexos.
1.2 Aplica¸c˜oes da CG
A lista de aplica¸c˜oes ´e enorme, e cresce rapidamente. Uma amostra significativa inclui:
• Interfaces: a maioria dos aplicativos para computadores pessoais e esta¸c˜oes de trabalho atualmente
disp˜oem de interfaces gr´aficas baseadas em janelas, menus dinˆamicos, ´ıcones, etc.
• Tra¸cado interativo de gr´aficos: aplicativos voltados para usu´arios em ciˆencia, tecnologia e
neg´ocios geram gr´aficos que ajudam na tomada de decis˜oes, esclarecem fenˆomenos complexos e
representam conjuntos de dados de forma clara e concisa.
• Automa¸c˜ao de escrit´orios e editora¸c˜ao eletrˆonica: o uso de gr´aficos na dissemina¸c˜ao de
informa¸c˜oes cresceu muito depois do surgimento de software para editora¸c˜ao eletrˆonica em com-
putadores pessoais. Este tipo de software permite a cria¸c˜ao de documentos que combinam texto,
tabelas e gr´aficos - os quais tanto podem ser “desenhados” pelo usu´ario ou obtidos a partir de
imagens digitalizadas.
• Projeto e desenho auxiliado por computador: em CAD, sistemas gr´aficos interativos s˜ao
utilizados para projetar componentes, pe¸cas e sistemas de dispositivos mecˆanicos, el´etricos, eletro-
mecˆanicos e eletrˆonicos. Isto inclui edif´ıcios, carca¸cas de autom´oveis, avi˜oes e navios, chips VLSI,
sistemas ´oticos, redes telefˆonicas e de computador. Eventualmente, o usu´ario deseja apenas produzir
desenhos precisos de componentes e pe¸cas. Mais frequentemente, o objetivo ´e interagir com um
modelo computacional do componente ou sistema sendo projetado, de forma a testar propriedades
estruturais, el´etricas ou t´ermicas, at´e atingir um projeto satisfat´orio.
• Simula¸c˜ao e anima¸c˜ao para visualiza¸c˜ao cient´ıfica, lazer, arte e publicidade: uma das
´areas que mais evoluiram na d´ecada de 80 foi a visualiza¸c˜ao cient´ıfica. Cientistas e engenheiros
perceberam que n˜ao poderiam interpretar as quantidades prodigiosas de dados produzidas por pro-
gramas em supercomputadores sem resumir os dados e identificar tendˆencias e fenˆomenos atrav´es
10
de representa¸c˜oes gr´aficas. Como resultado, surgiram anima¸c˜oes computadorizadas do comporta-
mento variante no tempo de objetos reais ou simulados. Tais anima¸c˜oes podem ser utilizadas para
estudar entidades matem´aticas abstratas e modelos matem´aticos de fenˆomenos como fluxo de flui-
dos, relatividade, rea¸c˜oes qu´ımicas e nucleares, deforma¸c˜ao de estruturas mecˆanicas sob diferente
tipos de press˜ao, etc. Outras aplica¸c˜oes tecnol´ogicas avan¸cadas incluem a produ¸c˜ao de desenhos
animados e efeitos especiais para filmes e comerciais de TV, que requerem mecanismos sofisticados
para modelar objetos e para representar luz e sombra.
• Controle de processos: sistemas de controle de tr´afego a´ereo e espacial, sistemas de controle de
refinarias e de usinas de energia mostram graficamente os dados coletados por sensores conectados
a componentes cr´ıticos dos sistemas, de forma que os operadores possam responder adequadamente
a condi¸c˜oes cr´ıticas.
• Cartografia: a computa¸c˜ao gr´afica ´e usada para produzir representa¸c˜oes precisas e esquem´aticas
de fenˆomenos naturais e geogr´aficos obtidos a partir da coleta de dados.
• Arte: A arte por computador vem crescendo imensamente nos ´ ultimos anos.
´
E poss´ıvel utilizar
novos recursos de computa¸c˜ao gr´afica para produzir efeitos art´ısticos, como a extra¸c˜ao de texturas,
padr˜oes e estruturas a partir de fotos digitalizadas.
• Gr´aficos de Apresenta¸c˜ao (Presentation Graphics):
´
E a utiliza¸c˜ao de t´ecnicas gr´aficas para
demonstra¸c˜ao de resultados, id´eias e gr´aficos, com o intuito de mostrar ou transmitir conhecimento
espec´ıfico como, por exemplo, em uma aula, ou reuni˜ao, ou na contru¸c˜ao de material did´atico.
Neste curso, estamos interessados principalmente em t´ecnicas de s´ıntese de imagens bem como seu
relacionamento com o processamento de imagens. Tamb´em n˜ao pretendemos explorar todo o escopo de
aplica¸ c˜oes da CG, mas estudar os conceitos gerais envolvidos na programa¸c˜ao das primitivas gr´aficas que
est˜ao por tr´as dessas aplica¸c˜oes.
1.3 Hardware Gr´afico
Um sistema de hardware para computa¸c˜ao gr´afica consiste essencialmente de dispositivos gr´aficos de
entrada e sa´ıda (I/O) ligados a um computador (Figura 1.2). Ao conjunto de dispositivos de I/O gr´aficos
alocados para utiliza¸c˜ao por uma ´ unica pessoa por vez denomina-se genericamente de “esta¸c˜ao de trabalho
gr´afica”, ou graphics workstation. Um sistema gr´afico multi-usu´ario pode ter v´arias esta¸c˜oes gr´aficas, de
forma que mais de um dos v´arios dispositivos de I/O dispon´ıveis podem estar conectados e utilizando
o computador hospedeiro. Como em CG ´e freq¨ uente a manipula¸c˜ao de grandes quantidades de dados,
o computador deve ser equipado de mem´oria secund´aria com alta capacidade de armazenagem. Al´em
disso, um canal de comunica¸c˜ao de alta velocidade ´e necess´ario para reduzir os tempos de espera. Isto
normalmente ´e feito atrav´es de comunica¸c˜ao local sobre um barramento paralelo com velocidade de
transmiss˜ao de dados da ordem de um milh˜ao de bits por segundo. Se o equipamento gr´afico est´a distante
do processador (conex˜ao remota), um canal de comunica¸c˜ao serial pode ser necess´ario. Transmiss˜ao
serial ass´ıncrona pode ser feita a velocidades de at´e 19.2 kbps (milhares de bits por segundo). Mesmo tal
velocidade pode ser muito lenta para alguns objetivos como anima¸c˜ao gr´afica de alta resolu¸c˜ao, onde cada
frame de imagem pode ter um megabyte de dados. Um sistema de conex˜ao ideal nesse caso ´e uma Local
Area Network (LAN) como a Ethernet. Os dispositivos de sa´ıda gr´aficos podem ser de natureza digital
ou anal´ogica, resultando em duas classes de gr´aficos, denominados vector graphics (gr´aficos vetoriais),
que desenham figuras tra¸cando seq¨ uˆencias de segmentos de reta (vetores); e raster graphics (gr´aficos de
varredura, ou matriciais), que desenham figuras pelo preenchimento de uma matriz de pontos (pixels).
1.4 Resolu¸c˜ao Gr´afica
Virtualmente todos os dispositivos de I/O gr´aficos usam uma malha retangular de posi¸c˜oes endere¸c´aveis
- a qual ´e denominada “retˆangulo de visualiza¸c˜ao”. A “resolu¸c˜ao gr´afica” de um dispositivo ´e o n´ umero
de posi¸c˜oes (ou pontos, ou pixels) horizontais e verticais que ele pode distinguir. Existem 4 parˆametros
que definem a resolu¸c˜ao:
1. ndh - o n´ umero de posi¸c˜oes endere¸c´aveis horizontalmente.
2. ndv - o n´ umero de posi¸c˜oes endere¸c´aveis verticalmente.
3. width - a largura do retˆangulo de visualiza¸c˜ao em mm.
11
Figura 1.2: Esquema b´asico de um hardware de computa¸c˜ao gr´afica.
4. height - a altura do retˆangulo de visualiza¸c˜ao em mm.
A partir desses 4 parˆametros, v´arios n´ umeros interessantes podem ser calculados:
1. resolu¸c˜ao horizontal: horiz res =
ndh
width
2. tamanho ponto horizontal: horiz dot size =
width
ndh
3. resolu¸c˜ao vertical: vert res =
ndv
height
4. tamanho ponto vertical: vert dot size =
height
ndv
5. total pontos endere¸c´aveis: total nr dots = ndh.ndv
6. resolu¸c˜ao de ´area: area res =
total nr dots
(width.height)
7. raz˜ao de aspecto gr´afica: aspect ratio =
vert dot size
horiz dot size
8. raz˜ao de aspecto f´ısica: physical aspect ratio =
height
width
Note que horiz res, vert res e area res definem resolu¸c˜oes f´ısicas, enquanto que ndh, ndv e total nr dots
definem resolu¸c˜oes gr´aficas. Dispositivos de visualiza¸c˜ao podem ter a mesma resolu¸c˜ao gr´afica, com re-
solu¸ c˜oes f´ısicas muito diferentes. O ideal seria ter um aspect ratio igual ou pr´oximo de 1.
1.5 Sistemas de Coordenadas
Na CG ´e necess´ario definir sistemas de coordenadas para quantificar os dados que est˜ao
sendo manipulados. J´a vimos que os dispositivos de visualiza¸c˜ao gr´afica matriciais consistem de uma
matriz de pixels endere¸c´aveis, e um gr´afico ´e formado “acendendo” ou “apagando” um pixel. Os pixels
s˜ao endere¸cados por dois n´ umeros inteiros que d˜ao suas coordenadas horizontal e vertical, dcx, e dcy,
respectivamente, onde:
0 ≤ dcx ≤ ndhm1 ≡ ndh −1 (1.1)
0 ≤ dcy ≤ ndvm1 ≡ ndv −1 (1.2)
Na matriz de pixels, o valor dcx + 1 d´a o n´ umero da coluna, e dcy + 1 d´a o n´ umero da linha do pixel
endere¸cado. O pixel endere¸cado como (0, 0) est´a geralmente no canto inferior esquerdo do retˆangulo de
visualiza¸ c˜ao. As coordenadas (dcx, dcy) s˜ao chamadas de coordenadas do dispositivo, e podem assumir
apenas valores inteiros. Coordenadas do dispositivo podem variar bastante para diferentes equipamentos,
o que levou `a utiliza¸c˜ao de coordenadas normalizadas do dispositivo (NDC - normalized device coor-
dinates), para efeito de padroniza¸c˜ao (ndcx, ndcy). NDCs s˜ao vari´aveis reais, geralmente definidas no
intervalo de 0 a 1:
0 ≤ ndcx ≤ 1 (1.3)
12
0 ≤ ndcy ≤ 1 (1.4)
A coordenada NDC (0, 0) corresponde `a origem (0, 0) nas coordenadas do dispositivo, e a coordenada
NDC (1, 1) refere-se ao pixel no canto superior direito, que corresponde ao pixel (ndhm1, ndvm1) nas
coordenadas do dispositivo. A vantagem da utiliza¸c˜ao de NDCs ´e que padr˜oes gr´aficos podem ser discuti-
dos usando um sistema de coordenadas independente de dispositivos gr´aficos espec´ıficos. Obviamente, os
dados gr´aficos precisam ser transformados do sistema de coordenadas independente para o sistema de co-
ordenadas do dispositivo no momento de visualiza¸c˜ao. O mapeamento de NDCs (reais) para coordenadas
do dispositivo (inteiros) ´e “linear”, por exemplo:
dcx = round(ndcx.ndhm1) (1.5)
dcy = round(ndcy.ndvm1) (1.6)
Dois outros sistemas de coordenadas s˜ao ´ uteis. O primeiro ´e o sistema de cordenadas f´ısico, (pcx, pcy)
onde pcx ´e a distˆancia f´ısica ao longo do eixo x a partir do extremo esquerdo do retˆangulo de visualiza¸c˜ao,
e pcy ´e a distˆancia f´ısica ao longo do eixo y a partir do extremo inferior. As unidades de medida utilizadas
s˜ao polegadas ou mil´ımetros. A transforma¸c˜ao de coordenadas f´ısicas para coordenadas do dispositivo ´e
dada por:
dcx = trunc(ndhm1
pcx
width
) (1.7)
dcy = trunc(ndvm1
pcy
height
) (1.8)
O segundo ´e o sistema de coordenadas do mundo, ou sistema de coordenadas do usu´ario, que consiste
de coordenadas cartesianas (x, y), num intervalo qualquer definido pelo usu´ario:
xmin ≤ x ≤ xmax (1.9)
ymin ≤ y ≤ ymax (1.10)
Os parˆametros que definem o intervalo de valores de x e y, xmin, ymin, xmax e ymax, definem uma
´area retangular no espa¸co bidimensional, denominada de janela. A transforma¸c˜ao de coordenadas do
usu´ario (x, y) para NDCs (ndcx, ndcy), denominada transforma¸c˜ao de visualiza¸c˜ao, ´e dada por:
ndcx =
x −xmin
xmax −xmin
(1.11)
ndcy =
y −ymin
ymax −ymin
(1.12)
Para visualizar dados num dispositivo gr´afico qualquer, ´e necess´ario transform´a-los das coordenadas
do usu´ario para NDCs, e de NDCs para coordenadas do dispositivo. Da mesma forma, dados de entrada
gr´aficos precisam ser transformados de coordenadas do dispositivo para NDCs, e depois para coordenadas
do usu´ario (Figura 1.3).
Figura 1.3: Sistemas de coordenadas e suas transforma¸c˜oes.
13
1.6 Exerc´ıcios
Escreva os procedimentos inp to ndc, ndc to user, user to ndc e ndc to dc, que transformam dados entre
os v´arios sistemas de coordenadas, conforme ilustrado na Figura 1.3. Repita o exerc´ıcio assumindo que
o intervalo de varia¸c˜ao do sistema NDC vai de:
(i) -1 a +1 (coordenadas normalizadas centradas)
(ii) 0 a 100
14
Cap´ıtulo 2
Dispositivos de Visualiza¸c˜ao
Toda imagem criada atrav´es de recursos computacionais deve ser representada em algum dispositivo f´ısico
que permita a sua visualiza¸c˜ao. Diversas tecnologias e diferentes tipos de dispositivos s˜ao utilizados para
gerar representa¸c˜oes visuais, sendo que o desenvolvimento dessas tecnologias teve um papel fundamental
na evolu¸ c˜ao da CG.
Tanto para o usu´ario como para o implementador de sistemas gr´aficos ´e importante conhecer as
caracter´ısticas de cada uma dessas tecnologias para sua melhor utiliza¸c˜ao. Vamos discutir alguns aspectos
da arquitetura e organiza¸c˜ao dos tipos mais comuns dos dispositivos de exibi¸c˜ao gr´afica, sem entrar em
detalhes t´ecnicos.
´
E poss´ıvel classificar os dispositivos de exibi¸c˜ao (tra¸cadores, impressoras e terminais de v´ıdeo) em
duas principais categorias, segundo a forma pela qual as imagens s˜ao geradas: dispositivos vetoriais e
dispositivos matriciais. Os dispositivos gr´aficos vetoriais conseguem tra¸car segmentos de reta perfeitos
entre dois pontos da malha finita de pontos definida por suas superf´ıcies de exibi¸c˜ao. Os dispositivos
matriciais, por outro lado, apenas conseguem tra¸car pontos, tamb´em em uma malha finita. Assim,
segmentos de reta s˜ao tra¸cados como sequˆencias de pontos pr´oximos.
2.1 Dispositivos Gr´aficos Vetoriais
2.1.1 Tra¸cadores Digitais
Tra¸cadores (plotters) s˜ao dispositivos eletromecˆanicos que produzem o desenho pelo movimento de
uma caneta sobre a superf´ıcie do papel. A primitiva gr´afica b´asica nesse tipo de dispositivo ´e o segmento
de reta. Arcos, curvas e caracteres s˜ao produzidos pelo tra¸cado de uma s´erie de pequenos segmentos.
Nos tra¸cadores de mesa, o papel ´e fixado sobre uma superf´ıcie plana retangular, sobre a qual est´a lo-
calizado um bra¸co mecˆanico que movimenta-se por transla¸c˜ao. Ao longo do bra¸co desloca-se um cabe¸cote
que suporta uma caneta perpendicularmente `a mesa, a qual pode ser pressionada contra o papel ou
levantada de forma a n˜ao toc´a-lo.
Nos tra¸cadores de rolo, o bra¸co ´e fixo, e o papel ´e movimentado para frente e para tr´as por a¸c˜ao de
um rolo, como em uma m´aquina de escrever.
Embora distintos em constru¸c˜ao, estes dois tipos de tra¸cadores possuem caracter´ısticas de pro-
grama¸c˜ao e controle similares. A posic˜ao da caneta sobre o papel ´e definida pelo posicionamento do
bra¸co em rela¸c˜ao ao papel (abcissa x), e do cabe¸cote sobre o bra¸co (ordenada y). Figuras s˜ao tra¸cadas
pela varia¸c˜ao controlada da posi¸c˜ao da caneta (abcissa e ordenada) e pelo controle do estado da caneta
(abaixada ou levantada). O tra¸cador ´e em geral controlado por um processador dedicado que recebe
instru¸c˜oes diretamente do computador ou de um arquivo que descreve o desenho.
2.1.2 Dispositivos de V´ıdeo Vetoriais (Vector Refresh Display Tubes)
No in´ıcio da CG, o principal dispositivo de v´ıdeo n˜ao era um monitor parecido com uma TV, e sim um
car´ıssimo CRT (Cathode Ray Tube) do tipo usado em oscilosc´opios. Como o display dos oscilosc´opios,
os monitores tinham como entradas duas voltagens, x e y, que direcionavam um feixe de el´etrons para
um ponto espec´ıfico da tela. O feixe tra¸cava uma linha do ´ ultimo ponto para o corrente, num ´ unico
movimento vetorial.
Um CRT consiste basicamente de uma superf´ıcie de exibi¸c˜ao, quase plana, recoberta internamente
de material `a base de f´osforo, um canh˜ao emissor de el´etrons e um sistema de deflex˜ao (Figura 2.1). O
canh˜ao emite um fino feixe de el´etrons que, acelerados, chocam-se contra a superf´ıcie fosforecente da tela.
Sob a a¸ c˜ao dos el´etrons, o material fosforecente incandesce, emitindo luz no ponto da tela atingido pelo
15
Figura 2.1: Estrutura interna de um CRT.
feixe. A fun¸c˜ao do sistema de deflex˜ao ´e dirigir controladamente o feixe de el´etrons para um determinado
ponto da tela.
O brilho do f´osforo dura apenas alguns milisegundos (a emiss˜ao de luz pelo f´osforo n˜ao ´e est´avel, e
cai a zero logo ap´os a interrup¸c˜ao do bombardeio de el´etrons), de forma que toda a figura precisa ser
continuamente retra¸cada para que o gr´afico permane¸ca na tela. Este processo ´e denominado refreshing
(da´ı o nome, vector refreshing tubes). Se a imagem sendo mostrada ´e composta por muitos vetores, vai
haver um atraso significativo entre o tra¸cado do primeiro e do ´ ultimo vetores, e alguns do vetores tra¸cados
inicialmente podem desaparecer nesse per´ıodo. O resultado ´e que o tubo n˜ao consegue retra¸car a imagem
de modo suficientemente r´apido para evitar que um efeito de flickering (“cintila¸c˜ao”) torne-se aparente
na tela.
Figura 2.2: Convers˜ao Digital-Anal´ogica para Visualiza¸c˜ao num CRT.
O tubo n˜ao exige muita mem´oria para manter uma imagem complexa constru´ıda por segmentos de
reta, uma vez que apenas as coordenadas dos extremos dos segmentos, e as dos cantos da tela precisam
ser armazenadas. Esta era uma caracter´ıstica importante no in´ıcio da CG, j´a que a mem´oria era muito
cara.
O computador gera as coordenadas dos pontos que definem a figura a ser mostrada na tela, e um
DAC (conversor digital-anal´ogico) ´e necess´ario para converter os pontos digitais em voltagens a serem
enviadas para o CRT (Figura 2.2).
As desvantagens dos terminais gr´aficos vetoriais eram: a tecnologia cara, o efeito de flickering, e
a mem´oria limitada, que inviabilizava a descri¸c˜ao de imagens com detalhes complexos. As vantagens:
dispositivo gr´afico de alta resolu¸c˜ao (pelo menos 1000x1000), rapidez na gera¸c˜ao de imagens simples, o
que os torna adequados para testes iniciais em anima¸c˜ao.
16
2.1.3 Terminais CRT com mem´oria (Direct View Storage Tubes)
O CRT com mem´oria ´e um tubo especial que se comporta como se o f´osforo fosse de alt´ıssima persistˆencia.
Uma imagem tra¸cada nesse tipo de tubo pode manter-se por mais de uma hora sem sofrer desvanecimento.
Entretanto, o tubo ´e constru´ıdo com f´osforo comum, e a longa persistˆencia da imagem ´e conseguida pela
inclus˜ao de dois elementos adicionais ao tubo: um canh˜ao espalhador de el´etrons e uma m´ascara montada
sobre a superf´ıcie do f´osforo, entre a tela e os canh˜oes.
Os el´etrons s˜ao uniformemente espalhados por toda a superf´ıcie da tela pelo canh˜ao espalhador, e a
m´ascara funciona como um filtro que seleciona os pontos ou ´areas da superf´ıcie a serem atingidas pelos
el´etrons. Para isso, a m´ascara ´e constru´ıda de material diel´etrico pass´ıvel de ser carregado de maneira n˜ao
uniforme. As ´areas carregadas positivamente atraem os el´etrons, permitindo que passem pela m´ascara.
Onde h´a carga negativa, os el´etrons s˜ao repelidos, e n˜ao atingem o f´osforo.
Um canh˜ao de el´etrons ´e respons´avel pela emiss˜ao de um feixe fino e intenso de el´etrons que produz a
carga diferenciada na m´ascara. Dessa forma s˜ao criados “buracos” na m´ascara que deixar˜ao os el´etrons
do outro canh˜ao passarem, definindo a forma da imagem a ser gerada. O desenho gravado na m´ascara
sustenta a imagem na tela at´e que uma voltagem positiva seja enviada para a m´ascara, apagando a
imagem.
Vantagens dos sistemas DVST: alta resolu¸c˜ao (pelo menos 1024x781); ausˆencia de flickering. Desvan-
tagens: n˜ao h´a como apagar seletivamente a imagem. O apagamento da tela ´e sempre global, resultante
do carregamento uniforme da mascara; o apagamento causa um efeito de flashing na tela; a tecnologia
n˜ao ´e adequada para monitores coloridos (usa apenas f´osforo verde); a imagem perde defini¸c˜ao com o
tempo; os tubos desgastam e precisam ser substitu´ıdos.
A tecnologia dos DVST est´a ultrapassada, tendo sido substitu´ıda pelos dispositivos de varredura
matriciais.
2.2 Primitivas de Software para Dispositivos Vetoriais
Uma primitiva de software ´e uma rotina ou um comando escrito em alguma linguagem que executa uma
fun¸c˜ao b´asica de um aplicativo: ou seja, uma primitiva de software implementa uma ´ unica fun¸c˜ao. Um
sistema de software complexo ´e constru´ıdo atrav´es de chamadas hier´arquicas para suas fun¸c˜oes primitivas.
Praticamente todos os dispositivos de sa´ıda vetoriais trabalham com duas primitivas de software
b´asicas: moveto(dcx,dcy) e drawto(dcx,dcy). A primeira move a posi¸c˜ao corrente (CP - current position)
do feixe (ou caneta, no caso de um plotter) para o ponto definido pelas coordenadas do dispositivo
especificadas, (dcx, dcy), que passa a definir a nova CP. A segunda desenha um linha reta (ou, em outras
palavras, um vetor) entre o ponto definido pela CP e o ponto definido pelas coordenadas (dcx, dcy), que
passa a ser a nova CP.
Num sistema gr´afico com v´arios dispositivos de sa´ıda conectados ao computador hospedeiro, cada qual
com seu pr´oprio sistema de coordenadas, ´e conveniente que o sistema disponha de primitivas gen´ericas
que sejam acessadas de maneira independente do dispositivo - atrav´es de NDCs ou de coordenadas f´ısicas.
As rotinas gen´ericas move to e draw to, nesse caso, cont´em estruturas “case” com comandos alternativos
para cada dispositivo admitido, e enviam a sa´ıda para o dispositivo de sa´ıda correntemente ativado, depois
de fazer as convers˜oes apropriadas [Rankin, p. 29].
2.3 Dispositivos Gr´aficos Matriciais
2.3.1 Impressoras
Impressoras matriciais: nessas impressoras, os caracteres s˜ao impressos por interm´edio de um conjunto
de agulhas - um ponto ´e impresso quando uma agulha pressiona a fita sobre o papel. As agulhas s˜ao
montadas sobre um cabe¸cote m´ovel, e os diferentes caracteres s˜ao obtidos pelo acionamento conveniente
das agulhas a medida que o cabe¸cote se movimenta.
Estas impressoras podem operar no modo texto para a impress˜ao de caracteres, ou num modo gr´afico
(“bit image”) pelo qual ´e poss´ıvel controlar cada agulha de modo independente. Em outras palavras, o
conjunto de padr˜oes (caracteres) que podem ser impressos ´e program´avel. Cada padr˜ao a ser impresso ´e
definido por uma pequena matriz de pontos, onde cada ponto pode ser tra¸cado ou n˜ao.
Impressoras gr´aficas: Diversas t´ecnicas tˆem sido utilizadas na constru¸c˜ao de impressoras gr´aficas,
sendo que as mais comuns s˜ao as tecnologias de jato de tinta e laser.
Nas impressoras a jato de tinta, o cabe¸cote transporta um pequeno bico que expele a tinta num jato
curto e fino sobre o papel.
´
E poss´ıvel variar a intensidade do jato, obtendo-se assim controle sobre a
17
densidade de impress˜ao, e algumas impressoras disp˜oem de v´arios bicos com tintas de cores diferentes,
cuja mistura produz diversas tonalidades.
Nas impressoras a laser, o processo de impress˜ao ´e semelhante ao das copiadoras eletrost´aticas. Um
feixe de raio laser varre uma chapa numa trajet´oria semelhante ao de um cabe¸cote de uma impressora.
O bombardeio do feixe deixa a chapa carregada com uma carga eletrost´atica n˜ao uniforme. Por efeito da
intensidade da carga, uma tintura (tonner) adere `a chapa e por press˜ao ´e impregnada no papel, formando
a imagem.
Apesar de utilizarem tecnologias distintas, estas impressoras produzem imagens de natureza seme-
lhante (mas com qualidade superior) `as geradas pelas impressoras matriciais em modo gr´afico. As imagens
s˜ao, em ´ ultima instˆancia, constitu´ıdas de min´ usculos pontos regularmente espa¸cados.
2.3.2 Dispositivos de V´ıdeo de Varredura (Raster Scanning VDUs)
A tecnologia utilizada atualmente na grande maioria dos terminais de v´ıdeo gr´aficos ´e a mesma dos
aparelhos de TV. Um terminal gr´afico simples requer (Figura 2.3):
Figura 2.3: Uma seq¨ uˆencia de bits na mem´oria de imagem ´e convertida para uma seq¨ uˆencia de pixels na
tela.
Figura 2.4: Representa¸c˜ao esquem´atica de uma imagem matricial e sua representa¸c˜ao num frame buffer.
1. uma mem´oria digital (frame buffer, ou “mem´oria de imagem”), na qual a imagem a ser visualizada
´e armazenada como uma matriz de pixels (cada posi¸c˜ao na matriz cont´em a intensidade associada
ao pixel correspondente na tela) (Figura 2.4). Os dados da imagem s˜ao colocados no frame buffer
pelo computador hospedeiro.
2. o monitor
3. um controlador de v´ıdeo (display controller), que consiste de uma interface que transfere o conte´ udo
do frame buffer para o monitor. Os dados devem ser transferidos repetidamente, pelo menos 15
vezes por segundo, de modo a manter uma imagem est´avel na tela, reduzindo o flickering. Note
que processo de transferˆencia implica numa convers˜ao digital-anal´ogica (DAC).
Para gerar a imagem, utiliza-se a t´ecnica conhecida como raster scanning (“varredura”, ou “rastreio”),
que ´e a mesma utilizada na gera¸c˜ao de imagens de TV. Essa t´ecnica tamb´em utiliza um CRT, sendo que
18
Figura 2.5: Varredura por rastreio fixo.
o feixe de el´etrons varre a tela muitas vezes por segundo, de acordo com uma trajet´oria fixa (Figura 2.5).
O feixe movimenta-se da esquerda para a direita, na horizontal. Ao final de uma varredura horizontal,
o feixe (com intensidade anulada) ´e reposicionado no in´ıcio da linha imediatamente abaixo, para nova
varredura.
Para garantir o “refrescamento” da imagem, o feixe ´e redirecionado ao ponto inicial da primeira linha
sempre que atingir o final da tela. Note que a intensidade do feixe num determinado pixel ´e determinada
pelo valor associado ao pixel no frame buffer. Se a mem´oria consiste de apenas um bit por pixel, ent˜ao
o pixel pode ter apenas dois estados: on ou off. Se existem oito bits por pixel, ent˜ao cada pixel pode
variar entre 256 n´ıveis de intensidade, desde completamente off (preto), passando por diferentes n´ıveis
de cinza, podendo chegar a completamente on (branco).
A dr´astica redu¸c˜ao dos custos de mem´oria de semicondutor, e o surgimento de circuitos integrados
dedicados ao controle e `a gera¸c˜ao de sinais para terminais de rastreio fixo tornaram esta tecnologia
extremamente competitiva. Na tecnologia de varredura, todos os pontos que comp˜oem uma imagem
precisam ser armazenados, e n˜ao apenas os pontos extremos dos segmentos de reta. Consequentemente,
gr´aficos de varredura requerem muito mais mem´oria. Como o pre¸co da mem´oria digital est´a sendo
reduzido `a metade a cada ano que passa, a tecnologia tornou-se a alternativa mais acess´ıvel, utilizada
tanto em microcomputadores como em esta¸c˜oes de trabalho gr´aficas. Al´em do custo, outras vantagens
s˜ao a capacidade de representar ´areas cheias, e n˜ao somente linhas, e a possibilidade de utiliza¸c˜ao de
cores ou diferentes n´ıveis de cinza.
Figura 2.6: Representa¸c˜ao esquem´atica de um CRT por varredura colorido.
Em monitores monocrom´aticos, toda a superf´ıcie da tela ´e revestida com o mesmo tipo de f´osforo, e
o feixe de el´etrons pode ser direcionado para qualquer ponto da tela atrav´es das voltagens x e y. Num
monitor colorido, cada pixel da tela ´e recoberto por trˆes tipos de f´osforo, que produzem as cores vermelho,
verde e azul (Red, Green, Blue - RGB). Ao inv´es de um ´ unico feixe de el´etrons existem trˆes, cada qual
associado a uma cor de f´osforo. Entre a superf´ıcie da tela recoberta de f´osforo, e os feixes de el´etrons,
est´a uma barreira de metal, denominada shadow mask ou metal mask (Figura 2.6), que, por meio de
buracos em posi¸c˜oes estrat´egicas, garante que cada feixe atinge apenas o f´osforo ao qual est´a associado.
19
R G B Valor Bin´ario Cor
0 0 0 0 preto
0 0 1 1 azul
0 1 0 2 verde
0 1 1 3 turquesa
1 0 0 4 vermelho
1 0 1 5 magenta
1 1 0 6 amarelo
1 1 1 7 branco
Tabela 2.1: Cores RGB em trˆes bits.
Variando a intensidade de cada feixe, varia-se a intensidade do brilho de cada f´osforo, obtendo-se cores
diferentes.
Assim como nos monitores monocrom´aticos o feixe de el´etrons est´a associado a um conjunto de bits
na frame memory que determina a intensidade dos f´osforos vermelho, verde e azul. Se existe apenas um
bit associado a cada feixe (ou seja, trˆes bits de mem´oria por pixel), pode-se obter oito cores distintas,
conforme mostrado na Tabela 2.1. O n´ umero de bits associado a cada pixel ´e denominado pixel depth
(bit planes), ou “profundidade” do pixel.
Se cada feixe tem profundidade p, o pixel tem profundidade 3p, e pode-se gerar 2
3p
cores. Alguns
terminais gr´aficos tˆem pixels com profundidade quatro, sendo que os trˆes primeiros bits correspondem
aos valores R, G e B, e o quarto especifica o brilho, ou intensidade total da cor mostrada. Isto resulta
em 2
4
= 16 cores poss´ıveis para cada pixel. Outros sistemas usam valores diferentes de profundidade de
pixel, com significados diferentes associados aos respectivos bit planes.
Se a profundidade do pixel ´e D, o n´ umero real de cores poss´ıveis ´e 2
D
, mas o n´ umero total de cores
que podem ser mostradas, denominado palette range, pode ser bem maior. Ao inv´es de usar o valor do
pixel armazenado na mem´oria para controlar o feixe diretamente (e.g., us´a-lo como uma cor), ele ´e usado
como um ´ındice para uma tabela de cores (color lookup table, CLUT). Um palette, ou “cor l´ogica”, ´e um
dos 2
D
valores de pixel poss´ıveis, e portanto existem 2
D
palettes (0 a 2
D
−1). Um software pode atribuir
valores associados a cores f´ısicas `as posi¸ c˜oes da look-up table correspondentes a um palette. Assim, o valor
armazenado numa posi¸c˜ao da tabela ´e usado para controlar a cor do pixel associado no monitor.
Figura 2.7: Organiza¸c˜ao de uma v´ıdeo look-up table.
Em geral, a tabela de cores ´e uma ´ area fixa de RAM com 2
D
posi¸c˜oes de 24 bits cada: a cada feixe
(ou cor) s˜ao associados 8 bits, e portanto cada feixe pode ter 256 n´ıveis de intensidade. Isto resulta num
total de 16 milh˜oes de cores poss´ıveis, sendo que apenas 2
D
podem ser mostradas simultaneamente na
tela. A Figura 2.7 mostra um frame buffer com 8 bits por pixel, e uma LUT com 12 bits por posi¸c˜ao.
2.3.3 Primitivas de Software
A primitiva b´asica, no caso de um dispositivo matricial, tra¸ca um ponto numa determinada posi¸c˜ao do
retˆangulo de visualiza¸c˜ao:
int write_pixel(int dcx, int dcy, int pixel_value)
Tamb´em ´e poss´ıvel ler dados de um dispositivo, atrav´es da primitiva inversa:
int read_pixel(int dcx, int dcy, int *pixel_value)
20
Em ambos os casos, os dados s˜ao lidos ou escritos no frame buffer, ou mem´oria de imagem, que
armazena todos os pixels de uma imagem a ser visualizada ou lida. Al´em disso, o programador precisa
acessar a lookup table - caso ela exista - o que ´e feito atrav´es de duas primitivas:
int write_CLUT(int pixel_value,int R, int G, int B)
read_CLUT(int pixel_value, int *R, int *G, int *B)
Todos os comandos gr´aficos num sistema envolvendo dispositivos matriciais podem ser constru´ıdos a
partir dessas quatro primitivas.
Num sistema b´asico com um dispositivo de visualiza¸c˜ao monocrom´atico, as primitivas podem ser
reduzidas simplesmente a duas rotinas b´asicas, que s˜ao casos especiais da rotina “write pixel”. Estas
rotinas “acendem” e “apagam” o ponto definido pelas coordenadas (dcx, dcy).
dot_on(int dcx, int dcy);
dot_off(int dcx, int dcy)
Apesar destas subrotinas usarem coordenadas de tela, rotinas num n´ıvel superior executariam as
transformadas de visualiza¸c˜ao para converter coordenadas do usu´ario para coordenadas do dispositivo.
2.4 Exerc´ıcios
1. Escreva um programa (em C) que desenhe um pol´ıgono regular (ou seja, um pol´ıgono com lados de
comprimentos iguais e ˆangulos internos iguais) com raio igual a um ter¸co da altura da tela, e centro no
centro da tela. O programa deve solicitar o n´ umero de v´ertices, n.
2. Modifique o programa do exerc´ıcio anterior para solicitar tamb´em o raio r do c´ırculo que circunscreve
o pol´ıgono. Fa¸ca com que o seu programa estime o n´ umero n de v´ertices necess´arios para que o pol´ıgono
pare¸ca uma “boa aproxima¸c˜ao” para um c´ırculo, para diferentes raios. Usando os parˆametros ndh, ndv,
width, height do dispositivo, obtenha uma rela¸c˜ao te´orica entre n e r para a aproxima¸c˜ao de c´ırculos
atrav´es de pol´ıgonos.
3. Alguns dispositivos vetoriais oferecem um conjunto de trˆes primitivas gr´aficas:
• pen up: levanta a caneta do papel, ou desliga o feixe de el´etrons;
• pen down: coloca a caneta sobre o papel, ou liga o feixe;
• locate(dcx,dcy): posiciona a CP num ponto do retˆangulo de visualiza¸c˜ao.
Escreva rotinas de software que simulem estas trˆes primitivas, usando as primitivas moveto e drawto.
4. Calcule as raz˜oes de aspecto (gr´afica e f´ısica), e as resolu¸c˜oes de ´area horizontal e vertical de uma tela
de TV colorida padr˜ao, onde:
• width = 42cm;
• height = 31cm;
• ndh = 546;
• ndv = 434.
2.5 Dispositivos de Entrada
Juntamente com os dispositivos de sa´ıda, os dispositivos de entrada gr´afica permitem o estabelecimento
da comunica¸c˜ao usu´ario-m´aquina.
´
E importante que programadores de sistemas e aplicativos gr´aficos
compreendam a natureza dos principais dispositivos de entrada, de forma a selecion´a-los adequadamente
em fun¸ c˜ao da natureza das informa¸c˜oes a serem tratadas, e da maior ou menor facilidade que oferecem
aos usu´arios para exprimir informa¸c˜oes.
21
2.5.1 Teclado
O teclado alfanum´erico ´e o recurso mais utilizado na comunica¸c˜ao entre usu´ario e m´aquina, permitindo
a entrada de textos e dados num´ericos. Um teclado alfanum´erico estendido inclui teclas adicionais para
a sele¸c˜ao de alternativas em menus ou para o disparo de fun¸c˜oes espec´ıficas. Teclas de movimento de
cursor podem ser usadas para sele¸c˜ao de coordenadas de um ponto em uma tela gr´afica.
Em geral, valores de coordenadas especificando posi¸c˜oes de um cursor na tela s˜ao fornecidas para o
computador por meio de dispositivos como a ligth pen, o joystick, o mouse e as mesas digitalizadoras
(tablets).
2.5.2 Ligth Pen
´
E um dispositivo que funciona associado a um monitor de v´ıdeo, e que ´e capaz de detectar luz. A caneta
tem em sua ponta uma c´elula fotoel´etrica e um interruptor de press˜ao. Ao ser pressionado contra a tela,
o interruptor habilita a c´elula a detectar o pulso de luz emitido pelos f´osforos que recobrem a tela no
ponto sendo apontado.
Quando a ligth pen detecta um pulso de luz num terminal de varredura, o conte´ udo dos registradores
X e Y do controlador de v´ıdeo ´e armazenado, e o processamento ´e interrompido. Atrav´es dos valores
armazenados, o software gr´afico determina as coordenadas do pixel apontado pela caneta.
Quando detecta um pulso de luz num monitor vetorial, a caneta informa ao processador, a execu¸c˜ao
´e interrompida, e o processador ´e capaz de detectar qual instru¸c˜ao de tra¸cado estava em execu¸c˜ao no
momento que ocorreu a interrup¸c˜ao, e portanto qual segmento de reta foi apontado pelo operador. A
caneta ´e uma tecnologia um tanto ultrapassada, por ser cansativa para o usu´ario e sujeita a falhas.
2.5.3 Joystick
´
E uma alavanca que admite movimentos para frente e para tr´as, esquerda e direita. Dois potenciˆometros
s˜ao respons´aveis pela detec¸c˜ao dos movimentos na horizontal e na vertical. Sua manipula¸c˜ao fornece um
par de valores num´ericos em uma faixa limitada fixa para cada posi¸c˜ao da alavanca.
´
E um dispositivo de
baixo custo, bastante utilizado em microcomputadores. Entretanto, o joystick ´e um dispositivo de baixa
resolu¸ c˜ao, e n˜ao ´e muito adequado para controlar a posi¸c˜ao absoluta de um cursor na tela.
2.5.4 Mouse
O mouse ´e uma pequena caixa que pode deslizar sobre uma superf´ıcie plana. Na parte inferior, uma
pequena esfera incrustada no mouse rola livremente a medida que este se movimenta. Os movimentos
de rota¸ c˜ao da esfera relativos `a caixa s˜ao transmitidos mecanicamente a dois potenciˆometros que medem
o deslocamento do mouse em rela¸c˜ao a dois eixos ortogonais fixos. Como o sistema de eixos ´e fixo em
rela¸ c˜ao `a caixa, o dispositivo ´e capaz apenas de detectar movimentos relativos `a sua pr´opria posi¸c˜ao
atual. Ele pode ser levantado da superf´ıcie, movido e colocado de volta sobre a superf´ıcie sem que a sua
posi¸c˜ao corrente no sistema seja alterada.
2.5.5 Mesa Digitalizadora (Tablet)
´
E o dispositivo mais adequado para entrada de dados geom´etricos. Consiste de uma superf´ıcie plana e
um cursor que pode ser posicionado sobre a superf´ıcie. Por indu¸c˜ao eletromagn´etica, a posi¸c˜ao corrente
do cursor, relativa a um referencial fixo `a mesa, pode ser detectada e transmitida ao processador.
2.5.6 Data Glove
´
E o dispositivo de entrada e sa´ıda pelas m˜aos utilizado em realidade virtual. Consiste de um conjunto
de sensores acoplados a uma luva que detectam movimento e for¸ca dos dedos. Antenas de transmiss˜ao
e recep¸ c˜ao s˜ao respons´aveis por fornecer posicionamento das m˜aos. Com isso, a posi¸c˜ao das m˜aos pode
indicar posi¸c˜ao de objetos, que s˜ao ent˜ao mapeados para tela ou para um dispositivo de headtrack.
2.5.7 Outros dispositivos
Entrada por voz, som via MIDI.
22
Cap´ıtulo 3
Tra¸cado de Curvas em Dispositivos
Gr´aficos Matriciais
O tra¸cado de primitivas gr´aficas elementares, como segmentos de reta ou arcos de circunferˆencia, requer a
constru¸ c˜ao de algoritmos capazes de determinar na matriz de pixels da superf´ıcie de exibi¸c˜ao quais pixels
devem ser alterados de forma a simular-se a aparˆencia do elemento gr´afico desejado. Estes algoritmos
recebem o nome de Algoritmos de Convers˜ao Matricial, por converterem em representa¸c˜ao matricial
elementos gr´aficos expressos em uma representa¸c˜ao vetorial.
Um elemento geom´etrico b´asico a ser tra¸cado num terminal gr´afico ´e o segmento de reta. Atualmente,
´e comum que rotinas de tra¸cado de linhas estejam dispon´ıveis em hardware (em chips controladores).
O chip recebe as coordenadas dos pixels extremos, e calcula quais pixels intermedi´arios da superf´ıcie de
exibi¸c˜ao devem ser tra¸cados para gerar uma reta (aproximada) na tela.
Gr´aficos complexos requerem o tra¸cado de uma grande quantidade de segmentos de reta, e a velocidade
´e importante - da´ı a op¸c˜ao de tra¸cado por meio de hardware especializado, que libera o processador
hospedeiro para outras atividades enquanto o chip controlador calcula os pixels a serem tra¸cados.
Se a fun¸c˜ao de tra¸cado precisa ser implementada em software, a rotina deve ser escrita em c´odigo
de m´aquina otimizado para atingir o m´aximo de velocidade. Entretanto, ´e instrutivo estudar alguns
algoritmos para tra¸cado de linhas usando uma linguagem de alto n´ıvel.
Suponhamos, que a superf´ıcie de exibi¸c˜ao possua igual densidade de pixels na horizontal e na vertical
(raz˜ao de aspecto gr´afica igual a 1).
A seguir ser´a apresentada uma importante propriedade do espa¸co onde os diversos elementos gr´aficos
ser˜ao tra¸ cados.
Figura 3.1: Representa¸c˜ao de segmentos de reta horizontais, verticais e diagonais.
23
Figura 3.2: Reflex˜ao de uma imagem com rela¸c˜ao a um eixo diagonal.
Figura 3.3: Rota¸c˜ao de 90
o
obtida atrav´es de 2 reflex˜oes, uma horizontal (a) e outra na diagonal (b).
3.1 Simetria e Reflex˜ao
Tomemos como exemplo o tra¸cado de um segmento de reta. A representa¸c˜ao matricial de segmentos de
reta horizontais, verticais, e diagonais a 45 e 135 n˜ao apresenta nenhuma dificuldade (ver Figura 3.1).
Pode-se dizer que estas dire¸c˜oes formam na realidade eixos de simetria no espa¸co matricial. Logo, qualquer
imagem representada no espa¸co matricial pode ser refletida em rela¸c˜ao a qualquer reta horizontal, vertical
ou diagonal sem apresentar qualquer deforma¸ c˜ao (ver Figura 3.2).
A Simetria ser´a explorada na convers˜ao matricial de primitivas gr´aficas que apresentem simetria em
rela¸ c˜ao a qualquer um destes eixos. Na Figura 3.3 pode-se ver como efetuar a rota¸c˜ao de uma imagem
utilizando de 2 reflex˜oes.
3.2 Convers˜ao Matricial de Segmentos de Reta
Alguns crit´erios de convers˜ao matricial podem ser vistos atrav´es da Figura 3.4.
Em (a) adotou-se o crit´erio de selecionar-se os dois pixels imediatamente acima e abaixo do ponto de
intersec¸c˜ao do segmento com cada vertical, a menos quando o segmento passa por um pixel. Restri¸c˜ao:
dessa forma obt´em-se linhas densas, como se o segmento fosse espesso.
Em (b) o crit´erio foi selecionar todos os pixels cujas coordenadas s˜ao obtidas arredondando-se os
valores das coordenadas de algum ponto do segmento. Restri¸c˜ao: com segmentos a 45 o crit´erio produz
resultados semelhantes ao anterior.
A convers˜ao ilustrada em (c) foi obtida selecionando-se em cada vertical o pixel mais pr´oximo do
ponto de intersec¸c˜ao do segmento com a reta vertical. Vantagens: aparˆencia leve e continuidade.
Em (d) utilizou-se o mesmo crit´erio, s´o que para as linhas horizontais. Restri¸c˜ao: descontinuidade.
24
Figura 3.4: Convers˜oes matriciais de um segmento de reta resultante de diferentes crit´erios.
3.2.1 Caracter´ısticas Desej´aveis para os Algoritmos de convers˜ao Matricial
de Segmentos de Retas
1. Linearidade: os pixels tra¸cados devem dar a aparˆencia de que est˜ao sobre uma reta. Isto ´e trivial
no caso de segmentos paralelos aos eixos x ou y, ou com inclina¸c˜ao de 45 graus, mas n˜ao nos outros
casos.
2. Precis˜ao: os segmentos devem iniciar e terminar nos pontos especificados. Caso isso n˜ao ocorra,
pequenos gaps podem surgir entre o final de um segmento e o in´ıcio de outro.
3. Espessura (Densidade) uniforme: a densidade da linha ´e dada pelo n´ umero de pixels tra¸cados
dividido pelo comprimento da linha. Para manter a densidade constante, os pixels devem ser
igualmente espa¸cados. A imagem do segmento n˜ao varia de intensidade ou espessura ao longo de
sua extens˜ao.
4. Intensidade independente da inclina¸c˜ao: para segmentos de diferentes inclina¸c˜oes
5. Continuidade: a imagem n˜ao apresenta interrup¸c˜oes indesej´aveis.
6. Rapidez no Tra¸cado dos segmentos.
Os algoritmos que vamos estudar usam o m´etodo incremental, que consiste em executar os c´alculos
iterativamente, mantendo um registro (ou mem´oria) do progresso da computa¸c˜ao a cada passo da itera¸c˜ao.
Nesse m´etodo, come¸cando por um dos extremos da linha, o pr´oximo ponto ´e calculado e tra¸cado at´e que
o outro extremo seja atingido e tra¸cado.
O problema da convers˜ao matricial consiste essencialmente em ajustar uma curva, no caso, um seg-
mento de reta, a qual ´e precisamente definida por coordenadas reais, a uma malha de coordenadas
inteiras. Isto pode ser feito calculando as coordenadas reais, (x
r
, y
r
), do pr´oximo ponto na linha, e es-
colhendo na malha os pixels cujas coordenadas (x, y) mais se aproximam das coordenadas reais, obtidos
por arredondamento ou truncamento.
Qualquer algoritmo de tra¸cado de linhas pode ser testado com rela¸c˜ao aos requisitos acima: Para
o requisito 1, calcula-se a soma dos quadrados das diferen¸cas entre cada par (x
r
, y
r
), (x, y). O melhor
algoritmo ´e o que resultar na menor diferen¸ca. O requisito 2 ´e problem´atico apenas quando os pontos
extremos dos segmentos s˜ao especificados em coordenadas do usu´ario. Para o requisito 3, conta-se o
n´ umero de pixels tra¸cados, e divide-se pelo comprimento da linha. Os requisitos 4 e 6 s˜ao avaliados
atrav´es da execu¸c˜ao de benchmarks em cada algoritmo, para efeito de compara¸c˜ao. O requisito 5 pode
ser verificado analisando-se os tamanho dos “buracos” entre um ponto e o seu pr´oximo, o que pode ser
feito atrav´es de um algoritmo que calcule a distˆancia entre dois pontos.
3.2.2 Crit´erio Adotado
Seja o segmento de reta definido por seus extremos (x
1
, y
1
) e (x
2
, y
2
).
Pode-se supor que este segmento est´a no 1
o
octante (porquˆe?!). Ent˜ao estas coordenadas respeitam as
rela¸ c˜oes:
25
0 < x1 < x2 (3.1)
0 < y1 < y2 (3.2)
y
2
−y
1
< x
2
−x
1
(3.3)
Nestas condi¸c˜oes o segmento de reta corta um n´ umero maior de linhas verticais do reticulado do que
de horizontais e assim:
Crit´erio de Convers˜ao: em cada vertical do retilado com abscissa entre x
1
e x
2
apenas o
pixel mais pr´oximo da interse¸c˜ao do segmento com a vertical faz parte da sua imagem.
Este crit´erio aplicado a segmentos do 2
o
octante n˜ao produz resultados satisfat´orios (tente fazˆe-lo!),
pois nesse caso o n´ umero de verticais que corta o segmento ser´a menor que o de horizontais. Solu¸c˜ao:
para segmentos no 2
o
octante utilizar este crit´erio s´o que trocando x com y e vertical por horizontal. A
Figura 3.5 apresenta a convers˜ao de segmentos pelo crit´erio acima.
Figura 3.5: Imagens de segmentos de reta convertidos pelo crit´erio expl´ıcito acima.
3.2.3 Algoritmos
Equa¸ c˜ao da reta:
y = y
1
+a(x −x
1
) (3.4)
onde a =
(y
2
−y
1
)
(x
2
−x
1
)
.
Dessa forma, basta que para cada vertical da grade entre x
1
e x
2
, determinemos o inteiro mais pr´oximo
da ordenada correspondente da reta. O algoritmo 3.1 implementa esta id´eia.
3.2.4 Algoritmo do “Ponto-M´edio”
Um algoritmo equivalente a este mas que dispensa as opera¸c˜oes em ponto flutuante foi proposto por
Bresenham (em 1965). Bresenham desenvolveu um algoritmo cl´assico que usa apenas vari´aveis inteiras,
e que permite que o c´alculo de (x
i
+ 1, y
i
+ 1) seja feito incrementalmente, usando os c´alculos j´a feitos
para (x
i
, y
i
). Vamos estudar uma vers˜ao do Algoritmo de Bresenham denominada MidPoint Line
Algorithm (“Algoritmo do Ponto-M´edio ou Meio-Ponto para Retas”) por Foley.
O algoritmo assume que a inclina¸c˜ao da linha est´a entre 0 e 1 (outras inclina¸c˜oes podem ser tratadas
por simetria). O ponto (x
1
, y
1
) ´e o inferior esquerdo, e (x
2
, y
2
) ´e o superior direito.
Considere a linha na Figura 3.6. Assumindo que o pixel que acabou de ser selecionado ´e P, em
(x
p
, y
p
), e o pr´oximo deve ser escolhido entre o pixel `a direita (pixel E) e o pixel acima `a direita (NE).
Seja Q o ponto de intersec¸c˜ao entre a reta e a coluna x = x
p
+ 1 da malha, e M o ponto intermedi´ario
entre os pixels E e NE. 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 acima da reta, o pixel E est´a mais pr´oximo da reta; se M est´a abaixo, NE est´a mais pr´oximo.
26
void line(int x1, int y1, int x2, int y2, int color){
int x, y;
float a;
int valor;
a=(y2-y1)/(x2-x1);
for (x=x1;x<=x2;x++){
/* arredonda y */
y = (y1 + a * (x - x1));
write_pixel(x, y, color);
}/* end for */
}/*end line */
Algoritmo 3.1: Algoritmo simples para convers˜ao matricial de retas.
´
E pouco eficiente pois utiliza
c´alculos de ponto flutuante.
Figura 3.6: Grade de pixels para o Algoritimo o Ponto-M´edio (M) e as escolhas E e NE.
27
Dessa forma, o teste do ponto-m´edio permite a escolha do pixel mais pr´oximo da reta. Al´em disso, o erro
(a distˆancia vertical entre o pixel escolhido e a linha) ´e sempre ≤
1
2
.
O que precisamos agora ´e um m´etodo para calcular de que lado da reta est´a o ponto M. Para isso,
considere sua fun¸c˜ao impl´ıcita, F(x, y) = ax +by +c = 0. Se dy = y
2
−y
1
, e dx = x
2
−x
1
, a equa¸c˜ao da
reta em termos de sua inclina¸c˜ao pode ser escrita como:
y =
dy
dx
x +B (3.5)
e, consequentemente,
F(x, y) = dy.x −dx.y +B.dx = 0 (3.6)
Aqui, tem-se a = dy, b = −dx, e c = B.dx.
´
E f´acil verificar que F(x, y) = 0 sobre a linha, positiva para pontos abaixo dela, e negativa para
pontos acima dela. Para o teste do ponto-m´edio, basta calcular F(M) = F(x
p
+ 1, y
p
+
1
2
) e verificar o
seu sinal. Como a decis˜ao ser´a tomada com base no valor da fun¸c˜ao no ponto (x
p
+1, y
p
+
1
2
), definimos
uma “vari´avel de decis˜ao” d = a(x
p
+ 1) + b(y
p
+
1
2
) + c. Se d > 0, escolhemos o pixel NE, se d < 0,
escolhemos o pixel E; se d = 0 pode-se escolher qualquer um deles, por exemplo E.
´
E interessante verificar o que acontece com a localiza¸c˜ao de M e o valor de d no pr´oximo ponto da
reta. Ambos dependem, obviamente, da escolha de E ou NE. Se E for escolhido, M ´e incrementado de 1
na dire¸c˜ao x. Assim,
d
new
= F(x
p
+ 2, y
p
+
1
2
) = a(x
p
+ 2) +b(y
p
+
1
2
) +c (3.7)
mas
d
old
= a(x
p
+ 1) +b(y
p
+
1
2
) +c (3.8)
Subtraindo d
old
de d
new
para obter a diferen¸ca incremental, tem-se d
new
= d
old
+a.
Denominamos ∆E o incremento a ser adicionado depois da escolha de E; e ∆E = a = dy. Em outras
palavras, pode-se derivar o valor da vari´avel de decis˜ao no pr´oximo passo incrementalmente, a partir do
seu valor atual, sem necessidade de calcular F(M) diretamente.
Se NE ´e escolhido, M ´e incrementado de 1 em ambas as dire¸c˜oes, x e y. Portanto,
Subtraindo d
old
de d
new
, tem-se d
new
= d
old
+a+b. Denominamos ∆NE o incremento a ser adicionado
depois da escolha de NE; e ∆NE = a +b = dy −dx.
Resumindo a t´ecnica incremental do ponto-m´edio
A cada passo, o algoritmo escolhe entre 2 pixels, com base no sinal da vari´avel de decis˜ao calculada
na itera¸ c˜ao anterior; a seguir a vari´avel de decis˜ao ´e atualizada adicionando-se ∆E ou ∆NE ao valor
anterior, dependendo do pixel escolhido.
Como o primeiro pixel corresponde ao ponto (x
1
, y
1
), pode-se calcular diretamente o valor inicial de
d para escolher entre E e NE. O primeiro ponto-m´edio est´a em (x
1
+ 1, y
1
+
1
2
), e
F(x
1
+ 1, y
1
+
1
2
) = a(x1 + 1) +b(y
1
+
1
2
) +c = ax
1
+by
1
+c +a +
b
2
= F(x
1
, y
1
) +a +
b
2
(3.9)
Como (x
1
, y
1
) ´e um ponto da reta, F(x
1
, y
1
) ´e 0; consequentemente d
start
´e dado por a+
b
2
= dy −
dx
2
.
Usando dstart, escolhe-se o segundo pixel, e assim por diante. Para eliminar a fra¸c˜ao em d
start
, F ´e
multiplicada por 2. Isto ´e:
F(x, y) = 2(ax + by + c). Isto multiplica cada constante e a vari´avel de decis˜ao por 2, mas n˜ao afeta o
sinal da vari´avel de decis˜ao, que ´e o que interessa para o teste do ponto-m´edio.
A aritm´etica necess´aria para calcular d
new
a cada passo ´e adi¸c˜ao simples - nenhuma multiplica¸c˜ao ´e
necess´aria (veja o algoritmo abaixo). Note que esta vers˜ao do algoritmo funciona apenas para linhas com
inclina¸c˜ao entre 0 e 1, mas a generaliza¸c˜ao n˜ao ´e dif´ıcil. A Figura 3.7 mostra a reta que vai do ponto
(5,8) ao ponto (9,11), tra¸cada por este algoritmo. Os valores sucessivos de d s˜ao 2, 0, 6 e 4, resultantes
da escolha de NE, E, NE e NE, respectivamente.
Exerc´ıcios
1. Escreva procedimentos para checar os 6 requisitos de um bom algoritmo de convers˜ao matricial, e
aplique-os aos algoritmos de convers˜ao estudados.
2. Escreva uma vers˜ao melhorada do Algoritmo de Bresenham, que teste se as itera¸c˜oes devem ser
feitas ao longo do eixo x ou ao longo do eixo y, e tamb´em para checar exce¸c˜oes como linhas paralelas
ao eixo x.
28
Figura 3.7: Grade de pixels para o Algoritimo o Ponto-M´edio (M) e as escolhas E e NE.
3.3 Convers˜ao Matricial de Circunferˆencias
A equa¸ c˜ao de uma circunferˆencia com centro na origem e raio R, em coordenadas cartesianas, ´e dada
por:
x
2
+y
2
= R
2
(3.10)
Circunferˆencias n˜ao centradas na origem podem ser transladadas para a origem, e os pixels reais
podem ser tra¸cados aplicando-se um offset aos pixels gerados pelo algoritmo de convers˜ao matricial.
Existem muitas abordagens simples, por´em ineficientes, para o tra¸cado de c´ırculos: Em algoritmos
n˜ao incrementais, um pol´ıgono regular de n lados ´e usado como aproxima¸c˜ao para a circunferˆencia. Para
que a aproxima¸c˜ao seja razo´avel, deve-se escolher um valor suficientemente alto para n. Entretanto,
quanto maior o valor de n, mais lento ser´a o algoritmo, e v´arias estrat´egias de acelera¸c˜ao precisam ser
usadas. Em geral os algoritmos incrementais de convers˜ao matricial s˜ao mais r´apidos.
Outra abordagem seria usar a equa¸ c˜ao expl´ıcita da circunferˆencia, y = f(x):
y = ±
_
R
2
−x
2
(3.11)
Figura 3.8: Um arco de
1
4
de circunferˆencia, obtido variando-se x em incrementos unit´arios, e calculando
e arrendondando y.
Para desenhar
1
4
de circunferˆencia (os outros
3
4
s˜ao desenhados por simetria), poder´ıamos variar x de
0 a R, em incrementos de uma unidade, calculando +y a cada passo atrav´es da equa¸c˜ao acima. Essa
estrat´egia funciona, mas ´e ineficiente porque requer opera¸c˜oes de multiplica¸c˜ao e raiz quadrada. Al´em
29
void inc_line(int x1, int y1, int x2, int y2, int color){
int dx, dy, incE, incNE, d, x, y;
dx = x2 - x1;
dy = y2 - y1;
d = 2 * dy - dx; /* Valor inicial de d */
incE = 2 * dy; /* Incremento de E */
incNE = 2 * (dy - dx); /* Incremento de NE */
x = x1;
y = y1;
write_pixel(x, y, color);
while (x < x2){
if (d <= 0){
/* Escolhe E */
d = d + incE;
x = x + 1;
}else{
/* Escolhe NE */
d = d + incNE;
x = x + 1;
y = y + 1;
}/* end if */
write_pixel(x, y, color);
}/* end while */
}/* end inc_line */
Algoritmo 3.2: Algoritmo do Ponto-M´edio incremental.
disso, haver´a grandes gaps nas regi˜oes onde a tangente `a circunferˆencia ´e infinita (valores de x pr´oximos
a R, Figura 3.8). Uma maneira de resolver o problema dos gaps ´e “plotar” x = R. cos θ e y = R. sin θ,
para variando de 0 a 90 graus, mas essa solu¸c˜ao tamb´em ´e ineficiente, pois precisa de fun¸c˜oes caras (sin
e cos).
3.3.1 Simetria de ordem 8
Note que o tra¸cado de uma circunferˆencia pode tirar proveito de sua simetria. Considere uma circun-
ferˆencia centrada na origem. Se o ponto (x, y) pertence `a circunferˆencia, pode-se calcular de maneira
trivial sete outros pontos da circunferˆencia (Figura 3.9). Consequentemente, basta computar um arco de
circunferˆencia de 45
o
para obter a circunferˆencia toda. Para uma circunferˆencia com centro na origem, os
oito pontos sim´etricos podem ser tra¸cados usando o procedimento CirclePoints (Algoritmo 3.3).
void CirclePoints(int x, int y, int color){
write_pixel( x, y, color);
write_pixel( x, -y, color);
write_pixel(-x, y, color);
write_pixel(-x, -y, color);
write_pixel( y, x, color);
write_pixel( y, -x, color);
write_pixel(-y, x, color);
write_pixel(-y, -x, color);
}/* end CirclePoints */
Algoritmo 3.3: Procedimento CirclePoints.
Vamos estudar especificamente um algoritmo derivado do algoritmo de Bresenham para gera¸c˜ao de
circunferˆencias, chamado “Midpoint Circle Algorithm” em [Foley et. al].
30
Figura 3.9: Oito pontos sim´etricos em uma circunferˆencia.
3.3.2 Algoritmo do “Ponto-M´edio” para Circunferˆencias
Consideraremos apenas um arco de 45
o
da circunferˆencia, o 2
o
octante, de x = 0, y = R a x = y =
R

2
,
e usaremos o procedimento CirclePoints para tra¸car todos os pontos da circunferˆencia. Assim como o
algoritmo gerador de linhas, a estrat´egia ´e selecionar entre 2 pixels na malha aquele que est´a mais pr´oximo
da circunferˆencia, avaliando-se uma fun¸c˜ao no ponto intermedi´ario entre os dois pixels. No segundo
octante, se o pixel P em (x
p
, y
p
) foi previamente escolhido como o mais pr´oximo da circunferˆencia, a
escolha do pr´oximo pixel ser´a entre os pixels E e SE (Figure 3.10).
Seja a fun¸c˜ao F(x, y) = x
2
+y
2
−R
2
, cujo valor ´e 0 sobre a circunferˆencia, positivo fora dela e negativo
dentro. Se o ponto intermedi´ario (o “ponto-m´edio”) entre os pixels E e SE est´a fora da circunferˆencia, o
pixel SE ´e escolhido, porque est´a mais pr´oximo dela. Por outro lado, se o pixel intermedi´ario est´a dentro
da circunferˆencia, ent˜ao o pixel E ´e escolhido.
Assim como no caso das linhas, a escolha ´e feita com base na vari´avel de decis˜ao d, que d´a o valor da
fun¸c˜ao no “ponto-m´edio”:
d
old
= F(x
p
+ 1, y
p

1
2
) = (x
p
+ 1)
2
+ (y
p

1
2
)
2
−R
2
(3.12)
Se d
old
< 0, E ´e escolhido, e o pr´oximo ponto-m´edio ser´a incrementado de 1 na dire¸c˜ao x. Assim,
d
new
= F(x
p
+ 2, y
p

1
2
) = (x
p
+ 2)
2
+ (y
p

1
2
)
2
−R
2
(3.13)
e d
new
= d
old
+ (2x
p
+ 3); consequentemente ∆E = 2x
p
+ 3.
Se d
old
≥ 0, SE ´e escolhido, e o pr´oximo ponto-m´edio ser´a incrementado de 1 na dire¸c˜ao x e decre-
mentado de 1 na dire¸c˜ao y. Portanto:
d
new
= F(x
p
+ 2, y
p

3
2
) = (x
p
+ 2)
2
+ (y
p

3
2
)
2
−R
2
(3.14)
Como d
new
= d
old
+ (2x
p
−2y
p
+ 5), ∆SE = 2x
p
−2y
p
+ 5.
Note que no caso da reta (equa¸c˜ao linear), ∆E e ∆NE eram constantes. No caso da circunferˆencia
(equa¸ c˜ao quadr´atica), E e SE variam a cada passo, sendo fun¸c˜oes do valor espec´ıfico de (x
p
, y
p
), o pixel
escolhido na itera¸c˜ao anterior (P ´e chamado “ponto de avalia¸c˜ao”). As fun¸c˜oes podem ser avaliadas
diretamente, a cada passo, dados os valores de x e y do pixel escolhido na itera¸c˜ao anterior. Essa
avalia¸ c˜ao n˜ao ´e computacionalmente cara, uma vez que as fun¸c˜oes s˜ao lineares.
31
Figura 3.10: Malha de pixels para o Algoritmo do Ponto-M´edio para circunferˆencias, ilustrando a escolha
entre os pixels E e SE.
Resumindo, os mesmos dois passos executados para o algoritmo do tra¸cado de linhas s˜ao executados
para o algoritmo de circunferˆencias:
1. escolher o pixel com base no sinal da vari´avel d, calculada na itera¸c˜ao anterior;
2. atualizar a vari´avel d com o valor correspondente ao pixel escolhido. A diferen¸ca ´e que, na atua-
liza¸ c˜ao de d, calculamos uma fun¸c˜ao linear do ponto de avalia¸c˜ao.
Falta ainda calcular a condi¸c˜ao inicial (o 1
o
valor de d). Limitando a utiliza¸c˜ao do algoritmo a raios
inteiros no segundo octante, o pixel inicial ´e dado por (0, R). O pr´oximo “ponto-m´edio” est´a em (1, R−
1
2
),
e portanto F(1, R−
1
2
) = 1+(R
2
−R+
1
4
) −R
2
=
5
4
−R. O algoritmo, bastante parecido com o algoritmo
para tra¸cado de retas, ´e mostrado no Algoritmo 3.4.
Figura 3.11: Segundo octante da circunferˆencia gerado com o algor´ıtimo do Ponto-M´edio e primeiro
octante gerado por simetria.
32
void MidPointCircle(int r, int color){
int x, int y;
float d;
/* Valores iniciais */
x = 0;
y = r;
d = 5/4 - r;
CirclePoints(x, y, color);
while (y > x){
if (d < 0){
/* Selecione E */
d = d + 2 * x + 3;
x++;
}else{
/* Selecione SE */
d = d + 2 * (x - y) + 5;
x++;
y--;
}/*end if*/
CirclePoints(x, y, color);
}/* end while */
}/* end MidpointCircle */
Algoritmo 3.4: Algoritmo do Ponto-M´edio para circunferˆencias (Aritm´etica Real).
O algoritmo pode ser facilmente modificado para manipular circunferˆencias centradas fora da origem,
ou de raios n˜ao inteiros. Entretanto, um problema com esta vers˜ao ´e a necessidade de usar aritm´etica
real, devido ao valor inicial de d.
Para eliminar as fra¸c˜oes, vamos definir uma nova vari´avel de decis˜ao, h, onde h = d −
1
4
, e substituir
d por h +
1
4
no c´odigo. Agora, a inicializa¸c˜ao ´e h = 1 − R, e a compara¸c˜ao d < 0 torna-se h < −
1
4
.
Entretanto, como o valor inicial de h ´e inteiro, e a vari´avel ´e incrementada de valores inteiros (∆E e
∆SE), a compara¸c˜ao pode ser alterada simplesmente para h < 0. Temos agora um algoritmo que opera
em termos de h, usando apenas aritm´etica inteira, que ´e mostrado no Algoritmo 3.5. (Para manter a
nota¸c˜ao consistente com o algoritmo de linhas, substituimos novamente h por d). A Figura 3.11 mostra
o segundo octante de uma circunferˆencia de raio 14 gerada pelo algoritmo.
Diferen¸cas de Segunda Ordem
´
E poss´ıvel melhorar o desempenho do algoritmo usando ainda mais extensivamente a t´ecnica da com-
puta¸ c˜ao incremental. Vimos que as fun¸c˜oes s˜ao equa¸c˜oes lineares, e no algoritmo, elas est˜ao sendo
computadas diretamente. Entretanto, qualquer polinˆomio pode ser calculado incrementalmente - assim
como foi feito com as vari´aveis de decis˜ao. (Na verdade, estamos calculando diferen¸cas parciais de 1
a
e
2
a
ordens). A estrat´egia consiste em avaliar as fun¸c˜oes diretamente em dois pontos adjacentes, calcular a
diferen¸ ca (que no caso de polinˆomios ´e sempre um polinˆomio de menor grau), e aplicar esta diferen¸ca a
cada itera¸c˜ao.
Se escolhemos E na itera¸c˜ao atual, o ponto de avalia¸c˜ao move de (x
p
, y
p
) para (x
p
+ 1, y
p
). Como
vimos, a diferen¸ca de 1
a
ordem ´e ∆E
old
em (x
p
, y
p
) = 2x
p
+ 3. Conseq¨ uentemente,
∆E
new
em (x
p
+ 1, y
p
) = 2(x
p
+ 1) + 3 (3.15)
e a diferen¸ca de 2
a
ordem ´e ∆E
new
−∆E
old
= 2.
Analogamente, SE
old
em (x
p
, y
p
) = 2x
p
−2y
p
+ 5. Conseq¨ uentemente,
∆SE
new
em(x
p
+ 1, y
p
) = 2(x
p
+ 1) −2y
p
+ 5 (3.16)
e a diferen¸ca de 2
a
ordem ´e ∆SE
new
−∆SE
old
= 2.
Se escolhemos SE na itera¸c˜ao atual, o ponto de avalia¸c˜ao move de (x
p
, y
p
) para (x
p
+ 1, y
p
− 1).
Conseq¨ uentemente
33
void MidPointCircleInt(int r, int color){
int x, int y, d;
/* Valores iniciais */
x = 0;
y = r;
d = 1 - r;
CirclePoints(x, y, color);
while (y > x){
if (d < 0){
/* Selecione E */
d = d + 2 * x + 3;
x++;
}else{
/* Selecione SE */
d = d + 2 * (x - y) + 5;
x++;
y--;
}/*end if*/
CirclePoints(x, y, color);
}/* end while */
}/* end MidpointCircleInt */
Algoritmo 3.5: Algoritmo do Ponto-M´edio para circunferˆencias utilizando aritm´etica inteira.
∆E
new
em(x
p
+ 1, y
p
−1) = 2(x
p
+ 1) + 3 (3.17)
e a diferen¸ca de 2
a
ordem ´e ∆E
new
−∆E
old
= 2. Al´em disso,
∆SE
new
em(x
p
+ 1, y
p
−1) = 2(x
p
+ 1) −2(y
p
−1) + 5 (3.18)
e a diferen¸ca de 2
a
ordem ´e ∆SE
new
−∆SE
old
= 4.
Considerando que ∆E e ∆SE s˜ao computados usando o pixel inicial (0, R), a vers˜ao final do algoritmo
dada a seguir e consiste dos seguintes passos:
1. escolher o pixel com base no sinal da vari´avel d calculada na itera¸c˜ao anterior;
2. atualizar a vari´avel d usando E ou SE, usando o valor de calculado na itera¸c˜ao anterior;
3. atualizar os ∆ s para considerar o movimento para o pr´oximo pixel, utilizando as diferen¸cas cons-
tantes previamente calculadas; e
4. mover para o pr´oximo pixel. ∆E e ∆SE s˜ao computados usando o pixel inicial (0, R).
O algoritmo, bastante utilizando a otimiza¸c˜ao das diferen¸cas de 2
a
ordem ´e apresentado em no Algo-
ritmo 3.6.
3.4 Convers˜ao Matricial de Elipses
Consideremos a elipse padr˜ao da Figura 3.12, centrada em (0, 0). Ele ´e descrita pela equa¸c˜ao:
F(x, y) = b
2
x
2
+a
2
y
2
−a
2
b
2
= 0 (3.19)
onde 2a ´e o comprimento do eixo maior (eixo x) e 2b ´e o comprimento do eixo menor (eixo y).
Como foi feito para circunferˆencias, tomar-se-´a como base elipses centradas na origem (transla¸c˜ao !).
As elipses possuem simetria horizontal e vertical, assim a preocupa¸c˜ao ser´a de tra¸car apenas o primeiro
quadrante da elipse e depois tra¸car os demais por reflex˜ao.
Primeiramente dividiremos o primeiro quadrante em duas regi˜oes: o limite entre as duas regi˜oes ´e o
ponto da curva cuja tangente tem inclina¸c˜ao igual a -1. A determina¸c˜ao deste ponto n˜ao ´e t˜ao simples.
34
void MidPointCircleInt(int r, int color){
// Fun¸c~ao de utiliza diferen¸cas parciais de 2a ordem para incrementar variavel de
// decis~ao d. Circunfer^encia centrada na origem
/* Valores iniciais */
int x = 0;
int y = r;
int d = 1 - r;
int deltaE=3
inte deltaSE= -2*r+5
CirclePoints(x, y, color);
while (y > x){
if (d < 0){ /* Selecione E */
d +=deltaE;
deltaE += 2;
deltaSE += 2;
}else{ /* Selecione SE */
d +=deltaSE;
deltaE += 2;
deltaSE += 4;
y--;
}/*end if*/
x++;
CirclePoints(x, y, color);
}/* end while */
}/* end MidpointCircleInt */
Algoritmo 3.6: Algoritmo MidPoint para convers˜ao matricial de circunferˆencias utilizando dife-
ren¸ cas de 2
a
ordem
35
Figura 3.12: Elipse padr˜ao centrada na origem.
Para tanto utilizaremos o vetor gradiente que ´e perpendicular `a tangente `a curva no ponto P, definido
como:
GradienteF(x, y) =
∂F
∂x

i +
∂F
∂x

j = 2b
2
x

i + 2a
2
y

j (3.20)
Figura 3.13: As duas regi˜oe adotadas, definidas pela tangente a 45
o
.
O limite entre as duas regi˜oes ´e o ponto cuja inclina¸c˜ao da curva ´e -1, e este ponto ocorre quando
o vetor gradiente tem inclina¸c˜ao igual a 1, isto ´e, quando os componentes nas dire¸c˜oes

i e

j s˜ao de
magnitudes iguais. A componente

j do gradiente ´e maior do que a

i na regi˜ao 1, e vice-versa na regi˜ao
2. Assim, se o pr´oximo “ponto-m´edio” ´e a
2
(y
p

1
2
) ≤ b
2
(x
p
+1), n´os mudamos da regi˜ao 1 para a regi˜ao
2 (ver Figura 3.13).
Como nos outros algoritmos de “ponto-m´edio” anteriores, o sinal da vari´avel de decis˜ao d (´e o valor
da fun¸ c˜ao no “ponto-m´edio”) ser´a usado para verificar que pixels fazem ou n˜ao parte da elipse.
Assim, na regi˜ao 1, se o pixel corrente est´a em (x
p
, y
p
), ent˜ao a vari´avel de decis˜ao para a regi˜ao
1, d1, ´e F(x
p
+ 1, y
p

1
2
), o ponto m´edio entre E e SE. Repetindo o processo de deriva¸c˜ao para a
fun¸ c˜ao de incremento (como foi feito para circunferˆencia), tem-se que ∆E = b
2
(2x
p
+ 3) e ∆SE =
b
2
(2x
p
+ 3) +a
2
(−2y
p
−1).
36
Para a regi˜ao 2, se o pixel corrente est´a em (x
p
, y
p
), ent˜ao a vari´avel de decis˜ao para a regi˜ao 2, d2,
´e F(x
p
+
1
2
, y
p
−1), o ponto m´edio entre S e SE. Pode-se fazer c´alculos idˆenticos aos da regi˜ao 1.
A condi¸c˜ao inicial deve ser ent˜ao computada. Assumindo valores inteiros para a e b, a elipse come¸ca
em (0, b), e o primeiro “ponto-m´edio” ´e calculado em (1, b −
1
2
). Assim,
F(1, b −
1
2
) = b
2
+a
2
(b −
1
2
)
2
−a
2
b
2
= b
2
+a
2
(−b +
1
4
) (3.21)
void MidpointElipse(int a, int b, int color){
int x, int y;
float d1, d2;
/* Valores iniciais */
x = 0;
y = b;
d1 = b * b - a * a * b + a * a / 4.0;
ElipsePoints(x, y, color); /* Simetria de ordem 4 */
while(a * a * (y - 0.5) > b * b * (x + 1)){
/* Regi~ao 1 */
if (d1 < 0)
d1 = d1 + b * b * (2 * x + 3);
x++
}else{
d1 = d1 + b * b * (2 * x + 3) + a * a * (-2 * y + 2);
x++;
y--;
}/*end if*/
ElipsePoints(x, y, color);
}/* end while */
d2 = b * b * (x + 0.5) * (x + 0.5) + a * a * (y - 1) * (y - 1) - a * a * b * b;
while(y > 0){
/* Regi~ao 2 */
if (d2 < 0){
d2 = d2 + b * b * (2 * x + 2) + a * a * (-2 * y + 3);
x++;
y--;
}else{
d2 = d2 + a * a * (-2 * y + 3);
y--;
}/*end if*/
ElipsePoints(x, y, color);
}/* end while */
}/*end MidpointElipse*/
Algoritmo 3.7: Algoritmo do Ponto-M´edio para convers˜ao matricial de elipses.
3.5 Corre¸c˜ao no Tra¸cado
Para a maioria dos dispositivos gr´aficos, o retˆangulo de visualiza¸c˜ao n˜ao ´e quadrado, e as densidades de
pixels na horizontal e na vertical s˜ao diferentes. Ou seja, a raz˜ao de aspecto f´ısica raramente ´e igual
a 1, e a consequˆencia ´e uma distor¸c˜ao vis´ıvel no tra¸cado. Por exemplo, um quadrado (especificado
em coordenadas do usu´ario) pode ser deformado num retˆangulo ao ser convertido em coordenadas do
dispositivo, ou uma circunferˆencia pode ser distorcida numa elipse.
A forma mais simples de corrigir esta deforma¸c˜ao ´e atrav´es de uma transforma¸c˜ao de escala dos dados
que definem a curva a ser tra¸cada. Ou seja, no caso da circunferˆencia, bastaria converter os pontos
que definem a circunferˆencia em pontos que na verdade definem uma elipse, mas que, como existe a
deforma¸ c˜ao, aparecem na tela como uma circunferˆencia.
37
As diferen¸cas de densidades representam de fato uma opera¸c˜ao de escala n˜ao homogˆenea realizada
pelo dispositivo. Para corrig´ı-la basta aplicar-se aos parˆamentros das curvas a serem tra¸cadas uma
transforma¸c˜ao de escala inversa, que compense a do dispositivo. Por exemplo, se a densidade horizontal
´e o dobro da densidade vertical, ent˜ao as abcissas dos pontos extremos de cada segmento a tra¸car devem
ser dobradas para que mantenham a mesma propor¸c˜ao em rela¸c˜ao `as ordenadas. Essa manipula¸c˜ao dos
pontos das curvas deve ser feita pelo programa que efetua a interface entre os programas do usu´ario e
os dispositivos gr´aficos de sa´ıda - os chamados Pacotes gr´aficos de interfaceamento, ou Ambientes
Gr´aficos.
Outra quest˜ao complexa ´e a elimina¸c˜ao do efeito de “serrilhado” (aliasing) observ´avel nas imagens
geradas por m´etodos de convers˜ao matricial. Este efeito ´e mais pronunciado nos trechos de arcos com
inclina¸coes pr´oximas da horizontal ou vertical. As t´ecnicas usualmente aplicadas para a corre¸c˜ao desse
efeito s˜ao “caras” (do ponto de vista computacional), e exigem que se fa¸ca um controle de intensidade do
tra¸ co.
As t´ecnicas de anti-serrilhado (antialiasing) tra¸cam n˜ao s´o os pixels calculados pelo procedimento de
convers˜ao matricial, mas tamb´em os pixels vizinhos, acima e abaixo, com intensidades vari´aveis, que ser˜ao
tanto maiores quanto mais pr´oximos os pixels estiverem do centro da reta. O c´alculo das intensidades
dos pixels e a determina¸c˜ao das suas coordenadas s˜ao processos n˜ao triviais, e requerem um n´ umero bem
maior de opera¸c˜oes do que o efetuado pelos algoritmos de convers˜ao estudados.
3.6 Antialising
As primitivas geradas apresentam o problema da aparˆencia “serrilhada”, ou “efeito escada”. Este efeito
indesej´avel ´e o resultado da abordagem “tudo ou nada” adotada no processo de convers˜ao matricial, no
qual cada pixel recebe a cor associada `a primitiva ou mant´em a sua cor original. Esse efeito ´e apenas
uma das v´arias manifesta¸c˜oes vis´ıveis do fenˆomeno conhecido como aliasing. A aplica¸c˜ao de t´ecnicas que
reduzem (ou eliminam) o efeito de aliasing ´e denominado antialising, e primitivas ou imagens geradas
utilizando tais t´ecnicas s˜ao ditas antialiased.
Considere o algoritmo do ponto m´edio para tra¸cado de segmentos de reta sendo usado para tra¸car
uma linha preta de um pixel de espessura, com inclina¸c˜ao entre 0 e 1, em um fundo branco. Em cada
coluna de pixels interceptada pela linha o algoritmo seta a cor preta ao pixel que est´a mais perto do ponto
ideal pertencente `a linha. A cada vez que se passa para a pr´oxima coluna e o pixel mais pr´oximo da linha
ideal ´e o que est´a a nordeste (NE), e n˜ ao `a leste (E), ocorre um “efeito escada”. O mesmo acontece em
outros tipos de primitivas. Uma forma de reduzir o problema (em termos visuais) ´e aumentar a resolu¸c˜ao
do dispositivo (usar mais pixels) (ver Figura 3.14) . Esta ´e uma solu¸c˜ao cara em termos de mem´oria
e tempo gasto no processo de convers˜ao matricial, e que n˜ao resolve o problema. Alternativas menos
custosas s˜ao descritas a seguir.
Figura 3.14: Segmento de reta renderizado com o algor´ıtmo do ponto m´edio em diferentes escalas. (a) ´e
uma aplia¸c˜ao da regi˜ao central de (b).
3.6.1 Amostragem de
´
Areas n˜ao Ponderada
O fato ´e que, apesar da primitiva ideal, como um segmento de reta, ter espessura zero, a primitiva
sendo tra¸cada tem espessura n˜ao nula, pois ocupa uma ´area finita da tela. Assim, podemos pensar em
um segmento de reta como um retˆangulo com uma certa espessura que cobre uma regi˜ao da malha de
38
pixels, como ilustrado na Figura 3.15. Conseq¨ uentemente, o melhor procedimento n˜ao ´e atribuir o valor
correspondente a preto a um ´ unico pixel em uma coluna, mas atribuir diferentes intensidades da cor a cada
pixel interceptado pela ´area coberta pelo retˆangulo que aproxima a linha, na coluna em quest˜ao. Assim,
linhas horizontais ou verticais, cuja espessura ´e 1 pixel, afetam exatamente 1 pixel em uma coluna ou
linha. Para linhas com outras inclina¸c˜oes, mais do que 1 pixel ´e tra¸cado, cada qual com uma intensidade
apropriada.
Figura 3.15: Segmento de reta definido com uma espessura diferente de zero.
Mas, qual ´e a geometria de um pixel? Qual o seu tamanho? Qual intensidade a atribuir a um
pixel interceptado pela linha?
´
E computacionalmente simples assumir que os pixels definem uma malha
regular de “quadrados” n˜ao sobrepostos que recobre a tela, sendo que as intersec¸c˜oes da malha definem
o posicionamento dos pixels, i.e., pixels s˜ao tratados como “quadrados” com centro nas interse¸c˜oes da
malha. Uma primitiva pode sobrepor toda ou parte da ´area ocupada por um pixel. Assumimos tamb´em
que a linha contribui para a intensidade do pixel segundo um valor proporcional `a porcentagem da ´area do
pixel coberta por ela. Se a primitiva cobre toda a ´area do pixel, ele recebe a intensidade m´axima (preto,
no caso), se cobre parte o pixel recebe um tom de cinza cuja intensidade ´e proporcional `a ´area coberta
(Figura 3.16). O efeito ´e “suavizar” a defini¸c˜ao da reta ou das arestas que definem a primitiva, melhorando
sua aparˆencia visual quando observada `a distˆancia. Essa estrat´egia ´e denominada amostragem por ´area
n˜ao ponderada (unweighted area sampling). Uma estrat´egia ainda mais eficiente ´e a amostragem por ´area
ponderada (weighted area sampling).
Figura 3.16: A intensidade do pixel ´e proporcional `a area coberta.
Amostragem de
´
Areas Ponderada
Nessa outra estrat´egia, assim como na anterior, valem duas propriedades: 1) a intensidade atribu´ıda ao
pixel ´e diretamente proporcional `a ´area do mesmo coberta pela primitiva; 2) se a primitiva n˜ao intercepta
a ´area do pixel, ent˜ao ela n˜ao contribui nada para a cor do mesmo. A diferen¸ca ´e que, na estrat´egia
ponderada, ao determinar a contribui¸c˜ao de uma ´area considera-se, tamb´em, a sua proximidade em rela¸c˜ao
ao centro do pixel. Assim, ´areas iguais podem contribuir de forma desigual: uma ´area pequena pr´oxima
do centro do pixel tem maior influˆencia do que uma ´area grande a uma distˆancia maior. Entretanto,
para garantir que a primitiva contribui para um pixel apenas se ela sobrep˜oe a ´area ocupada pelo mesmo,
precisamos mudar a geometria do pixel da seguinte forma: vamos considerar que o pixel ocupa uma ´area
39
circular maior do que a ´area quadrangular considerada na situa¸c˜ao anterior. Se a primitiva sobrep˜oe essa
nova ´area, ela contribui para a intensidade do pixel.
Vamos definir uma fun¸c˜ao peso que determina a influˆencia, na intensidade do pixel, de uma ´area
pequena da primitiva, denominada dA, em fun¸c˜ao da distˆancia de dA ao centro do pixel. No caso da
amostragem n˜ao ponderada, essa fun¸c˜ao ´e constante, e no caso da amostragem ponderada, ela diminui
de forma inversamente proporcional `a distˆancia em rela¸c˜ao ao centro do pixel. Podemos pensar nessa
fun¸c˜ao como uma fun¸c˜ao W(x, y), no plano, cuja altura em rela¸c˜ao ao plano xy d´a o peso associado `a
´area dA no ponto (x, y). Para a amostragem por ´area n˜ao ponderada, essa fun¸c˜ao ´e representada por
uma ’caixa’, como indicado na Figura 3.17. A figura mostra os pixels como quadrados cujos centros
(marcados) est˜ao nas intersec¸c˜oes da malha regular. A contribui¸c˜ao de cada pequena ´area ´e proporcional
`a ´area multiplicada pelo peso. Portanto, a intensidade total ´e dada pela integral da fun¸c˜ao peso sobre a
´area de sobreposi¸c˜ao. O volume representado por essa integral, Ws, ´e sempre uma fra¸c˜ao entre 0 e 1, e a
intensidade I do pixel ´e dada por Imax.Ws. No caso da amostragem n˜ao ponderada a altura da ’caixa’
´e normalizada para 1, de forma que o volume da caixa ´e 1. No caso da ´area da linha cobrir todo o pixel,
tem-se I = Imax.1 = Imax.
Figura 3.17: Filtro definido por um cubo para um pixel definido por um quadrado.
Vamos agora construir uma fun¸c˜ao peso para a amostragem ponderada: a fun¸c˜ao adotada tem valor
m´aximo no centro do pixel e diminui linearmente a medida que a distˆancia ao centro aumenta, e seu
gr´afico define um cone, como indicado na Figura 3.18. A base do cone ´e uma circunferˆencia cujo centro
coincide com o centro do pixel, e cujo raio corresponde a uma unidade da distˆancia entre os pixels na
malha. Note que as bases das fun¸c˜oes peso em diferentes pixels se sobrep˜oem, e portanto uma ´ unica
pequena regi˜ao da primitiva pode contribuir para a intensidade de diferentes pixels. Essa sobreposi¸c˜ao
tamb´em garante que n˜ao existem ´areas da grade que n˜ao s˜ao cobertas por algum pixel (esse n˜ao seria o
caso se o raio da base fosse de meia unidade, por exemplo).
Figura 3.18: Filtro cˆonico com diˆametro igual ao dobro da largura de um pixel.
Assim como na fun¸c˜ao ’caixa’, a soma das contribui¸c˜oes de intensidade para o cone ´e dada pelo
40
volume sob o cone que est´a na regi˜ao de interse¸c˜ao da primitiva com a base do cone. Esse volume, Ws,
´e uma se¸c˜ao vertical do cone, como mostrado na Figura 3.18. A altura do cone ´e normalizada para que
o volume do mesmo seja igual a 1, garantindo que um pixel que est´a inteiramente sob a base do cone
seja tra¸ cado com intensidade m´axima. Contribui¸c˜oes de ´areas da primitiva que interceptam a base mas
est˜ao distantes do centro do pixel s˜ao pequenas, mas ´areas muito pequenas, por´em pr´oximas do centro
do pixel contribuem mais para a cor do mesmo. O resultado dessa abordagem ´e reduzir o contraste entre
pixels adjacentes, de forma a gerar transi¸c˜oes visuais mais suaves. Particularmente, linhas horizontais
ou verticais com espessura de um pixel agora resultam em mais do que uma ´ unica linha ou coluna de
pixels acesos, o que n˜ao ocorre na abordagem n˜ao ponderada. Essa abordagem pode ser embutida nos
algoritmos de convers˜ao matricial, como descrito em Foley et al. [Fol90, se¸c˜ao 3.17.4]. Outros tipos de
fun¸ c˜oes podem ser usadas, sendo que existem fun¸c˜oes ´otimas melhores do que a fun¸c˜ao cˆonica (v. Foley,
se¸c˜ao 4.10).
41
Cap´ıtulo 4
Preenchimento de Pol´ıgonos
A tarefa de preencher um pol´ıgono pode ser dividida em duas:
1. Decidir que pixels pintar para preencher o pol´ıgono;
2. Decidir com que valor pintar o pixel.
Geralmente decidir que pixels devem ser pintados, consiste em se varrer (scan) sucessivas linhas
que interceptam a primitiva, preenchendo os pixels em “blocos” (span) que est˜ao dentro da primitiva
(que define o pol´ıgono) da esquerda para a direita. Vamos considerar inicialmente o preenchimento de
primitivas gr´aficas n˜ao “recortadas” (unclipped) com uma ´ unica cor. Em geral, a decis˜ao sobre quais pixels
preencher ´e feita “varrendo-se” (scan) linhas sucessivas que interceptam a primitiva, e preenchendo, da
esquerda para a direita, blocos de pixels adjacentes (spans) que est˜ao dentro da primitiva que define o
pol´ıgono.
4.1 Retˆangulos
Para preencher um retˆangulo com uma ´ unica cor, pinta-se cada pixel dentro de uma linha de varredura
da esquerda para a direita com o mesmo valor de pixel, isto ´e, pode-se preencher cada “bloco” de xmin
a xmax. As primitivas para blocos exploram a Coerˆencia Espacial: o fato que freq¨ uentemente n˜ao h´a
altera¸ c˜ao nas primitivas de um pixel para outro (pixels adjacentes) dentro de um bloco (span) ou de uma
linha de varredura para a pr´oxima linha de varredura. Assim, podemos explorar a coerˆencia para buscar
apenas os pixels em que ocorrem mudan¸cas. Para um retˆangulo preenchido com a mesma cor, todos
os pixels num bloco receber˜ao um mesmo valor, o que garante coerˆencia de bloco (span coherence). O
retˆangulo tamb´em exibe coerˆencia de linha de varredura (scan-line coherence), no sentido de que linhas
de varredura consecutivas que interceptam o retˆangulo s˜ao idˆenticas. Posteriormente consideraremos
tamb´em coerˆencia de arestas (edge coherence) para lados de pol´ıgonos em geral. Coerˆencia ´e uma pro-
priedade bastante explorada em CG, n˜ao apenas para convers˜ao matricial de primitivas 2D, mas tamb´em
para visualiza¸c˜ao de primitivas 3D.
A capacidade de tratar v´arios pixels identicamente em um bloco (span) tem especial importˆancia
para a diminui¸ c˜ao de tempo gasto para gravar os pixels no Frame Buffer (mem´oria onde ´e armazenada
a imagem). Assim, se em menos acessos a mem´oria pudermos escrever mais pixels estaremos ganhando
tempo. Abaixo colocaremos um algoritmo para preencher um retˆangulo, sendo que nele n´os n˜ao nos
preocuparemos em escrever eficientemente na mem´oria. Deixaremos isso para discuss˜ao posterior.
Para y = ymin at´e ymax do ret^angulo { Por linha de varredura }
Para x = xmin at´e xmax { Cada pixel dentro do bloco }
write_pixel (x,y,valor)
Algoritmo 4.1: Trecho de Algoritmo para Preenchimento de Retˆangulo.
Consideremos agora dois retˆangulos que compartilham um mesmo lado. Se preenchermos cada
retˆangulo isoladamente, o lado (aresta) compartilhado pelos dois ser´a gerado duas vezes o que n˜ao ´e
desej´avel (perco tempo!). Aqui surge o problema de defini¸c˜ao de ´area pertencente a cada primitiva,
isto ´e, quais os pixels que pertencem a cada primitiva e quais os pixels que n˜ao pertencem. De forma
natural, podemos definir os pixels que matematicamente se encontram no interior de uma ´area definida
42
pela primitiva, como pertencente a ela. Mas o que podemos falar acerca dos pixels que est˜ao no limite
da primitiva?
Se voltamos ao nosso problema do retˆangulo podemos adotar como uma regra que: os pixels que
constituem os limites da primitiva, isto ´e, os que est˜ao sobre os seus lados, n˜ao s˜ao considerados parte
da primitiva se o meio-plano definido pelo lado e que cont´em a primitiva est´a abaixo ou a esquerda do
lado. Ou, mais claramente, os pixels que est˜ao sobre os lados (aresta) esquerdo e inferior pertencem a
primitiva e ser˜ao desenhados, por´em os lados superior e direito n˜ao pertencem a primitiva e portanto n˜ao
ser˜ao desenhados. Assim, uma aresta vertical compartilhada por dois retˆangulos pertence ao lado que
est´a mais a direita. Sendo que na realidade, blocos dentro de um retˆangulo representam uma intervalo
que ´e fechado a esquerda e embaixo e aberto em cima e a direita.
Algumas considera¸c˜oes devem ser feitas sobre esta regra:
1. A regra se aplica da mesma forma a pol´ıgonos arbitr´arios e n˜ao somente a retˆangulos.
2. O v´ertice do canto inferior esquerdo ainda continua sendo desenhado duas vezes.
3. A regra pode tamb´em ser aplicada para retˆangulos e pol´ıgonos n˜ao preenchidos.
4. A regra faz com que em cada bloco esteja faltando o seu pixel mais a direita, e em cada retˆangulo
fique faltando o seu lado (aresta) superior.
Os problemas apresentados nas considera¸c˜oes acima demonstram que n˜ao h´a solu¸c˜ao perfeita para o
problema de n˜ao escrever mais de uma vez linhas que sejam potencialmente compartilhadas por mais de
um pol´ıgono.
4.2 Pol´ıgonos de Forma Arbitr´aria
O algoritmo que vamos discutir a seguir contempla tanto pol´ıgonos cˆoncavos quanto pol´ıgonos convexos,
mesmo que eles tenham auto-intersec¸c˜ao e buracos em seu interior. Ele opera computando blocos de
pixels que est˜ao entre os lados esquerdo e direito do pol´ıgono. O extremo do bloco ´e calculado por um
algoritmo incremental que calcula a linha de varredura/lado de intersec¸c˜ao a partir da intersec¸c˜ao com a
linha de varredura anterior.
Figura 4.1: Esta figura ilustra o processo de linha de varredura para um pol´ıgono arbitr´ario. As in-
tersec¸c˜oes da linha de varredura 8 com os lados FA e CD possuem coordenadas inteiras, enquanto as
intersec¸c˜oes com os lados EF e DE possuem coordenadas reais.
´
E preciso determinar que pixels da linha de varredura est˜ao dentro do pol´ıgono, e estabelecer os pixels
correspondentes (no exemplo da Figura 4.1, blocos para x = 2 at´e 4 e 9 at´e 13) com seu valor apropriado.
Repetindo este processo para cada linha de varredura que intercepta o pol´ıgono, o pol´ıgono inteiro ´e
convertido. A Figura 4.2 ilustra este processo.
Devemos nos preocupar com a defini¸c˜ao dos pontos extremos do pol´ıgono. Uma forma de obtˆe-los ´e
usar o algoritmo de convers˜ao de linhas do “Ponto-M´edio” para cada lado do pol´ıgono. Note que esta
estrat´egia inclui alguns pixels no extremo do pol´ıgono que na realidade n˜ao se encontram no pol´ıgono.
Eles foram escolhidos pelo algoritmo de convers˜ao matricial de linhas, e s˜ao colocados sobre o lado porque
est˜ao mais pr´oximas a ele.
43
Figura 4.2: Linhas de varredura em um pol´ıgno. Os extremos em preto, e os pixels no interior em cinza.
(a) Extremo calculado pelo algoritmo do ”Meio-Ponto”. (b) Extremo interior ao pol´ıgno.
N˜ao podemos desenhar pixels que n˜ao perten¸cam verdadeiramente ao interior do pol´ıgono, pois po-
demos estar invadindo o dom´ınio de outro pol´ıgono. Isto ´e, se a linha em quest˜ao define um extremo
que ´e compartilhado por outro pol´ıgono, estaremos entrando na regi˜ao definida por ele. Assim, ´e ´obvio
que ´e prefer´ıvel tra¸car apenas os pixels que estejam estritamente na regi˜ao definida pelo pol´ıgono, mesmo
que um pixel exterior esteja mais pr´oximo a aresta real (pelo algoritmo de convers˜ao (“Ponto-M´edio”)).
Logo, o algoritmo de convers˜ao deve ser ajustado de acordo. Compare a Figura 4.2(a) com 2(b), e note
que os pixels fora da primitiva n˜ao s˜ao desenhados na parte (b).
Com esta t´ecnica, um pol´ıgono n˜ao invade a regi˜ao definida por outro - a mesma t´ecnica pode ser
aplicada para pol´ıgonos n˜ao preenchidos, por uma quest˜ao de consistˆencia. Poder´ıamos, alternativamente,
converter retˆangulos e pol´ıgonos n˜ao cheios convertendo independentemente cada segmento de reta que
os comp˜oe, mas nesse caso pol´ıgonos cheios e n˜ao cheios n˜ao teriam os mesmos pixels na fronteira!
Como no algoritmo original do “Ponto-M´edio”, podemos usar um algoritmo incremental para calcular
o bloco (span) extremo sobre uma linha de varredura a partir da linha de varredura anterior, sem ter que
calcular analiticamente os pontos de intersec¸c˜ao da linha de varredura com os lados do pol´ıgono.
O processo de preencher os pol´ıgonos pode ser dividido em trˆes passos:
1. Obter a intersec¸c˜ao da linha de varredura com todos os lados do pol´ıgono.
2. Ordenar os pontos de intersec¸c˜ao (em x crescente).
3. Preencher os pixels entre pares de pontos de intersec¸c˜ao do pol´ıgono que s˜ao internos a ele. Para
determinar quais os pares que s˜ ao internos ao pol´ıgono, podemos usar a regra de Paridade: A
paridade inicialmente ´e par, e a cada intersec¸c˜ao encontrada o bit de paridade ´e invertido, o pixel
´e pintado quando a paridade ´e impar, e n˜ao ´e pintado quando ´e par.
Vamos tratar dos dois primeiros passos do processo mais adiante, e consideremos agora a estrat´egia
usada para o preenchimento dos blocos (passo 3). Na Figura 4.1, a lista ordenada de coordenadas x ´e (2,
4.5, 8.5, 13) para a linha de varredura 8. H´a 4 pontos a serem discutidos sobre este passo:
I Se a intersec¸c˜ao ´e um valor fracion´ario, como determinar qual o pixel que dever´a ser
tomado para que fique interior ao pol´ıgono?
O valor dever´a ser arredondado de forma a que o ponto fique dentro do pol´ıgono. Se estamos dentro
do pol´ıgono (paridade ´ımpar) e atingimos uma intersec¸c˜ao fracion´aria pela direita, arredondamos
a coordenada x da intersec¸c˜ao para baixo; se estamos fora do pol´ıgono arrendondamos para cima.
Isso garante que sempre teremos um ponto dentro do pol´ıgono.
II Como tratar o caso de intersec¸c˜ao com coordenadas inteiras?
Pode-se utilizar o crit´erio visto anteriormente, para evitar conflitos entre lados compartilhados em
retˆangulos. Se a coordenada x de um pixel mais a esquerda de um bloco (span) ´e inteira ele
´e definido como interno; se a coordenada x do pixel mais a direita de um bloco ´e inteira, ele ´e
definido como externo ao pol´ıgono.
44
III Como tratar o caso II para v´ertices que s˜ao compartilhados por mais de uma aresta
do pol´ıgono?
Usamos a t´ecnica de paridade. Ou seja, contamos o v´ertice de ymin de um lado para alterar a
paridade, mas n˜ao contamos o v´ertice de ymax, dessa forma o v´ertice de ymax ´e desenhado somente
se ele ´e o v´ertice de ymin do lado adjacente. Por exemplo, na Figura 4.1, o v´ertice A ´e contado uma
vez no c´alculo de paridade porque ´e o v´ertice de ymin para o lado FA, mas ´e tamb´em o v´ertice de
ymax para o lado AB. Assim ambos os lados e blocos s˜ao tratados como intervalos que s˜ao fechados
em seu valor m´ınimo e abertos em seu valor m´aximo.
IV Como tratar o caso especial de II em que os v´ertices definem uma linha horizontal?
Assim como no caso dos retˆangulos, arestas horizontais inferiores s˜ao tra¸cadas, e arestas horizontais
superiores n˜ao s˜ao. Como veremos, isso acontece automaticamente se n˜ao contarmos os v´ertices
dessas arestas no c´alculo da paridade, o que ´e natural, j´a que eles n˜ao correspondem a v´ertices ymin
ou ymax.
Ilustremos este processo, aplicando essas regras `a linha de varredura 8, na Figura 4.1. Os pixels
ser˜ao preenchidos a partir do ponto a (coordenadas (2, 8)), at´e o primeiro pixel a esquerda do ponto b
(coordenadas (4, 8)); e do primeiro pixel a direita do ponto c (coordenadas (9, 8)) at´e 1 pixel a esquerda
do ponto d (coordenadas (12, 8)). Para a linha de varredura 3, o v´ertice A conta uma vez porque ´e o
v´ertice de ymin do lado FA (e ´e tamb´em o v´ertice ymax do lado AB), isto causa paridade ´ımpar, assim o
bloco ´e desenhado a partir de A at´e um pixel a esquerda da intersec¸c˜ao com o lado CB, onde a paridade
´e estabelecida como par e o bloco ´e terminado. A linha de varredura 1 passa apenas pelo v´ertice B, e
os lados AB e BC tem como v´ertice de ymin B, o qual ´e dessa forma contado como paridade par. Este
v´ertice atua como um bloco nulo, pois a linha de varredura entra pelo v´ertice, desenha o pixel e sai por
ele mesmo. Assim, um pixel m´ınimo local ´e pintado, por´em pixel de m´aximo local n˜ao o ´e. Isso acontece
com a intersec¸c˜ao da linha de varredura 9 com o v´ertice F, compartilhado pelos lados FA e EF. Para
ambos os lados, B ´e v´ertice ymax, e dessa forma n˜ao afeta a paridade, que continua par.
Figura 4.3: Tratamento dos lados horizontais de um pol´ıgono.
4.2.1 Arestas Horizontais
Examinemos os casos apresentados na Figura 4.3. Consideremos o lado AB (lado inferior). O v´ertice A
´e v´ertice ymin para o lado JA, e AB por ser horizontal n˜ao possui m´ınimo. Assim, a paridade ´e ´ımpar
(pela regra da paridade!) e o bloco (span) ´e desenhado. O lado vertical BC tem ymin em B, e pela
mesma raz˜ao anterior o lado AB n˜ao contribui para alterar a paridade, assim a paridade torna-se par e o
bloco termina. O lado IJ tem v´ertice ymin em J (e em JA ele ´e m´aximo) assim a paridade torna-se ´ımpar
e o bloco ´e desenhado at´e o lado BC. O bloco que come¸ca em IJ e encontra C, n˜ao termina a´ı, porque
C ´e ymax para BC, assim o bloco continua sobre o lado CD (at´e D), no entanto DE tem ymin em D e
a paridade torna-se par e o bloco termina. O lado IJ tem ymax em I e o lado HI n˜ao contribui para a
c´alculo da paridade, assim a paridade continua e o bloco sobre o lado HI n˜ao ´e desenhado. Entretanto, o
lado GH tem v´ertice ymin em H, e a paridade torna-se ´ımpar, e o bloco ´e desenhado a partir de H at´e o
pixel a direita da intersec¸c˜ao da linha de varredura com o lado EF. Finalmente n˜ao h´a v´ertice ymin em
G nem em F, e dessa forma o lado (que ´e o lado superior - topo) FG n˜ao ´e desenhado.
45
OBSERVAC¸
˜
OES:
• O algoritmo acima contempla pol´ıgonos que possuem auto-intersec¸c˜ao. Mas n˜ao desenha os pixels
das arestas superiores nem os das arestas `a direita, mesmo se a primitiva for isolada.
• N˜ao desenha os pixels sobre o topo interno de um pol´ıgono cˆoncavo em formato de U.
• N˜ao desenha os pixels que s˜ao pontos m´aximos locais.
• Neste algoritmo, em vez de escrever pixels em lugares errados, pixels n˜ao s˜ao escritos (mesmo em
seus lugares certos!).
4.2.2 Slivers
Existe um outro problema com o nosso algoritmo de convers˜ao matricial: pol´ıgonos com lados muito
pr´oximos criam um “sliver” - uma ´area poligonal t˜ao estreita que seu interior n˜ao cont´em um bloco de
pixels para cada linha de varredura (Figura 4.4). Devido `a regra de que s˜ao tra¸cados apenas os pixels que
estejam no interior ou sobre arestas inferiores ou a esquerda, podem existir muitas linhas de varredura
com um ´ unico pixel, ou sem nenhum. A ausˆencia de pixels ´e um outro exemplo do problema de aliasing,
ou seja, da representa¸c˜ao de um sinal cont´ınuo atrav´es de uma aproxima¸c˜ao discreta (digital). Para
melhorar a aparˆencia nesses casos, pode-se usar t´ecnicas de antialiasing (se tivermos m´ ultiplos bits por
pixel). Antialiasing implicaria em “suavizar” nossa regra de “tra¸car apenas pixels que estejam no interior
ou numa aresta inferior ou `a esquerda”, de forma a permitir que pixels na fronteira ou mesmo no exterior
do pol´ıgono assumam intensidades variando como uma fun¸c˜ao da distˆancia entre o centro do pixel e a
primitiva. Nesse caso, m´ ultiplas primitivas podem contribuir para o valor de um pixel.
Figura 4.4: Exemplo de uma convers˜ao matricial de um Sliver
4.2.3 Algoritmo para Convers˜ao Matricial de Segmento de Reta que Utiliza
“Coerˆencia de Arestas” de um Pol´ıgono
No m´etodo anterior us´avamos “for¸ca bruta” para calcular a intersec¸c˜ao da linha de varredura com os
lados de um pol´ıgono. Mas, freq¨ uentemente, somente poucos lados de um pol´ıgono s˜ao de interesse para
uma dada linha de varredura. Al´em disso, notemos que muitos lados interceptados por uma linha de
varredura i tamb´em o s˜ao pela linha de varredura i +1. Esta “Coerˆencia de Arestas” ocorre para muitas
linhas de varreduras que interceptam um lado. Ao movermos de uma linha de varredura para a pr´oxima,
podemos calcular o pr´oximo x da intersec¸c˜ao da linha de varredura com o lado, a partir do x da linha
de varredura anterior que interceptou o lado. Usando a mesma t´ecnica do algoritmo do “Ponto-M´edio”,
temos:
x
i+1
= x
i
+
1
m
(4.1)
onde m =
(ymax−ymin)
(xmax−xmin)
´e a inclina¸c˜ ao da aresta.
No algoritmo do ponto-m´edio para convers˜ao matricial de segmentos de reta, evitamos usar aritm´etica
fracion´aria calculando uma vari´avel de decis˜ao inteira, e verificando o seu sinal para escolher o pixel mais
pr´oximo `a reta “verdadeira”. Aqui, tamb´em gostar´ıamos de usar aritm´etica inteira para calcular o pixel
interior mais pr´oximo da verdadeira intersec¸c˜ao. Consideremos arestas com inclina¸c˜ao maior que 1 que
46
s˜ao arestas a esquerda. Arestas a direita e outras inclina¸c˜oes s˜ao tratadas com argumentos similares aos
que ser˜ao vistos para esse caso, e arestas verticais s˜ao casos especiais. (Arestas horizontais s˜ao tratadas
implicitamente pelas regras de tra¸cado de blocos, como vimos anteriormente.)
Precisamos tra¸car um pixel no extremo (xmin, ymin). A medida que y ´e incrementado, a coordenada
x do ponto na linha ideal ser´a aumentada de
1
m
. Este aumento resultar´a num valor de x com uma parte
inteira e uma parte fracion´aria, a qual pode ser expressa como uma fra¸c˜ao com denominador igual a
ymax −ymin. Com a repeti¸c˜ao do processo, a parte fracion´aria vai se tornar maior do que 1 (overflow),
e a parte inteira ter´a de ser incrementada. Por exemplo, se a inclina¸c˜ao ´e
5
2
, e xmin ´e 3, a seq¨ uˆencia de
valores de x ser´a
3, 3
2
5
, 3
4
5
, 3
6
5
= 4
1
5
e assim por diante. Quando a parte fracion´aria de x ´e zero, podemos tra¸car diretamente o pixel (x, y)
que est´a sobre a linha, mas quando ela ´e diferente de zero precisamos arredondar (para cima!) de forma a
tomar um pixel que esteja estritamente dentro da linha. Quando a parte fracion´aria de x torna-se maior
do que 1, incrementamos x, subtraimos 1 da parte fracion´aria, e movemos um pixel a direita. Se com o
incremento obtemos um valor inteiro para x, tra¸camos o pixel correspondente e decrementamos a fra¸c˜ao
de 1, de forma a mantˆe-la menor do que 1.
Podemos evitar o uso de aritm´etica fracion´aria mantendo apenas o numerador da fra¸c˜ao, e observando
que a parte fracion´aria ser´a maior do que 1 quando o numerador tornar-se maior que o denominador.
O algoritmo abaixo implementa esta t´ecnica, usando a vari´avel incremento para armazenar as sucessivas
adi¸c˜oes feitas no numerador at´e que ocorra um overflow (ultrapasse o denominador), quando o numerador
´e decrementado pelo denominador, e x ´e incrementado.
void LeftEdgeScan (int xmin, int ymin, int xmax, int ymax, int valor){
int x, y;
x = xmin;
y = ymin;
numerador = xmax - xmin;
denominador = ymax - ymin;
incremento = denominador;
for (y = ymin; y <= ymax; y++){
PintaPixel (x,y,valor);
incremento+=numerador;
if (incremento > denominador){
/* Overflow, Arredonda o pr´oximo pixel e decrementa o incremento */
x++;
incremento-=denominador;
}/* end if */
}/* end for */
}/* end LeftEdgeScan */
Algoritmo 4.2: Convers˜ao matricial da aresta esquerda de um pol´ıgono.
Vamos desenvolver um algoritmo de convers˜ao matricial de linhas que se aproveita da coerˆencia
de arestas e, para cada linha de varredura, armazena o conjunto de arestas por ela interceptadas numa
estrutura de dados denominada AET - active-edge table (tabela das arestas ativas). As arestas na AET s˜ao
ordenadas de acordo com as coordenadas x dos pontos de intersec¸c˜ao, de forma que possamos preencher
os blocos definidos por pares de valores de intersec¸c˜ao (devidamente arredondados) - que definem as
extremidades dos blocos.
A medida que movemos para a pr´oxima linha de varredura, y+1, a AET ´e atualizada. Primeiramente,
arestas que est˜ao na AET mas n˜ao s˜ao interceptadas por esta pr´oxima linha de varredura (ou seja, aquelas
para as quais ymax = y) s˜ao removidas. Depois, quaisquer novas arestas interceptadas por essa linha (ou
seja, aquelas para as quais ymin = y + 1) s˜ao incluidas na AET. Finalmente, para as arestas que ainda
est˜ao na AET, os novos valores de x das intersec¸c˜oes s˜ao calculados, usando o algoritmo incremental para
convers˜ao matricial de arestas j´a visto.
Para que a inclus˜ao de novas arestas na AET seja eficiente, criamos uma tabela de arestas global
47
(ET - Edge Table), contendo todas as arestas do pol´ıgono em ordem crescente de sua menor coordenada
y (ymin). A ET ´e uma tabela hashing aberta (v. Aho, Data Structures and Algorithms), com p
posi¸c˜oes (buckets, ou ”cestos”), uma para cada linha de varredura. A cada ”cesto”y ´e associada uma lista
encadeada com as arestas com ymin = y. As arestas na lista est˜ao ordenadas em ordem crescente da
coordenada x de sua extremidade inferior (xmin). Cada n´o da lista armazena ainda a coordenada ymax
da aresta, e o incremento em x utilizado para passar para a pr´oxima linha de varredura,
1
m
. A Figura
4.5 mostra como estariam ordenadas as seis arestas do pol´ıgono da Figura 4.1, e a Figura 4.6 mostra a
AET para as linhas de varredura 9 e 10 daquele pol´ıgono. Uma vez constru´ıda a ET, os passos para o
algoritmo de convers˜ao de arestas s˜ao dados no Algoritmo 4.3.
Este algoritmo explora coerˆencia de arestas para calcular o valor x das intersec¸c˜oes e coerˆencia
de linhas de varredura (juntamente com ordena¸c˜ao) para calcular blocos. Uma vez que a ordena¸c˜ao
trabalha com um n´ umero pequeno de arestas, e a reordena¸c˜ao do passo 3.6 ´e feita numa lista quase que
totalmente ordenada, pode-se usar um m´etodo de ordena¸c˜ao por inser¸c˜ao, ou o m´etodo bubblesort, que ´e
O(N).
Figura 4.5: ET para o pol´ıgono de Figura 4.1.
Para efeito de convers˜ao matricial, triˆangulos e trapez´oides podem ser tratados como casos especiais
de pol´ıgonos, uma vez que possuem apenas dois lados para cada linha de varredura (lembre-se que lados
horizontais n˜ao s˜ao convertidos explicitamente). Na verdade, como um pol´ıgono arbitr´ario sempre pode
ser decomposto numa malha de triˆangulos que compartilham v´ertices e arestas, poder´ıamos converter
um pol´ıgono decompondo-o numa malha de triˆangulos, convertendo os triˆangulos a seguir. Este ´e um
problema cl´assico da geometria computacional, o da triangula¸c˜ao. O processo de decomposi¸c˜ao ´e simples
para pol´ıgonos convexos.
Figura 4.6: AET para o pol´ıgono da Figura 4.1 a) linha de varredura 9 b) linha de varredura 10. Note
que a coordenada x da aresta DE em (b) foi arredondada para cima..
Note que o c´alculo dos blocos ´e cumulativo. Ou seja, quando a itera¸c˜ao corrente do algoritmo de
convers˜ao de arestas gera um ou mais pixels na mesma linha de varredura que os pixels gerados an-
teriormente, os blocos devem ser atualizados se um novo pixel tem um valor de x m´aximo ou m´ınimo
mais extremo. Tratar casos de c´alculo de blocos para arestas que se cruzam, ou para slivers requer um
tratamento especial. Podemos calcular os blocos num passo, e preechˆe-los num segundo passo, ou calcu-
lar um bloco e preenchˆe-lo num ´ unico passo. Outra vantagem de se utilizar blocos ´e que o processo de
48
clipping pode ser feito simultaneamente ao c´alculo dos blocos: os blocos podem ser recortados (clipped)
individualmente nas coordenadas esquerda e direita do retˆangulo de corte.
1. Obt´em a menor coordenada y armazenada na ET; ou seja, o valor de y do primeiro “cesto”
n˜ao vazio.
2. Inicializa a AET como vazia.
3. Repita at´e que a ET e a AET estejam vazias:
3.1. Transfere do cesto y na ET para a AET as arestas cujo ymin = y (lados que est˜ao
come¸cando a serem varridos), mantendo a AET ordenada em x,
3.2. Retira os lados que possuem y = ymax (lados n˜ao mais envolvidos nesta linha de
varredura,
3.3. Desenhe os pixels do bloco na linha de varredura y usando pares de coordenadas x da
AET.
3.4. Incremente y de 1 (coordenada da pr´oxima linha de varredura).
3.5. Para cada aresta n˜ao vertical que permanece na AET, atualiza x para o novo y.
3.6. Como o passo anterior pode ter desordenado a AET, reordena a AET.
Algoritmo 4.3: Algoritmo de convers˜ao de arestas baseado na coerˆencia de arestas.
49
Cap´ıtulo 5
Transforma¸c˜oes 2D e 3D
Transforma¸c˜oes Geom´etricas (TG) s˜ao a base de in´ umeras aplica¸c˜oes gr´aficas, podendo estar desde em
simples programas para representar layouts de circuitos eletrˆonicos; em programas de planejamento de
cidades, onde pode-se usar movimentos de transla¸c˜ao para colocar os s´ımbolos que definem edif´ıcios e
´arvores em seus devidos lugares, rota¸c˜oes para orientar corretamente esses s´ımbolos, e altera¸c˜ao de escala
para adequar o tamanho desses s´ımbolos; ou mesmo em sistemas de software sofisticados que permitem
a constru¸ c˜ao de cenas realistas.
5.1 Transforma¸c˜oes em 2D
Primeiramente estudaremos as transforma¸c˜oes Geom´etricas em duas dimens˜oes. Pode-se efetuar a Transla¸c˜ao
de pontos no plano (x, y) adicionando-se quantidades inteiras as suas coordenadas. Assim, cada ponto
P(x, y) pode ser movido por d
x
unidades em rela¸c˜ao ao eixo x, e por d
y
unidades em rela¸c˜ao ao eixo y.
Logo, o ponto P

(x

, y

), pode ser escrito como:
x

= x +d
x
y

= y +d
y
(5.1)
E se definimos os vetores colunas:
P =
_
x
y
_
P

=
_
x

y

_
T =
_
d
x
d
y
_
(5.2)
ent˜ao a transla¸c˜ao, expressa pela Equa¸c˜oes , pode ser definida como:
P

= P +T (5.3)
Podemos transladar um objeto, fazendo-o a todos os seus pontos (o que n˜ao ´e muito eficiente). Para
transladar uma linha podemos fazˆe-lo apenas para seus pontos limites e sobre estes pontos redesenhar a
linha. Isso tamb´em ´e verdade para altera¸c˜oes de Escala e Rota¸c˜ao. Na Figura 5.1 ´e mostrado o efeito de
uma transla¸c˜ao de um objeto por (3, −4).
Pode-se efetuar Mudan¸cas de Escala (ou apenas Escala) de um ponto pelo eixo x (sx), ou pelo eixo y
(sy), atrav´es das multiplica¸c˜oes:
x

= s
x
.x
y

= s
y
.y (5.4)
Ou em forma matricial:
P

= S · P ⇒
_
x

y

_
=
_
s
x
0
0 s
y
_
·
_
x
y
_
(5.5)
50
Figura 5.1: Transla¸c˜ao de uma casa.
Figura 5.2: Mudan¸ca de escala de uma casa. Como a escala ´e n˜ao uniforme, sua propor¸c˜ao ´e alterada.
Na figura 5.2 a casa sofre uma escala de
1
2
em x e de
1
4
em y.
Observe que a escala ´e feita em rela¸c˜ao a origem. Assim a casa fica menor e mais pr´oxima da origem.
Tamb´em as propor¸c˜oes da casa s˜ao alteradas, isto ´e, uma escala em que s
x
´e diferente de s
y
. Por´em ao
utilizar-se escalas uniformes (s
x
= s
y
) as propor¸c˜oes n˜ao s˜ao afetadas.
A Rota¸c˜ao de pontos atrav´es de um ˆangulo θ qualquer tamb´em ´e feita a partir da origem. A rota¸c˜ao
´e definida matematicamente por:
x

= x. cos(θ) −y. sin(θ)
y

= x. sin(θ) +y. cos(θ) (5.6)
e matricialmente:
P

= R · P ⇒
_
x

y

_
=
_
cos θ −sin θ
sin θ cos θ
_
·
_
x
y
_
(5.7)
Escala e Rota¸c˜ao a partir de qualquer ponto ser˜ao tratadas posteriormente.
Os ˆangulos positivos s˜ao definidos quando a rota¸c˜ao ´e feita no sentido contr´ario aos do ponteiro do
rel´ogio, e ˆangulos negativos quando a rota¸c˜ao ´e feita no sentido dos ponteiros do rel´ogio. Lembremos que
sin(−θ) = −sin(θ) e que cos(−θ) = cos(θ).
Observando a Figura 5.4 vemos que a rota¸c˜ao por θ transforma P(x, y) em P

(x

, y

). Como a rota¸c˜ao
´e em rela¸ c˜ao a origem, as distˆancias de P e P

a origem, r na figura, s˜ao iguais. Assim, temos que:
x = r. cos(φ)
y = r. sin(φ) (5.8)
x

= r · cos(θ +φ) = r. cos(φ). cos(θ) −r. sin(φ) sin(θ)
y

= r · sin(θ +φ) = r cos(φ) sin(θ) +r. sin(φ). cos(θ) (5.9)
Podemos obter a Equa¸c˜ao 5.6, substituindo a Equa¸c˜ao 5.8 na Equa¸c˜ao 5.9.
51
Figura 5.3: Esta figura mostra a rota¸c˜ ao da casa por 45

. Da mesma forma que para a escala, a rota¸c˜ao
tamb´em ´e feita em rela¸c˜ao a origem.
Figura 5.4: Derivando a equa¸c˜ao de rota¸c˜ao.
5.2 Coordenadas Homogˆeneas e Matrizes de Transforma¸c˜ao
Para a Transla¸c˜ao, Escala e Rota¸c˜ao, as matrizes de transforma¸c˜ao s˜ao respectivamente:
P

= T +P (5.10)
P

= S · P (5.11)
P

= R · P (5.12)
Infelizmente, a transla¸c˜ao ´e tratada de forma diferente (como uma soma) das outras - Rota¸c˜ao e
Escala - que s˜ao tratadas atrav´es de multiplica¸c˜oes. Para que possamos combinar facilmente essas trans-
forma¸c˜oes, devemos poder tratar do mesmo modo todas as 3 transforma¸c˜oes de uma forma consistente.
Se os pontos s˜ao expressos em Coordenadas Homogˆeneas, todas as 3 transforma¸c˜oes podem ser tra-
tadas como multiplica¸c˜oes.
Em coordenadas homogˆeneas, adicionamos uma terceira coordenada ao ponto. Logo, em vez de
um ponto ser representado por um par de valores (x, y), ele ´e representado por uma tripla (x, y, W).
Dizemos que 2 conjuntos de coordenadas homogˆeneas (x, y, W) e (x

, y

, W

) representam o mesmo ponto
se e somente se um ´e m´ ultiplo do outro. Assim, (2, 3, 6) e (4, 6, 12) ´e o mesmo ponto representado por
diferentes triplas. Isto ´e, cada ponto tem muitas diferentes representa¸c˜oes homogˆeneas. Tamb´em, pelo
menos uma das coordenadas homogˆeneas precisa ser diferente de zero, assim (0, 0, 0) n˜ao ´e permitido.
Se W ´e a coordenada n˜ao zero, podemos dividir (x, y, W) por ela, obtendo o mesmo ponto (
x
W
,
y
W
, 1).
Os n´ umeros
x
W
e
y
W
s˜ao chamados de Coordenadas Cartesianas do ponto homogˆeneo. Usualmente, triplas
representam pontos em um espa¸co 3D, mas agora est˜ao sendo usadas para representar pontos em 2D.
Observemos que, se tomarmos todas as triplas que representam o mesmo ponto, isto ´e, todas as triplas
da forma (tx, ty, tW) com t diferente de 0, obtemos uma linha no espa¸co 3D. Se homogeneizamos o ponto
(dividimos por W), obtemos um ponto da forma (x, y, 1). Logo, os pontos homogeneizados formam o
plano definido pela equa¸c˜ao W = 1 no espa¸co (x, y, W). A Figura 5.5, mostra esse relacionamento. Como
agora os pontos s˜ao vetores de 3 elementos, as matrizes de transforma¸c˜oes que multiplicam um ponto por
outro tamb´em precisam ser de 3x3. A equa¸c˜ao de Transla¸c˜ao 5.1 para coordenadas homogˆeneas fica:
52
Figura 5.5: O espa¸co de Coordenadas Homogˆeneas XY W, com o plano W = 1 e o ponto P(X, Y, W)
projetado sobre o plano W = 1.
_
_
x

y

1
_
_
=
_
_
1 0 d
x
0 1 d
y
0 0 1
_
_
·
_
_
x
y
1
_
_
(5.13)
Assim, a equa¸c˜ao 5.13 pode ser representada como:
P

= T(d
x
, d
y
) · P (5.14)
onde:
T(d
x
, d
y
) =
_
_
1 0 d
x
0 1 d
y
0 0 1
_
_
(5.15)
O que acontece se um ponto P ´e transladado por T(d
x1
, d
y1
) para P’ e ent˜ao transladado por
T(d
x2
, d
y2
) para P

?
Intuitivamente esperamos que essas transla¸c˜oes sejam equivalentes a T(d
x1
+d
x2
, d
y1
+d
y2
). Ou seja,
se:
P

= T(d
x1
, d
y1
) · P (5.16)
P

= T(d
x2
, d
y2
) · P

(5.17)
(5.18)
Substituindo 5.17 em 5.18, temos:
P

= T(d
x2
, d
y2
) · [T(d
x1
, d
y1
) · P] = [T(d
x2
, d
y2
) · T(d
x1
, d
y1
)] · P (5.19)
e a matriz produto das matrizes T(d
x2
, d
y2
) · T(d
x1
, d
y1
), ´e:
_
_
1 0 d
x2
0 1 d
y2
0 0 1
_
_
·
_
_
1 0 d
x1
0 1 d
y1
0 0 1
_
_
=
_
_
1 0 d
x1
+d
x2
0 1 d
y1
+d
y2
0 0 1
_
_
(5.20)
e vemos que a Transla¸c˜ao ´e aditiva.
Essa transforma¸c˜ao expressa pelas duas transforma¸c˜oes, ´e chamada de Transforma¸c˜ao de Composi¸c˜ao.
Podemos mostrar similarmente que podemos realizar Composi¸c˜oes tamb´em com a Escala e a Rota¸c˜ao.
Assim, as equa¸c˜oes de Escala 5.4, s˜ao representadas matricialmente:
53
_
_
x

y

1
_
_
=
_
_
s
x
0 0
0 s
y
0
0 0 1
_
_
·
_
_
x
y
1
_
_
(5.21)
e definindo,
S(s
x
, s
y
) =
_
_
s
x
0 0
0 s
y
0
0 0 1
_
_
(5.22)
temos
P

= S(s
x1
, s
y1
) · P (5.23)
P

= S(s
x2
, s
y2
) · P

(5.24)
e substituindo:
P

= S(s
x2
, s
y2
) · [S(s
x1
, s
y1
) · P] = [S(s
x2
, s
y2
).S(s
x1
, s
y1
)] · P (5.25)
A matriz produto S(s
x2
, s
y2
) · S(s
x1
, s
y1
) ´e:
_
_
s
x2
0 0
0 s
y2
0
0 0 1
_
_
·
_
_
s
x1
0 0
0 s
y1
0
0 0 1
_
_
=
_
_
s
x1
.s
x2
0 0
0 s
y1
.s
y2
0
0 0 1
_
_
(5.26)
e temos que a Escala ´e multiplicativa.
Finalmente, verifiquemos como ficam as equa¸c˜oes de rota¸c˜ao:
_
_
x

y

1
_
_
=
_
_
cos θ −sin θ 0
sin θ cos θ 0
0 0 1
_
_
·
_
_
x
y
1
_
_
(5.27)
Definindo:
R(θ) =
_
_
cos θ −sin θ 0
sin θ cos θ 0
0 0 1
_
_
(5.28)
temos que:
P

= R(θ) · P (5.29)
Como exerc´ıcio, mostre que duas rota¸c˜oes s˜ao aditivas!
Figura 5.6: Um cubo unit´ario ´e rodados 45 graus, posteriormente escalado n˜ao uniformemente. Obtem-se
dessa forma uma transforma¸c˜ao afim.
54
Uma sequˆencia arbitr´aria de rota¸c˜oes, transla¸c˜oes e escalas, s˜ao chamadas de transforma¸c˜oes afins.
As Transforma¸c˜oes Afins preservam paralelismo de linhas, mas n˜ao comprimentos e ˆangulos. A figura
5.6, mostra o resultado de se aplicar uma rota¸c˜ao de 45

e depois uma escala n˜ao uniforme a um cubo
unit´ario.
Uma matriz de transforma¸c˜ao da forma:
M =
_
_
r
11
r
12
t
x
r
21
r
22
t
y
0 0 1
_
_
(5.30)
onde a submatriz 2x2 do canto superior esquerdo ´e ortogonal, preserva ˆangulos e comprimentos. Estas
transforma¸c˜oes s˜ao chamadas de Corpo R´ıgido, porque o corpo do objeto n˜ao ´e distorcido de forma
alguma.
5.3 Transforma¸c˜oes 2D Adicionais: Espelhamento e Shearing
Duas transforma¸c˜oes adicionais bastante usadas em CG s˜ao o Espelhamento (Reflex˜ao) e Distor¸c˜ao
(Shearing), discutidas a seguir.
5.3.1 Espelhamento (Mirror)
A transforma¸c˜ao de reflex˜ao, ou espelhamento, aplicada a um objeto, produz um objeto que ´e o espelho do
original. No caso de uma reflex˜ao 2D, o espelho ´e gerado relativamente a um eixo de reflex˜ao rotacionando
o objeto de 180
o
em torno do eixo de reflex˜ao. Por exemplo, pode-se aplicar uma reflex˜ao em torno da
linha y = 0 (o eixo x) usando a seguinte matriz de transforma¸c˜ao:
Mirror
v
=
_
_
1 0 0
0 −1 0
0 0 1
_
_
(5.31)
Esta transforma¸c˜ao mant´em as coordenadas x do objeto inalteradas, mas “inverte” os valores das
coordenadas y, alterando a orienta¸c˜ao espacial do objeto.
Analogamente, poder´ıamos definir uma reflex˜ao em torno do eixo y, que “inverteria” as coordenadas
x do objeto.
Figura 5.7: Reflex˜ao de um objeto em torno do eixo x.
Podemos tamb´em definir uma reflex˜ao em torno de um eixo perpendicular ao plano xy e passando
(por exemplo) pela origem do sistema de coordenadas, “invertendo” nesse caso ambas as coordenadas x
e y. A matriz de transforma¸c˜ao ´e dada por:
Mirror
xy
=
_
_
−1 0 0
0 −1 0
0 0 1
_
_
(5.32)
55
A opera¸c˜ao ´e ilustrada na figura 5.8. Observe que a matriz de reflex˜ao acima ´e idˆentica `a matriz de
rota¸ c˜ao R(θ) com θ = 180
o
, ou seja, estamos t˜ao somente rotacionando o objeto de 180
o
em torno da
origem. A opera¸c˜ao pode ser generalizada para adotar qualquer ponto de reflex˜ao localizado no plano
xy, e o efeito ´e o mesmo que aplicar uma rota¸c˜ao de 180
o
em torno do ponto pivˆo da reflex˜ao.
Figura 5.8: Reflex˜ao de um objeto em torno de um eixo perpendicular ao plano xy, passando pela origem.
Podemos tamb´em adotar um eixo de reflex˜ao arbitr´ario. A matriz de reflex˜ao pode ser derivada pela
concatena¸c˜ao de uma seq¨ uˆencia de matrizes de reflex˜ao e de rota¸c˜ao. Por exemplo, se a reflex˜ao for em
torno da linha diagonal definida por y = x, a matriz de reflex˜ao pode ser derivada da combina¸c˜ao da
seguinte seq¨ uˆencia de transforma¸c˜oes:
1. rota¸c˜ao de 45
o
na dire¸c˜ao hor´aria para fazer a linha y = x coincidir com o eixo x.
2. reflex˜ao em torno do eixo x.
3. rota¸c˜ao de 45
o
na dire¸c˜ao anti-hor´aria para retomar a orienta¸c˜ao original da linha y = x.
5.3.2 Shearing
Shearing (cisalhamento) ´e uma transforma¸c˜ao que distorce o formato de um objeto - em geral, ´e aplicado
um deslocamento aos valores das coordenadas x ou das coordenadas y do objeto. Uma distor¸c˜ao na
dire¸c˜ao x ´e produzida com a seguinte matriz de transforma¸c˜ao:
Shear
x
=
_
_
1 sh
x
0
0 1 0
0 0 1
_
_
(5.33)
As coordenadas do objeto s˜ao transformadas da seguinte maneira:
x

= x +sh
x
y
y

= y (5.34)
Qualquer n´ umero real pode ser usado como parˆametro. O resultado ´e que as coordenadas (x, y) s˜ao
deslocadas horizontalmente segundo um valor proporcional `a sua distˆancia em do eixo x. Por exem-
plo, se sh
x
´e 2, um quadrado ser´a transformado em um paralelogramo. Valores negativos deslocam as
coordenadas para a esquerda.
Pode-se gerar distor¸c˜oes na dire¸c˜ao relativamente a outros eixos de referˆencia y = y
ref
com a matriz:
Shear
yref
=
_
_
1 sh
x
−sh
x
.y
ref
0 1 0
0 0 1
_
_
(5.35)
que produz as seguintes transforma¸c˜oes sobre as coordenadas:
56
x

= x +sh
x
(y −y
ref
)
y

= y (5.36)
Analogamente, pode-se aplicar uma distor¸c˜ao na dire¸c˜ao y, relativa a uma linha x = xref, usando
Shear
xref
=
_
_
1 0 0
sh
y
1 −sh
y
.x
ref
0 0 1
_
_
(5.37)
que gera as seguintes transforma¸c˜oes nas posi¸c˜oes das coordenadas:
x

= x
y

= y +sh
y
.(x −x
ref
). (5.38)
Esta transforma¸c˜ao desloca as coordenadas de uma posi¸c˜ao verticalmente segundo um fator propor-
cional `a sua distˆancia da linha de referˆencia x = x
ref
. Qualquer opera¸c˜ao de distor¸c˜ao pode ser descrita
como uma composi¸c˜ao de transforma¸c˜oes envolvendo uma seq¨ uˆencia de matrizes de rota¸c˜ao e escala.
5.4 Transforma¸c˜oes entre sistemas de coordenadas
J´a vimos que aplica¸c˜oes gr´aficas freq¨ uentemente requerem a transforma¸c˜ao de descri¸c˜oes de objetos de um
sistema de coordenadas para outro. Muitas vezes, o objeto ´e descrito em um sistema de coordenadas n˜ao
Cartesiano (como coordenadas polares ou el´ıpticas), e precisa ser convertido para o sistema de coordenadas
Cartesiano do dispositivo. Em aplica¸c˜oes de design e modelagem, objetos individuais s˜ao definidos em
seu pr´oprio sistema de coordenadas, e as coordenadas locais devem ser transformadas para posicionar
os objetos no sistema de coordenadas global da cena. Neste texto vamos considerar especificamente
transforma¸c˜oes entre dois sistemas de coordenadas Cartesianos.
Para transformar descri¸c˜oes de um objeto dadas em um sistema de coordenadas xy para um sistema
x

y

com origens em (0, 0) e (x
0
, y
0
), com um ˆangulo de orienta¸c˜ao θ entre os eixos x e x

, precisamos
determinar a transforma¸c˜ao que superp˜oe os eixos xy aos eixos x

y

. Isso pode ser feito em 2 passos:
1. transladar o sistema x

y

de modo que sua origem coincida com a origem do sistema xy: T(−x
0
, −y
0
)
2. Rotacionar o eixo x

de forma que ele coincida com o eixo x: R(−θ)
Concatenando as duas matrizes de transforma¸c˜ao obt´em-se a matriz de composi¸c˜ao que descreve a
transforma¸c˜ao necess´aria:
M
xy,x

y
= R(−θ) · T(−x
0
, −y
0
) (5.39)
Um m´etodo alternativo para estabelecer a orienta¸c˜ao do segundo sistema de coordenadas consiste em
especificar um vetor V na dire¸c˜ao positiva do eixo y

, passando pela origem do sistema xy. O vetor V ´e
especificado como um ponto no sistema de referˆencia xy em rela¸c˜ao `a origem do sistema xy. Um vetor
unit´ario que d´a a dire¸c˜ao de y

pode ent˜ao ser obtido:
v =
V
|V |
= (v
x
, v
y
) (5.40)
E obtemos o vetor unit´ario u ao longo do eixo x

rotacionando v de 90
o
no sentido hor´ario:
u = (v
y
, −v
x
) = (u
x
, u
y
) (5.41)
J´a vimos que os elementos de uma matriz de rota¸c˜ao podem ser expressos como elementos de um
conjunto de vetores ortogonais. Portanto, a matriz de rota¸c˜ao a ser usada para rotacionar o sistema x

y

para que este coincida com o sistema xy ´e dada por:
57
R =
_
_
u
x
u
y
0
v
x
v
y
0
0 0 1
_
_
(5.42)
Por exemplo, se escolhermos que a nova orienta¸c˜ao deve ser dada pelos vetores U = (0, 1) (eixo y
positivo no sistema atual) e V = (−1, 0) (eixo x negativo no sistema atual), a matriz de rota¸c˜ao ´e dada
por:
R =
_
_
0 1 0
−1 0 0
0 0 1
_
_
(5.43)
Essa matriz ´e equivalente `a matriz de rota¸c˜ao para θ = 90
o
5.5 Composi¸c˜ao de Transforma¸c˜oes
Usaremos composi¸c˜ao como uma combina¸c˜ao de matrizes de transforma¸c˜ao R, S e T. O prop´osito de
compor-se transforma¸c˜oes, ´e o ganho de eficiˆencia que se obt´em ao aplicar-se uma transforma¸c˜ao composta
a um ponto em vez de aplicar-lhe uma s´erie de transforma¸c˜oes, uma ap´os a outra.
Considerando a rota¸c˜ao de um objeto em torno de um ponto arbitr´ario P1. Mas sabemos apenas
rotacionar um ponto em rela¸c˜ao a origem. Assim, podemos dividir este problema de rota¸c˜ao em 3
problemas simples, ou seja: para rotacionar em rela¸c˜ao a P1, pode-se usar a seguinte sequˆencia de
transforma¸c˜oes fundamentais:
1. Efetuar uma transla¸c˜ao, levando P1 `a origem.
2. Efetuar a Rota¸c˜ao desejada.
3. Efetuar uma Transla¸c˜ao oposta `a realizada em (1), levando P1 a posi¸c˜ao anterior.
Figura 5.9: Rota¸c˜ao em rela¸c˜ao ao Ponto P1, por um ˆangulo θ.
Esta sequˆencia ´e ilustrada na figura 5.9, onde a casa ´e rotacionada em rela¸c˜ao a P
1
(x
1
, y
1
). A primeira
transla¸ c˜ao ´e por (−x
1
, −y
1
), e a ´ ultima transla¸c˜ao (oposta a primeira) ´e por (x
1
, y
1
). A transforma¸c˜ao
em sequˆencia ´e:
T(x
1
, y
1
) · R(θ) · T(x
1
, y
1
) =
_
_
1 0 x
1
0 1 y
1
0 0 1
_
_
·
_
_
cos θ −sin θ 0
sin θ cos θ 0
0 0 1
_
_
·
_
_
1 0 −x
1
0 1 −y
1
0 0 1
_
_
=
_
_
cos θ −sin θ x
1
(1 −cos θ) +y
1
. sin θ
sin θ cos θ y
1
(1 −cos θ) +x
1
. sin θ
0 0 1
_
_
(5.44)
Esse procedimento pode ser usado de forma similar para se efetuar a Escala de um objeto em rela¸c˜ao
a um ponto arbitr´ario P
1
. Primeiramente o ponto P
1
´e transladado para a origem, ent˜ao ´e feita a escala
desejada, e ent˜ao o ponto P
1
´e transladado de volta. Dessa forma, a transforma¸c˜ao em seq¨ uˆencia ´e:
58
T(x
1
, y
1
) · S(s
x
, s
y
) · T(x
1
, y
1
) =
_
_
1 0 x
1
0 1 y
1
0 0 1
_
_
·
_
_
s
x
0 0
0 s
y
0
0 0 1
_
_
·
_
_
1 0 −x
1
0 1 −y
1
0 0 1
_
_
=
_
_
s
x
0 x
1
(1 −s
x
)
0 s
y
y
1
(1 −s
y
)
0 0 1
_
_
(5.45)
Suponhamos que desejamos escalar, rotacionar e posicionar a casa mostrada na figura 5.10, com o
ponto P1(x
1
, y
1
) como o centro da rota¸c˜ao e da escala. A seq¨ uˆencia de transforma¸c˜oes fica a seguinte:
1. Transladar P1(x
1
, y
1
) para a origem;
2. Efetuar a escala e a rota¸c˜ao desejadas;
3. Efetuar a transla¸c˜ao da origem para a nova posi¸c˜ao P2(x
2
, y
2
), onde a casa deve ser posicionada.
T(x
2
, y
2
) · R(θ) · S(s
x
, s
y
) · T(−x
1
, −y
1
) ´e a matriz da Transforma¸c˜ao composta.
Figura 5.10: Escala e rota¸c˜ao de uma casa em rela¸c˜ao ao ponto P
1
.
Se M1 e M2 representam duas transforma¸c˜oes fundamentais (transla¸c˜ao, rota¸c˜ao ou escala), em que
casos M1 · M2 = M2 · M1? Isto ´e, quando suas matrizes de transforma¸c˜ao comutam? Sabemos que
geralmente a multiplica¸c˜ao de matrizes n˜ao ´e comutativa. Entretanto ´e f´acil mostrar que nos seguintes
casos especiais esta comutatividade existe (Tabela 5.1).
m1 M2
Transla¸c˜ao Transla¸c˜ao
Escala Escala
Rota¸c˜ao Rota¸c˜ao
Escala(s, s) Rota¸c˜ao
Tabela 5.1: Transforma¸c˜oes comutativas.
Nestes casos n˜ao precisamos estar atentos a ordem de constru¸c˜ao da matriz de transforma¸c˜ao.
5.6 Transforma¸c˜ao Janela - Porta de Vis˜ao (“Window-to-Viewport”)
Alguns sistemas gr´aficos permitem ao programador especificar primitivas de sa´ıda em um sistema de
coordenadas em ponto-flutuante, chamado de sistema de coordenadas do Mundo Real, usando a unidade
de medida que melhor se adeque ao seu programa de aplica¸c˜ao (angstrons, microns, metros, anos-luz,
etc.). O termo Mundo (World) ´e usado para representar o ambiente interativamente criado ou apresentado
para o usu´ario. Como as primitivas s˜ao especificadas em coordenadas do mundo, o pacote gr´afico precisa
mapear as coordenadas do mundo em coordenadas de tela.
Uma forma de se efetuar esta transforma¸c˜ao ´e especificando uma regi˜ao retangular em coordenadas
do mundo, chamada de janela de coordenadas do mundo, e uma regi˜ao retangular correspondente em
coordenadas de tela, chamada de Porta de Vis˜ao (Viewport), em que a janela em coordenadas do mundo
real ´e mapeada. A transforma¸c˜ao que mapeia a janela na porta de vis˜ao ´e aplicada a todas as primitivas
de sa´ıda em coordenadas do mundo, mapeando-as na tela. Este procedimento ´e ilustrado na Figura 5.11.
Como pode ser visto pela figura, se a janela e a porta de vis˜ao n˜ao possuem a mesma raz˜ao largura-altura,
uma escala n˜ao uniforme ´e realizada. Se o programa de aplica¸c˜ao altera a janela ou a porta de vis˜ao,
59
Figura 5.11: Janela em Coordenadas do mundo e porta de vis˜ao em coordenadas de tela.
Figura 5.12: Duas portas de vis˜ao associadas a mesma janela.
ent˜ao as novas primitivas de sa´ıda desenhadas sobre a tela precisam ser tamb´em atualizadas. Outro ponto
´e que pode-se ter m´ ultiplas portas de vis˜ao de uma mesma janela, o que ´e mostrado na Figura 5.12.
Dada uma janela e uma porta de vis˜ao, qual ´e a matriz de transforma¸c˜ao que mapeia a janela em
coordenadas do mundo real, na porta de vis˜ao em coordenadas de tela? Esta matriz pode ser desenvolvida
como uma transforma¸c˜ao composta por 3 passos, como ´e sugerido na Figura 5.11. A janela especificada
pelo seu canto inferior esquerdo e canto superior direito, ´e primeiramente transladada para a origem do
mundo de coordenadas. A seguir o tamanho da janela ´e escalonado para ser igual ao tamanho da porta
de vis˜ao. Finalmente, a transla¸c˜ao ´e usada para posicionar a porta de vis˜ao. A matriz global M
jp
´e:
M
jp
= T(u
min
, v
min
) · S(
u
max
−u
min
x
max
−x
min
,
v
max
−v
min
y
max
−y
min
) · T(−x
min
, −y
min
) =
_
_
1 0 u
min
0 1 v
min
0 0 1
_
_
·
_
_
u
max
−u
min
x
max
−x
min
0 0
0
v
max
−v
min
y
max
−y
min
0
0 0 1
_
_
·
_
_
1 0 −x
min
0 1 −y
min
0 0 1
_
_
=
_
_
u
max
−u
min
x
max
−x
min
0 −x
min
.
u
max
−u
min
x
max
−x
min
+u
min
0
v
max
−v
min
y
max
−y
min
−y
min
.
v
max
−v
min
y
max
−y
min
+v
min
0 0 1
_
_
(5.46)
Multiplicando P = M
jp
·
_
_
x
y
1
_
_
, temos:
P =
_
_
(x −x
min
).
u
max
−u
min
x
max
−x
min
+u
min
(y −y
min
).
v
max
−v
min
y
max
−y
min
+v
min
1
_
_
· (5.47)
Muitos pacotes gr´aficos combinam a transforma¸c˜ao janela - porta de vis˜ao com recorte (clipping) de
primitivas gr´aficas de sa´ıda. A figura 10.14 ilustra esta t´ecnica de recorte.
60
Figura 5.13: Os passos da transforma¸c˜ao janela - porta de vis˜ao.
Figura 5.14: Primitivas gr´aficas de sa´ıda em coordenadas do mundo s˜ao recortadas pela janela. O seu
interior ´e apresentado na tela (viewport).
5.7 Eficiˆencia
Uma composi¸c˜ao gen´erica de transforma¸c˜oes R, S e T, produz uma matriz da forma:
M =
_
_
r
11
r
12
t
x
r
21
r
22
t
y
0 0 1
_
_
(5.48)
A submatriz 2x2 superior esquerda, ´e uma composi¸c˜ao das matrizes de rota¸c˜ao e escala, enquanto t
x
e
t
y
s˜ao obtidos por influˆencia da transla¸c˜ao. Ao calcularmos M· P (um vetor de 3 elementos multiplicado
por uma matriz 3x3), verificamos que s˜ao necess´arias 9 multiplica¸c˜oes e 6 adi¸c˜oes. Mas, como a ´ ultima
linha da matriz ´e fixa, os c´alculos efetivamente necess´arios s˜ao:
x

= x.r
11
+y.r
12
+t
x
y

= x.r
21
+y.r
22
+t
y
(5.49)
o que reduz o processo a quatro multiplica¸c˜oes e duas adi¸c˜oes, o que ´e um ganho significante em termos
de eficiˆencia. Especialmente se considerarmos que esta opera¸c˜ao deve ser aplicada a centenas ou mesmo
milhares de pontos por cena ou figura.
Outra ´area onde a eficiˆencia ´e muito importante ´e na cria¸c˜ao de sucessivas vis˜oes de um objeto,
tal como por exemplo vis˜oes consecutivas de sistemas de mol´eculas, avi˜oes, etc., onde cada vis˜ao ´e
geralmente rotacionada a poucos graus da vis˜ao anterior. Se cada vis˜ao pode ser gerada e apresentada
de forma bastante r´apida (30 a 100 milisegundos cada uma), ent˜ao parecer´a ao observador que o objeto
est´a sendo rotacionado continuamente (efeito de anima¸c˜ao!). Para conseguirmos isto, devemos efetuar as
transforma¸c˜oes sobre os pontos do objeto o mais rapidamente poss´ıvel. As equa¸c˜oes de rota¸c˜ao (Equa¸c˜ao
5.8) requerem 4 multiplica¸c˜oes e 2 adi¸ c˜oes. Mas se θ ´e pequeno (poucos graus), cos θ ´e quase 1. Dessa
aproxima¸c˜ao, temos que:
x

= x −y. sin θ
61
y

= x

. sin θ +y (5.50)
sin −θ = −sin θ (5.51)
que requer 2 multiplica¸c˜oes e 2 adi¸c˜oes (livranos de 2 multiplica¸c˜oes pode ser muito importante em
computadores sem hardware espec´ıfico para isto!).
A Equa¸c˜ao 5.50, ´e somente uma aproxima¸c˜ao para os valores corretos de x

e y

(existe um erro
embutido!). Cada vez que a f´ormula ´e aplicada a novos valores de x e y o erro torna-se um pouquinho
maior. Uma aproxima¸c˜ao melhor ´e usar x

em vez de x na segunda equa¸c˜ao:
x

= x = y. sin θ
y

= x

. sin θ +y = (x −y. sin θ). sin θ +y = x. sin θ +y.(1 −sin
2
θ) (5.52)
Esta ´e uma melhor aproxima¸c˜ao que a equa¸c˜ao 5.50, porque o determinante da matriz 2x2 correspon-
dente ´e 1, o que significa que as ´areas transformadas pela equa¸c˜ao 5.52n˜ao s˜ao alteradas.
62
Eixo de Rota¸c˜ao Dire¸c˜ao da Rota¸c˜ao Positiva
x y para z
y z para x
z x para y
Tabela 5.2: Sentido de rota¸c˜ao.
5.8 Transforma¸c˜oes em 3D
A capacidade para representar e visualizar um objeto em trˆes dimens˜oes ´e fundamental para a percep¸c˜ao
de sua forma. Por´em, em muitas situa¸c˜oes ´e necess´ario mais do que isto, ou seja, poder “manusear” o
objeto, movimentando-o atrav´es de rota¸c˜oes, transla¸c˜oes e mesmo escala.
Assim, generalizando o que foi visto para TG em 2D, onde estas transforma¸c˜oes foram representadas
por matrizes 3x3 (utilizando coordenadas homogˆeneas), as TGs em 3D ser˜ao representadas por matrizes
4x4 tamb´em em coordenadas homogˆeneas.
Dessa forma, um ponto P de coodenadas (x, y, z) ser´a representado por (x, y, z, W). Padronizando
(ou homogeneizando) o ponto, teremos se w for diferente de 0, (
x
W
,
y
W
,
z
W
, 1).
Figura 5.15: Sistema de Coordenadas dado pela Regra da M˜ao Direita.
O sistema de coordenadas para 3D utilizado ser´a o da Regra da M˜ao Direita, com o eixo Z perpen-
dicular ao papel e saindo em dire¸c˜ao ao observador, como poder ser visto na figura 5.15.
O sentido positivo de uma rota¸c˜ao, ´e dado quando observando-se sobre um eixo positivo em dire¸c˜ao
`a origem, uma rota¸c˜ao de 90

ir´a levar um eixo positivo em outro positivo. Ou conforme a Tabela 5.2.
A Regra da M˜ao Direita foi escolhida porque este ´e o padr˜ao utilizado na matem´atica (lembre-se da
defini¸c˜ao do produto vetorial!).
A TRANSLAC¸
˜
AO em 3D pode ser vista como simplesmente uma exten¸c˜ao a partir da transla¸c˜ao 2D,
ou seja:
_
¸
_
x

y

z

1
_
¸
_ =
_
¸
_
1 0 0 d
z
0 1 0 d
y
0 0 1 d
z
0 0 0 1
_
¸
_ ·
_
¸
_
x
y
z
1
_
¸
_ (5.53)
Assim, a Equa¸c˜ao 5.53 pode ser representada tamb´em como:
P

= T(d
x
, d
y
, d
z
) · P (5.54)
Similarmente a ESCALA em 3D, fica:
_
¸
_
x

y

z

1
_
¸
_ =
_
¸
_
s
x
0 0 0
0 s
y
0 0
0 0 s
z
0
0 0 0 1
_
¸
_ ·
_
¸
_
x
y
z
1
_
¸
_ (5.55)
P

= S(s
x
, s
y
, s
z
) · P (5.56)
63
Finalmente, verifiquemos como ficam as equa¸c˜oes de ROTAC¸
˜
AO em 3D, pois as rota¸c˜oes podem ser
efetuadas em rela¸c˜ao a qualquer um dos trˆes eixos.
A equa¸c˜ao de rota¸c˜ao em 2D ´e justamente uma rota¸c˜ao em torno do eixo z em 3D, a qual ´e:
_
¸
_
x

y

z

1
_
¸
_ =
_
¸
_
cos θ −sin θ 0 0
sin θ cos θ 0 0
0 0 1 0
0 0 0 1
_
¸
_ ·
_
¸
_
x
y
z
1
_
¸
_ (5.57)
A matriz de rota¸c˜ao em rela¸c˜ao ao eixo x ´e:
_
¸
_
x

y

z

1
_
¸
_ =
_
¸
_
1 0 0 0
0 cos θ −sin θ 0
0 sin θ cos θ 0
0 0 0 1
_
¸
_ ·
_
¸
_
x
y
z
1
_
¸
_ (5.58)
A matriz de rota¸c˜ao em rela¸c˜ao ao eixo y ´e:
_
¸
_
x

y

z

1
_
¸
_ =
_
¸
_
cos θ 0 sin θ 0
0 1 0 0
−sin θ 0 cos θ 0
0 0 0 1
_
¸
_ ·
_
¸
_
x
y
z
1
_
¸
_ (5.59)
Para a rota¸c˜ao tamb´em temos que:
P

= R(θ) · P (5.60)
OBS: Os vetores compostos pelas linhas e colunas da submatriz 3x3 do canto superior esquerdo de
R
x,y,z
(θ) s˜ao mutuamente perpendiculares, e a submatriz possui determinante igual a 1, o que significa
que as trˆes matrizes s˜ao chamadas de Ortogonais Especiais. Al´em disso, uma sequˆencia arbitr´aria
de rota¸ c˜oes ´e tamb´em ortogonal especial. Deve-se lembrar que as transforma¸c˜oes ortogonais preservam
distˆancias e ˆangulos.
Todas estas matrizes de transforma¸c˜ao (T, SeR) possuem inversas. A inversa de T ´e obtida simples-
mente negando-se d
x
, d
y
e d
z
. Para a matriz S, basta substituir s
x
, s
y
e s
z
por seus valores inversos.
Para cada uma das matrizes de rota¸c˜ao R, basta negar o ˆangulo de rota¸c˜ao. Al´em disso, para uma matriz
ortogonal B, sua inversa (B
−1
) ´e a sua matriz transposta, ou seja B
−1
= B
T
.
Uma sequˆencia arbitr´aria de transforma¸c˜oes de transla¸c˜ao, escala e rota¸c˜ao podem ser multiplicadas
juntas, resultando uma matriz da seguinte forma:
M =
_
¸
_
r
11
r
12
r
13
t
x
r
21
r
22
r
23
t
y
r
31
r
32
r
33
t
z
0 0 0 1
_
¸
_ (5.61)
Como no caso de 2D, a submatriz 3x3 do canto superior esquerdo R, agrega as transforma¸c˜oes de
escala e rota¸c˜ao, enquanto a ´ ultima coluna `a direita T agrega as transla¸c˜oes. Para obter-se um pouco
mais de eficiˆencia (ganho computacional) pode-se executar a transforma¸c˜ao explicitamente como:
_
¸
_
x

y

z

1
_
¸
_ = R ·
_
¸
_
x
y
z
1
_
¸
_ +T (5.62)
5.8.1 Composi¸c˜ao de Transforma¸c˜oes em 3D
A composi¸c˜ao de transforma¸c˜oes em 3D pode ser entendida mais facilmente atrav´es do exemplo indicado
na figura 5.16. O objetivo ´e transformar os segmentos de reta P
1
P
2
e P
1
P
3
da posi¸c˜ao inicial em (a) para
a posi¸c˜ao final em (b). Assim o ponto P
1
deve ser transladado para a origem, P
1
P
2
dever´a ficar sobre
o eixo z positivo, e P1P3 dever´a ficar no plano positivo de yz. Al´em disso, os comprimentos das linhas
n˜ao devem ser alterados.
64
Figura 5.16: Transformando P
1
, P
2
e P
3
da posi¸c˜ao inicial em (a) para a posi¸c˜ao final em (b).
Uma primeira maneira de se obter a transforma¸c˜ao desejada ´e atrav´es da composi¸c˜ao das primitivas
de transforma¸c˜ao T, R
x
, R
y
e R
z
.
Subdividindo o problema, teremos os seguintes quatro passos:
1. Transladar P
1
para a origem.
2. Rotacionar o segmento P
1
P
2
em rela¸c˜ao ao eixo y, de forma que ele (P
1
P
2
) fique no plano yz.
3. Rotacionar o segmento P
1
P
2
em rela¸c˜ao ao eixo x, de forma que ele (P
1
P
2
) fique sobre o eixo z.
4. Rotacionar o segmento P
1
P
3
em rela¸c˜ao ao eixo z, de forma que ele (P
1
P
3
) fique no plano yz.
Primeiro Passo: Transladar P
1
para a Origem
A equa¸ c˜ao de transla¸c˜ao ´e:
T(−x
1
, −y
1
, −z
1
) =
_
¸
_
1 0 0 −x
1
0 1 0 −y
1
0 0 1 −z
1
0 0 0 1
_
¸
_ (5.63)
Aplicando T a P
1
, P
2
e P
3
, temos:
P

1
= T(−x
1
, −y
1
, −z
1
) · P
1
=
_
¸
_
0
0
0
1
_
¸
_
P

2
= T(−x
1
, −y
1
, −z
1
) · P
2
=
_
¸
_
x
2
−x
1
y
2
−y
1
z
2
−z
1
1
_
¸
_
P

3
= T(−x
1
, −y
1
, −z
1
) · P
3
=
_
¸
_
x
3
−x
1
y
3
−y
1
z
3
−z
1
1
_
¸
_ (5.64)
Segundo Passo: Rotacionar em Rela¸c˜ao ao eixo Y
A Figura 5.17 (o ˆangulo θ indica a dire¸c˜ao positiva de rota¸c˜ao em rela¸c˜ao a y. O ˆangulo utilizado na
realidade ´e −(90
o
−θ)) mostra P
1
P
2
ap´os o primeiro passo, bem como a proje¸c˜ao de P
1
P
2
no plano xz.
O ˆangulo de rota¸c˜ao ´e −(90
o
−θ) = θ −90
o
. Ent˜ao:
sin(θ −90
o
) = −cos θ = −
x

2
D
1
= −
x
2
−x
1
D
1
cos(θ −90
o
) = −sin θ = −
z

2
D
1
= −
z
2
−z
1
D
1
(5.65)
65
Figura 5.17: Rota¸c˜ao dos pontos P
1
, P
2
e P
3
.
onde
D
1
=
_
(z

2
)
2
+ (x

2
)
2
=
_
(z
2
−z
1
)
2
+ (x
2
−x
1
)
2
(5.66)
Ent˜ao substituindo estes valores na Equa¸c˜ao 5.59, temos:
P

2
= R
y
(θ −90
o
) · P

2
=
_
¸
_
0
y
2
−y
1
D
1
1
_
¸
_ (5.67)
Como era esperado, a componente x de P

2
´e zero, e z possui comprimento D
1
.
Terceiro Passo: Rotacionar em Rela¸c˜ao ao eixo X
Figura 5.18: Rota¸c˜ao em rela¸c˜ao ao eixo x. P1 e P2 de comprimento D2 ´e rotacionado em dire¸c˜ao ao
eixo z, pelo ˆangulo positivo f.
A Figura 5.18 mostra P
1
P
2
ap´os o segundo passo (o segmento de reta P
1
P
3
n˜ao ´e mostrado porque
n˜ao ´e utilizado para determinar os ˆangulos de rota¸c˜ao. Ambos os segmento s˜ao rotacionados por R
x
(φ).)
O ˆangulo de rota¸c˜ao ´e φ, e
cos φ =
z

2
D
2
sin φ =
y

2
D
2
(5.68)
66
onde D
2
= |P

1
P

2
| ´e o comprimento do segmento de reta P

1
P

2
. Como as transla¸c˜oes e rota¸c˜oes preservam
o comprimento, o comprimento de P

1
P

2
´e o mesmo de P
1
P
2
, dessa forma
D
2
= |P

1
P

2
| = |P
1
P
2
| =
_
(x
2
−x
1
)
2
+ (y
2
−y
1
)
2
+ (z
2
−z
1
)
2
(5.69)
O resultado da rota¸c˜ao no terceiro passo ´e:
P

2
= R
x
(φ) · P

2
= R
x
(φ) · R
y
(θ −90
o
) · P

2
= R
x
(φ) · R
y
(θ −90
o
) · T · P
2
=
_
¸
_
0
0
|P
1
P
2
|
1
_
¸
_ (5.70)
Dessa forma, agora P
1
P
2
agora est´a sobre (coincidindo) o eixo z positivo.
Quarto Passo: Rotacionar em Rela¸c˜ao ao eixo Z
Figura 5.19: Rota¸c˜ao em rela¸c˜ao ao eixo z.
A figura 5.19 mostra P
1
P
2
e P
1
P
3
ap´os o terceiro passo, com P

2
sobre o eixo z e P

3
em
P

3
=
_
¸
_
x

3
y

3
z

3
1
_
¸
_ = R
x
(φ) · R
y
(θ −90
o
) · T(−x
1
, −y
1
, −z
1
) · P
3
(5.71)
A rota¸c˜ao ´e dada pelo ˆangulo positivo α, e
cos α =
y

3
D
3
sin α =
x

3
D
3
D
3
=
_
x
2
3
+y
2
3
(5.72)
P

1
P

3
´e trazido para o plano yz.
Dessa forma, ap´os o quarto passo o resultado ´e alcan¸cado como visto na Figura 5.16(b).
A matriz de composi¸c˜ao M ´e a transforma¸c˜ao necess´aria `a composi¸c˜ao solicitada na Figura 5.16.
M = R
x
(α) · R
x
(φ) · R
y
(θ −90
o
) · T(−x
1
, −y
1
, −z
1
) = R · T (5.73)
Exerc´ıcio: aplique a matriz de composi¸c˜ao a cada um dos pontos P
1
, P
2
e P
3
para verificar que P
1
´e transformado para a origem, P
2
est´a sobre o eixo z positivo e P
3
no plano yz positivo.
67
Utilizando as propriedades de matrizes ortogonais (ver Equa¸c˜oes 5.61, 5.62 e a observa¸c˜ao da se¸c˜ao
5.8), podemos encontrar uma segunda forma de encontrar a matriz de transforma¸c˜oes. Relembremos que
os vetores unit´arios (de comprimento igual a 1) de R rotacionam em rela¸c˜ao aos eixos principais.
Assim,
R =
_
_
r
1x
r
2x
r
3x
r
1y
r
2y
r
3y
r
1z
r
2z
r
3z
_
_
(5.74)
Colocando R
z
como o vetor unit´ario ao longo de P
1
P
2
que ir´a rotacionar em dire¸c˜ao ao eixo z positivo,
R
z
= [ r
1z
r
2z
r
3z
]
T
=
P
1
P
2
|P
1
P
2
|
(5.75)
O vetor unit´ario R
x
´e perpendicular ao plano de P
1
, P
2
e P
3
e ir´a rotacionar em dire¸c˜ao ao eixo
x positivo, dessa forma R
x
deveria ser o produto vetorial de dois vetores do plano (relembre-se das
propriedades de Produto Vetorial vistos em Geometria Anal´ıtica !):
R
x
= [ r
1x
r
2x
r
3x
]
T
=
P
1
P
3
×P
1
P
2
|P
1
P
3
×P
1
P
2
|
(5.76)
e finalmente,
R
y
= [ r
1x
r
2y
r
3z
]
T
= R
z
×R
x
(5.77)
ir´a rotacionar em dire¸c˜ao ao eixo y positivo. A matriz de composi¸c˜ao ´e dada por
_
¸
_
r
1x
r
2x
r
3x
0
r
1y
r
2y
r
3y
0
r
1z
r
2z
r
3z
0
0 0 0 1
_
¸
_ · T(−x
1
, −y
1
, −z
1
) = R · T (5.78)
Figura 5.20: Os vetores unit´arios R
x
, R
y
e R
z
, os quais s˜ao transformados nos eixos principais.
e R e T s˜ao como em 5.78. A Figura 5.20 mostra os vetores individuais R
x
, R
y
e R
z
.
68
Cap´ıtulo 6
Observa¸c˜ao de Cenas 3D
6.1 Pipeline de observa¸c˜ao (“viewing pipeline”)
Ap´os a cria¸c˜ao de cenas e objetos tridimensionais o pr´oximo passo ´e efetuar a sua apresenta¸c˜ao. Ao
gerar imagens de cenas 3D em computa¸c˜ao gr´afica, fazemos uma analogia com uma cˆamera fotogr´afica:
imaginamos um observador que, posicionado em um ponto de observa¸c˜ao, vˆe a cena atrav´es das lentes de
uma cˆamera virtual que pode ser posicionada de forma a obter a imagem desejada da cena (o “fot´ografo”
pode definir a posi¸c˜ao da cˆamera, sua orienta¸c˜ao e ponto focal). A fotografia que se obt´em com uma
cˆamera real ´e uma proje¸c˜ao da cena em um plano de imagem 2D (o filme na cˆamera). Da mesma forma
que no mundo real, a imagem que se obt´em da cena sint´etica depende de v´arios fatores que determinam
como esta ´e projetada em um plano para formar a imagem 2D exibida (por exemplo) no monitor. Estes
parˆametros incluem a posi¸c˜ao da cˆamera, sua orienta¸c˜ao e ponto focal, o tipo de proje¸c˜ao efetuada
e a posi¸c˜ao dos “planos de recorte” (clipping planes).
A posi¸c˜ao e o ponto focal da cˆamera definem, respectivamente, aonde a cˆamera est´a e para onde
ela est´a apontando. O vetor que vai da posi¸c˜ao da cˆamera ao ponto focal ´e denominado dire¸c˜ao de
proje¸c˜ao. O plano de imagem, que ´e o plano no qual a cena ser´a projetada, est´a posicionado no ponto
focal e, tipicamente, ´e perpendicular ao vetor dire¸c˜ao de proje¸c˜ao (Figura 6.1). A orienta¸c˜ao da cˆamera
´e controlada pela sua posi¸c˜ao, seu ponto focal e por um outro vetor denominado view up. Estes trˆes
parˆametros definem completamente a cˆamera.
Figura 6.1: Atributos da cˆamera [Schr¨oeder, 1998].
O m´etodo de proje¸c˜ao controla como os atores da cena s˜ao mapeados no plano de imagem: na proje¸c˜ao
ortogr´afica, ou proje¸c˜ao paralela, o processo de mapeamento ´e paralelo: assume-se que todos os raios de
luz que atingem a cˆamera s˜ao paralelos ao vetor de proje¸c˜ao. Na proje¸c˜ao perspectiva, todos os raios
convergem para um ponto comum, denominado ponto de observa¸c˜ao, ou centro da proje¸c˜ao. Nesse caso,
deve-se determinar o ˆangulo de vis˜ao da cˆamera.
Os planos de recorte anterior e posterior interceptam o vetor de proje¸c˜ao e s˜ao, geralmente, per-
pendiculares a ele. Os planos de recorte s˜ao usados para eliminar atores que est˜ao muito pr´oximos ou
muito distantes da cˆamera, de forma que apenas os atores que est˜ao na ´area englobada pelos planos
de recorte s˜ao potencialmente vis´ıveis. Em geral, os planos de recorte s˜ao perpendiculares `a dire¸c˜ao
69
de proje¸c˜ao. Suas posi¸c˜oes podem ser especificadas usando o chamado intervalo de recorte (“clipping
range”) da cˆamera: a localiza¸c˜ao dos planos ´e dada a partir da posi¸c˜ao da cˆamera, ao longo da dire¸c˜ao
de proje¸c˜ao. A posi¸c˜ao do plano anterior d´a o valor m´ınimo do intervalo, e a posi¸c˜ao do plano posterior
d´a o valor m´aximo.
A cˆamera pode ser manipulada diretamente atrav´es dos parˆametros acima descritos, mas existem
algumas opera¸c˜oes comuns que facilitam a tarefa de quem gera a imagem, como ilustradas nas figuras
6.2 e 6.3:
• Azimuth - rotaciona a posi¸c˜ao da cˆamera ao redor do seu vetor view up, com centro no ponto focal
• Elevation - rotaciona a posi¸c˜ao da cˆamera ao redor do vetor dado pelo produto vetorial entre o
vetor view up e o vetor dire¸c˜ao de proje¸c˜ao, com centro no ponto focal.
• Roll (Twist) - rotaciona o vetor view up em torno do vetor normal ao plano de proje¸c˜ao.
• Yaw - rotaciona o ponto focal da cˆamera em torno do vetor view up, com centro na posi¸c˜ao da
cˆamera.
• Pitch - rotaciona o ponto focal ao redor do vetor dado pelo produto vetorial entre o vetor view up
e o vetor dire¸c˜ao de proje¸c˜ao, com centro na posi¸c˜ao da cˆamera.
• Dolly - (in, out) move a posi¸c˜ao da cˆamera ao longo da dire¸c˜ao de proje¸c˜ao (mais pr´oximo ou mais
distante do ponto focal).
• Zoom - altera o ˆangulo de vis˜ao da cˆamera, de modo que uma regi˜ao maior ou menor da cena fique
na regi˜ao que ´e potencialmente vis´ıvel.
Figura 6.2: Movimentos de cˆamera [Schr¨oeder, 1998].
Em resumo, gerar uma vista de um objeto em trˆes dimens˜oes ´e similar a fotografar o objeto. Podemos
caminhar na cena e fotografar de qualquer ˆangulo, de v´arias distˆancias e com diferentes orienta¸c˜oes da
cˆamera. A regi˜ao da cena que aparece no visor da m´aquina ´e o que vai ser projetado na superf´ıcie do
filme. O tipo e o tamanho da lente da cˆamera determinam quais partes da cena aparecem na foto final.
Estas id´eias est˜ao incorporadas nas APIs gr´aficas 3D, de forma que vistas de uma cena podem ser geradas
a partir da defini¸c˜ao de parˆametros como posi¸c˜ao espacial, orienta¸c˜ao e ˆangulo de abertura da “cˆamera
virtual”.
6.2 Coordenadas de Observa¸c˜ao
6.2.1 Especifica¸c˜ao do sistema de coordenadas de observa¸c˜ao
Escolhemos uma “vista” espec´ıfica para uma cena estabelecemos primeiramente um sistema de coordena-
das de observa¸c˜ao (Viewing Coordinate System - VCS, ou View reference Coordinate System). Um plano
70
Figura 6.3: Movimentos de cˆamera [Schr¨oeder, 1998].
de observa¸c˜ao, ou plano de proje¸c˜ao, ´e definido, que ´e perpendicular ao eixo z do sistema de coordenadas
de visualiza¸c˜ao VCS (esse plano faz o papel do plano do filme na cˆamera virtual). Em seguida, ´e preciso
transformar a descri¸c˜ao da cena dada no sistema de coordenadas do mundo (WC - World Coordinates)
para uma descri¸c˜ao no sistema de coordenadas de observa¸c˜ao VCS.
Mas, como determinamos o VCS? Inicialmente, estabelecemos a origem do sistema. Para isso, usamos
um ponto inicialmente definido no WC, o View Reference Point - VRP. Podemos pensar nesse ponto como
sendo a posi¸c˜ao da cˆamera. Em seguida, selecionamos a dire¸c˜ao positiva para o eixo z do VCS (vamos
denotar esse eixo por z
v
), bem como a orienta¸c˜ao do plano de observa¸c˜ao, especificando o vetor normal
ao plano de observa¸c˜ao, N. Finalmente, definimos a dire¸c˜ao do eixo y do VCS (y
v
) especificando-se um
vetor V (View Up). Obviamente, V deve ser perpendicular a N. Pode ser dif´ıcil para o programador
determinar V exatamente de forma a satisfazer essa condi¸c˜ao. Tipicamente, as transforma¸c˜oes de ob-
serva¸c˜ao implementadas nos pacotes gr´ aficos ajustam V projetando-o em um plano que ´e perpendicular
ao vetor N: dessa forma, o programador pode escolher qualquer dire¸c˜ao conveniente para o vetor V ,
desde que n˜ao seja paralela `a N. A partir dos vetores N e V , o pacote gr´afico pode computar um terceiro
vetor U, perpendicular a ambos, que define a dire¸c˜ao para o eixo xv do VCS (veja Figuras 6.4 e 6.5).
Figura 6.4: Um VCS baseado na regra da m˜ao direita com x
v
, y
v
e z
v
.relativos ao sistema de coordenadas
do mundo [Hearn and Baker, 1994].
6.2.2 Transforma¸c˜ao do sistema de coordenadas do mundo para o sistema de
coordenadas de observa¸c˜ao
Antes que as descri¸c˜oes do objeto (em WC) possam ser projetadas no plano de observa¸c˜ao, elas preci-
sam ser transformadas para as coordenadas do VCS. A convers˜ao das coordenadas de WC para VCS ´e
71
Figura 6.5: Orienta¸c˜oes do plano de observa¸c˜ao conforme o vetor normal. O vetor (1, 0, 0) d´a a orienta¸c˜ao
em (a) e (1, 0, 1), a orienta¸c˜ao em (b) [Hearn and Baker, 1994].
equivalente a uma transforma¸c˜ao que superp˜oe o VCS ao WC, usando as transforma¸c˜oes geom´etricas j´a
vistas. A seq¨ uˆencia de transforma¸c˜oes ´e dada por:
1. translada o VRP para a origem do WC .
2. Aplica rota¸c˜oes para alinhar os eixos do VCS (x
v
, y
v
, z
v
) com os eixos do WC (x
w
, y
w
, z
w
), respec-
tivamente.
Se as coordenadas do ponto VRP em WC s˜ao dadas por (x
0
, y
0
, z
0
), a matriz de transla¸c˜ao ´e dada por
T(−x
0
, −y
0
, −z
0
). A seq¨ uˆencia de rota¸ c˜oes pode exigir at´e trˆes rota¸c˜oes em torno dos eixos coordenados,
dependo da dire¸c˜ao escolhida para N. Em geral, se N n˜ao est´a alinhado com qualquer um dos eixos, a
superposi¸c˜ao de ambos os sistemas vai exigir uma seq¨ uˆencia R
z
· R
y
· R
x
. Isto ´e, primeiro rotacionamos
em torno do eixo x
w
para trazer o eixo z
v
para o plano x
w
z
w
. Em seguida, rotacionamos em torno do
eixo yw para alinhar os eixos z
w
e z
v
. A rota¸c˜ao final em torno do eixo zw ´e para alinhar os eixos y
w
e
y
v
. A matriz de transforma¸c˜ao composta ´e ent˜ao aplicada a todas as descri¸c˜oes de objetos no WC para
transform´a-las para VCS.
Uma forma alternativa de gerar a matriz que descreve as transforma¸c˜oes de rota¸c˜ao necess´arias ´e
calcular os vetores unit´arios u, v e n do sistema de coordenadas de observa¸c˜ao, e formar a matriz
de composi¸c˜ao diretamente, uma vez que esses vetores s˜ao ortogonais entre si e definem uma matriz
ortogonal. Dados os vetores N e V , os vetores unit´arios podem ser calculados da seguinte forma:
n =
N
|N|
= (n
1
, n
2
, n
3
) (6.1)
u =
V ×N
|V ×N|
= (u
1
, u
2
, u
3
) (6.2)
v = n ×u = (v
1
, v
2
, v
3
) (6.3)
Este m´etodo tamb´em ajusta automaticamente a dire¸c˜ao de V de forma que v seja perpendicular a n.
A matriz de rota¸c˜ao composta para a transforma¸c˜ao de visualiza¸c˜ao ´e ent˜ao dada por:
R =
_
¸
_
u
1
u
2
u
3
0
v
1
v
2
v
3
0
n
1
n
2
n
3
0
0 0 0 1
_
¸
_ (6.4)
A matriz de transforma¸c˜ao completa a ser aplicada aos objetos da cena para transferi-los para o
sistema de coordenadas de observa¸c˜ao ´e dada por:
M
wc,vc
= R · T =
_
¸
_
u
1
u
2
u
3
−x
0
v
1
v
2
v
3
−y
0
n
1
n
2
n
3
−z
0
0 0 0 1
_
¸
_ (6.5)
72
6.3 Proje¸c˜oes
Tendo os objetos descritos no sistema de coordenadas de observa¸c˜ao, pode-se projetar os objetos tridi-
mensional no plano de observa¸c˜ao. No processo de gera¸c˜ao da imagem de uma cena deparamos com o
problema de apresentar uma entidade tridimensional num meio bidimensional (2D), que ´e a tela do moni-
tor de v´ıdeo. Esse processo, denominado de Proje¸c˜ao, tem sido tratado exaustivamente por desenhistas,
artistas e arquitetos que buscaram t´ecnicas e artif´ıcios para sistematiz´a-lo e solucion´a-lo. A figura 6.6
apresenta uma taxonomia dos m´etodos de proje¸c˜ao.
Figura 6.6: Taxomia de proje¸c˜oes [Plastock and Kalley, 1999].
6.3.1 Proje¸c˜ao Perspectiva
As t´ecnicas utilizadas em proje¸c˜ao perspectiva s˜ao derivadas daquelas utilizadas pelos artistas e dese-
nhistas profissionais. Pode-se dizer que o olho do observador coloca-se no centro de proje¸c˜ao, e o plano
que deve conter o objeto ou cena projetada transforma-se no plano de proje¸c˜ao. Dois segmentos de reta
que saem do centro de proje¸c˜ao e atingem o objeto projetado no plano de proje¸c˜ao, s˜ao chamadas de
projetantes (veja a Figura 6.7)
Figura 6.7: Linha AB e sua proje¸c˜ao A’B’: (a) perspectiva; (b) ortogonal.
Os desenhos em perspectiva s˜ao caracterizados pelo encurtamento perspectivo e pelos pontos de fuga.
O encurtamento perspectivo, ´e a ilus˜ao de que os objetos e comprimentos s˜ao cada vez menores `a medida
que sua distˆancia ao centro de proje¸c˜ao aumenta. Tem-se tamb´em a ilus˜ao de que conjuntos de linhas
paralelas que n˜ao s˜ao paralelas ao plano de proje¸c˜ao, convergem para um ponto de fuga. Denominam-se
73
pontos de fuga principais, quando d´a-se a aparˆencia de haver uma intersec¸c˜ao entre um conjunto de
retas pararelas com um dos eixos principais O
x
, O
y
ou O
z
. O n´ umero de pontos de fuga principais ´e
determinado pelo n´ umero de eixos principais intersectados pelo plano de proje¸c˜ao. Por exemplo: se o
plano de proje¸c˜ao intercepta apenas os eixo z (ent˜ao ´e perpendicular ao eixo z), somente o eixo z possui
um ponto de fuga principal, pois linhas paralelas aos eixos x e y, s˜ao tamb´em paralelas ao plano de
proje¸c˜ao, e dessa forma n˜ao ocorre a ilus˜ao de convergˆencia.
Proje¸c˜oes Perspectivas s˜ao categorizadas pelo seu n´ umero de pontos de fuga principais, ou seja o
n´ umero de eixos que o plano de proje¸c˜ao intercepta. A Figura 6.8 mostra 2 proje¸c˜oes perspectivas (com
um ponto de fuga) distintas de um cubo. Est´a claro que possui apenas um ponto de fuga? Somente as
linhas paralelas ao eixo z convergem, e as linhas paralelas aos eixos x e y continuam paralelas!
Figura 6.8: Proje¸c˜oes de um cubo (com 1 ponto de fuga) sobre um plano cortando o eixo Z, apresentando
o ponto de fuga.
Proje¸c˜oes perspectivas com 2 pontos de fuga (quando 2 eixos principais s˜ao interceptados pelo plano
de proje¸c˜ao) s˜ao mais comumente usadas em arquitetura, engenharia, desenho publicit´ario e projeto
industrial (ver Figura 6.9). J´a as proje¸c˜oes perspectivas com 3 pontos de fuga s˜ao bem menos utilizadas,
pois adicionam muito pouco em termos de realismo comparativamente `as proje¸c˜oes com 2 pontos de fuga,
e o custo de implementa¸c˜ao ´e bem maior (veja Figura 6.10).
Figura 6.9: Proje¸c˜oes perspectivas com 2 pontos de fuga ( o plano de proje¸c˜ao intercepta 2 eixos (x e z)).
Anomalias da Perspectiva
A proje¸c˜ao perspectiva introduz certas anomalias que aumentam o realismo em termos de profundidade,
mas tamb´em alteram as medidas e formas reais do objetos.
1. Encurtamente perspectivo: Quanto mais distante um objeto est´a do centro de proje¸c˜ao, menor
parece ser (o tamanho de sua proje¸c˜ao torna-se menor, como mostra a figura 6.11.
2. pontos de Fuga: As proje¸c˜oes de retas n˜ao paralelas ao plano de proje¸c˜ao, provocam a ilus˜ao de
que se interceptam num ponto do horizonte.
3. Confus˜ao Visual: Os objetos situados atr´as do centro de proje¸c˜ao s˜ao projetados no plano de
proje¸c˜ao de cima para baixo e de tr´as para a frente (ver Figura 6.12)
4. Distor¸c˜ao Topol´ogica: Consideremos o plano que cont´em o centro de proje¸c˜ao e que ´e paralelo do
plano de proje¸c˜ao. Os pontos deste plano s˜ao projetados no infinito pela transforma¸c˜ao perspectiva.
74
Figura 6.10: Proje¸c˜oes perspectivas com 3 pontos de fuga ( o plano de proje¸c˜ao intercepta os 3 eixos).
Em particular, um segmento de reta que une um ponto situado `a frente do observador a um ponto
situado atr´as dele e efetivamente projetado segundo uma linha quebrada de comprimento infinito.
Figura 6.11: A esfera B ´e bem maior que a esfera A, por´em ambas aparecem com o mesmo tamanho
quando projetadas no plano de vis˜ao.
Desenvolvimento Matem´atico para Proje¸c˜oes Perspectivas
Para obter uma proje¸c˜ao perspectiva de um objeto 3D, s˜ao transformados os pontos ao longo dos pro-
jetores que se encontram no centro de proje¸c˜ao. Suponha que o centro de proje¸c˜ao est´a posicionado
em zprp, um ponto no eixo zv, e que o plano de proje¸c˜ao, normal ao eixo z, est´a posicionado em zvp,
como mostra a Figura 6.13. Precisamos determinar as coordenadas (x
p
, y
p
, z
p
), que s˜ao as coordenadas
do ponto P = (x, y, z) projetado no plano de proje¸c˜ao. Podemos escrever as equa¸c˜oes que descrevem as
coordenadas (x

, y

, z

) de qualquer ponto ao longo da linha de proje¸c˜ao perspectiva como:
x

= x −xu
y

= y −yu
z = z −(z −z
prp
)u (6.6)
O parˆametro u assume valores no intervalo [0, 1] quando u = 0, estamos em P = (x, y, z), e quando
u = 1 temos exatamente o centro de proje¸c˜ao (0, 0, z
prp
). As proje¸c˜oes perspectiva e paralela tamb´em
podem, assim como as transforma¸c˜oes geom´etricas b´asica, ser definidas atrav´es de matrizes 4x4, o que ´e
interessante para a composi¸c˜ao de transforma¸c˜oes juntamente com a proje¸c˜ao. No plano de observa¸c˜ao,
sabemos que z

= z
vp
, e podemos resolver a equa¸c˜ao de z’ para obter o valor do parˆametro u nessa posi¸c˜ao
ao longo da linha de proje¸c˜ao:
u =
Z
vp
−z
Z
prp
−z
(6.7)
75
Figura 6.12: Confus˜ao visual da perpectiva (objeto atr´as do centro de proje¸c˜ao).
Figura 6.13: Proje¸c˜ao em perspectiva de um ponto P=(x, y, z) na posi¸c˜ao (xp, yp, zp) sobre o plano de
proje¸c˜ao [Hearn and Baker, 1994].
Substituindo esse valor de u nas equa¸c˜oes de z

e y

, obtemos as equa¸c˜oes de transforma¸c˜ao perspectiva:
x
p
= x
_
Z
vp
−z
Z
prp
−z
_
= x
_
d
p
Z
prp
−z
_
y
p
= y
_
Z
vp
−z
Z
prp
−z
_
= y
_
d
p
Z
prp
−z
_
(6.8)
Usando coordenadas homogˆeneas pode-se escrever a transforma¸c˜ao na forma matricial:
_
¸
_
x
h
y
h
z
h
h
_
¸
_ =
_
¸
¸
_
1 0 0 0
0 1 0 0
0 0 −
z
vp
d
p
−z
vp
_
z
prp
d
p
_
0 0 −
1
d
p

z
p
rp
d
p
_
¸
¸
_
·
_
¸
_
x
y
z
1
_
¸
_ (6.9)
Nesta representa¸c˜ao o fator homogˆeneo ´e
h =
z
prp
−z
d
p
(6.10)
E as coordenadas do ponto projetado no plano de observa¸c˜ao s˜ao obtidas a partir das coordenadas
homogˆeneas dividindo-se por h:
x
p
=
x
h
h
y
p
=
y
h
h
(6.11)
Observa-se que o valor original da coordenada z precisa ser mantido nas coordenadas de proje¸c˜ao
para uso por algoritmos de remo¸c˜ao de linhas ocultas. Em geral, o centro da proje¸c˜ao n˜ao precisa ser
76
posicionado ao longo do eixo z
v
, e as equa¸c˜oes acima podem ser generalizadas para considerar o centro
em um ponto qualquer. Existem v´arios casos especiais a serem considerados para as equa¸c˜oes acima.
Por exemplo, se o plano de proje¸c˜ao coincide com o plano uv, i.e., z
vp
= 0, ent˜ao d
p
= z
prp
. Em alguns
pacotes gr´aficos ´e assumido que o centro de proje¸c˜ao coincide com a origem do sistema de coordenadas
de observa¸c˜ao, i.e., nesse caso z
prp
= 0.
6.3.2 Desenvolvimento Matem´atico para Proje¸c˜oes Paralelas
Podemos especificar uma proje¸c˜ao paralela com um vetor de proje¸c˜ao que define a dire¸c˜ao dos projeto-
res. Quando a dire¸c˜ao proje¸c˜ao ´e perpendicular ao plano de proje¸c˜ao tem-se uma proje¸c˜ao ortogr´afica,
caso contr´ario tem-se uma proje¸c˜ao obl´ıqua. Proje¸c˜oes ortogr´aficas s˜ao muito comuns em engenharia e
arquitetura para gerar vistas frontais, laterais e traseiras de objetos. A deriva¸c˜ao das equa¸c˜oes de trans-
forma¸ c˜ao para uma proje¸c˜ao paralela ortogr´afica ´e imediata. Se o plano de observa¸c˜ao est´a posicionado
em z
vp
ao longo do eixo z
v
, ent˜ao a descri¸c˜ao de qualquer ponto P = (x, y, z) em coordenadas do sistema
de observa¸c˜ao ´e transformada para as coordenadas de proje¸c˜ao (veja Figura 6.14):
Figura 6.14: Proje¸c˜ao ortogonal de um ponto no plano de proje¸c˜ao [Hearn and Baker, 1994].
A matriz de transforma¸c˜ao para coordenadas homogˆeneas ´e dada por:
M
ortograf
=
_
¸
_
1 0 0 0
0 1 0 0
0 0 0 0
0 0 0 1
_
¸
_ (6.12)
77
Cap´ıtulo 7
Recorte de Primitivas 2D
J´a vimos que um “pacote gr´afico” atua como intermedi´ario entre o aplicativo (e o seu modelo/estrutura de
dados interna) e o hardware de visualiza¸c˜ao. Sua fun¸c˜ao ´e aproximar primitivas matem´aticas (“ideais”),
descritas em termos de v´ertices num sistema de coordenadas cartesianas, por conjuntos de pixels com a
cor ou n´ıvel de cinza apropriado. Estes pixels s˜ao armazenados num bitmap na mem´oria da CPU, ou num
frame buffer (mem´oria de imagem no controlador do dispositivo. At´e o momento estudamos, de maneira
n˜ao extensiva, alguns algoritmos b´asicos para convers˜ao matricial utilizados por pacotes gr´aficos. Vamos
estudar agora alguns algoritmos para clipping [recorte] de primitivas. (O “recorte” ´e necess´ario para que
a imagem “apare¸ca” dentro do rectˆangulo de visualiza¸c˜ao definido para ela.
Existem v´arias abordagens para o processo de clippings. Uma t´ecnica ´obvia ´e recortar a primi-
tiva antes da convers˜ao matricial, calculando analiticamente suas intersec¸c˜oes com o ret8ngulo de re-
corte/visualiza¸c˜ao [clip rectangle]. Estes pontos de intersec¸c˜ao s˜ao ent˜ao usados para definir os novos
v´ertices para a vers˜ao recortada da primitiva. A vantagem, evidente, ´e que o processo de convers˜ao
matricial precisa tratar apenas da vers˜ao recortada da primitiva, cuja ´area pode ser muito menor que a
original. Esta ´e a t´ecnica mais frequentemente utilizada para recortar segmentos de reta, retˆangulos e
pol´ıgonos, e os algoritmos que vamos estudar s˜ao baseados nesta estrat´egia.
Outra estrat´egia seria converter todo o pol´ıgono, mas tra¸car apenas os pixels vis´ıveis no retˆangulo de
visualiza¸ c˜ao [scissoring]. lsto pode ser feito checando as coordenadas de cada pixel a ser escrito contra
os limites do retˆangulo. Na pr´atica, existem maneiras de acelerar o processo que evitam o teste de cada
pixel individualmente. Se o teste dos limites puder ser feito rapidamente [por hardware especializado,
por exemplo], esta abordagem pode ser mais eficiente que a anterior, e tem a vantagem de ser extens´ıvel
a regi˜oes de recorte arbitr´arias.
7.1 Recorte de segmentos de reta
Figura 7.1: Exemplos de recorte de segmentos de reta.
Vamos estudar especificamente o processo de recorte de segmentos de reta contra retˆangulos. Segmen-
tos que interceptam uma regi˜ao de recorte retangular, depois de recortados, s˜ao sempre transformados
num ´ unico segmento. Segmentos que est˜ao sobre a fronteira do retˆangulo de recorte s˜ao considerados
como dentro dele, e portanto devem ser mostrados (Figura 7.1).
78
7.1.1 Recorte de Pontos Extremos
Antes de discutir o problema do recorte de segmentos de reta, vamos considerar o problema mais simples
de recortar pontos extremos. Se a fronteira do retˆangulo de recorte tem coordenada x no intervalo xmin
e xmax, e coordenada y no intervalo ymin e ymax, ent˜ao 4 desigualdades precisam ser satisfeitas para
que um ponto (x, y) esteja dentro do retˆangulo de recorte:
x
min
≤ x ≤ x
max
y
min
≤ y ≤ y
max
(7.1)
7.1.2 Algoritmo de Cohen-Sutherland para Recorte de Segmentos de Reta
Para recortar um segmento de reta, precisamos considerar apenas os seus pontos extremos, e n˜ao os
infinitos pontos no interior. Se ambas as extremidades est˜ao dentro do retˆangulo de visualiza¸c˜ao (AB na
Figura 7.1), toda a linha est´a dentro do retˆangulo e pode ser tra¸cada (neste caso diz-se que a reta foi
trivialmente aceita). Se apenas uma das extremidades est´a dentro (CD na Figura 7.1), a linha intercepta
o retˆangulo de visualiza¸c˜ao, e o ponto de intersec¸c˜ao precisa ser calculado. Se ambas as extremidades
est˜ao fora, a linha pode ou n˜ao interceptar o retˆangulo, e precisamos verificar se as intersec¸c˜oes existem
e onde est˜ao.
Uma estrat´egia de for¸ca bruta seria checar a linha contra cada aresta do retˆangulo de visualiza¸c˜ao, para
localizar um eventual ponto de intersec¸c˜ao. Se existe um, a linha corta o retˆangulo, e est´a parcialmente
dentro dele. Para cada linha e cada aresta do retˆangulo, tomamos as duas retas (matematicamente
infinitas) que as cont´em, e calculamos a intersec¸c˜ao entre elas. A seguir, testamos se este ponto ´e interior
- ou seja, se est´a dentro do retˆangulo de visualiza¸c˜ao e da linha. Se este ´e o caso, existe uma intersec¸c˜ao
com o retˆangulo de visualiza¸c˜ao. Na Figura 7.1, os pontos de intersec¸c˜ao G

e H

s˜ao interiores, mas I

e J

n˜ao s˜ao.
Nesta abordagem, precisamos resolver duas equa¸c˜oes simultˆaneas usando multiplica¸c˜ao e divis˜ao para
cada par < aresta, linha >. Entretanto, este ´e um esquema bastante ineficiente, que envolve quantidade
consider´avel de c´alculos e testes, e portanto deve ser descartado.
O algoritmo de Cohen-Sutherland ´e mais eficiente, e executa testes iniciais na linha para determinar
se c´alculos de intersec¸c˜ao podem ser evitados. Primeiramente, verifica pares de pontos extremos. Se a
linha n˜ao pode ser trivialmente aceita, s˜ao feitas verifica¸c˜oes por regi˜oes. Por exemplo, duas compara¸c˜oes
simples em x mostram que ambos os pontos extremos da linha EF na Figura 7.1 tˆem coordenada x menor
que xmin, e portanto est˜ao na regi˜ao a esquerda do retˆangulo de visualiza¸c˜ao (ou seja, fora do semi-plano
definido pela aresta esquerda). A consequˆencia ´e que o segmento EF pode ser trivialmente rejeitado, e
n˜ao precisa ser recortado ou tra¸cado. Da mesma forma, podemos rejeitar trivialmente linhas com ambos
os extremos em regi˜oes a direita de x
max
, abaixo de ymin e acima de y
max
. Se o segmento n˜ao pode ser
trivialmente aceito ou rejeitado, ele ´e subdividido em dois segmentos por uma aresta de recorte, um dos
quais pode ser trivialmente rejeitado. Dessa forma, um segmento ´e recortado interativamente testando-se
aceita¸ c˜ao ou rejei¸c˜ao trivial, sendo subdividido se nenhum dos dois testes for bem-sucedido, at´e que o
segmento remanescente esteja totalmente contido no retˆangulo ou totalmente fora dele.
Para executar os testes de aceita¸c˜ao ou rejei¸c˜ao trivial, as arestas do retˆangulo de visualiza¸c˜ao s˜ao
estendidas de forma a dividir o piano do retˆangulo de visualiza¸c˜ao em 9 regi˜oes [Figura 7.2]. A cada
regi˜ao ´e atribu´ıdo um c´odigo de 4 bits, determinado pela posi¸c˜ao da regi˜ao com rela¸c˜ao aos semi-planos
externos `as arestas do retˆangulo de recorte. Uma maneira eficiente de calcular os c´odigos resulta da
observa¸c˜ao de que o bit 1 ´e igual ao bit de sinal de (y
max
−y); o 2 ´e o bit de sinal de (y −y
min
); o 3 ´e o
bit de sinal de (x
max
−x), e o 4 e o de (x −x
min
).
• 1

bit: semiplano acima da aresta superior y > y
max
• 2

bit: semiplano abaixo da aresta inferior y < y
min
• 3

bit: semiplano a direita da aresta direita x > x
max
• 4

bit: semiplano a esquerda da aresta esquerda x < x
min
A cada extremidade do segmento de reta ´e atribu´ıdo o c´odigo da regi˜ao a qual ela pertence. Esses
c´odigos s˜ao usados para determinar se o segmento est´a completamente dentro do retˆangulo de visualiza¸c˜ao
ou em um semiplano externo a uma aresta. Se os 4 bits dos c´odigos das extremidades s˜ao iguais a zero,
ent˜ao a linha est´a completamente dentro do retˆangulo. Se ambas as extremidades estiverem no semi plano
externo a uma aresta em particular, como para EF na Figura 7.1, os c´odigos de ambas as extremidades
tem o bit correspondente `aquela aresta igual a 1. Para EF, os c´odigos s˜ao 0001 e 1201, respectivamente,
79
Figura 7.2: C´odigos das regi˜oes.
o que mostra com o 4

bit que o segmento est´a no semiplano externo `a aresta esquerda. Portanto, se um
and l´ogico dos c´odigos das extremidades for diferente de zero, o segmento pode ser trivialmente rejeitado.
Se a linha n˜ao puder ser trivialmente aceita ou rejeitada, devemos subdividi-la em dois segmentos de
forma que um deles possa ser rejeitado. A subdivis˜ao ´e feita usando uma aresta que seja interceptada pela
linha para subdividi-la em dois segmentos: a se¸c˜ao que fica no semiplano externo `a aresta ´e descartada. 0
teste de quais arestas interceptam a linha segue a mesma ordem dos bits nos c´odigos: de cima-para-baixo,
da direita-para-a-esquerda. Uma propriedade chave dos c´odigos ´e que os bits iguais a um correspondem
a arestas interceptadas: se uma extremidade est´a no semiplano externo a uma aresta, e o segmento falha
nos testes de rejei¸c˜ao trivial, ent˜ao a outra extremidade deve estar no semiplano interno `aquela aresta,
que ´e portanto interceptada pelo segmento. Assim, o algoritmo sempre escolhe um ponto que esteja fora,
e usa os bits do c´odigo iguais a um) para determinar uma aresta de recorte. A aresta escolhida ´e a
primeira encontrada na ordem pr´e-definida, ou seja, a correspondente ao primeiro bit igual a 1 no c´odigo.
0 algoritmo funciona da seguinte maneira: Calcula primeiramente os c´odigos de ambas as extremi-
dades, e checa aceita¸c˜ao ou rejei¸c˜ao trivial. Se nenhum dos testes for bem-sucedido, tomamos uma
extremidade externa (pelo menos uma delas ´e externa), e testamos seu c´odigo para obter uma aresta que
seja interceptada e determinar o ponto de intersec¸c˜ao. Podemos ent˜ao descartar o segmento que vai do
extremo externo ao ponto de intersec¸c˜ao, substituindo o ponto externo pela intersec¸c˜ao. 0 novo c´odigo
para o segmento correspondente ´e calculado, preparando os dados para a pr´oxima itera¸c˜ao.
Considere por exemplo o segmento AD na Figura 7.4. 0 c´odigo do ponto A ´e 0000, e o do ponto D
´e 1001 . Q segmento n˜ao pode ser trivialmente aceito ou rejeitado. 0 algoritmo escolhe D como o ponto
externo, e o seu c´odigo mostra que a linha cruza as arestas superior e esquerda. De acordo com a ordem
de teste, usamos primeiro a aresta superior para recortar AD, gerando AB. O c´odigo de B ´e 0000 e na
pr´oxima intera¸c˜ao o segmento ser´a trivialmente aceito e tra¸cado.
Figura 7.3: Funcionamento do algoritmo de Cohen-Sutherland para recorte de segmentos.
A linha EI requer mais itera¸c˜oes. O primeiro extremo, E, tem c´odigo 0100 e ´e escolhido pelo algoritmo
80
como ponto externo. O c´odigo ´e testado para obter a primeira aresta que a linha cruza, no caso a aresta
inferior, e EI ´e recortado para FI. Na segunda itera¸c˜ao, FI n˜ao pode ser trivialmente aceito ou rejeitado.
O c´odigo da primeira extremidade, F, ´e 0000, de forma que o algoritmo escolhe o ponto externo I, cujo
c´odigo ´e 1010. A primeira aresta interceptada ´e a superior, resultando no segmento FH. O c´odigo de H
´e 0010, e a terceira itera¸c˜ao resulta num corte pela aresta direita. O segmento resultante ´e trivialmente
aceito e tra¸cado na quarta itera¸c˜ao. O Algoritmo 7.1 e 7.2 ilustram este procedimento.
Este algoritmo n˜ao ´a o mais eficiente - como os testes e recorte s˜ao executados numa ordem fixa,
eventualmente ser˜ao feitos recortes desnecess´arios. Por exemplo, quando a intersec¸c˜ao com uma aresta
do retˆangulo ´e uma “intersec¸c˜ao externa”, que n˜ao est´a na fronteira do retˆangulo de visualiza¸c˜ao (ponto
H na linha EI, Figura 7.4). Existem algoritmos mais eficientes (v. Foley, 3.12), mas este ainda ´e o mais
utilizado, por ser simples e bastante conhecido.
typedef enum {LEFT = 0, RIGHT = 1, BOTTOM = 2, TOP = 3} aresta;
typedef enum {TRUE, FALSE} boolean;
typedef boolean outcode;
/* Retorna TRUE se todos os outcodes em codigo sao FALSE, e
* FALSE c.c. */
boolean Vazio(outcode codigo[]);
/* Retorna TRUE se a interseccao logica entre codigo1 e codigo
* 2 e vazia, e FALSE c.c. */
boolean InterseccaoVazia(outcode codigo0[], outcode codigo1 []);
/* Retorna TRUE se codigo0 e codigo 1 sao iguais, e FALSE c.c. */
boolean Igual(outcode codigo0[], outcode codigo1[]);
/* Calcula outcode para ponto (x,y) */
void CalculaOutCode(float x, float y, outcode codigo[]) {
int i;
for (i - LEFT; i < = TOP; i++)
codigo[i] = FALSE;
/* Fim for */
if (y > YMAX)
codigo[TOP] = TRUE;
else if (y < YMIN)
codigo[BOTTOM] = TRUE;
/* Fim se */
if (x > xmax)
codigo[RIGHT] = TRUE;
else if (x < xmax)
codigo[BOTTOM] = TRUE;
/* Fim Se */
}/* End CalculaOutCode */
Algoritmo 7.1: Calculando os c´odigos do algoritmo de Cohen-Sutherland.
7.2 Recorte de Circunferˆencias
Para recortar uma circunferˆencia contra um retˆangulo, podemos primeiro executar um teste de aceita¸c˜ao/rejei¸c˜ao
trivial interceptando a extens˜ao da circunferˆencia (um quadrado do tamanho do diˆametro da circun-
ferˆencia) com o retˆangulo de visualiza¸c˜ao usando o algoritmo para recorte de pol´ıgonos que ser´a visto a se-
guir. Se a circunferˆencia intercepta o retˆ angulo, ela ´e subdivida em quadrantes, e testes de aceita¸c˜ao/rejei¸c˜ao
trivial s˜ao feitos para cada um. Estes testes podem levar a testes por octantes.
´
E poss´ıvel ent˜ao calcular
a intersec¸c˜ao da circunferˆencia e da aresta analiticamente, resolvendo suas equa¸c˜oes simultaneamente, e
a seguir fazer a convers˜ao matricial dos arcos resultantes. Se a convers˜ao matricial ´e r´apida, ou se a cir-
cunferˆencia n˜ao ´e muito grande, seria provavelmente mais eficiente usar a t´ecnica de scissoring, testando
cada pixel na circunferˆencia contra os limites do retˆangulo antes de tra¸ca-lo.
Um algoritmo para recorte de pol´ıgonos precisa tratar de muitos casos distintos, como mostra a Figura
7.5. O caso (a) ´e particularmente interessante porque um pol´ıgono cˆoncavo ´e recortado em dois pol´ıgonos
81
/* algoritmo de recorte de Cohen-Sutherland para linha P0(x0,y0) a
* P1(x1,y1), e retangulo de recorte com diagonal de (xmin,ymin) a
* (xmax,ymax). */
void RecorteLinhaCohenSutherland(float x0,float y0,float x1,float y1,int valor){
boolean aceito, pronto;
outcode outcode0[4], outcode1 [4], *outcode0ut; /* outcodes para P0, P1 e
quaisquer outros pontos que
estao fora do retangulo de
recorte */
float x, y;
aceito = FALSE; pronto = FALSE;
CalculaOutCode(x0,y0,outcode0); CalcuiaOutCode(xl ,y1 ,outcode1);
do {
if (vazio(outcode0) && vazio(outcode1)){
/* aceitacao trivial e sai */
aceito = TRUE;
pronto = TRUE;
}else if (interseccao_vazia(outcode0,outcode1))
/* rejeicao trivial e sai */
pronto = TRUE;
else {
/* ambos os testes falharam, entao calcula o segmento de
reta a recortar: a partir de um ponto externo a uma
interseccao com a aresta de recorte */
/* pelo menos um ponto esta fora do retangulo de recorte;
seleciona-o */
outcode0ut= vazio(outcode0) ? outcode1 : outcode0;
/* acha agora o ponto de interseccao, usando as formulas:
y = y0 + inclinacao * (x-x0), x = x0 + ( 1 /inclinacao) * (y-y0) */
if (outcodeOut(TOP)) {
/* divide a linha no topo do retangulo de recorte */
x= x0 + (x1-x0) * (ymax-y0)/(y1-y0); y= ymax;
}else if (outcode0ut[BOTTOM]) {
/* divide a linha na base do retangulo de recorte */
x = x0 + (x1-x0) + (ymin-y0)/(y1-y0); y = ymin;
}else if (outcode0ut[RIGHT]) {
/* divide a linha na aresta direita do retangulo de recorte */
y = y0 + (y1 -y0) + (xmax-x0)/(x1-x01; x = xmax;
}else if (outcode0ut[LEFT]) {
/* divide a linha na aresta esquerda do retangulo de recorte */
y = y0 + (y 1 -y0) + (xmin-x0)/(x1-x0); x = xmin;
} /* Fim se */
/* agora move o ponto externo para o ponto de interseccao, para
recortar e preparar para o proximo passo */
if (igual(outcode0ut,outcode0)) {
x0 = x; y0 = y; CalculaOutCode(x0,y0,outcode0);
}else{
x1 = x; y1 = y; CalculaOutCode(x1,y1,outcode1);
}
}/* fim do else da subdivisao */
} while (pronto);
if (aceito)
MeioPontoLinhaReal(x0,y0,x1,y1),valor); /* versao do algoritmo para coordenadas reais */
} /* fim do algoritmo de recorte e tracado */
Algoritmo 7.2: Desenhando a linha com o algoritmo de Cohen-Sutherland. Algumas das fun¸c˜oes
usadas est˜ao ilustradas no Algoritmo 7.2.
82
Figura 7.4: Algoritmo de Sutherland-Hodgman para Recorte de Pol´ıgonos.
Figura 7.5: Exemptos de recorte de pol´ıgonos. (a) M´ ultiplos componentes. (b) Caso convexo (c) Caso
cˆoncavo com muitas arestas exteriores.
separados. O problema ´e complexo porque cada aresta do pol´ıgono precisa ser testada contra cada aresta
do ret9ngulo de visualiza¸c˜ao; novas arestas precisam ser acrescentadas, arestas existentes precisam ser
descartadas, mantidas ou subdivididas. V´arios pol´ıgonos podem resultar do recorte de um ´ unico, e ´e
necess´ario uma abordagem organizada para tratar todos os caso poss´ıveis.
O algoritmo para recorte de pol´ıgonos de Sutherland-Hodgman usa a estrat´egia “dividir para conquis-
tar”; resolve uma s´erie de problemas simples e idˆenticos cujas solu¸c˜oes, quando combinadas, resolvem o
problema todo. O problema b´asico consiste em recortar o pol´ıgono contra uma ´ unica aresta de recorte
infinita. Quatro arestas, cada qual definindo um lado do retˆangulo, recortam o pol´ıgono sucessivamente
contra o retˆangulo de visualiza¸c˜ao.
Note a diferen¸ca entre esta estrat´egia para um pol´ıgono e o algoritmo de Cohen-Sutherland para
recorte de linhas: O algoritmo para pol´ıgonos recorta quatro arestas sucessivamente, enquanto que o
algoritmo para linhas testa o c´odigo para verificar qual aresta ´e interceptada, e recorta apenas quando
necess´ario. O algoritmo de Sutherland-Hodgman ´e na verdade mais geral: um pol´ıgono (cˆoncavo ou
convexo) pode ser recortado contra qualquer pol´ıgono de recorte convexo. Em 3D, pol´ıgonos podem ser
recortados contra volumes poliedrais convexos definidos por planos. O algoritmo aceita como entrada
uma s´erie de v´ertices v1, v2, ..., vn que, em 2D, definem as arestas de um pol´ıgono. A seguir, recorta
o pol´ıgono contra uma ´ unica aresta de recorte infinita, e retorna outra s´erie de v´ertices que definem o
pol´ıgono recortado. Num segundo passo, o pol´ıgono parcialmente recortado ´e recortado novamente contra
a segunda aresta, e assim por diante.
O algoritmo movimenta-se em torno do pol´ıgono, indo do v´ertice vn ao v´ertice v1, e de volta a vn,
examinando a cada passo a rela¸c˜ao entre um v´ertice e a aresta de recorte. Em cada passo, zero, um ou
dois v´ertices s˜ao adicionados `a lista de sa´ıda dos v´ertices que definem o pol´ıgono recortado, dependendo
83
da posi¸c˜ao do v´ertice sendo analisado em rela¸c˜ao `a aresta de recorte.
Figura 7.6: Quatro situa¸c˜oes poss´ıveis no recorte de pol´ıgonos.
S˜ao quatro situa¸c˜oes poss´ıveis (Figura 7.6). Consideremos uma aresta do pol´ıgono que vai do v´ertice
s ao v´ertice p. Suponha que o v´ertice s foi analisado na itera¸c˜ao anterior, e a intera¸c˜ao corrente este
analisando p. No caso 1 , a aresta do pol´ıgono est´a completamente dentro da fronteira do retˆangulo de
visualiza¸ c˜ao, e o v´ertice p ´e adicionado `a lista de sa´ıda. No caso 2, o ponto i, que define a intersec¸c˜ao
entre a aresta do pol´ıgono e a aresta do retˆangulo, ´e colocado como um v´ertice na lista de sa´ıda. No caso
3, ambos os v´ertices est˜ao fora do retˆangulo, e nenhum ´e colocado na lista de sa´ıda. No caso 4, ambos os
pontos de intersec¸c˜ao, i e p, s˜ao colocados na lista de sa´ıda.
O procedimento, mostrado no Algoritmo 7.3, aceita um vetor de v´ertices, inVertexArray, e cria outro
vetor outVertexArray. Para manter o c´odigo simples, n˜ao inclu´ımos verifica¸c˜ao dos erros nos limites dos
vetores, e usamos o procedimento Output() para incluir um v´ertice em outVertexArray. O procedimento
Intersect() calcula a intersec¸c˜ao de uma aresta s-¿p do pol´ıgono com a aresta clipBoundary, definida
por dois v´ertices da fronteira do pol´ıgono de recorte. A fun¸c˜ao Inside() retorna true se o v´ertice est´a
no interior da fronteira de recorte. Assume-se que o v´ertice est´a no interior da fronteira se estiver “a
esquerda da aresta de recorte, quando olha-se do primeiro para o segundo v´ertice da aresta”. Esta
orienta¸c˜ao corresponde a uma enumera¸c˜ao das arestas no sentido anti-hor´ario. Para calcular se um ponto
est´a fora da fronteira de recorte, podemos testar o sinal do produto vetorial do vetor normal `a fronteira
de recorte e da aresta do pol´ıgono.
0 algoritmo ´e bastante geral, e pode ser estruturado para chamar a si pr´oprio recursivamente de uma
forma que o torna bastante eficiente para implementa¸c˜ao em hardware.
84
/* Algoritmo de Sutherland-Hodgman para recorte do pol´ıgonos */
#define MAX 20
typedef struct {float x,y;} ponto;
typedef ponto vertice;
typedef vertice aresta[2];
typedef vertice VetorVertices[MAX];
typedef enum {TRUE = 1, FALSE = 0} boolean;
/* Acrescenta um novo vertice a vetorSaida, e atualiza tamSaida */
void saida(vertice novoVertice, int *tamSaida, VetorVertices vetorSaida);
/* Checa se o vertice esta dentro ou fora da aresta de recorte */
boolean dentro(vertice testeVertice, aresta arestaRecorte);
/* recorta a aresta (prim,seg) do poligono contra arestaRecorte,
* retorna o novo ponto */
vertice intercepta(vertice prim, vertice seg, aresta arestaRecorte);
void RecortePoligonosSutherlandHodgman(
VetorVertices vetorEntrada, /* vetor de vertices de entrada */
VetorVertices vetorSaida, /* vetor de vertices de saida */
int tamEntrada, /* numero de entradas em vetorEntrada */
int tamSaida, /* numero de vertices em vetorSaida */
aresta arestaRecorte /* aresta do poligono de recorte */){
vertice s, p; /* pontos inicial e final da aresta de recorte corrente */
vertice i; /* ponto de interseccao com uma aresta de recorte */
int j; /* contador para o loop de vertices */
*tamSaida = 0;
s = vetorEntrada[tamEntrada]; / * comeca com o ultimo vertice em vetorEntrada */
for (j = 1 ;j < = tamEntrada;j + + ) {
p= vetorEntrada[j]; /* agora s e p correspondem aos vertices na Fig. */
if (dentro(s,arestaRecorte)) {
/* casos 1 e 4 */
if (dentro(s,arestaRecorte))
saida(p,tamSaida,vetorSaida);
else {
i = intercepta(s,p,arestaRecorte);
saida(i,tamSaida,vetorSaida);
saida(p,tamSaida,vetorSaida);
}/* Fim Se */
}else{
/* casos 2 e 3 */
if (dentro(s,arestaRecorte)) {
i = intercepta(s,p,arestaRecorte);
saida(i,tamSaida,vetorSaida);
}/* Fim Se */
}/*Fim Se */
s = p;
}/* fim do for */
}/* fim do algoritmo de recorte */
Algoritmo 7.3: Algoritmo de Cohen-Sutherland.
85
Cap´ıtulo 8
Curvas e Superf´ıcies em Computa¸c˜ao
Gr´afica
Curvas e superf´ıcies tridimensionais (espaciais) desempenham um papel importante:
• na engenharia, projeto e manufatura de uma ampla gama de produtos, como autom´oveis, cascos de
navios, fuselagem e asas de avi˜oes, lˆaminas de propuls˜ao, sapatos, garrafas, edifica¸c˜oes, etc.
• na descri¸c˜ao e interpreta¸c˜ao de fenˆomenos f´ısicos em ´areas como geologia, f´ısica e medicina.
• Projeto Geom´etrico Apoiado por Computador (Computer Aided Geometric Design): nova
disciplina que incorpora modelos matem´aticos e computacionais desenvolvidos para apoiar os pro-
cessos de engenharia, projeto e manufatura.
Frequentemente, superf´ıcies s˜ao descritas por uma malha de curvas definidas em planos ortogonais
(Figura 8.1). As curvas podem ser obtidas atrav´es da digitaliza¸c˜ao de um modelo f´ısico ou desenho, e
posterior ajuste de uma curva matem´atica aos pontos digitalizados, ou geradas a partir de formula¸c˜oes
criadas especificamente para a defini¸c˜ao de curvas no espa¸co.
Figura 8.1: Representa¸c˜ao de superf´ıcies atrav´es de malhas.
8.1 Representa¸c˜ao de Curvas
Existem duas formas alternativas de representa¸c˜ao:
• por um conjunto de pontos: nesse caso, uma representa¸c˜ao visual adequada pode ser gerada
conectando-se os pontos por segmentos de reta, se estes forem espa¸cados adequadamente (Figura
??). Observe que nas regi˜oes da curva onde a curvatura ´e grande, a proxima¸c˜ao por segmentos de
86
reta ´e particularmente ruim (Figura ??(a)). Uma maneira de melhorar a representa¸c˜ao ´e aumentar
a densidade dos pontos nessas regi˜oes (Figura ??(b)).
• anal´ıtica: ou seja, atrav´es de formula¸c˜oes matem´aticas, o que apresenta v´arias vantagens em rela¸c˜ao
`a representa¸c˜ao anterior:
• precis˜ao,
• armazenagem compacta,
• facilidade de c´alculo (exato) de pontos intermedi´arios (em uma representa¸c˜ao por pontos pontos
intermedi´arios precisam ser determinados por interpola¸c˜ao),
• facilidade para calcular propriedades da curva como inclina¸c˜ao e curvatura (em uma representa¸c˜ao
por pontos tais propriedades precisam ser calculadas por diferencia¸c˜ao num´erica, um procedimento
que ´e pouco preciso),
• facilidade para desenhar as curvas,
• facilidade para fazer altera¸c˜oes cont´ınuas no formato da curva de forma a atender requisitos de
projeto (“design”).
Figura 8.2: Aproxima¸c˜ao de curvas por segmentos de reta conectados.
8.2 Curve Fitting x Curve Fairing
8.2.1 Ajuste de curvas (curve fitting)
Frequentemente, deseja-se obter representa¸c˜oes anal´ıticas para curvas definidas originalmente por con-
juntos de pontos - por exemplo, pontos em uma curva ou superf´ıcie real foram digitalizados. Do ponto
de vista matem´atico, esse ´e um problema de interpola¸c˜ao. Uma curva que ajusta (fit) os pontos da-
dos passa por todos esses pontos. Uma t´ecnica usual de ajuste de curvas s˜ao as splines c´ ubicas, uma
estrat´egia de aproxima¸c˜ao polinomial por partes.
8.2.2 Aproxima¸c˜ao de curvas (curve fairing)
Se os pontos dados s˜ao aproxima¸c˜oes para valores desconhecidos, por exemplo, s˜ao pontos coletados ou
obtidos em medidas experimentais, ent˜ao o que se deseja ´e uma curva que mostre a tendˆencia dos dados.
Em geral, a curva obtida pode n˜ao passar por nenhum dos pontos dados, e diz-se que a curva aproxima
(fair) os dados. Alternativamente, pode-se desejar gerar uma descri¸c˜ao matem´atica de uma curva no
espa¸co sem qualquer conhecimento pr´evio da forma da curva. Para esse caso, t´ecnicas usuais s˜ao as
representa¸c˜oes de B´ezier e B-splines (ambas s˜ao estrat´egias de aproxima¸c˜ao de curvas).
8.3 Representa¸c˜oes Param´etricas e N˜ao Param´etricas (expl´ıcita
e impl´ıcita)
Para uma curva plana, a forma n˜ao param´etrica expl´ıcita ´e dada por
y = f(x) (8.1)
por exemplo, a equa¸c˜ao de uma linha reta ´e dada por
87
y = mx +b (8.2)
Desta forma, obt´em-se um valor de y para cada valor de x dado. Consequentemente, curvas fechadas,
ou com valores m´ ultiplos, como um c´ırculo, n˜ao podem ser representadas explicitamente. Essa limita¸c˜ao
n˜ao existe no caso de representa¸c˜oes impl´ıcitas, na forma
f(x, y) = 0 (8.3)
A equa¸c˜ao impl´ıcita de segundo grau gen´erica:
ax
2
+ 2bxy +cy
2
+ 2dx + 2ey +f = 0 (8.4)
engloba uma variedade de curvas bi-dimensionais denominadas se¸c˜oes cˆonicas. Os trˆes tipos de
se¸c˜oes cˆonicas s˜ao a par´abola, a hip´erbole e a elipse (um c´ırculo ´e um caso especial de uma elipse)
(Figura ??).
Figura 8.3: Aproxima¸c˜ao de curvas por segmentos de reta conectados.
Dependendo dos valores de a, b, c, d, e e f, diferentes tipos de se¸c˜oes cˆonicas s˜ao produzidas. Se a
se¸c˜ao cˆonica ´e definida em rela¸c˜ao a um sistema de coordenadas local e passa pela origem, ent˜ao f = 0.
8.3.1 Limita¸c˜oes das representa¸c˜oes n˜ao param´etricas
• Ambas (expl´ıcita e impl´ıcita) s˜ao dependentes do sistema de coordenadas, cuja escolha afeta a
facilidade de uso. Por exemplo, surgem problemas se no sistema de coordenadas escolhido for
necess´aria uma inclina¸c˜ao infinita como condi¸c˜ao de contorno, pois essa inclina¸c˜ao n˜ao pode ser
usada diretamente como uma condi¸c˜ao de contorno num´erica. Ou o sistema de coordenadas ´e
alterado, ou a inclina¸c˜ao infinita ser´a representada numericamente por um valor muito grande,
positivo ou negativo.
88
• pontos em uma curva calculados a partir de incrementos uniformes em x ou y n˜ao est˜ao distribu´ıdos
uniformemente ao longo da curva, o que afeta a qualidade e precis˜ao de uma representa¸c˜ao gr´afica.
Estas limita¸c˜oes s˜ao superadas pelo uso de representa¸c˜oes param´etricas.
Na forma param´etrica, cada coordenada de um ponto em uma curva ´e representada como uma fun¸c˜ao
de um ´ unico parˆametro, sendo que a posi¸c˜ao de um ponto na curva ´e fixada pelo valor do parˆametro.
Para uma curva 2D que usa t como parˆametro, as coordenadas cartesianas de um ponto na curva s˜ao:
x = x(t)
y = y(t) (8.5)
O vetor que define a posi¸c˜ao de um ponto na curva ´e portanto dado por
P(t) = [ x(t) y(t) ] (8.6)
A derivada, ou vetor tangente da curva ´e dada por
P

(t) = [ x

(t) y

(t) ] (8.7)
A inclina¸c˜ao da curva ´e dada por
dx
dy
=
dx
dt
dy
dt
=
x

(t)
y

(t)
(8.8)
Observa¸c˜oes
• A forma param´etrica ´e adequada para representar curvas fechadas e com valores m´ ultiplos. A forma
n˜ao param´etrica pode ser obtida eliminando-se o parˆametro para obter uma ´ unica equa¸c˜ao em x e
y.
• Uma vez que um ponto na curva ´e especificado por um ´ unico valor de parˆametro, a forma pa-
ram´etrica ´e independente do sistema de coordenadas. Os extremos e o comprimento da curva s˜ao
fixos pelo intervalo de varia¸c˜ao do parˆametro, frequentemente normalizado para , por conveniˆencia.
Como as curvas s˜ao independentes do sistema de coordenadas, elas s˜ao facilmente manipuladas
usando as transforma¸c˜oes geom´etricas afins (ver Cap´ıtulo 5).
• Determinar um ponto em uma curva, i.e., determinar o valor de y, dado x, ´e trivial no caso da
representa¸c˜ao expl´ıcita. No caso da param´etrica, ´e necess´ario obter o valor do parˆametro t, a partir
de x, e a seguir usar este valor para obter y. (Para equa¸c˜oes param´etricas mais complexas, uma
t´ecnica iterativa pode ser mais conveniente).
• Ambas as formas de representa¸c˜ao tˆem vantagens e desvantagens em situa¸c˜oes espec´ıficas!
Exemplos:
1. segmento de reta
Para 2 vetores que especificam as posi¸c˜oes iniciais P1 e P2, uma representa¸c˜ao param´etrica do
segmento ´e dada por
Como P(t) ´e um vetor de posi¸c˜ao, cada um de seus componentes tem uma representa¸c˜ao param´etrica
x(t) e y(t) entre P1 e P2.
2. C´ırculo no primeiro quadrante
Uma compara¸c˜ao das representa¸c˜oes visuais obtidas a partir das formas param´etrica e n˜ao-param´etrica
para um c´ırculo no primeiro quadrante ´e apresentada na Figura 8.4 (observe que a representa¸c˜ao
param´etrica para uma curva n˜ao ´e ´ unica!)
Os pontos na circunferˆencia mostrados nas Figuras 8.4(b) e 8.4(c) foram obtidos com intervalos
constantes dos parˆametros q e t, respectivamente. A primeira representa¸c˜ao produz comprimentos
de arcos idˆenticos ao longo da circunferˆencia, ao contr´ario da segunda (a qual, entretanto, tem
aparˆencia visual melhor que a mostrada em 8.4(a), gerada pela representa¸c˜ao expl´ıcita). Por outro
lado, o c´alculo das fun¸c˜oes trigonom´etricas ´e computacionalmente caro, de maneira que a segunda
forma de representa¸c˜ao param´etrica representa um meio termo entre a forma expl´ıcita e a forma
param´etrica padr˜ao.
89
Figura 8.4: Pontos de uma circunferˆencia.
8.4 Curvas de B´ezier
T´ecnicas de aproxima¸c˜ao de curvas s˜ao muito usadas em ambientes de projeto (CAD) interativos, por
serem mais intuitivas do que as t´ecnicas de ajuste. Um m´etodo adequado para o design de curvas e
superf´ıcies de forma-livre em ambientes interativos foi desenvolvido por Pierre B´ezier. Uma curva de
B´ezier ´e determinada por um pol´ıgono de defini¸c˜ao (Figuras 8.5 e ??).
Figura 8.5: Representa¸c˜ao de uma curva de B´ezier definida pelos pontos B
0
, B
1
, B
2
e B
3
.
Matematicamente, uma curva de B´ezier param´etrica ´e definida como
P(t) =
n

i=0
B
i
J
n,i
(t) 0 ≤ t ≤ 1 (8.9)
onde as fun¸c˜oes de blending, ou fun¸c˜oes base de B´ezier s˜ao
J
n,i
(t) =
_
n
i
_
t
i
(1 −t)
n−i
(8.10)
com
_
n
i
_
=
n!
i!(n −i)!
(8.11)
J
n,i
(t) ´e a i-´esima fun¸c˜ao base de Bernstein de ordem n, onde n, o grau da fun¸c˜ao-base, e portanto
do segmento de curva polinomial, ´e um menos o n´ umero de pontos do pol´ıgono de defini¸c˜ao. Os v´ertices
do pol´ıgono s˜ao numerados de 0 a n (como na Figura 8.5). A Figura 8.6 mostra as fun¸c˜oes de blending
90
Figura 8.6: Fun¸c˜oes de blending para v´arios valores de n.
para v´arios valores de n. Observe a simetria das fun¸c˜oes. Examinando-se as Equa¸c˜oes 8.9 a 8.11 para o
primeiro ponto na curva, i.e., em t = 0, verifica-se que
J
n,0
(0) = 1 i = 0
J
n,i
(0) = 0 i = 0
(8.12)
Portanto,
P(0) = B
0
J
n,0
(0) = B
0
(8.13)
e o primeiro ponto na curva coincide com o primeiro ponto do pol´ıgono de controle. Verifica¸c˜ao an´aloga
pode ser feita para o ´ ultimo ponto, i.e., em t = 1. As fun¸c˜oes base da Figura 8.6 ilustram estes resultados.
Al´em disso, pode-se mostrar que para qualquer valor do parˆametro t, o somat´orio das fun¸c˜oes base ´e
1, i.e.,
n

i=0
J
n,i
= 1 (8.14)
A equa¸c˜ao para uma curva de B´ezier pode ser expressa na forma matricial como
P(t) = TNG = FG (8.15)
onde F = J
n,0
J
n,1
· · · J
n,n
e G
r
= B
0
B
1
· · · B
n
.
As matrizes espec´ıficas para valores pequenos de n (n = 3, 4) s˜ao de particular interesse. Para qualquer
valor de n, a matriz [N] ´e sim´etrica em rela¸c˜ao `a diagonal principal e o canto triangular inferior direito
cont´em apenas zeros.
Em geral, uma forma complexa n˜ao pode ser modelada por uma ´ unica curva, mas por v´arias curvas
que s˜ao conectadas em seus pontos extremos. Ao criar as jun¸c˜oes, o projetista, em geral, deseja controlar
91
a continuidade nos pontos de jun¸c˜ao. Continuidade de ordem 0 significa que as 2 curvas se encontram;
continuidade de primeira ordem exige que as curvas sejam tangentes no ponto de jun¸c˜ao, e continuidade
de segunda ordem exige que as curvaturas sejam as mesmas.
A formula¸c˜ao de B´ezier apresenta v´ arias propriedades interessantes:
• As fun¸c˜oes-base s˜ao reais.
• O grau do polinˆomio que define uma curva ´e um menos o n´ umero de pontos do pol´ıgono de defini¸c˜ao.
• A forma da curva geralmente acompanha a forma do pol´ıgono de defini¸c˜ao (na verdade ´e uma vers˜ao
“suavizada” da forma do pol´ıgono (v. Fig. 3.3)). Assim, para desenhar uma curva, basta definir o
pol´ıgono e depois ajustar os pontos que forem necess´arios para aproximar melhor a forma desejada.
Isso torna a formula¸c˜ao adequada para o design interativo. Um projetista experiente consegue obter
a forma desejada depois de 2 ou 3 intera¸c˜oes com um sistema computacional.
• O primeiro e ´ ultimo pontos da curva coincidem com o primeiro e ´ ultimo pontos do pol´ıgono de
defini¸c˜ao. Em situa¸c˜oes pr´aticas, em geral ´e desej´avel ter controle direto sobre os pontos extremos
da curva.
• Os vetores tangentes nos extremos da curva tˆem a mesma dire¸c˜ao que o primeiro e o ´ ultimo seg-
mentos do pol´ıgono de defini¸c˜ao, respectivamente.
• A curva est´a contida no fecho convexo do pol´ıgono de defini¸c˜ao, i.e., no maior pol´ıgono convexo que
pode ser obtido com os v´ertices do pol´ıgono de defini¸c˜ao (Figura 8.5). Uma consequˆencia simples
deste fato ´e que um pol´ıgono plano sempre gera uma curva plana.
A importˆancia desta propriedade est´a principalmente no contexto de verifica¸c˜ao de interferˆencia.
Suponha que desejamos saber se 2 curvas se interceptam. Por exemplo, cada uma representa o
caminho a ser percorrido pelo bra¸co de um robˆo, e nosso objetivo ´e garantir que os caminhos n˜ao se
interceptam, evitando colis˜oes. Ao inv´es de tentar calcular uma poss´ıvel intersec˜ao, podemos fazer
um teste muito mais barato: envolver o pol´ıgono de controle no menor retˆangulo que o cont´em
e cujas arestas s˜ao paralelas a um sistema de coordenadas (minmax boxes). O retˆangulo cont´em
o pol´ıgono de controle e, pela propriedade do fecho convexo, cont´em tamb´em a curva. Verficar
se os 2 retˆangulos se interceptam ´e um teste trivial, e fica simples checar a n˜ao-intersec¸c˜ao. Se
houver intersec¸c˜ao dos retˆangulos, mais verifica¸c˜oes precisam ser feitas nas curvas. A possibilidade
de detectar n˜ao-interferˆencia de forma r´apida ´e muito importante, pois na pr´atica ´e freq¨ uente que
tais testes precisem ser feitos milhares de vezes para cada objeto.
• A curva exibe a propriedade da varia¸c˜ao decrescente (variation diminishing property). Isto significa,
basicamente, que a curva n˜ao oscila em rela¸c˜ao a qualquer linha reta com mais frequˆencia que o
pol´ıgono de defini¸c˜ao. Algumas representa¸c˜oes matem´aticas tˆem a tendˆencia de amplificar, ao inv´es
de suavizar, quaisquer irregularidades de formato esbo¸cadas pelos pontos de defini¸c˜ao, enquanto
que outras, como as curvas de B´ezier, sempre suavizam os pontos de controle. Assim, a curva nunca
cruza uma linha reta arbitr´aria mais vezes que a sequˆencia de segmentos que conectam os pontos
de controle (v. Fig.)
• A curva ´e invariante sob transforma¸c˜oes afins. Transforma¸c˜oes afins est˜ao dispon´ıveis em qualquer
sistema de CAD, pois ´e essencial reposicionar, escalar, etc. os objetos. Esta propriedade garante
que os 2 procedimentos abaixo produzem os mesmos resultados: a) primeiro calcula um ponto na
curva, e depois aplica a ele uma transforma¸c˜ao afim; e b) primeiro, aplica uma transforma¸c˜ao afim
ao pol´ıgono de defini¸c˜ao, e depois gera o ponto na curva.
Uma consequˆencia pr´atica: suponha que tra¸camos uma curva c´ ubica calculando 100 pontos sobre ela;
e que agora queremos desenhar a mesma curva depois de uma rota¸c˜ao. Podemos aplicar a rota¸c˜ao a
cada um dos 100 pontos, e desenhar os pontos resultantes, ou aplicar a rota¸c˜ao a cada um dos 4 pontos
do pol´ıgono de controle, calcular novamente os 100 pontos e tra¸c´a-los. A primeira estrat´egia requer que
a rota¸c˜ao seja aplicada 100 vezes, e a segunda requer a sua aplica¸c˜ao apenas 4 vezes!
´
E interessante
observar que as curvas de B´ezier n˜ao s˜ao invariantes sob transforma¸c˜oes projetivas.
Bibliografia
Fonte: Caps. 4,5 Rogers & Adams - Mathematical Elements for Computer Graphics
92
Cap´ıtulo 9
Apostila Modelagem
O texto sobre modelagem pode ser encontrado no seguinte endere¸co:
http://gbdi.icmc.usp.br/documentacao/apostilas/cg/downloads/modelagem.pdf
93
Cap´ıtulo 10
Rendering
Esta apostila est´a sob revis˜ao e ser´a adicionada nesta vers˜ao assim que poss´ıvel. A vers˜ao anterior pode
ser encontrada em:
http://gbdi.icmc.usp.br/~cg/ap10.html
94
Cap´ıtulo 11
Cores e Sistemas de Cores
11.1 Percep¸c˜ao de Cor
A cor ´e o atributo da percep¸c˜ao visual que pode ser descrito atrav´es dos nomes usados para identificar as
cores, como branco, cinza, preto, amarelo, etc., ou da combina¸c˜ao delas. As diferentes cores, ou espectros
luminosos, que podem ser percebidos pelo sistema visual humano correspondem a uma pequena faixa de
freq¨ uˆencias do espectro eletromagn´etico, que inclui as ondas de r´adio, microondas, os raios infravermelhos
e os raios X, como mostrado na Figura 11.1.
Figura 11.1: Espectro eletromagn´etico [Gro94].
A freq¨ uˆencia mais baixa do espectro vis´ıvel corresponde `a cor vermelha (4.3 × 10
14
hertz) e a mais
alta `a cor violeta (7.5 × 10
14
hertz). Os valores de freq¨ uˆencia intermedi´arios correspondem a cores que
passam pelo alaranjado e amarelo e por todas as outras cores, at´e chegar nos verdes e azuis. As cores
s˜ao ondas eletromagn´eticas descritas pelo seu comprimento de onda (l) e especificadas, tipicamente, em
nanˆometros (nm).
Os comprimentos de onda maiores possuem distˆancias focais maiores e, conseq¨ uentemente, requerem
maior curvatura da lente do olho para serem focalizados, (a cor vermelha possui a maior distˆancia focal
e a azul, a menor). A utiliza¸c˜ao simultˆ anea de cores localizadas em extremos opostos do espectro fazem
com que a lente altere o seu formato constantemente, causando cansa¸co no olho. A vis˜ao estereosc´opica
da cor ´e um efeito relacionado ao processo de focaliza¸c˜ao da imagem na retina, que faz com que cores
puras localizadas `a mesma distˆancia do olho pare¸cam estar a distˆancias diferentes; por exemplo, a cor
vermelha parece estar mais pr´oxima e a cor azul parece estar mais distante.
Uma fonte de luz (como, por exemplo, o sol ou uma lˆampada) emite em todas as freq¨ uˆencias do
espectro vis´ıvel, produzindo a luz branca que incide sobre um objeto. Parte dessa luz ´e absorvida e a outra
parte ´e refletida, determinando a cor resultante do objeto. Quando h´a predominˆancia das freq¨ uˆencias
baixas, diz-se que o objeto ´e vermelho, ou que a luz percebida possui uma freq¨ uˆencia dominante (ou um
comprimento de onda dominante) na freq¨ uˆencia baixa do espectro. A freq¨ uˆencia dominante tamb´em ´e
chamada de matiz ou, simplesmente, de cor da luz.
O matiz ´e o atributo de uma sensa¸c˜ao visual que faz com que uma ´area pare¸ca ser similar a uma
ou 2 das cores percebidas vermelha, amarela, laranja, azul, p´ urpura [Hun78]. A partir dessa defini¸c˜ao,
pode-se diferenciar a cor crom´atica, que possui matiz, da acrom´atica, que ´e desprovida de matiz. As
caracter´ısticas da luz s˜ao descritas atrav´es de propriedades como o matiz e as sensa¸c˜oes de brilho e
satura¸ c˜ao. O matiz ´e usado para dar um nome a uma cor, o brilho corresponde ao grau de luminˆancia
95
de uma cor em rela¸c˜ao `a luminˆancia de outra ou em rela¸c˜ao ao fundo, e a satura¸c˜ao ´e a pureza aparente
de um matiz. Quanto maior o dom´ınio de um comprimento de onda, maior ´e a sua satura¸c˜ao. As cores
preta, branca e cinza possuem satura¸c˜ao uniforme em todos os comprimentos de onda e, por isso, s˜ao
diferenciadas apenas pelo brilho. As propriedades de satura¸c˜ao e de matiz de uma cor s˜ao referenciadas
como cromaticidade.
Algumas pessoas possuem uma anomalia, denominada daltonismo, que impede a distin¸c˜ao de uma ou
mais cores. O daltonismo se deve a um defeito na constitui¸c˜ao dos cones e est´a vinculada ao sexo. Ele
atinge cerca de 8% dos homens, e apenas 0.5% das mulheres. Esse defeito pode se manifestar em 1, 2 ou
nos 3 tipos de receptores. Os tricomatas s˜ao daltˆonicos que possuem os 3 sistemas de pigmentos, mas que
utilizam os sistemas em propor¸c˜oes diferentes das pessoas normais e das pessoas com o mesmo defeito. Os
dicromatas percebem as cores defeituosamente porque combinam apenas 2 sistemas. Os monocromatas
percebem apenas gradua¸c˜oes de claro e de escuro, pois sua estimula¸c˜ao visual se baseia em um ´ unico
sistema crom´atico. Um outro aspecto que tamb´em influencia na percep¸c˜ao de cores ´e o amarelamento das
lentes do olho que ocorre com o passar dos anos, fazendo com que as pessoas se tornem menos sens´ıveis,
por exemplo `a cor amarela do que `a cor azul.
11.2 Sistemas de Cores Prim´arias
O conte´ udo desta se¸c˜ao, que descreve alguns sistemas de cores prim´arias, foi baseado principalmente em
Hearn [Hea94], Cap´ıtulo 15.
Um sistema de cores ´e um m´etodo que explica as propriedades ou o comportamento das cores num
contexto particular. N˜ao existe um sistema que explique todos os aspectos relacionados `a cor. Por isso,
s˜ao utilizados sistemas diferentes para ajudar a descrever as diferentes caracter´ısticas da cor que s˜ao
percebidas pelo ser humano. Existem v´arios sistemas de cores, sendo que ser˜ao apresentados apenas
alguns dos principais: o XYZ, o RGB, o HSV e o HLS.
As cores prim´arias s˜ao as 2 ou 3 cores que um sistema utiliza para produzir outras cores. As cores
podem ser produzidas a partir de uma combina¸c˜ao das prim´arias, ou ent˜ao, da composi¸c˜ao de 2 com-
bina¸c˜oes. O universo de cores que podem ser reproduzidas por um sistema ´e chamado de espa¸co de cores
(color space ou color gamut). Alternativamente, um espa¸co de cores (color space) pode ser definido como
uma representa¸c˜ao visual de um modelo de cores, como o cubo definido pelas componentes do modelo
RGB, ou o cone definido pelo modelo HSV. N˜ao existe um conjunto finito de cores prim´arias que pro-
duza todas as cores vis´ıveis, mas sabe-se que uma grande parte delas pode ser produzida a partir de 3
prim´arias.
O estudo da utiliza¸c˜ao de 3 fontes de luz espectral para a gera¸c˜ao de cores ´e chamado de colorimetria, e
tem como um de seus objetivos determinar espa¸cos de cor perceptualmente uniformes. Um espa¸co de cores
(ou sistema de cores) perceptualmente uniforme ´e um no qual distˆancias perceptuais iguais separam todas
as cores. Por exemplo, a escala de cinzas do espa¸co deve transmitir uma transi¸c˜ao suave entre o preto
e o branco. A defini¸c˜ao de um espa¸co de cores uniforme ´e feita atrav´es de medi¸c˜oes emp´ıricas obtidas
sob condi¸c˜oes experimentais rigidamente controladas - as condi¸c˜oes do ambiente e outros parˆametros
importantes devem ser mantidos constantes, como o tamanho das amostras de cores, o espa¸camento
entre as amostras, a luminˆancia e cromaticidade do fundo e da luz ambiente. Apesar dessa limita¸c˜ao,
os espa¸cos perceptuais de cores fornecem ferramentas adequadas para a solu¸c˜ao de problemas como a
compress˜ao de imagens (para decidir o n´ıvel de codifica¸c˜ao da informa¸c˜ao de cor) e pseudo-colora¸c˜ao
1
(para mapear as cores da imagem em um conjunto com espa¸camento perceptual m´aximo).
Os sistemas de cores podem ser aditivos ou subtrativos. Nos modelos aditivos (por exemplo, RGB
e XYZ), as intensidades das cores prim´arias s˜ao adicionadas para produzir outras cores. A Figura 11.2
ilustra a demonstra¸c˜ao do funcionamento desses modelos atrav´es da sobreposi¸c˜ao de c´ırculos coloridos.
Pode-se pensar que o branco ´e a mistura das intensidades m´aximas das 3 cores prim´arias aditivas
(vermelha, verde e azul). Os matizes intermedi´arios (amarelo, turquesa e magenta) s˜ao obtidos atrav´es
da combina¸c˜ao das intensidades m´aximas de 2 cores.
Nos modelos subtrativos (por exemplo, o CMY), as cores s˜ao geradas subtraindo-se o comprimento da
onda dominante da luz branca, por isso, a cor resultante corresponde `a luz que ´e refletida. A Figura 11.3
ilustra a demonstra¸c˜ao do funcionamento desses modelos atrav´es da sobreposi¸c˜ao de c´ırculos coloridos.
Pode-se pensar que o preto ´e a combina¸c˜ao das 3 cores subtrativas (turquesa, magenta e amarela).
A quantidade de preto numa cor ´e indicada pela diferen¸ca entre o branco e a intensidade m´axima das 3
cores prim´arias aditivas. E, da mesma forma, a quantidade de branco numa cor ´e indicada pela diferen¸ca
entre o preto e a intensidade m´ınima das 3 cores prim´arias aditivas.
1
A colora¸c˜ao “falsa” (“pseudocoloring”) ocorre quando as cores “verdadeiras” de uma imagem s˜ao mapeadas em outro
conjunto de cores, ou quando uma imagem adquirida em tons de cinza ´e colorida.
96
Figura 11.2: Ilustra¸c˜ao da mistura de cores aditivas [For94].
Figura 11.3: Ilustra¸c˜ao da mistura de cores subtrativas [For94].
As cores puras e saturadas n˜ao representam toda a classe de cores poss´ıveis, existem ainda os tints,
shades e tones que correspondem, respectivamente, `as cores obtidas atrav´es da adi¸c˜ao de branco, preto e
cinza `as cores saturadas, causando uma altera¸c˜ao no efeito da cor. A Figura 11.4
2
ilustra de tints, shades
e tones obtidos a partir da cor vermelha.
Figura 11.4: Ilustra¸c˜ao da obten¸c˜ao de tints, shades e tones.
A adi¸c˜ao de branco clareia uma cor e cria um tint (por exemplo, adicionando branco ao vermelho
para obter a cor pink). A adi¸c˜ao de preto escurece uma cor e cria um shade (por exemplo, adicionando
preto ao vermelho para obter um castanho-avermelhado (maroon). Al´em disso, a adi¸c˜ao de cinza reduz
o brilho de uma cor e cria um tone. Uma composi¸c˜ao monocrom´atica ´e formada inteiramente de tints,
shades e tones da mesma cor.
11.3 Modelo XYZ
O sistema XY Z de cores prim´arias da CIE (Comiss˜ao Internacional de Ilumina¸c˜ao) ´e um sistema aditivo
que descreve as cores atrav´es de 3 cores prim´arias virtuais X, Y e Z. Esse sistema foi criado devido `a
inexistˆencia de um conjunto finito de cores prim´arias que produza todas as cores vis´ıveis poss´ıveis. Nesse
sistema, as cores C
l
podem ser expressas pela seguinte equa¸c˜ao:
C
l
= x.X +y.Y +z.Z (11.1)
2
reproduzida de http://www.contrib_andrew.cmu.edu:8001/usr/dw4e/color/tints.html.
97
em que X, Y e Z especificam as quantidades das prim´arias padr˜oes necess´arias para descrever uma
cor espectral. A normaliza¸c˜ao dessa quantidade em rela¸c˜ao `a luminˆancia (X + Y + Z) possibilita a
caracteriza¸c˜ao de qualquer cor. As cores desse sistema podem ser expressas como combina¸c˜oes das
quantidades normalizadas abaixo:
x =
X
X +Y +Z
y =
Y
X +Y +Z
z =
Z
X +Y +Z
(11.2)
com x + y + z = 1. Assim, qualquer cor pode ser definida apenas pelas quantidades de x e y
que, por dependerem apenas do matiz e da satura¸c˜ao, s˜ao chamadas de coordenadas de cromaticidade.
A descri¸c˜ao completa de uma cor ´e dada pelas coordenadas de cromaticidade e pelo valor de um dos 3
est´ımulos originais, normalmente do Y , que cont´em a informa¸c˜ao de luminˆancia. Essa descri¸c˜ao possibilita
a obten¸ c˜ao das quantidades de X e Z com as equa¸c˜oes abaixo:
X =
x
y
Y Z =
z
y
Y (11.3)
onde z = 1 −x −y.
O sistema XYZ ´e formado por cores imagin´arias que s˜ao definidas matematicamente. Nesse sistema, as
combina¸c˜oes de valores negativos e outros problemas relacionados `a sele¸c˜ao de um conjunto de prim´arias
reais s˜ao eliminados. As coordenadas de cromaticidade x e y permitem representar todas as cores num
gr´afico bidimensional. O tra¸cado dos valores normalizados de x e y para as cores no espectro vis´ıvel
resulta na curva ilustrada na Figura 11.5.
Figura 11.5: Diagrama de cromaticidade do CIE [Hea94].
Os pontos que representam as cores puras no espectro eletromagn´etico s˜ao rotulados de acordo com os
seus comprimentos de onda e est˜ao localizados ao longo da curva que vai da extremidade correspondente
`a cor vermelha at´e a extremidade correspondente `a cor violeta. A linha reta que une os pontos espectrais
vermelho e violeta ´e chamada linha p´ urpura, e n˜ao faz parte do espectro. Os pontos internos correspondem
a todas as combina¸c˜oes poss´ıveis de cores vis´ıveis, e o ponto C corresponde `a posi¸c˜ao da luz branca.
Devido `a normaliza¸c˜ao, o diagrama de cromaticidade n˜ao representa os valores de luminˆancia. Por isso,
as cores com luminˆancias diferentes e cromaticidades iguais s˜ao mapeadas no mesmo ponto. Atrav´es desse
diagrama, ´e poss´ıvel determinar e comparar os espa¸cos de cores dos diferentes conjuntos de prim´arias,
identificar as cores complementares (2 cores que, somadas, produzem a cor branca) e determinar o
comprimento de onda dominante e a satura¸c˜ao de uma cor.
Os espa¸cos de cor s˜ao representados no diagrama, ilustrado na Figura 11.6a, atrav´es de linhas retas
ou de pol´ıgonos. Todas as cores ao longo da linha que une os pontos C
1
e C
2
na Figura 11.6a podem
ser obtidas atrav´es da mistura de quantidades apropriadas das cores correspondentes a esses pontos. A
escala de cores para 3 pontos (por exemplo, C
3
, C
4
e C
5
na Figura 11.6a) ´e representada por um triˆangulo
cujos v´ertices s˜ao definidos pelas cores correspondentes `as 3 posi¸c˜oes e inclui cores contidas no interior e
nas margens fronteiri¸cas desse triˆangulo.
Observando o diagrama ´e poss´ıvel perceber que nenhum conjunto formado por 3 prim´arias pode gerar
todas as cores, pois nenhum triˆangulo contido no diagrama abrange todas as cores poss´ıveis. As cores
complementares s˜ao identificadas por 2 pontos localizados em lados opostos do ponto C e conectados por
uma linha reta. Por exemplo, misturando quantidades apropriadas de 2 cores C
1
e C
2
(Figura 11.6b),
obt´em-se a luz branca.
98
Figura 11.6: Representa¸c˜ao de escalas de cor no diagrama de cromaticidade do CIE [Hea94].
A determina¸c˜ao do comprimento de onda dominante de uma cor pode ser feita interpretando-se
a escala de cores entre 2 prim´arias. O comprimento de onda dominante da cor C
1
, representada na
Figura 11.6c, ´e determinado tra¸cando-se uma linha reta que parte do ponto C passando pelo ponto C
1
e
intersectando a curva espectral no ponto C
s
. A cor C
1
, corresponde ent˜ao, `a combina¸c˜ao da luz branca
com a cor espectral C
s
, pois C
s
´e o comprimento de onda dominante de C
1
. O comprimento de onda
dominante das cores que est˜ao entre o ponto C e a linha p´ urpura ´e determinado de outra forma. Tra¸ca-se
uma linha a partir do ponto C (Figura 11.6c) passando pelo ponto C
2
e intersectando a linha p´ urpura
no ponto C
p
. Como esse ponto n˜ao pertence ao espectro vis´ıvel, o ponto C
2
´e referenciado como sendo
uma cor n˜ao espectral e o seu comprimento de onda dominante ´e obtido atrav´es do prolongamento da
reta at´e que ela intercepte a curva espectral, no ponto C
sp
. As cores n˜ao espectrais est˜ao entre p´ urpura
e magenta, e s˜ao geradas atrav´es da subtra¸c˜ao do comprimento da onda dominante (como, por exemplo,
o C
sp
) da luz branca.
A pureza de uma cor (por exemplo, de C1 na figura 11.6c) ´e determinada atrav´es da distˆancia relativa
do ponto C
1
, que corresponde `a linha reta que vai do ponto C at´e o ponto C
s
. Pode-se calcular a pureza
do ponto C
1
atrav´es da rela¸c˜ao
d
c1
d
cs
, onde d
c1
representa a distˆancia entre C e C
1
e d
cs
representa a
distˆancia entre C e C
s
. A cor C
1
´e cerca de 25% pura porque est´a situada a aproximadamente
1
4
da
distˆancia total entre C e C
s
.
11.4 Modelo RGB (Red, Green, Blue)
O sistema RGB de cores prim´arias tamb´em ´e aditivo e est´a baseado na teoria dos 3 est´ımulos (Tristimulus
Color Theory) proposta por Young-Helmholtz e discutida na se¸c˜ao 2.3. Segundo essa teoria, o olho
humano percebe a cor atrav´es da estimula¸c˜ao dos 3 pigmentos visuais presentes nos cones da retina, que
possuem picos de sensibilidade aproximada nos seguintes comprimentos de onda: 630 nm (Vermelho-
Red), 530 nm (Verde-Green) e 450 nm (Azul-Blue). Esse sistema pode ser representado graficamente
atrav´es do cubo unit´ario definido sobre os eixos R, G e B, como ilustrado na Figura 11.7.
A origem representa a cor preta, o v´ertice de coordenadas (1, 1, 1) representa a cor branca, os v´ertices
que est˜ao sobre os eixos representam as cores prim´arias e os demais v´ertices representam o complemento
de cada cor prim´aria. Cada ponto no interior do cubo corresponde a uma cor que pode ser representada
pela tripla (R, G, B), com os valores R, G e B variando de 0 a 1. Os tons de cinza s˜ao representados ao
longo da diagonal principal do cubo, que vai da origem (ponto correspondente a cor preta) at´e o v´ertice
que corresponde `a cor branca. Cada tom ao longo dessa diagonal ´e formado por contribui¸c˜oes iguais de
cada prim´aria. Logo, um tom de cinza m´edio entre o branco e o preto ´e representado por (0.5, 0.5, 0.5).
As cores C
l
desse sistema podem ser expressas na forma:
C
l
= r.R +g.G+b.B (11.4)
A resposta do olho aos est´ımulos espectrais n˜ao ´e linear e, por isso, algumas cores n˜ao podem ser
reproduzidas pela sobreposi¸c˜ao das 3 prim´arias. Isso significa que algumas cores existentes na natureza
n˜ao podem ser mostradas nesse sistema. Por isso, um fenˆomeno natural colorido como, por exemplo, de
forma¸c˜ao de rochas, n˜ao pode ser reproduzido com precis˜ao (conforme discutido em Wolf [Wol93]).
99
Figura 11.7: Cubo do RGB [Fol96].
11.5 Modelo HSV (Hue, Saturation, Value)
O sistema HSV utiliza descri¸c˜oes de cor que s˜ao mais intuitivas do que combina¸c˜oes de um conjunto
de cores prim´arias e, por isso, ´e mais adequado para ser usado na especifica¸c˜ao de cores em n´ıvel de
interface com o usu´ario. A cor ´e especificada atrav´es de uma cor espectral e das quantidades de branco e
preto que ser˜ao adicionadas para a obten¸c˜ao de shades, tints e tones diferentes. A representa¸c˜ao gr´afica
tridimensional do sistema HSV ´e um cone de 6 lados derivado do cubo RGB, mostrado na figura 11.8.
Figura 11.8: Cone hexagonal do HSV [Fol96].
Os parˆametros de cor utilizados nesse sistema s˜ao o matiz (hue), a satura¸c˜ao (saturation) e a lu-
minˆancia (value). Os v´arios matizes est˜ao representados na parte superior do cone, a satura¸c˜ao ´e medida
ao longo do eixo horizontal e a luminˆancia ´e medida ao longo do eixo vertical, que passa pelo centro do
cone. O matiz, que corresponde `as arestas ao redor do eixo vertical, varia de 0

(vermelho) a 360

, e o
ˆangulo entre os v´ertices ´e de 60

. A satura¸c˜ao varia de 0 a 1 e ´e representada como sendo a raz˜ao entre
a pureza de um determinado matiz e a sua pureza m´axima (S = 1). Um determinado matiz possui
1
4
de pureza em S = 0.25. Quando S = 0 tem-se a escala de cinzas. A luminˆancia varia de 0 (no pico do
cone), que representa a cor preta, a 1 (na base), onde as intensidades das cores s˜ao m´aximas.
11.6 Modelo HLS (Hue, Lightness, Saturation)
O sistema HLS
3
tamb´em ´e baseado em parˆametros mais intuitivos para a descri¸c˜ao de cores.
A representa¸c˜ao gr´afica tridimensional desse sistema ´e um cone duplo, como mostra a figura 9. Os 3
parˆametros de cor utilizados s˜ao o matiz (hue), a luminosidade (lightness
4
) e a satura¸c˜ao (saturation).
3
Outros autores denominam esse sistema como Hue, Luminance, Saturation [Rog93a].
4
Luminosidade (lightness): Segundo Foley [Fol96], esse termo est´a relacionado `a no¸c˜ao acrom´atica da intensidade per-
cebida de um objeto que reflete luz. Brilho (brightness) ´e usado no lugar de luminosidade para denotar a intensidade
percebida de um objeto que emite luz.
100
Figura 11.9: Cone duplo do HLS [Fol96].
O ˆangulo em rela¸c˜ao ao eixo vertical varia de 0

(matiz azul) a 360

em intervalos de 60

e especifica
um matiz. O eixo vertical corresponde `a luminosidade e varia de 0 (preto) a 1 (branco) e ´e onde se
encontra a escala de cinzas. A satura¸c˜ao varia de 0 a 1, e os matizes puros s˜ao encontrados no plano
onde a luminosidade ´e igual a 0.5 e a satura¸c˜ao ´e igual a 1. Quanto menor o valor da satura¸c˜ao menor ´e
a pureza do matiz; e quando a satura¸c˜ ao ´e igual a 0, tem-se a escala de cinzas.
Os sistemas HLS e HSV permitem que se pense em termos de cores mais “claras” e mais “escuras”. As
cores s˜ao especificadas atrav´es de um ˆangulo, e os diversos shades, tints, e tones de cada cor s˜ao obtidos
atrav´es do ajuste do brilho ou luminosidade e da satura¸c˜ao. As cores mais claras s˜ao obtidas atrav´es do
aumento do brilho ou da luminosidade e as cores mais escuras pela diminui¸c˜ao dos mesmos. As cores
intermedi´arias s˜ao obtidas atrav´es da diminui¸c˜ao da satura¸c˜ao.
101
Cap´ıtulo 12
Processamento Digital de Imagens
12.1 Introdu¸c˜ao
A ´area de Processamento Digital de Imagens tem crescido consideravelmente nas ´ ultimas duas d´ecadas,
com a utiliza¸c˜ao de imagens e gr´aficos em uma grande variedade de aplica¸c˜oes, aliado ao fato de que
a tecnologia de constru¸c˜ao de computadores tamb´em tem se aprimorado, possibilitando a utiliza¸c˜ao de
sistemas mais eficientes e mais baratos. Muitas ´areas vˆem utilizando Sistemas de Processamento Digital
de Imagens, tais como: reconhecimento de padr˜oes (ind´ ustria), medicina, agricultura, pesquisas espaciais,
meteorologia, etc.
12.2 Considera¸c˜oes Sobre Imagens
Uma imagem cont´ınua, ´e digitalizada atrav´es de dois processos:
• Amostragem (Sampling): digitaliza¸c˜ao em termos espaciais (tamanho da grade de digitaliza¸c˜ao);
• Quantiza¸c˜ao: digitaliza¸c˜ao em termos de amplitude (n
o
de n´ıveis de cinza).
A Figura 12.1, ilustra o processo de quantiza¸c˜ao, para v´arios tamanhos de grade. A Figura ??,
apresenta uma imagem de 512x512 pixels, quantizada de v´arias formas.
Matematicamente, Imagem Digital pode ser definida como uma fun¸c˜ao bidimensional A(x, y) definida
em uma certa regi˜ao do plano.
A : [0, r] ×[0, s] →[0, t] (12.1)
Assim a imagem ´e definida num retˆangulo [0, r]×[0, s], e os valores tomados est˜ao contidos no intervalo
[0, t]. Ao valor A(x, y) no ponto (x, y) d´a-se o nome de N´ıvel de cinza.
Imagens s˜ao geralmente definidas como uma grande cole¸c˜ao de dados, que est˜ao frequentemente
dispostos em forma de uma matriz ou alguma outra estrutura de dados discreta.
Uma imagem, ´e representada atrav´es de um conjunto de valores, onde cada valor ´e um n´ umero que
descreve os atributos de um pixel na imagem. Usualmente estes n´ umeros s˜ao inteiros positivos, que
representam a intensidade na escala de tons de cinza de um ponto da imagem, ou a cor associada ao
ponto pela “look-up table”, em sistemas que comportam este procedimento. Quando utiliza-se escalas de
tons de cinza, usualmente associa-se a tonalidade de cinza mais escura, o preto, ao n´ıvel zero da escala de
cinza, e o mais claro, o branco, ao maior valor permitido na escala. Ou seja, se cada pixel ´e representado
em um sistema de 8-bits, o preto ´e associado ao valor zero, e o branco ao valor 255.
As dimens˜oes do conjunto de valores que especifica a imagem s˜ao chamadas de largura e altura da
imagem, e o n´ umero de bits associado com cada pixel da matriz ´e chamado de profundidade da imagem.
A profundidade da imagem est´a associada ao n´ umero de planos de mem´oria em que uma imagem ´e
mapeada, sendo que cada bit da palavra que armazena o valor do pixel reside em um plano da imagem
(“frame buffer”). Na Figura 12.3 mostra-se um esquema de um pixel p com profundidade 8.
Atrav´es de Processamento Digital de Imagens, pode-se analisar e modificar imagens por computador.
Os objetivos deste processamento s˜ao:
1. Extrair informa¸c˜ao da imagem, ou seja, reconhecer elementos que comp˜oem a imagem, permitir
medir elementos contidos na imagem, classific´a-los e compar´a-los com algum modelo colocado.
102
Figura 12.1: Efeitos sobre uma imagem, de se reduzir o tamanho da grade de amostragem.
2. Transformar a imagem (aumentando contraste, real¸cando bordas, corrigindo alguma imperfei¸c˜ao
gerada na imagem durante o processo de aquisi¸c˜ao), de forma que a informa¸c˜ao seja mais facilmente
discern´ıvel por um analista humano.
12.3 Tabelas “Look-up”
Em sistemas que permitem trabalhar com cores, cada cor ´e uma composi¸c˜ao de trˆes cores prim´arias:
vermelho, verde e azul (do inglˆes, RGB). E os n´ıveis de cinza tamb´em s˜ao uma composi¸c˜ao das trˆes
cores, sendo que todas entram em partes iguais. Logo, o n´ umero de bits utilizados para representar o
valor do pixel ´e dividido entre as trˆes cores. Assim, se um pixel possui profundidade 1 (um bit por pixel),
o pixel poder´a ser pintado apenas com duas cores (2
1
) (por exemplo, em preto e branco). Se o pixel
utiliza dois bits, poder´a produzir no m´aximo quatro cores (2
2
), e assim por diante. Usualmente 6 bits s˜ao
suficientes para permitir a visualiza¸c˜ao da imagem de forma que n˜ao se perceba descontinuidade entre
as tonalidades de cinza, mas 8 ou mais bits podem ser necess´arios em algumas aplica¸c˜oes. Assim, para
monitores coloridos, sugere-se que trˆes vezes a quantidade de bits necess´aria ´e um bom valor, ou seja, 8
bits para cada cor prim´aria aditiva (vermelha, verde e azul - RGB), produzindo 24 bits por pixel.
Em muitos sistemas gr´aficos ´e desej´avel poder-se alterar rapidamente a colora¸c˜ao da imagem sem
alterar a sua forma. Assim permite-se alterar a aparˆencia visual de uma imagem, sem na realidade
alterar os pr´oprios dados que a definem. Por exemplo, mostrar todos os pixels abaixo de um certo valor
com o preto, ou mesmo a partir de uma imagem monocrom´atica criar uma imagem em pseudo-cor.
Um dispositivo que facilita grandemente essa manipula¸c˜ao com cores, sem comprometer a eficiˆencia
da opera¸ c˜ao de visualiza¸c˜ao de imagens s˜ao as tabelas de Busca (“Look-up Table” - LUT), que os
controladores de monitores por varredura vem utilizando. A tabela “look-up” possui tantas entradas
quanto o n´ umero de valores armazenados pelo pixel, ou seja, se o pixel tem profundidade 8, a LUT ter´a
256 (2
8
) entradas. Assim, o valor do pixel n˜ao indica a cor em que ele ´e mapeado, mas sim a entrada
na LUT onde a cor est´a armazenada. A Figura 12.4 ilustra o procedimento de mapeamento de um pixel
atrav´es da LUT.
12.4 Tipos de Manipula¸c˜ao de Imagens
Na an´alise de imagens, a entrada do processamento ´e uma imagem, enquanto a sa´ıda ´e uma descri¸c˜ao n˜ao
pict´orica da imagem. Este processo pode ser entendido como de “redu¸c˜ao de dados”, em que se diminui
103
Figura 12.2: Uma imagem de 512 x 512 pixels, quantizada em (a) 256 n´ıveis, (b) 128 n´ıveis, (c) 64 n´ıveis,
(d) 32 n´ıveis, (e) 16 n´ıveis, (f) 8 n´ıveis, (g) 4 n´ıveis e (h) 2 n´ıveis de cinza.
Figura 12.3: Representa¸c˜ao de um pixel P com 8-bits (8 planos) de profundidade.
o volume dos dados, mas mant´em-se o conte´ udo da informa¸c˜ao relevante para uma dada aplica¸c˜ao.
Na manipula¸c˜ao de imagens em geral, tanto as entradas quanto as sa´ıdas s˜ao imagens. Duas grandes
classes de transforma¸c˜oes s˜ao:
• Transforma¸c˜oes Radiom´etricas: onde os valores de n´ıveis de cinza dos pontos da imagem s˜ao
alterados, sem modifica¸c˜ao de sua geometria.
• Transforma¸c˜oes Geom´etricas: onde a geometria da imagem ´e alterada, mantendo-se o m´aximo
poss´ıvel os valores dos n´ıveis de cinza.
As transforma¸c˜oes radiom´etricas e geom´etricas podem ser feitas com a finalidade de eliminar distor¸c˜oes
da imagem, introduzidas geralmente pelo pr´oprio sistema de aquisi¸c˜ao de imagens (“restaura¸c˜ao”), ou
enfatizar certas caracter´ısticas da imagem (“realce”).
12.5 Transforma¸c˜oes Radiom´etricas
Pode-se ter basicamente dois tipos de transforma¸c˜oes ou opera¸c˜oes radiom´etricas:
• Restaura¸c˜ao - que visa corrigir alguma distor¸c˜ao sofrida pela imagem;
• Realce - que procura enfatizar alguma caracter´ıstica de interesse da imagem. Por vezes estes dois
objetivos produzem resultados coincidentes.
´
E o caso, por exemplo, quando uma imagem sofreu uma distor¸c˜ao que diminuiu seu contraste; uma
transforma¸c˜ao que realce as bordas dos objetos das imagens pode, de fato, restaur´a-la.
Embora muitas da t´ecnicas de restaura¸c˜ao e realce sejam as mesmas (por exemplo, filtragem), os
objetivos e enfoques divergem num e noutro caso. O procedimento geral da restaura¸c˜ao ´e a modelagem
do processo de distor¸c˜ao para tentar invertˆe-lo. No realce esta preocupa¸c˜ao n˜ao existe, pois no realce as
t´ecnicas utilizadas s˜ao, na maioria, heur´ısticas, n˜ao havendo compromisso com a imagem original.
As transforma¸c˜oes radiom´etricas podem tamb´em ser classificadas quanto ao seu grau de abrangˆencia,
em:
104
Figura 12.4: Organiza¸c˜ao de uma LUT, para um sistema de pixels de 8 bits.
1. Opera¸c˜oes Pontuais: onde o n´ıvel de cinza de um ponto na imagem transformada depende s´o
do n´ıvel de cinza do ponto da imagem original (ou nas imagens originais se houver mais de uma
imagem de entrada (“frames”)).
2. Opera¸c˜oes Locais: onde o novo n´ıvel de cinza de um ponto depende n˜ao s´o de seu antigo n´ıvel
de cinza, mas tamb´em dos n´ıveis de cinza de seus pontos vizinhos.
12.5.1 Opera¸c˜oes Pontuais sobre Imagens
Algoritmos que realizam Opera¸c˜oes Pontuais percorrem a imagem e utilizam o valor do pixel associado
a cada ponto, modificando a escala de tonalidades de cinza de uma imagem. Por exemplo caso deseja-se
tornar uma imagem mais brilhante, pode-se adicionar algum valor a todos os pontos da imagem. Por
exemplo, em um sistema de 8-bits por pixel, os valores associados v˜ao de 0 a 255, pode-se definir uma
fun¸c˜ao brilho(p) = p + 40, cuja fun¸c˜ao ´e tornar a imagem mais “clara”. Atrav´es de opera¸c˜oes pontuais
pode-se tamb´em corrigir sombras que porventura tenham surgido junto com o processo de aquisi¸c˜ao da
imagem. Ou seja, define-se uma fun¸c˜ao cujo efeito reverta a opera¸c˜ao de sombreamento indesej´avel,
por´em isto requer que se estime as fun¸c˜oes de sombreamento.
Assim, uma opera¸c˜ao pontual que toma uma imagem A(x, y) e produz outra imagem B(x, y), pode
ser definida matematicamente como:
B(x, y) = f[A(x, y)] (12.2)
Histogramas de Intensidades
O Histograma de Intensidades indica para cada n´ıvel de cinza da imagem a quantidade de pontos
mapeados com tal n´ıvel. Ele cont´em uma informa¸c˜ao global sobre os “objetos” da imagem. Se todos os
pontos da imagem s˜ao de um mesmo objeto, o histograma mostra a probabilidade condicional p(z/objeto)
de um ponto possuir um dado n´ıvel de cinza z, sendo que o ponto pertence ao objeto. A Figura 12.5
apresenta uma imagem e seu histograma de intensidades associado.
Atrav´es de Histogramas de Intensidades pode-se obter uma maneira simples para se manipular o
contraste de imagens. Dessa forma, pode-se definir as “janelas” de intensidade que se queira manipular.
Por exemplo, se ao construir o histograma de uma imagem vˆe-se que n˜ao se est´a utilizando toda a
abrangˆencia dos n´ıveis de cinza, resultando uma imagem com pouco contraste, pode-se for¸car que ela seja
mapeada usando todos os n´ıveis de cinza, ou uma faixa deles (“janela”), ou mesmo aumentar o contraste
em apenas uma regi˜ao dos n´ıveis de intensidade da imagem [Gonzalez and Wintz, 1987].
Suponha-se uma imagem A(x, y) e seu histograma H
1
(A). Se um ponto p da imagem est´a mapeado
com o n´ıvel N dentro da faixa de valores ∆
1
, cujo n´ıvel mais baixo ´e min
1
e o mais alto ´e max
1
, e atrav´es
de manipula¸c˜ao no histograma deseja-se transform´a-lo para o valor p

com n´ıvel N

, o qual estar´a dentro
da faixa ∆
2
cujo valor m´ınimo ´e min
2
e m´aximo max
2
, a fun¸c˜ao de transforma¸c˜ao ser´a:
f(N) =
(N −min
1
)(max
2
−min
2
)
(max
1
−min
1
)
+min
2
(12.3)
N

= f(N) (12.4)
A Figura 12.6 ilustra a transforma¸c˜ao do histograma H
1
(A) da imagem A para o histograma H
2
(A).
105
Figura 12.5: Imagens e histogramas de intensidade.
Esse procedimento de manipula¸c˜ao do histograma para ampliar ou diminuir o contraste de uma
imagem ´e mostrado na Figura 12.7. Na parte (a) apresenta-se um histograma de uma imagem, na
qual especifica-se uma janela de visualiza¸c˜ao, e na parte (b) o histograma da mesma imagem depois da
manipula¸c˜ao do histograma.
Opera¸c˜oes Alg´ebricas
Por defini¸c˜ao, opera¸c˜oes Alg´ebricas, s˜ao aquelas que produzem uma imagem que ´e a soma, diferen¸ca,
produto ou quociente pixel a pixel de suas imagens. No caso de soma ou multiplica¸c˜ao mais de duas
imagens podem estar envolvidas.
As quatro opera¸c˜oes alg´ebricas de processamento de imagens podem ser explicitadas:
C(x, y) = A(x, y) +B(x, y) (12.5)
C(x, y) = A(x, y) −B(x, y) (12.6)
C(x, y) = A(x, y) ×B(x, y) (12.7)
C(x, y) = A(x, y)/B(x, y) (12.8)
onde: A(x, y) e B(x, y) s˜ao imagens de entrada e C(x, y) ´e a imagem resultante.
A seguir s˜ao apresentadas algumas aplica¸c˜oes imediatas para as opera¸c˜oes alg´ebricas:
1. Uma importante utiliza¸c˜ao de adi¸c˜ao de imagens, ´e para se obter a m´edia de m´ ultiplas imagens de
uma mesma cena. Isto ´e eficazmente utilizado para reduzir os efeitos de ru´ıdos aleat´orios aditivos.
Pode tamb´em ser utilizado para colocar o conte´ udo de uma imagem sobrepondo outra.
2. Subtra¸c˜ao de imagens pode ser utilizada para remover algum padr˜ao indesej´avel presente em uma
imagem. A subtra¸c˜ao ´e tamb´em utilizada para detectar mudan¸cas entre duas imagens da mesma
cena. Por exemplo, pode-se detectar movimento subtraindo-se imagens sequenciais de uma cena.
Subtra¸c˜ao de imagens pode ser usada para calcular o gradiente, uma fun¸c˜ao muito usada para
detec¸c˜ao de bordas (ver se¸c˜ao 2.4.2.2?). Uma utiliza¸c˜ao t´ıpica em medicina, ´e para se comparar
duas imagens de uma mesma regi˜ao do corpo. Obt´em-se a imagem da regi˜ao (ou ´org˜ao) normal e
tamb´em ap´os injetar um meio de contraste, adquire outra imagem. Ap´os esta opera¸c˜ao, pode-se
comparar as duas atrav´es de subtra¸c˜ao digital. Assim, por exemplo, se o cora¸c˜ao ´e o ´org˜ao em
aprecia¸c˜ao, consegue-se obter uma imagem apenas das art´erias e veias.
3. Multiplica¸c˜ao e divis˜ao de imagens podem ser utilizadas, por exemplo, para corrigir poss´ıveis defeitos
de um digitalizador em que a sensibilidade do sensor de luz varia conforme a posi¸c˜ao dos pontos
da imagem. Multiplicar uma imagem por uma “m´ascara” pode esconder certas regi˜oes da imagem
deixando expostos apenas objetos de interesse.
106
Figura 12.6: Efeito de uma transforma¸c˜ao dos n´ıveis de cinza efetuado sobre o histograma.
Figura 12.7: Manipula¸c˜ao de janelas de intensidade da imagem atrav´es do histograma.
Ao se efetuar opera¸c˜oes sobre as imagens, deve-se estar atento para que o novo valor obtido n˜ao
ultrapasse o dom´ınio de valores, permitido pela amplitude dos n´ıveis de intensidade em que a imagem
est´a mapeada. Se este cuidado n˜ao for tomado, pode-se obter valores totalmente inconsistentes, levando-se
a uma degenera¸c˜ao da imagem.
12.5.2 Opera¸c˜oes Locais Sobre a Imagem
Algor´ıtmos que realizam Opera¸c˜oes Locais utilizam informa¸c˜ao dos valores dos pontos vizinhos para
modificar o valor de um ponto, ou mesmo para verificar a existˆencia de alguma propriedade neste ponto
da imagem.
Opera¸ c˜oes Locais s˜ao tipicamente utilizadas para filtragem espacial e altera¸c˜ao da pr´opria estrutura
da imagem. Elas podem “agu¸car” a imagem, acentuando as mudan¸cas de intensidades (atrav´es de filtros
Passa-Altas), ou “suavizar” a imagem, tornando as mudan¸cas de intensidade menos abruptas (atrav´es de
filtros Passa-Baixas), ou podem prover outras formas de se melhorar a imagem. Assim, pode-se procurar
formas na imagem atrav´es de “padr˜oes de busca” (“match”), obter medidas dos elementos da imagem,
definir bordas na imagem, remover ru´ıdo suavizando a imagem [?].
As transforma¸c˜oes locais s˜ao divididas em dois grandes grupos:
• Transforma¸c˜oes Lineares: s˜ao aquelas em que os pixels vizinhos ao que est´a sendo calculado
influenciam no novo valor segundo uma combina¸c˜ao linear dos mesmos. Tais opera¸c˜oes incluem
superposi¸c˜ao e convolu¸c˜ao de imagens, o que ´e usualmente utilizado para implementar filtros dis-
cretos.
• Transforma¸c˜oes n˜ao Lineares: utilizam outra forma de arranjo que n˜ao a linear.
107
Opera¸c˜ao de Convolu¸c˜ao
Um dos algoritmos cl´assicos de processamento de imagens ´e aquele que efetua a Convolu¸c˜ao entre
imagens, sendo comumente usado para realizar filtragem espacial e procurar peculiaridades na imagem.
A opera¸c˜ao de convolu¸c˜ao substitui o valor de um ponto com o valor obtido atrav´es de uma opera¸c˜ao
linear do ponto e de seus vizinhos, sendo que ´e atribu´ıdo “peso” aos vizinhos e ao ponto. Estes “pesos”
s˜ao colocados em uma matriz, usualmente de dimens˜ao pequena, chamada de m´ascara. Se para obter um
novo valor de um ponto deseja-se que apenas os vizinhos imediatos influenciem, escolhe-se uma m´ascara
de dimens˜ao 3x3, onde o ponto base para a gera¸c˜ao do novo ponto ´e colocado no centro da m´ascara.
Dadas duas imagens A(x, y) e B(x, y), com x = 0, 1, ..., M − 1 e y = 0, 1, ...N − 1, a convolu¸c˜ao
(discreta) destas duas imagens ´e uma terceira imagem C(x, y) com x = 0, 1, ..., M−1 e y = 0, 1, ..., N−1,
dada pela seguinte express˜ao:
C(x, y) =
1
M.N
M−1

m=0
N−1

n=0
A(m, n).B(x −m, y −n) (12.9)
e para os valores da borda da imagem, que se encontram fora dos intervalos [0, M−1] e [0, N−1], deve-se
utilizar as seguintes rela¸c˜oes:
A(x, −y) = A(x, N −y) (12.10)
A(−x, y) = A(M −x, y) (12.11)
As rela¸c˜oes acima s˜ao equivalentes a considerar uma imagem A(x, y) definida em [0, M−1] e [0, N−1],
como definida em [−M, M −1] e [−N, N −1]. O resultado da convolu¸c˜ao de A por B num ponto p ´e na
realidade uma m´edia ponderada dos pontos de A, onde os pesos s˜ao dados pela imagem B.
Como foi mencionado acima, a opera¸c˜ao de convolu¸c˜ao ´e a base para efetuar-se filtragem espacial
de imagens. A imagem que indica os pesos para a convolu¸c˜ao normalmente possui dimens˜ao pequena e
´ımpar (3, 5, 7 ou 9), pois a opera¸c˜ao de convolu¸c˜ao envolve uma grande quantidade de c´alculos, e quanto
maior o m´ascara maior ser´a o tempo de processamento da opera¸c˜ao.
A seguir ser˜ao apresentadas algumas m´ascaras normalmente utilizadas para filtragem espacial [Mascarenhas and Velasco, 1989]:
_
_
1/9 1/9 1/9
1/9 1/9 1/9
1/9 1/9 1/9
_
_
(12.12)
Implementa um filtro passa-baixas (de suaviza¸c˜ao):
_
_
0 −1 0
−1 5 −1
0 −1 0
_
_
(12.13)
Normalmente utilizada para “agu¸car” uma imagem, pois como alguns pesos s˜ao negativos eles tendem
a real¸car diferen¸cas.
(a)
_
_
1 1 1
1 −2 1
−1 −1 −1
_
_
(b)
_
_
−1 −1 −1
1 −2 1
1 1 1
_
_
(12.14)
Apresenta uma m´ascara de filtro para dete¸c˜ao de borda ao (a) norte e (b) ao sul do ponto.
(a)
_
_
−1 1 1
−1 −2 1
−1 1 1
_
_
(b)
_
_
1 1 −1
1 −2 −1
1 1 −1
_
_
(12.15)
Apresenta uma m´ascara de filtro para dete¸c˜ao de borda a (a) leste e (b) a oeste do ponto.
O realce de bordas, independente da dire¸c˜ao pode ser obtido atrav´es de m´ascaras como:
_
_
0 −1 0
−1 4 −1
0 −1 0
_
_
_
_
−1 −1 −1
−1 8 −1
−1 −1 −1
_
_
_
_
1 −2 1
−2 4 −2
1 −2 1
_
_
(12.16)
Pode-se tamb´em utilizar m´ascaras que contenham algum padr˜ao que se quer procurar na imagem.
Neste caso a m´ascara ´e normalmente chamada de tentativa (“template”), onde o tamanho da m´ascara
depende do padr˜ao a ser procurado.
108
Exemplos de Transforma¸c˜oes n˜ao Lineares
Usualmente as transforma¸c˜oes n˜ao lineares conseguem uma melhor rela¸c˜ao sinal/ru´ıdo na imagem pro-
duzida do que por transforma¸c˜oes lineares. Os filtros lineares utilizados para atenuar os ru´ıdos de uma
imagem (passa-baixas) produzem uma imagem “borrada”, ou seja as bordas n˜ao ficam mais t˜ao n´ıtidas.
Este efeito indesejado pode ser minorado atrav´es de transforma¸c˜oes (filtros) n˜ao lineares.
Figura 12.8: Sinais “ru´ıdo” (a) e “degrau” (b).
Tome-se como exemplo os sinais unidimensionais dos tipos “ru´ıdo” e “degrau” mostrados na Figura
12.9 [Mascarenhas and Velasco, 1989]. Os efeitos de uma transforma¸c˜ao linear (filtro) dos tipos m´edia
[1/3, 1/3, 1/3] e diferen¸ca [−1, 3, −1] s˜ao mostrados na Figura 12.9. Pode-se notar nestes casos os efeitos
de atenua¸c˜ao do ru´ıdo (a), “borramento” da borda (b), amplia¸c˜ao do ru´ıdo (c) e realce da borda (d).
Os efeitos indesejados mostrados na Figura 12.10 (c) e (d) podem ser minorados atrav´es de filtros n˜ao
lineares, como ser´a visto a seguir.
Figura 12.9: Sinais “ru´ıdo” (a) e “degrau” (b).
Por exemplo, no filtro da mediana, os pontos da vizinhan¸ca do ponto (x, y) s˜ao ordenados, e tomado
como novo valor para (x, y) o valor mediano obtido pela ordena¸c˜ao. O efeito do filtro da mediana
(unidimensional) que envolve 3 elementos (o ponto e seus vizinhos mais pr´oximos) ´e mostrado na Figura
109
Figura 12.10: Efeitos de filtros lineares ao “ru´ıdo” e `a “borda”: (a) efeitos de atenua¸c˜ao; (b) borramento
da borda; (c) amplia¸c˜ao do ru´ıdo; (d) realce da borda.
12.11. Note-se que na parte (a) da figura o ru´ıdo foi eliminado (n˜ao somente atenuado), enquanto em (b)
o degrau permaneceu inalterado.
Figura 12.11: Efeito do filtro da mediana sobre o “ru´ıdo” e o “degrau”.
´
E tamb´em usual, em vez de se utilizar a mediana da vizinhan¸ca, escolher o valor m´aximo ou o valor de
ordem qualquer. Se a imagem ´e bin´aria, para se obter o valor m´ınimo entre dois pontos, pode-se utilizar
a opera¸ c˜ao l´ogica E dos valores da vizinhan¸ca dois a dois, e para o valor m´aximo a opera¸c˜ao l´ogica OU.
Uma outra alternativa utilizada ´e tomar-se o valor mais frequente de uma vizinhan¸ca, ou seja, utilizar
a Moda, entre eles.
Pode-se utilizar vizinhan¸ca seletiva de um ponto, isto ´e, tomar a m´edia n˜ao em toda a vizinhan¸ca,
mas sim numa sub-vizinhan¸ca que satisfa¸ca alguma propriedade dada, como uniformidade, ou seja, que
apresente um valor m´edio pr´oximo do valor do ponto (x, y). O uso do filtro da vizinhan¸ca seletiva presume
que a imagem seja composta de regi˜oes razoavelmente uniformes. Assim, a sele¸c˜ao da vizinhan¸ca procura
fazer com que o ponto (x, y) seja operado s´o com pontos de sua regi˜ao.
Pode-se tamb´em utilizar filtros n˜ao-lineares para detectar, bordas e linhas curvas. Para o realce
de bordas o m´etodo n˜ao-Linear mais simples ´e o Operador Gradiente de Roberts (GR), dado por
[Mascarenhas and Velasco, 1989]:
GR(x, y) = [[A(x, y) −A(x −1, y −1)]
2
+ [A(x, y −1) −A(x −1, y)]
2
]
1
2
(12.17)
onde A(x, y) ´e a imagem dada.
110
Uma desvantagem do operador de Roberts ´e sua assimetria, pois, dependendo da dire¸c˜ao, certas
bordas s˜ao mais real¸cadas que outras, mesmo tendo igual magnitude.
Um operador gradiente para delimita¸c˜ao de bordas mais sofisticado (3x3), ´e o Operador de Sobel
(GS), o qual ´e frequentemente utilizado como o primeiro passo para algoritmos de vis˜ao computacional.
Este operador ´e dado por:
GS(x, y) = (X
2
+Y
2
)
1
2
(12.18)
onde:
_
¸
_
¸
_
X = [A(x −1, y + 1) + 2.A(x, y + 1) +A(x + 1, y + 1)]−
[A(x −1, y −1) + 2A(x, y −1) +A(x + 1, y −1)]
Y = [A(x −1, y −1) + 2.A(x −1, y) +A(x −1, y + 1)]−
[A(x + 1, y + 1) + 2A(x + 1, y) +A(x + 1, y −1)]
(12.19)
Transforma¸c˜oes Geom´etricas
As transforma¸c˜oes geom´etricas mudam o arranjo espacial dos pixels da imagem. Muitas vezes s˜ao uti-
lizadas para corrigir distor¸c˜oes causadas pelo processo de aquisi¸c˜ao, ou mesmo para efetuar alguma
manipula¸c˜ao solicitada pelo usu´ario. Tranforma¸c˜oes geom´etricas t´ıpicas s˜ao: rota¸c˜ao, transla¸c˜ao, am-
plia¸ c˜ao, ou diminui¸c˜ao da imagem. Algoritmos para efetuarem estas opera¸c˜oes podem ser apresentados
como um conjunto de equa¸c˜oes que mapeiam um pixel localizado na posi¸c˜ao (x, y) em um novo endere¸co,
(x

, y

).
Na realidade, em processamento digital de imagens, geralmente s˜ao necess´arios dois algoritmos se-
parados para a maior parte das transforma¸c˜oes geom´etricas. O primeiro ´e o algoritmo que define a
movimenta¸c˜ao dos pixels, como ele move a partir da posi¸c˜ao inicial para a posi¸c˜ao final.
Figura 12.12: Uma transforma¸c˜ao geom´etrica de 90
o
graus.
Como exemplo, pode-se tomar a imagem ilustrada na Figura 12.12. Ali uma imagem ´e rotacionada
de 90
o
graus. Um pixel na posi¸c˜ao (0,0) ´e mapeado segundo a f´ormula:
x

= (Y SIZE −1) −y
y

= x (12.20)
onde Y SIZE ´e o n´ umero de pixels no eixo y.
Em muitas aplica¸c˜oes, ´e necess´ario preservar a continuidade dos objetos que definem a imagem. Isso
pode ser feito transformando-se ponto a ponto a imagem, ou transformando-se apenas pontos chave da
imagem, fazendo que os outros pontos acompanhem a transforma¸c˜ao por algum outro processo. Pode-se
ver que o primeiro processo ´e geralmente mais oneroso em termos de tempo de computa¸c˜ao do que o
segundo.
´
E conveniente especificar matematicamente o relacionamento espacial entre pontos das imagem de
entrada e da imagem de sa´ıda. A defini¸c˜ao geral para opera¸c˜oes geom´etricas ´e [Castleman, 1979]:
g(x, y) = f(x

, y

) = f(a(x, y), b(x, y)) (12.21)
111
onde f(x, y) ´e a imagem de entrada e g(x, y) ´e a imagem de sa´ıda. As fun¸c˜oes a(x, y) e b(x, y) especificam
as transforma¸c˜oes espaciais. Se essas tranforma¸c˜oes forem cont´ınuas, a continuidade ser´a preservada na
nova imagem.
O segundo algoritmo necess´ario para uma transforma¸c˜ao geom´etrica ´e um algoritmo para interpola¸c˜ao
dos valores dos n´ıveis de cinza. Na imagem de entrada f(x, y), os valores do n´ıveis de cinza s˜ao definidos
somente para valores inteiros de x e y. Mas na equa¸c˜ao geral acima, pode-se ver que o valor do n´ıvel de
cinza para g(x, y) pode ser tomado a partir de coordenadas n˜ao inteiras (pela continuidade) de f(x, y). Se
a opera¸ c˜ao geom´etrica ´e considerada como um mapeamento de f para g, pixels de f podem ser mapeados
entre pixels de g e vice-versa. Assim novamente deve ser realizada alguma opera¸c˜ao (ex. escala) para
corrigir a distor¸c˜ao de pontos n˜ao inteiros.
112
Referˆencias Bibliogr´aficas
[Castleman, 1979] Castleman, K. R. (1979). Digital Image Processing. Prentice-Hall, Inc., Englewood
Cliffs, N.J.
[Gonzalez and Wintz, 1987] Gonzalez, R. C. and Wintz, P. (1987). Digital Imagem Processing. Addison-
Wesley Publishing Company, second edition edition.
[Hearn and Baker, 1994] Hearn, D. and Baker, P. (1994). Computer Graphics. Prentice-Hall.
[Mascarenhas and Velasco, 1989] Mascarenhas, N. D. A. and Velasco, F. R. D. (1989). Processamento
digital de imagens. In IV Escola Brasileiro-Argentina de Inform´atica, Universidade Cat´olica de Santiago
del Estero, Termas do Rio Hondo - Argentina.
[Minghim and Oliveira, 1997] Minghim, R. and Oliveira, M. C. F. (1997). Uma introdu¸c˜ao `a visualiza¸c˜ao
computacional xvi jai’97. In XVII Congresso da SBC, volume 1777 of Jornadas de Atualiza¸c˜ao em
Inform´atica, pages 85–131, Bras´ılia - Brazil.
[Persiano and Oliveira, 1989] Persiano, R. C. M. and Oliveira, A. A. F. (1989). Introdu¸c˜ao `a Computa¸c˜ao
Gr´afica. Livros T´ecnicos e Cient´ıficos Editora Ltda.
[Plastock and Kalley, 1999] Plastock, R. and Kalley, G. (1999). Computa¸c˜ao Gr´afica. Mc Graw Hill.
[Schr¨oeder, 1998] Schr¨oeder, W. (1998). The Visualization Toolkit.
[Schr¨oeder et al., 1996] Schr¨oeder, W. J., Martin, K., and Lorensen, W. (1996). The Visualization Toolkit
- An Object-Oriented Approach to 3D Graphics. Prentice-Hall.
113
Apˆendice A
Hist´orico
01.11.2003
Novidades
• Apostila de processamento de imagens adicionada.
• Links externos corrigidos.
Problemas
• Os cap´ıtulos de Rendering e Modelagem ainda est˜ao faltando;
• Ainda h´a referˆencias com problemas.
27.08.2003
Novidades
• Vers˜ao totalmente revisada.
Problemas
• Os cap´ıtulos de Rendering, Modelagem e Processamento de Imagens est˜ao faltando;
• Algumas referˆencias precisam ser corrigidas.
114

Resumo Este ´ o material utilizado no Instituto de Ciˆncias matem´ticas e de Computa¸˜o da USP-S˜o Carlos e e a ca a para as disciplinas de computa¸˜o gr´fica ministradas pelas Profa. Dra. Agma Juci Machado Traina e ca a Profa. Dra. Maria Cristina Ferreira de Oliveira.

Sum´rio a
Sum´rio a Lista de Figuras 1 Introdu¸˜o ` Computa¸˜o Gr´fica ca a ca a 1.1 Sistemas Gr´ficos . . . . . . . . . . a 1.2 Aplica¸˜es da CG . . . . . . . . . . co 1.3 Hardware Gr´fico . . . . . . . . . . a 1.4 Resolu¸˜o Gr´fica . . . . . . . . . . ca a 1.5 Sistemas de Coordenadas . . . . . 1.6 Exerc´ ıcios . . . . . . . . . . . . . . 2 5 8 9 10 11 11 12 14 15 15 15 15 17 17 17 17 18 20 21 21 22 22 22 22 22 22 22 23 24 24 25 25 26 26 29 30 31 34 37 38 38

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

2 Dispositivos de Visualiza¸˜o ca 2.1 Dispositivos Gr´ficos Vetoriais . . . . . . . . . . . . . . . . . . . . . . a 2.1.1 Tra¸adores Digitais . . . . . . . . . . . . . . . . . . . . . . . . . c 2.1.2 Dispositivos de V´ ıdeo Vetoriais (Vector Refresh Display Tubes) 2.1.3 Terminais CRT com mem´ria (Direct View Storage Tubes) . . o 2.2 Primitivas de Software para Dispositivos Vetoriais . . . . . . . . . . . 2.3 Dispositivos Gr´ficos Matriciais . . . . . . . . . . . . . . . . . . . . . . a 2.3.1 Impressoras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.2 Dispositivos de V´ ıdeo de Varredura (Raster Scanning VDUs) . 2.3.3 Primitivas de Software . . . . . . . . . . . . . . . . . . . . . . . 2.4 Exerc´ ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5 Dispositivos de Entrada . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.1 Teclado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.2 Ligth Pen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.3 Joystick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.4 Mouse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.5 Mesa Digitalizadora (Tablet) . . . . . . . . . . . . . . . . . . . 2.5.6 Data Glove . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.7 Outros dispositivos . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

3 Tra¸ado de Curvas em Dispositivos Gr´ficos Matriciais c a 3.1 Simetria e Reflex˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a 3.2 Convers˜o Matricial de Segmentos de Reta . . . . . . . . . . . . . . . . . . . . . . . . . . a 3.2.1 Caracter´ ısticas Desej´veis para os Algoritmos de convers˜o Matricial de Segmentos a a de Retas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.2 Crit´rio Adotado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 3.2.3 Algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.4 Algoritmo do “Ponto-M´dio” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 3.3 Convers˜o Matricial de Circunferˆncias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a e 3.3.1 Simetria de ordem 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.2 Algoritmo do “Ponto-M´dio” para Circunferˆncias . . . . . . . . . . . . . . . . . . e e 3.4 Convers˜o Matricial de Elipses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a 3.5 Corre¸˜o no Tra¸ado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ca c 3.6 Antialising . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ´ 3.6.1 Amostragem de Areas n˜o Ponderada . . . . . . . . . . . . . . . . . . . . . . . . . a

2

. . . . . . . . . . . . . . . . . . . . . . ca 6. . . . . . . . . . . .4 Preenchimento de Pol´ ıgonos 4. . . . . . . . . . . . . co 5. . . . . . . . .8. . . . . co 5. . . . . . . . . .2 Transforma¸˜o do sistema de coordenadas do mundo para o sistema de coordenadas ca de observa¸˜o . . . . . . . . . . . . .2. . . . . . . . . .7 Eficiˆncia . . . . .6 Modelo HLS (Hue. . . . . 95 . .1 Retˆngulos . . . . . .3. . . . . . . . . . . . . . . . . . .3 Representa¸˜es Param´tricas e N˜o Param´tricas (expl´ co e a e ıcita e impl´ ıcita) 8.8 Transforma¸˜es em 3D . .1. ca 8. ca 6. . . . . . . . . . . . . . . . . 5. . . . 8. . . .1 Arestas Horizontais . . . . . . . . . . . . . . . . . . . .1 Pipeline de observa¸˜o (“viewing pipeline”) . . . . . .3 Modelo XYZ . . . . . .2 Pol´ ıgonos de Forma Arbitr´ria .2. . . . . . . . . . . .3 Transforma¸˜es 2D Adicionais: Espelhamento e Shearing . . . . . 8 Curvas e Superf´ ıcies em Computa¸˜o Gr´fica ca a 8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2 Coordenadas de Observa¸˜o . . . . . . . . . . . . .1 Espelhamento (Mirror) . . . . . .1 Composi¸˜o de Transforma¸˜es em 3D . .2 Sistemas de Cores Prim´rias . . 97 . . .1 Ajuste de curvas (curve fitting) . . . . . . . . . 42 42 43 45 46 46 50 50 52 55 55 56 57 58 59 61 63 64 69 69 70 70 71 73 73 77 78 78 79 79 81 86 86 87 87 87 87 88 90 93 94 5 Transforma¸˜es 2D e 3D co 5. . ca 6. . . . . . . . . . . . . . . . . . . . . .2. . . . . . . . . . . . . . . . . . . . . . . . . .1 Proje¸˜o Perspectiva . .2 Algoritmo de Cohen-Sutherland para 7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ca ca 6. . . . . . . . . .2. . . . . . . . . de Segmentos . . .4 Curvas de B´zier . . . . . . . . . . . . .2 Slivers . . . . . . . . . . . . . . .1 Transforma¸˜es em 2D . . . Blue) . . . . Saturation) . . . . . . . . . . 99 . . . . . . . . ca co . . . . . . . . . .2 Aproxima¸˜o de curvas (curve fairing) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ca co 5. . . . . . . . ca 6. e ca 5. . . . . . . . . . . . . . . .4 Transforma¸˜es entre sistemas de coordenadas . . . . . .3.1 Especifica¸˜o do sistema de coordenadas de observa¸˜o . e . . . . . . . . . .Porta de Vis˜o (“Window-to-Viewport”) ca a 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a 11. . . . . . . .6 Transforma¸˜o Janela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4. . . . . . . . . . . . “Coerˆncia e . . . . . . Green. . . . . . . . . . . . . . . 8. . . . de Reta . . . . . . . . . . . . . . . . . . . . . . . . .4 Modelo RGB (Red. . . . . Value) . . . . . . . . . . Lightness. . . . co 6. . .1 Recorte de segmentos de reta . . . . . .5 Modelo HSV (Hue. . . . . . . . . . . . . . a 4. . . . . . . . . . .2 Recorte de Circunferˆncias . . . . . . . . . . . . . . Recorte . . . . . . . . . . . .3. . . 11. . . . . . . . . . . . . . . . . . . . . . . co co a e 8. . . co 5. . . . . . . . . . . . . . . 11. . . . . . . . . . . .5 Composi¸˜o de Transforma¸˜es . . 6 Observa¸˜o de Cenas 3D ca 6. . . . . . . . . . . . . . . . . . . a 4. . . . . . . . . .1. . . . . . . 4. . . . . . . . . . . . . . .2. . . . . . . . . . . . . . . . . . .2. .3. . . . . . . . . . . . . . . . . . . . .2 Curve Fitting x Curve Fairing . . . . . . 100 3 . . . . . . . . . . .2 Shearing .3 Proje¸˜es . . . . . . . . . . . . . . . . . . . . . . . . . . . 5. . . . . . . . . . . . . . . . . . . .1 Percep¸˜o de Cor . . . . . . . . . . . . . . . . . . 7. . . . . . . . . . . . . . . 7. . . . . . . .1 Representa¸˜o de Curvas . . .1 Recorte de Pontos Extremos . . .2 Desenvolvimento Matem´tico para Proje¸˜es Paralelas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Reta que Utiliza . . . . . . e 9 Apostila Modelagem 10 Rendering 11 Cores e Sistemas de Cores 11. . . . . . . . . . . . . . . . . . . co 5. . . .3 Algoritmo para Convers˜o Matricial de Segmento de a de Arestas” de um Pol´ ıgono . . . . . . . . . . . . . . . . .1 Limita¸˜es das representa¸˜es n˜o param´tricas . . . ca 11. . . . . e 5. . . . 100 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ca 8. . . . . . . . .3. . . . . . . . . . . . . . . .2 Coordenadas Homogˆneas e Matrizes de Transforma¸˜o . . . Saturation. . . . . . . . . . . . . . . 95 . . . . . a co 7 Recorte de Primitivas 2D 7. . . . . . . . . . . 96 . . . . . . . .2. . . . . .

. . . . . . . . . . . . . . . . . . . . . . ca 12. . ca 12. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1 Opera¸˜es Pontuais sobre Imagens co 12. . . .2 Opera¸˜es Locais Sobre a Imagem co Bibliografia A Hist´rico o . . . . . . . . . . . . . . . . . . . . co e 12. 12. . . . . . . . 102 102 102 103 103 104 105 107 113 114 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4 Tipos de Manipula¸˜o de Imagens . . . . . . .3 Tabelas “Look-up” . . . . . . . . . . . . . . .5 Transforma¸˜es Radiom´tricas . . . . . co 12. . . . . . . .12 Processamento Digital de Imagens 12. . . . . . . . . . . . .5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2 Considera¸˜es Sobre Imagens . . . . . . . . . . . .1 Introdu¸˜o . . . . . . .5. . .

. . . . obtido variando-se x em incrementos unit´rios. .15 3.2 3. . . . . . . .17 3. . . . . . . .6 44 45 46 48 48 51 51 5. . . . . . . . .3 4. . . . . . . . . . . .3 2. . . . . . . . . . . . . . . . . . . . . . . .2 1. . . .10 3. . . co enquanto as intersec¸˜es com os lados EF e DE possuem coordenadas reais. . . . . . . . . . . . e e Malha de pixels para o Algoritmo do Ponto-M´dio para circunferˆncias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Como a escala ´ n˜o uniforme. . . . .3 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . .5 4. . . . . . . . . . . . . Representa¸˜o esquem´tica de uma imagem matricial e sua representa¸˜o num frame buffer. . . . c e a ca e 8 12 13 16 16 18 18 19 19 20 23 24 24 25 26 27 29 29 31 32 32 36 36 38 39 39 40 40 43 4. Oito pontos sim´tricos em uma circunferˆncia. . . . . . . . . . .4 3. . . . . . . A intensidade do pixel ´ proporcional ` area coberta. . . . . . . . . . . . .2 2. . .5 3. . . . . . . . . . . . . . . . . . . . . . . . . . .1 3. . . . . .11 3. . . ca a Organiza¸˜o de uma v´ ca ıdeo look-up table. . . . . . . . . . . . . Exemplo de uma convers˜o matricial de um Sliver . . Grade de pixels para o Algoritimo o Ponto-M´dio (M) e as escolhas E e NE. . . . .9 3. . . . As a intersec¸˜es da linha de varredura 8 com os lados FA e CD possuem coordenadas inteiras. e calcu4 lando e arrendondando y. . Elipse padr˜o centrada na origem. . . sua propor¸˜o ´ alterada. . . . . . . . . . . . . . . . . . . . . . . . . . . . Tratamento dos lados horizontais de um pol´ ıgono. . . . . co Linhas de varredura em um pol´ ıgno. . . . . . . . . . . . . . . . . . . . . . . . . . . .18 4. . . . . . . . . . .6 3. . . . . verticais e diagonais. . . . . . . . . . . . . . . . . Note que a coordenada x da aresta DE em (b) foi arredondada para cima. . . . . . . . . . . . e os pixels no interior em cinza. . . . . . . . . . . . . . . . . . . . . . . . . . a ca a Esquema b´sico de um hardware de computa¸˜o gr´fica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4 4. . . . . . . . (a) e ´ uma aplia¸˜o da regi˜o central de (b). . . . . . . . . . a ca Rota¸˜o de 90o obtida atrav´s de 2 reflex˜es. . . . . . . . AET para o pol´ ıgono da Figura 4. . . .12 3. . . . . . . . . . . . . . . .1 1. . . Transla¸˜o de uma casa. . . e e a Um arco de 1 de circunferˆncia. . e Grade de pixels para o Algoritimo o Ponto-M´dio (M) e as escolhas E e NE. . .1. . a ca a Sistemas de coordenadas e suas transforma¸˜es. . . . . . . . . . . . .2 4. . . . . . . . . . . . . ca Mudan¸a de escala de uma casa. .14 3. . . . . . . . . . . . . . .6 2. . .13 3. . . . . . . . . . . . . . . . (b) Extremo interior ao pol´ ıgno. . ca e o Convers˜es matriciais de um segmento de reta resultante de diferentes crit´rios. . Os extremos em preto. . .3 2. . . . . . . o e Imagens de segmentos de reta convertidos pelo crit´rio expl´ e ıcito acima.7 3.1 5. . . . . . . . .2 5 . . . . .4 2. . . . . . .5 2. . . a As duas regi˜e adotadas. . o a Esta figura ilustra o processo de linha de varredura para um pol´ ıgono arbitr´rio.1 Relacionamento entre as 3 sub´reas da Computa¸˜o Gr´fica. . . . . . . . uma horizontal (a) e outra na diagonal (b). . . . . . o Segmento de reta renderizado com o algor´ ıtmo do ponto m´dio em diferentes escalas. . . . . . . . . . . . . . . .16 3. (a) Extremo calculado pelo algoritmo do ”Meio-Ponto”. co Estrutura interna de um CRT. . . . . . . . . . . . . Segundo octante da circunferˆncia gerado com o algor´ e ıtimo do Ponto-M´dio e primeiro e octante gerado por simetria. . . . . . Representa¸˜o de segmentos de reta horizontais. . . Filtro cˆnico com diˆmetro igual ao dobro da largura de um pixel. . . . . . . . . . . . . . . . . . ca Reflex˜o de uma imagem com rela¸˜o a um eixo diagonal. . . . . . . ca a ca Varredura por rastreio fixo. . e ca a Segmento de reta definido com uma espessura diferente de zero. . Convers˜o Digital-Anal´gica para Visualiza¸˜o num CRT. . . . . . . . . . . . . . . . . . . Representa¸˜o esquem´tica de um CRT por varredura colorido. definidas pela tangente a 45o . . . . . . . . . . . a o ca Uma seq¨ˆncia de bits na mem´ria de imagem ´ convertida para uma seq¨ˆncia de pixels ue o e ue na tela. . ilustrando a escolha e e entre os pixels E e SE. . . . . . . . . . . . . . . .Lista de Figuras 1. . . . . . . . . . . . . . . . . . . . . . .7 3. . . . . . . . . . . a ET para o pol´ ıgono de Figura 4. . . . . . . . . . . . . . . . . . .1 2. . . . . . . . . . . . . . . . . . . . . . . .1 a) linha de varredura 9 b) linha de varredura 10. .8 3. e a Filtro definido por um cubo para um pixel definido por um quadrado. . . . . . .. . . . . . . . . . .

. . . . . . .14 7. . . . Obtema e a se dessa forma uma transforma¸˜o afim. . . P1 e P2 de comprimento D2 ´ rotacionado em dire¸˜o ao ca ca e ca eixo z. a a ca Proje¸˜o em perspectiva de um ponto P=(x. . . . . .12 6. . . . . . . . .1 8. 52 52 53 54 55 56 58 59 60 60 61 61 63 65 66 66 67 68 69 70 71 71 72 73 73 74 74 75 75 76 76 77 78 80 80 83 83 84 86 87 88 90 90 91 95 11. . 1994]. . . . . .6 8. . e 6 . . . . . . . . . . . . . O seu a ıda a interior ´ apresentado na tela (viewport). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17 5. . . . . . . . . . . a o Movimentos de cˆmera [Schr¨eder. . .5. . . . . . . . . . . . . . . . . . . . . . . . . . .porta de vis˜o. . . . . .3 6. . . . . . . 0. . . . . .3 5. . Um cubo unit´rio ´ rodados 45 graus. . . . . . . . . . . yp. . . . e Sistema de Coordenadas dado pela Regra da M˜o Direita. . . .16 5. B2 e B3 . ca ca Taxomia de proje¸˜es [Plastock and Kalley. .18 5. . . . . . . . . . . . . . . . . .2 8. . . . . . . a Rota¸˜o em rela¸˜o ao Ponto P 1. . . . . . . . . . . . . . . .13 5. . . . . . 1998]. . . . . . . . . .9 6. . . . ca Proje¸˜o ortogonal de um ponto no plano de proje¸˜o [Hearn and Baker. . . . . . . . 1999]. . . . .5 7. . .5 8. . . . . . . . ca ca Exemplos de recorte de segmentos de reta. . . . . .5 6. . . a Confus˜o visual da perpectiva (objeto atr´s do centro de proje¸˜o). .14 5. . . . . . . .8 6. . . . . . . . . . . . . . . . . . . . . 1998]. . . . . . . . . . . .11 6. Orienta¸˜es do plano de observa¸˜o conforme o vetor normal. . . . . . . . . B0 . . . . ca Aproxima¸˜o de curvas por segmentos de reta conectados. . . .9 5. . . . . . . .7 5. . . . . . . . . . .2 6. . . . . . . . . . . . . . . . . z) na posi¸˜o (xp. . . . . . . . . . . . . . . . . . Ry e Rz . . . . . . . . . . . . . . yv e zv . . . . . ca ca Janela em Coordenadas do mundo e porta de vis˜o em coordenadas de tela. . . . . . .8 5. . .13 6. . . . . Representa¸˜o de superf´ ca ıcies atrav´s de malhas. . . . . . . . . . . . . . . . . . . . . . . . .6 6. . . W ) c e projetado sobre o plano W = 1.4 8.1 7. . . . . . . . . . . . . . . e Aproxima¸˜o de curvas por segmentos de reta conectados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Algoritmo de Sutherland-Hodgman para Recorte de Pol´ ıgonos. . . . . a Reflex˜o de um objeto em torno de um eixo perpendicular ao plano xy. . 1994]. 1998]. . . . . . . . . . . . . . . . . a o Um VCS baseado na regra da m˜o direita com xv . . . . . . . . . . . . . . . 0. . passando pela origem. . co Linha AB e sua proje¸˜o A’B’: (a) perspectiva. os quais s˜o transformados nos eixos principais. . . Proje¸˜es perspectivas com 3 pontos de fuga ( o plano de proje¸˜o intercepta os 3 eixos). pelo ˆngulo positivo f. . . . . (b) Caso convexo (c) Caso u cˆncavo com muitas arestas exteriores. . . . . .3 7. . . . . . . . . . . . a Os passos da transforma¸˜o janela . . . . . . . . . . . . . . (a) M´ltiplos componentes. . . . . . . . . . . . . . . 1994]. . . ca ca O espa¸o de Coordenadas Homogˆneas XY W . .relativos ao sistema de coordea nadas do mundo [Hearn and Baker. . . ca a Primitivas gr´ficas de sa´ em coordenadas do mundo s˜o recortadas pela janela. . . . . . . . . .4 6. Y. . . . .10 6. . . . . a Rota¸˜o em rela¸˜o ao eixo z. ca ca a Escala e rota¸˜o de uma casa em rela¸˜o ao ponto P1 . . . . . . . . . . . . . . . . . . . . a orienta¸˜o em (b) [Hearn and Baker. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . por um ˆngulo θ. . . . . . . . . . ca Rota¸˜o em rela¸˜o ao eixo x. . . . co ca A esfera B ´ bem maior que a esfera A. . . . . . . . . . . Proje¸˜es perspectivas com 2 pontos de fuga ( o plano de proje¸˜o intercepta 2 eixos (x e co ca z)). Exemptos de recorte de pol´ ıgonos. . . . . . . . . 1). . . . . . . . . .15 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . a o Movimentos de cˆmera [Schr¨eder. . . . . . . . . . . . . .5 5. . . posteriormente escalado n˜o uniformemente. . . . Da mesma forma que para a escala. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ca Pontos de uma circunferˆncia. . . . . . . . . . . . . . . . por´m ambas aparecem com o mesmo tamanho e e quando projetadas no plano de vis˜o. . . . (b) ortogonal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0) d´ a orico ca a enta¸˜o em (a) e (1. . . . .4 7. . . . . apresenco tando o ponto de fuga. . . . . . . . .11 5. . . . . ca Reflex˜o de um objeto em torno do eixo x. . . . . . .10 5. . . . . . . . . . . . . . a rota¸˜o ca ca tamb´m ´ feita em rela¸˜o a origem. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B1 . . . . . . . . . . . . . . . . . . . . . zp) sobre o plano ca ca de proje¸˜o [Hearn and Baker. . . . .12 5. . . . . . . . e Representa¸˜o de uma curva de B´zier definida pelos pontos ca e Fun¸˜es de blending para v´rios valores de n. . . . . . . . . . . . . . . . . . . . . . . . . . C´digos das regi˜es. . . . . . . . . . . . . . .19 5. . ca ca Os vetores unit´rios Rx . . . . . . . . .20 6. . a a Atributos da cˆmera [Schr¨eder. . O vetor (1. . . . . . . . . . . . .6 5.4 5. . . . . . . . a Transformando P1 .6 Esta figura mostra a rota¸˜o da casa por 45◦ . .2 7. . . . . . . . . . . . . . . . . . . ca Proje¸˜es de um cubo (com 1 ponto de fuga) sobre um plano cortando o eixo Z.1 6. y. . . co a .7 6.3 8. . . . . . . .1 Espectro eletromagn´tico [Gro94]. . . . . . . . . . . e e ca Derivando a equa¸˜o de rota¸˜o. o Quatro situa¸˜es poss´ co ıveis no recorte de pol´ ıgonos. . P2 e P3 da posi¸˜o inicial em (a) para a posi¸˜o final em (b). . . . . com o plano W = 1 e o ponto P (X. . . . . . . . . o o Funcionamento do algoritmo de Cohen-Sutherland para recorte de segmentos. . . . . . . a Duas portas de vis˜o associadas a mesma janela. P2 e P3 . . . . . . . 1994]. . . ca ca Rota¸˜o dos pontos P1 . . . . . . . .

12. . .4 11. . . . . . . . . . . . . . . . . . . . . . . ca e 12. . . . . . . . . . . . . . . . .3 11. . . Cone hexagonal do HSV [Fol96]. . . . . . . . . 97 . .2 11. . . . . .11. 12. . . . . . . . . . . . (g) 4 n´ ıveis e (h) 2 n´ ıveis de cinza. . . . . . . . . . (b) 128 n´ ıveis. . . . . (d) realce da borda. . . . . . . . . 100 . . . .7 Manipula¸˜o de janelas de intensidade da imagem atrav´s do histograma. .7 11. . . (c) 64 n´ ıveis. . . . . . .8 Sinais “ru´ ıdo” (a) e “degrau” (b). . . . . . . . . . Cone duplo do HLS [Fol96]. . . . . . . .11Efeito do filtro da mediana sobre o “ru´ ıdo” e o “degrau”. 12. . . . . . .9 Sinais “ru´ ıdo” (a) e “degrau” (b). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . shades e tones. . . 98 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8 11. . . . . ca e 7 . . .2 Uma imagem de 512 x 512 pixels. . . . 101 103 104 104 105 106 107 107 109 109 110 110 111 12. . . . . . . . .6 Efeito de uma transforma¸˜o dos n´ ca ıveis de cinza efetuado sobre o histograma. . .1 Efeitos sobre uma imagem. . . [Hea94]. . . para um sistema de pixels de 8 bits. . . . . . . . (b) borramento a ca da borda. . . . . . . . . (e) 16 n´ ıveis. .3 Representa¸˜o de um pixel P com 8-bits (8 planos) de profundidade. 97 . . . . . . . . . . 12. . . . 97 . . . 12. . . . . . .6 11. . . . . . . . . . . . . . . . . . . . . . . . . . .10Efeitos de filtros lineares ao “ru´ ıdo” e ` “borda”: (a) efeitos de atenua¸˜o. . . . . . . . . .9 Ilustra¸˜o da mistura de cores aditivas [For94]. . . . . . . . . . . . ca Ilustra¸˜o da mistura de cores subtrativas [For94]. . . . . . 12. . . . . ca ca Diagrama de cromaticidade do CIE [Hea94]. . . . .5 Imagens e histogramas de intensidade. ca 12. . . . . ca Ilustra¸˜o da obten¸˜o de tints. ca 12. . 99 . . . . . . . . . . . . . . . . . . . . . . . . . 100 . 12. . . . . . . . . . . . . . (f) 8 n´ ıveis. . . . . . . . . . 12. . . . . . .5 11. . . . (c) amplia¸˜o do ru´ ca ıdo. . . . . . . quantizada em (a) 256 n´ ıveis. . . . . . . . . . . . . . . . (d) 32 n´ ıveis. . . . . . . . . . . .12Uma transforma¸˜o geom´trica de 90o graus. . de se reduzir o tamanho da grade de amostragem.4 Organiza¸˜o de uma LUT. . . . . . . . . . . . Representa¸˜o de escalas de cor no diagrama de cromaticidade do CIE ca Cubo do RGB [Fol96]. .

a ca a Na ultima d´cada somou-se a esse contexto a ´rea de Visualiza¸˜o de Dados. Tais modelos vˆm de uma variedade ca e de disciplinas. foco. etc. engenharia. a Pode-se relacionar a Computa¸˜o Gr´fica com 3 sub-´reas [Persiano and Oliveira. Ou seja a partir da informa¸˜o pict´rica da imagem (a pr´pria ca ca o o imagem!) produz uma informa¸˜o n˜o pict´rica da imagem (por exemplo.1: Relacionamento entre as 3 sub´reas da Computa¸˜o Gr´fica. a a • An´lise de Imagens: ´rea que procura obter a especifica¸˜o dos componentes de uma imagem a a a ca partir de sua representa¸˜o visual. Schr¨eder et al. o Figura 1. dados financeiros.Cap´ ıtulo 1 Introdu¸˜o ` Computa¸˜o Gr´fica ca a ca a A Computa¸˜o Gr´fica ´ a ´rea da ciˆncia da computa¸˜o que estuda a gera¸˜o. as primitivas geom´tricas ca a o e elementares que a comp˜em). • Processamento de Imagens: envolve as t´cnicas de transforma¸˜o de Imagens. visualiza¸˜o de programas. que usa t´cnicas de ca o e Computa¸˜o Gr´fica para representar informa¸˜o. E freq¨entemente confundida com a co e u pr´pria Computa¸˜o Gr´fica. arquitetura. como f´ ısica. Exemplos de ´reas de aplica¸˜o s˜o: visualiza¸˜o de imagens e a ca a ca m´dicas. meteorologia. 1996]. ou mesmo diminuir ru´ ıdos e/ou distor¸˜es). 1989]: ca a a • S´ ıntese de Imagens: ´rea que se preocupa com a produ¸˜o de representa¸˜es visuais a partir a ca co ´ das especifica¸˜es geom´trica e visual de seus componentes. As imagens produzico das/utilizadas por esta sub-´rea s˜o armazenadas/recuperadas dos chamados Raster-Files. As imagens produzidas por esta sub-´rea s˜o geradas a partir de o ca a a a dados mantidos nos chamados Display-Files. matem´tica. de forma a facilitar o entendimento de conjuntos de ca a ca dados num´ricos de alta complexidade. manipula¸˜o e interca a e a e ca ca ca preta¸˜o de modelos e imagens de objetos utilizando computador. dinˆmica dos fluidos. 1997. e muitas e ca a 8 . tamb´m chamada ´ e a ca e Visualiza¸˜o Computacional [Minghim and Oliveira. em que tanto e ca a imagem original quanto a imagem resultado apresentam-se sob uma representa¸˜o visual (geca ralmente matricial). Estas transforma¸˜es visam melhorar as caracter´ co ısticas visuais da imagem (aumentar contraste..

a ca a a Outro exemplo ´ o sistema XWindow. a ca Note que a s´ ıntese de imagens parte da descri¸˜o de objetos tais como segmentos de reta.). a As imagens em quest˜o constituem uma representa¸˜o visual de objetos bi. prograa mas e abstra¸˜es de objetos de um escrit´rio .. e co O processamento de imagens parte de imagens j´ prontas para serem visualizadas. etc. programas de a a desenho. ca a a e e a ´ indispens´vel para a visualiza¸˜o de dados em 2D e 3D e tem aplica¸˜es em ´reas como educa¸˜o. com terminais gr´ficos de varredura (raster graphics displays).. do processamento e da an´lise de dados. plotter. mesmo aplicativos que mae co nipulam texto (como processadores de texto) ou dados num´ricos (como planilhas) usam interfaces desse e tipo. tomadas de uma cˆmera de ca a v´ ıdeo.1 Sistemas Gr´ficos a A Computa¸˜o Gr´fica (especialmente as componentes relativas a gr´ficos 3D e a gr´ficos 3D interativos) ca a a a desenvolveu-se de modo bem diverso: de simples programas gr´ficos para computadores pessoais ` proa a gramas de modelagem e de visualiza¸˜o em workstations e supercomputadores. popularizou o uso de gr´ficos a a na intera¸˜o usu´rio-computador. at´ o in´ e ıcio dos anos 80. reduzindo sensivelmente a intera¸˜o textual por meio de teclados alfanum´ricos. a estrutura ca a e a u e a aparˆncia dos objetos e suas imagens visualizadas na tela. que se tornou padr˜o para o desenvolvimento de interfaces gr´ficas e a a 2D em workstations UNIX. Entretanto. impressoras. A primeira tentativa foi o Sistema Core . ca e A computa¸˜o gr´fica n˜o ´ mais uma raridade: ´ parte essencial de qualquer interface com o usu´rio. caixas de correio (mailboxes). Mas a primeira especifica¸˜o gr´fica realmente paca a 9 . Por exemplo. Nelas. Dessa maneira. a a a V´rios padr˜es tiveram sucesso integrando dom´ a o ınios espec´ ıficos. a computa¸˜o gr´fica era uma disciplina restrita e altaca a mente especializada. medicina. e 1.Core a a o Graphics System . ´ Icones (icons) s˜o usados para representar arquivos de dados. ou a reconstru¸˜o de modelos de objetos 2D ou 3D a partir de suas imagens. cada qual executando aplicativos independentemente.digitaliza¸˜o de fotos. Como o interesse em CG ca cresceu. usando dispositivos como o teclado e o e mouse. engenharia. esferas. ´ importante escrever aplica¸˜es que possam rodar em diferentes plataformas.uma met´fora para uma mesa a de trabalho. e A computa¸˜o gr´fica trata da s´ ca a ıntese de imagens de objetos reais ou imagin´rios a partir de modelos a computacionais. o a co a a usu´rio pode selecionar ´ a ıcones. Devido principalmente ao alto custo do hardware. Um programador usa o X para obter uma janela em um display gr´fico no a qual um texto ou um gr´fico 2D pode ser desenhado.outras. militar. Nessas interfaces gr´ficas. poliedros. impressora. ´ ıcones) s˜o a geradas automaticamente a partir do conjunto de dados. e selecione um a a deles a um simples toque no mouse. Para ativar os programas. Para gr´ficos 3D foram propostos v´rios padr˜es. Atualmente. Para se padronizar a ca a constru¸˜o de aplicativos que se utilizam de recursos gr´ficos e torn´-los o mais independentes poss´ ca a a ıvel de m´quinas. Outra facilidade do X ´ o uso de redes de computadores: o e um programa pode rodar em uma workstation e ler a entrada e ser exibido em outra workstation.ou tridimensionais descritos a ca atrav´s de especifica¸˜es abstratas. part´ ıculas. filme fotogr´fico. publicidade. foram desenvolvidos os chamados Sistemas Gr´ficos.nas quais s˜o executadas opera¸˜es an´logas `s da vida real. Isso permite que o usu´rio execute v´rios aplicativos simultaneamente. As interfaces evoluiram e introduziu-se o conceito de desktop . atrav´s de um gerenciador de janelas (window manager ) o usu´rio a e a pode criar e posicionar janelas que atuam como terminais virtuais. lazer. como o IBM-PC e o Apple a Macintosh. A ado¸˜o do X pela maioria dos fabricantes de a ca workstation significa que um unico programa desenvolvido em X pode ser rodado em uma variedade de ´ workstation simplesmente recompilando o c´digo. a visualiza¸˜o de dados partilha ca de caracter´ ısticas da s´ ıntese. Processamento de imagens ´ uma ´rea relacionada que trata do processo inverso: a e a an´lise de cenas. mesmo de outro fabricante... e produz uma imagem que atende a certas especifica¸˜es e que pode. que dispunham de interfaces gr´ficas .. a Atualmente a Computa¸˜o Gr´fica ´ altamente interativa: o usu´rio controla o conte´do. e a ca co a ca ciˆncias. ou imagens de sat´lite .. ser visualizada em algum dispositivo (terminal de v´ a ıdeo. o que existe em comum ´ que a representa¸˜o gr´fica (superf´ e ca a ıcies. processadores de texto. O advento dos computadores pessoais de baixo custo. co o latas de lixo . a linguagem Postscript que se tornou um padr˜o por facilitar a publica¸˜o de documentos est´ticos contendo gr´ficos 2D e textos.. as quais s˜o transa a feridas para o computador por mecanismos diversos .(1977 e 1979) pelos americanos. em ultima co ´ instˆncia. Ao usu´rio cabe definir parˆmetros e atributos a a da imagem para melhor “navegar” seu conjunto de dados. . e portanto facilmente port´veis. Um padr˜o para e co a desenvolvimento de programas gr´ficos facilita esta tarefa eliminando a necessidade de escrever c´digo a o para um driver gr´fico distinto para cada plataforma na qual a aplica¸˜o deve rodar. ca a Os displays gr´ficos de baixo custo possibilitaram o desenvolvimento de in´meros aplicativos baratos a u e f´ceis de usar. ou usar buttons e menus dinˆmicos. poucos programas aplicativos exploravam gr´ficos. pol´ ca ıgonos.para serem manipuladas visando diferentes objetivos. Objetos s˜o manipulados diretamente a a atrav´s de opera¸˜es de pointing e clicking feitas com o mouse.como arquivos.planilhas.

esclarecem fenˆmenos complexos e o a o o representam conjuntos de dados de forma clara e concisa. mas n˜o provˆ mecanismos para descrever ou modelar objetos co a e geom´tricos complexos. Um sistema relativamente famoso ´ PHIGS (Programmer’s a e Hierarchical Interactive Graphics System). • Projeto e desenho auxiliado por computador: em CAD. Isto inclui edif´ a o ıcios. avi˜es e navios. Uma amostra significativa inclui: co e • Interfaces: a maioria dos aplicativos para computadores pessoais e esta¸˜es de trabalho atualmente co disp˜em de interfaces gr´ficas baseadas em janelas. pela ANSI e ISO em 1985. OpenGL ´ um padr˜o c e a relativamente novo (sua primeira vers˜o ´ de 1992) e ´ baseado na biblioteca GL das workstations IRIS da a e e Silicon Graphics. tais como: a desenho de linhas. Baseado no GKS. incluindo e co a a especifica¸˜o de parˆmetros como matrizes de transforma¸˜o e coeficientes de ilumina¸˜o. pe¸as e sistemas de dispositivos mecˆnicos. e 1. de modo que o X pudesse a manipular e desenhar objetos 3D. etc. c o o sistemas ´ticos. PHIGS ´ um padr˜o ANSI. o OpenGL integra/permite a manipula¸˜o de objetos (desenhos) 3D ao X.. Atualmente um cons´rcio de ind´strias ´ respons´vel pela gerenciamento da evolu¸˜o do o u e a ca OpenGL. Isto ´ especialmente importante se o objeto a ser exibido deve ser transmitido por uma a e rede de computadores. mas tamb´m pode ser ca e integrado em outros sistemas de janela (por exemplo. A display list ´ utilizada quando o objeto ´ exibido ou manipue e lado. bem como seus atributos. o assim um objeto pode ser exibido durante a sua defini¸˜o sem a necessidade da display list. Uma desvantagem a a do PHIGS e PHIGS+ (e GKS) ´ que eles n˜o tˆm suporte a recursos avan¸ados como mapeamento de e a e c textura. m´todos ca a ca ca e de antialiasing e opera¸˜es sobre pixels. uma vantagem ´ a possibilidade de descrever um objeto complexo uma unica vez mesmo exibindo-o e ´ v´rias vezes. pol´ ıgonos. ca tabelas e gr´ficos . o objetivo ´ interagir com um c e modelo computacional do componente ou sistema sendo projetado. O PEX ca tamb´m n˜o suporta recursos avan¸ados e s´ est´ dispon´ aos usu´rios do XWindow. de forma a testar propriedades estruturais.os quais tanto podem ser “desenhados” pelo usu´rio ou obtidos a partir de a a imagens digitalizadas. Eventualmente. redes telefˆnicas e de computador.2 Aplica¸˜es da CG co A lista de aplica¸˜es ´ enorme. O GKS ´ uma vers˜o mais e a elaborada que o Core. chips VLSI. arte e publicidade: uma das a ´reas que mais evoluiram na d´cada de 80 foi a visualiza¸˜o cient´ e ca ıfica. Cientistas e engenheiros perceberam que n˜o poderiam interpretar as quantidades prodigiosas de dados produzidas por proa gramas em supercomputadores sem resumir os dados e identificar tendˆncias e fenˆmenos atrav´s e o e 10 . e cresce rapidamente. • Tra¸ado interativo de gr´ficos: aplicativos voltados para usu´rios em ciˆncia. Existe uma implementa¸˜o livre (c´digo fonte dispon´ ca o ıvel) do OpenGL conhecida com MesaGL ou Mesa3D. PEX soma-se de modo imediato ao PHIGS.Graphics Library) que provˆ caraca e e ter´ ısticas avan¸adas e pode ser utilizado em modo imediato ou com display list. eletroc a e mecˆnicos e eletrˆnicos. e a c o a ıvel a O sistema gr´fico mais popular atualmente ´ o OpenGL (GL . Como o co PEX. at´ atingir um projeto satisfat´rio. sistemas gr´ficos interativos s˜o a a utilizados para projetar componentes. ´ o a a ıcones. Windows/NT) ou pode ser usado sem um sistema de janela. Mas n˜o suporta agrupamentos a de primitivas hier´rquicas de estruturas 3D. el´tricas ou t´rmicas. o usu´rio deseja apenas produzir o o a desenhos precisos de componentes e pe¸as. el´tricos. lazer.Graphical Kernel System. e e e o • Simula¸˜o e anima¸˜o para visualiza¸˜o cient´ ca ca ca ıfica. O XWindow ganhou uma extens˜o para o PHIGS. OpenGL provˆ controle direto sobre opera¸˜es gr´ficas fundamentais em 3D e 2D. • Automa¸˜o de escrit´rios e editora¸˜o eletrˆnica: o uso de gr´ficos na dissemina¸˜o de ca o ca o a ca informa¸˜es cresceu muito depois do surgimento de software para editora¸˜o eletrˆnica em comco ca o putadores pessoais. PHIGS+) provˆem meios para manipular e desenhar objetos 3D encapsulando descri¸˜es de e co objetos e atributos em uma display list. O GKS suporta um conjunto de primitivas gr´ficas interrelacionadas. etc. PHIGS (e seu e a descendente.dronizada foi o GKS . conhecida como PEX. Entre outras extens˜es. a a A interface consiste em um conjunto de procedimentos e fun¸˜es que permitem a um programador esco pecificar os objetos e as opera¸˜es que os envolvem produzindo imagens de alta qualidade. Mais frequentemente. Como os outros sistemas gr´ficos. caracteres. OpenGL oferece uma interface entre o software e o hardware gr´fico. Este tipo de software permite a cria¸˜o de documentos que combinam texto. Uma desvantagem da display list ´ a necessidade de um esfor¸o consider´vel e c a para reespecificar um objeto que est´ sendo modelado interativamente pelo usu´rio. carca¸as de autom´veis. menus dinˆmicos. tecnologia e c a a e neg´cios geram gr´ficos que ajudam na tomada de decis˜es.

3 Hardware Gr´fico a Um sistema de hardware para computa¸˜o gr´fica consiste essencialmente de dispositivos gr´ficos de ca a a entrada e sa´ (I/O) ligados a um computador (Figura 1. o a ´ • Arte: A arte por computador vem crescendo imensamente nos ultimos anos. ou reuni˜o. A “resolu¸˜o gr´fica” de um dispositivo ´ o n´mero e a ca ca a e u de posi¸˜es (ou pontos. que desenham figuras pelo preenchimento de uma matriz de pontos (pixels). Transmiss˜o a ca a a serial ass´ ıncrona pode ser feita a velocidades de at´ 19. ndh . que requerem mecanismos sofisticados para modelar objetos e para representar luz e sombra. sistemas de controle de a e refinarias e de usinas de energia mostram graficamente os dados coletados por sensores conectados a componentes cr´ ıticos dos sistemas. deforma¸˜o de estruturas mecˆnicas sob diferente ca a tipos de press˜o.de representa¸˜es gr´ficas.o n´mero de posi¸˜es endere¸´veis verticalmente.2). estamos interessados principalmente em t´cnicas de s´ e ıntese de imagens bem como seu relacionamento com o processamento de imagens.4 Resolu¸˜o Gr´fica ca a Virtualmente todos os dispositivos de I/O gr´ficos usam uma malha retangular de posi¸˜es endere¸´veis a co ca . Tamb´m n˜o pretendemos explorar todo o escopo de e a aplica¸˜es da CG. 1. e u ca o computador deve ser equipado de mem´ria secund´ria com alta capacidade de armazenagem. em uma aula.o n´mero de posi¸˜es endere¸´veis horizontalmente. Os dispositivos de sa´ gr´ficos podem ser de natureza digital ıda a ou anal´gica. Existem 4 parˆmetros co a que definem a resolu¸˜o: ca 1. a ca 11 . Se o equipamento gr´fico est´ distante a a a a do processador (conex˜o remota). surgiram anima¸˜es computadorizadas do comportaco a co mento variante no tempo de objetos reais ou simulados. ou pixels) horizontais e verticais que ele pode distinguir. mas estudar os conceitos gerais envolvidos na programa¸˜o das primitivas gr´ficas que co ca a est˜o por tr´s dessas aplica¸˜es. Um sistema gr´fico multi-usu´rio pode ter v´rias esta¸˜es gr´ficas. id´ias e gr´ficos.a largura do retˆngulo de visualiza¸˜o em mm. ou graphics workstation. E poss´ ´ ıvel utilizar novos recursos de computa¸˜o gr´fica para produzir efeitos art´ ca a ısticos.a qual ´ denominada “retˆngulo de visualiza¸˜o”. Al´m o a e disso. Um sistema de conex˜o ideal nesse caso ´ uma Local a e Area Network (LAN) como a Ethernet. um canal de comunica¸˜o de alta velocidade ´ necess´rio para reduzir os tempos de espera. ndv . relatividade. ou matriciais). a a co 1. o a a que desenham figuras tra¸ando seq¨ˆncias de segmentos de reta (vetores). onde cada ca a ca frame de imagem pode ter um megabyte de dados. de forma que os operadores possam responder adequadamente a condi¸˜es cr´ co ıticas.2 kbps (milhares de bits por segundo). de a a a a co a forma que mais de um dos v´rios dispositivos de I/O dispon´ a ıveis podem estar conectados e utilizando o computador hospedeiro. por exemplo. resultando em duas classes de gr´ficos. Isto ca e a normalmente ´ feito atrav´s de comunica¸˜o local sobre um barramento paralelo com velocidade de e e ca transmiss˜o de dados da ordem de um milh˜o de bits por segundo. com o intuito de mostrar ou transmitir conhecimento ca e a espec´ ıfico como. width . denominados vector graphics (gr´ficos vetoriais). como a extra¸˜o de texturas. • Controle de processos: sistemas de controle de tr´fego a´reo e espacial. u co ca 3. etc. Tais anima¸˜es podem ser utilizadas para co estudar entidades matem´ticas abstratas e modelos matem´ticos de fenˆmenos como fluxo de fluia a o dos. Como em CG ´ freq¨ente a manipula¸˜o de grandes quantidades de dados. a ca a Neste curso. ca padr˜es e estruturas a partir de fotos digitalizadas. um canal de comunica¸˜o serial pode ser necess´rio. • Cartografia: a computa¸˜o gr´fica ´ usada para produzir representa¸˜es precisas e esquem´ticas ca a e co a de fenˆmenos naturais e geogr´ficos obtidos a partir da coleta de dados. u co ca 2. ou na contru¸˜o de material did´tico. Mesmo tal e velocidade pode ser muito lenta para alguns objetivos como anima¸˜o gr´fica de alta resolu¸˜o. Outras aplica¸˜es tecnol´gicas avan¸adas incluem a produ¸˜o de desenhos a co o c ca animados e efeitos especiais para filmes e comerciais de TV. Ao conjunto de dispositivos de I/O gr´ficos ıda a alocados para utiliza¸˜o por uma unica pessoa por vez denomina-se genericamente de “esta¸˜o de trabalho ca ´ ca gr´fica”. rea¸˜es qu´ co ımicas e nucleares. Como resultado. o ´ • Gr´ficos de Apresenta¸˜o (Presentation Graphics): E a utiliza¸˜o de t´cnicas gr´ficas para a ca ca e a demonstra¸˜o de resultados. e raster graphics (gr´ficos de c ue a varredura.

ndv ca 6.3) 12 . tamanho ponto vertical: vert dot size = height ndv 5. e dcy + 1 d´ o n´mero da linha do pixel a u a u endere¸ado. resolu¸˜o de ´rea: area res = ca a total nr dots (width. NDCs s˜o vari´veis reais. O ideal seria ter um aspect ratio igual ou pr´ximo de 1.height) vert dot size horiz dot size height width 7.normalized device coora ca dinates). e podem assumir ca a apenas valores inteiros.Figura 1. vert res e area res definem resolu¸˜es f´ co ısicas. As coordenadas (dcx.5 Sistemas de Coordenadas Na CG ´ necess´rio definir sistemas de coordenadas para quantificar os dados que est˜o e a a sendo manipulados. height . a ca a 4. o 1. para efeito de padroniza¸˜o (ndcx. O pixel endere¸ado como (0. v´rios n´meros interessantes podem ser calculados: a a u 1. e dcy. o valor dcx + 1 d´ o n´mero da coluna. com reco a ca ca a solu¸˜es f´ co ısicas muito diferentes. Os pixels ca a e s˜o endere¸ados por dois n´meros inteiros que d˜o suas coordenadas horizontal e vertical. raz˜o de aspecto f´ a ısica: physical aspect ratio = Note que horiz res. tamanho ponto horizontal: horiz dot size = 3. a c u a respectivamente. Coordenadas do dispositivo podem variar bastante para diferentes equipamentos.1) (1.2) Na matriz de pixels. dcy) s˜o chamadas de coordenadas do dispositivo. resolu¸˜o horizontal: horiz res = ca ndh width width ndh 2. 0) est´ geralmente no canto inferior esquerdo do retˆngulo de c c a a visualiza¸˜o. o que levou ` utiliza¸˜o de coordenadas normalizadas do dispositivo (NDC . geralmente definidas no ca a a intervalo de 0 a 1: 0 ≤ ndcx ≤ 1 (1. total pontos endere¸´veis: total nr dots = ndh.2: Esquema b´sico de um hardware de computa¸˜o gr´fica. onde: 0 ≤ dcx ≤ ndhm1 ≡ ndh − 1 0 ≤ dcy ≤ ndvm1 ≡ ndv − 1 (1. ndv e total nr dots definem resolu¸˜es gr´ficas. a ca A partir desses 4 parˆmetros. dcx. ndcy). enquanto que ndh. Dispositivos de visualiza¸˜o podem ter a mesma resolu¸˜o gr´fica.a altura do retˆngulo de visualiza¸˜o em mm. raz˜o de aspecto gr´fica: aspect ratio = a a 8. J´ vimos que os dispositivos de visualiza¸˜o gr´fica matriciais consistem de uma a ca a matriz de pixels endere¸´veis. resolu¸˜o vertical: vert res = ca ndv height 4. e um gr´fico ´ formado “acendendo” ou “apagando” um pixel.

6) Dois outros sistemas de coordenadas s˜o uteis. (pcx.7) (1.ndvm1) (1. dados de entrada a gr´ficos precisam ser transformados de coordenadas do dispositivo para NDCs. A transforma¸˜o de coordenadas f´ ca ısicas para coordenadas do dispositivo ´ e dada por: pcx ) width pcy dcy = trunc(ndvm1 ) height dcx = trunc(ndhm1 (1.10) Os parˆmetros que definem o intervalo de valores de x e y. A vantagem da utiliza¸˜o de NDCs ´ que padr˜es gr´ficos podem ser discutica e o a dos usando um sistema de coordenadas independente de dispositivos gr´ficos espec´ a ıficos.3: Sistemas de coordenadas e suas transforma¸˜es. que corresponde ao pixel (ndhm1.11) (1. que consiste e a de coordenadas cartesianas (x. y) para NDCs (ndcx. 1) refere-se ao pixel no canto superior direito. co 13 . a Figura 1. os dados gr´ficos precisam ser transformados do sistema de coordenadas independente para o sistema de coa ordenadas do dispositivo no momento de visualiza¸˜o. e depois para coordenadas a do usu´rio (Figura 1. 0) corresponde ` origem (0. y). A transforma¸˜o de coordenadas do c ca usu´rio (x. e a coordenada a NDC (1. ymin.9) (1. e de NDCs para coordenadas do dispositivo. ´ dada por: a ca ca e ndcx = x − xmin xmax − xmin y − ymin ndcy = ymax − ymin (1. O mapeamento de NDCs (reais) para coordenadas ca do dispositivo (inteiros) ´ “linear”. O primeiro ´ o sistema de cordenadas f´ a ´ e ısico. denominada transforma¸˜o de visualiza¸˜o. ´ necess´rio transform´-los das coordenadas a e a a do usu´rio para NDCs. denominada de janela. Obviamente.ndhm1) dcy = round(ndcy.12) Para visualizar dados num dispositivo gr´fico qualquer. por exemplo: e dcx = round(ndcx. As unidades de medida utilizadas s˜o polegadas ou mil´ a ımetros.4) A coordenada NDC (0. ndcy). 0) nas coordenadas do dispositivo. xmin.5) (1. xmax e ymax. pcy) onde pcx ´ a distˆncia f´ e a ısica ao longo do eixo x a partir do extremo esquerdo do retˆngulo de visualiza¸˜o.8) O segundo ´ o sistema de coordenadas do mundo. num intervalo qualquer definido pelo usu´rio: a xmin ≤ x ≤ xmax ymin ≤ y ≤ ymax (1.0 ≤ ndcy ≤ 1 (1.3). a ca e pcy ´ a distˆncia f´ e a ısica ao longo do eixo y a partir do extremo inferior. definem uma a a ´rea retangular no espa¸o bidimensional. ou sistema de coordenadas do usu´rio. Da mesma forma. ndvm1) nas coordenadas do dispositivo.

6 Exerc´ ıcios Escreva os procedimentos inp to ndc. que transformam dados entre os v´rios sistemas de coordenadas. ndc to user. conforme ilustrado na Figura 1. user to ndc e ndc to dc. Repita o exerc´ assumindo que a ıcio o intervalo de varia¸˜o do sistema NDC vai de: ca (i) -1 a +1 (coordenadas normalizadas centradas) (ii) 0 a 100 14 .1.3.

estes dois tipos de tra¸adores possuem caracter´ ca c ısticas de programa¸˜o e controle similares. o papel ´ fixado sobre uma superf´ plana retangular. a c e Nos tra¸adores de mesa. a c e o 2. sem entrar em ca ca a detalhes t´cnicos. segundo a forma pela qual as imagens s˜o geradas: dispositivos vetoriais e a dispositivos matriciais. ca Tanto para o usu´rio como para o implementador de sistemas gr´ficos ´ importante conhecer as a a e caracter´ ısticas de cada uma dessas tecnologias para sua melhor utiliza¸˜o. Assim. tamb´m em uma malha finita. e sim um a car´ ıssimo CRT (Cathode Ray Tube) do tipo usado em oscilosc´pios. o bra¸o ´ fixo.1 Dispositivos Gr´ficos Vetoriais a Tra¸adores Digitais c Tra¸adores (plotters) s˜o dispositivos eletromecˆnicos que produzem o desenho pelo movimento de c a a uma caneta sobre a superf´ do papel.Cap´ ıtulo 2 Dispositivos de Visualiza¸˜o ca Toda imagem criada atrav´s de recursos computacionais deve ser representada em algum dispositivo f´ e ısico que permita a sua visualiza¸˜o. num unico c ´ ´ movimento vetorial. como em uma m´quina de escrever. o o os monitores tinham como entradas duas voltagens. Um CRT consiste basicamente de uma superf´ de exibi¸˜o. quase plana.1. e o papel ´ movimentado para frente e para tr´s por a¸˜o de c c e e a ca um rolo. a qual pode ser pressionada contra o papel ou a levantada de forma a n˜o toc´-lo. Vamos discutir alguns aspectos ca da arquitetura e organiza¸˜o dos tipos mais comuns dos dispositivos de exibi¸˜o gr´fica.1. curvas e caracteres s˜o produzidos pelo tra¸ado de uma s´rie de pequenos segmentos. sobre a qual est´ loc e ıcie a calizado um bra¸o mecˆnico que movimenta-se por transla¸˜o. e ´ E poss´ ıvel classificar os dispositivos de exibi¸˜o (tra¸adores.1 2. A posic˜o da caneta sobre o papel ´ definida pelo posicionamento do ca a e bra¸o em rela¸˜o ao papel (abcissa x). o material fosforecente incandesce. um canh˜o emissor de el´trons e um sistema de deflex˜o (Figura 2. Diversas tecnologias e diferentes tipos de dispositivos s˜o utilizados para ca a gerar representa¸˜es visuais. a Embora distintos em constru¸˜o. recoberta internamente ıcie ca de material ` base de f´sforo. Como o display dos oscilosc´pios. a a Nos tra¸adores de rolo. O tra¸ador ´ em geral controlado por um processador dedicado que recebe c e instru¸˜es diretamente do computador ou de um arquivo que descreve o desenho. c e segmentos de reta s˜o tra¸ados como sequˆncias de pontos pr´ximos. O a o a e a canh˜o emite um fino feixe de el´trons que. sendo que o desenvolvimento dessas tecnologias teve um papel fundamental co na evolu¸˜o da CG. Figuras s˜o tra¸adas c ca c c a c pela varia¸˜o controlada da posi¸˜o da caneta (abcissa e ordenada) e pelo controle do estado da caneta ca ca (abaixada ou levantada). Os dispositivos ca matriciais. A primitiva gr´fica b´sica nesse tipo de dispositivo ´ o segmento ıcie a a e de reta. apenas conseguem tra¸ar pontos. acelerados. chocam-se contra a superf´ fosforecente da tela. x e y. e do cabe¸ote sobre o bra¸o (ordenada y). co 2.1). Ao longo do bra¸o desloca-se um cabe¸ote c a ca c c que suporta uma caneta perpendicularmente ` mesa. emitindo luz no ponto da tela atingido pelo ca e 15 .2 Dispositivos de V´ ıdeo Vetoriais (Vector Refresh Display Tubes) No in´ da CG. Arcos. que direcionavam um feixe de el´trons para e um ponto espec´ ıfico da tela. Os dispositivos gr´ficos vetoriais conseguem tra¸ar segmentos de reta perfeitos a c entre dois pontos da malha finita de pontos definida por suas superf´ ıcies de exibi¸˜o. a e ıcie Sob a a¸˜o dos el´trons. O feixe tra¸ava uma linha do ultimo ponto para o corrente. por outro lado. o principal dispositivo de v´ ıcio ıdeo n˜o era um monitor parecido com uma TV. impressoras e terminais de v´ ca c ıdeo) em duas principais categorias.

feixe. e a a mem´ria limitada. a o ca O tubo n˜o exige muita mem´ria para manter uma imagem complexa constru´ por segmentos de a o ıda reta.Figura 2. Esta era uma caracter´ ıstica importante no in´ da CG.2). A fun¸˜o do sistema de deflex˜o ´ dirigir controladamente o feixe de el´trons para um determinado ca a e e ponto da tela. Este processo ´ denominado refreshing c a c e (da´ o nome. As desvantagens dos terminais gr´ficos vetoriais eram: a tecnologia cara. uma vez que apenas as coordenadas dos extremos dos segmentos. e o a o a e a cai a zero logo ap´s a interrup¸˜o do bombardeio de el´trons). e um DAC (conversor digital-anal´gico) ´ necess´rio para converter os pontos digitais em voltagens a serem o e a enviadas para o CRT (Figura 2. o efeito de flickering. o a ca ca que os torna adequados para testes iniciais em anima¸˜o. de forma que toda a figura precisa ser o ca e continuamente retra¸ada para que o gr´fico permane¸a na tela. e as dos cantos da tela precisam ser armazenadas. vector refreshing tubes). O brilho do f´sforo dura apenas alguns milisegundos (a emiss˜o de luz pelo f´sforo n˜o ´ est´vel. vai ı e haver um atraso significativo entre o tra¸ado do primeiro e do ultimo vetores. que inviabilizava a descri¸˜o de imagens com detalhes complexos. ca 16 . O computador gera as coordenadas dos pontos que definem a figura a ser mostrada na tela. e alguns do vetores tra¸ados c ´ c inicialmente podem desaparecer nesse per´ ıodo. Figura 2. As vantagens: o ca dispositivo gr´fico de alta resolu¸˜o (pelo menos 1000x1000). j´ que a mem´ria era muito ıcio a o cara. Se a imagem sendo mostrada ´ composta por muitos vetores.2: Convers˜o Digital-Anal´gica para Visualiza¸˜o num CRT. O resultado ´ que o tubo n˜o consegue retra¸ar a imagem e a c de modo suficientemente r´pido para evitar que um efeito de flickering (“cintila¸˜o”) torne-se aparente a ca na tela. rapidez na gera¸˜o de imagens simples.1: Estrutura interna de um CRT.

e Uma imagem tra¸ada nesse tipo de tubo pode manter-se por mais de uma hora sem sofrer desvanecimento. Dessa forma s˜o criados “buracos” na m´scara que deixar˜o os el´trons a a a a e do outro canh˜o passarem. a Nas impressoras a jato de tinta. cada qual a a ıda com seu pr´prio sistema de coordenadas. e a longa persistˆncia da imagem ´ conseguida pela e ıdo o e e inclus˜o de dois elementos adicionais ao tubo: um canh˜o espalhador de el´trons e uma m´scara montada a a e a sobre a superf´ do f´sforo. a e e ca a sendo que as mais comuns s˜o as tecnologias de jato de tinta e laser. o apagamento causa um efeito de flashing na tela. p. cont´m estruturas “case” com comandos alternativos e para cada dispositivo admitido. Para isso. a e a Onde h´ carga negativa. definindo a forma da imagem a ser gerada. a tecnologia n˜o ´ adequada para monitores coloridos (usa apenas f´sforo verde). os tubos desgastam e precisam ser substitu´ ıdos. o tubo ´ constru´ com f´sforo comum. dcy). c a Impressoras gr´ficas: Diversas t´cnicas tˆm sido utilizadas na constru¸˜o de impressoras gr´ficas. e ıdo e a co Praticamente todos os dispositivos de sa´ vetoriais trabalham com duas primitivas de software ıda b´sicas: moveto(dcx.current position) a ca do feixe (ou caneta. e enviam a sa´ para o dispositivo de sa´ correntemente ativado. em outras palavras. E poss´ ıvel variar a intensidade do jato.1. o cabe¸ote transporta um pequeno bico que expele a tinta num jato c ´ curto e fino sobre o papel. no caso de um plotter ) para o ponto definido pelas coordenadas do dispositivo especificadas. Num sistema gr´fico com v´rios dispositivos de sa´ conectados ao computador hospedeiro. entre a tela e os canh˜es.dcy) e drawto(dcx. Um ca a ´ ca sistema de software complexo ´ constru´ atrav´s de chamadas hier´rquicas para suas fun¸˜es primitivas. tendo sido substitu´ pelos dispositivos de varredura a ıda matriciais. ausˆncia de flickering. a e a a o Um canh˜o de el´trons ´ respons´vel pela emiss˜o de um feixe fino e intenso de el´trons que produz a a e e a a e carga diferenciada na m´scara. ou num modo gr´fico a a (“bit image”) pelo qual ´ poss´ controlar cada agulha de modo independente. Desvanca e tagens: n˜o h´ como apagar seletivamente a imagem.atrav´s de NDCs ou de coordenadas f´ e ısicas. o 2.um ponto ´ impresso quando uma agulha pressiona a fita sobre o papel. uma primitiva de software implementa uma unica fun¸˜o.2. nesse caso. As agulhas s˜o e a montadas sobre um cabe¸ote m´vel. A segunda desenha um linha reta (ou. obtendo-se assim controle sobre a 17 .2 Primitivas de Software para Dispositivos Vetoriais Uma primitiva de software ´ uma rotina ou um comando escrito em alguma linguagem que executa uma e fun¸˜o b´sica de um aplicativo: ou seja. c Estas impressoras podem operar no modo texto para a impress˜o de caracteres. depois ıda ıda de fazer as convers˜es apropriadas [Rankin. e os diferentes caracteres s˜o obtidos pelo acionamento conveniente c o a das agulhas a medida que o cabe¸ote se movimenta. 29]. c Entretanto. um vetor) entre o ponto definido pela CP e o ponto definido pelas coordenadas (dcx. a m´scara ´ constru´ de material diel´trico pass´ de ser carregado de maneira n˜o e a e ıda e ıvel a uniforme. Cada padr˜o a ser impresso ´ o e a a e definido por uma pequena matriz de pontos. Vantagens dos sistemas DVST: alta resolu¸˜o (pelo menos 1024x781). onde cada ponto pode ser tra¸ado ou n˜o.1 Dispositivos Gr´ficos Matriciais a Impressoras Impressoras matriciais: nessas impressoras. dcy). os el´trons s˜o repelidos. e a e a ıcie a m´scara funciona como um filtro que seleciona os pontos ou ´reas da superf´ a serem atingidas pelos a a ıcie el´trons. As ´reas carregadas positivamente atraem os el´trons. o e ıvel conjunto de padr˜es (caracteres) que podem ser impressos ´ program´vel. ıcie o o Os el´trons s˜o uniformemente espalhados por toda a superf´ da tela pelo canh˜o espalhador.3 2.3.dcy). que passa a ser a nova CP.3 Terminais CRT com mem´ria (Direct View Storage Tubes) o O CRT com mem´ria ´ um tubo especial que se comporta como se o f´sforo fosse de alt´ o e o ıssima persistˆncia. Em outras palavras. resultante a a e do carregamento uniforme da mascara. 2. (dcx. que passa a definir a nova CP. O apagamento da tela ´ sempre global. O desenho gravado na m´scara a a sustenta a imagem na tela at´ que uma voltagem positiva seja enviada para a m´scara. e As rotinas gen´ricas move to e draw to. apagando a e a imagem. e n˜o atingem o f´sforo. permitindo que passem pela m´scara. A tecnologia dos DVST est´ ultrapassada. a imagem perde defini¸˜o com o a e o ca tempo. ´ conveniente que o sistema disponha de primitivas gen´ricas o e e que sejam acessadas de maneira independente do dispositivo . A primeira move a posi¸˜o corrente (CP . os caracteres s˜o impressos por interm´dio de um conjunto a e de agulhas .

de modo a manter uma imagem est´vel na tela. Os dados da imagem s˜o colocados no frame buffer a pelo computador hospedeiro. a o a cuja mistura produz diversas tonalidades. uma mem´ria digital (frame buffer. Os dados devem ser transferidos repetidamente. u c 2. utiliza-se a t´cnica conhecida como raster scanning (“varredura”. uma tintura (tonner ) adere ` chapa e por press˜o ´ impregnada no papel. ou “mem´ria de imagem”). As imagens a a s˜o. o monitor 3. reduzindo o flickering. constitu´ a ´ a ıdas de min´sculos pontos regularmente espa¸ados. o processo de impress˜o ´ semelhante ao das copiadoras eletrost´ticas. estas impressoras produzem imagens de natureza semelhante (mas com qualidade superior) `s geradas pelas impressoras matriciais em modo gr´fico.3.2 Dispositivos de V´ ıdeo de Varredura (Raster Scanning VDUs) A tecnologia utilizada atualmente na grande maioria dos terminais de v´ ıdeo gr´ficos ´ a mesma dos a e aparelhos de TV. e algumas impressoras disp˜em de v´rios bicos com tintas de cores diferentes. Por efeito da a a intensidade da carga. Um a e a feixe de raio laser varre uma chapa numa trajet´ria semelhante ao de um cabe¸ote de uma impressora. formando a a e a imagem. ou “rastreio”). Note a que processo de transferˆncia implica numa convers˜o digital-anal´gica (DAC).3: Uma seq¨ˆncia de bits na mem´ria de imagem ´ convertida para uma seq¨ˆncia de pixels na ue o e ue tela. Apesar de utilizarem tecnologias distintas. em ultima instˆncia. que consiste de uma interface que transfere o conte´do u do frame buffer para o monitor.4). Nas impressoras a laser. Um terminal gr´fico simples requer (Figura 2. um controlador de v´ ıdeo (display controller ). o c O bombardeio do feixe deixa a chapa carregada com uma carga eletrost´tica n˜o uniforme.3): a Figura 2. 2.4: Representa¸˜o esquem´tica de uma imagem matricial e sua representa¸˜o num frame buffer. sendo que e ca e e 18 . ca a ca 1. pelo menos 15 vezes por segundo.densidade de impress˜o. na qual a imagem a ser visualizada o o ´ armazenada como uma matriz de pixels (cada posi¸˜o na matriz cont´m a intensidade associada e ca e ao pixel correspondente na tela) (Figura 2. e a o Para gerar a imagem. Essa t´cnica tamb´m utiliza um CRT. e que ´ a mesma utilizada na gera¸˜o de imagens de TV. Figura 2.

desde completamente off (preto). co e o a 19 . Para garantir o “refrescamento” da imagem. Na tecnologia de varredura. e o surgimento de circuitos integrados a ca o dedicados ao controle e ` gera¸˜o de sinais para terminais de rastreio fixo tornaram esta tecnologia a ca extremamente competitiva. que. Note que a intensidade do feixe num determinado pixel ´ determinada e pelo valor associado ao pixel no frame buffer. e e o verde e azul (Red.5: Varredura por rastreio fixo. ca a Em monitores monocrom´ticos. Al´m do custo.6). Consequentemente. garante que cada feixe atinge apenas o f´sforo ao qual est´ associado. ent˜o o a o pixel pode ter apenas dois estados: on ou off. o ıcie o e est´ uma barreira de metal. Ao inv´s de um unico feixe de el´trons existem trˆs. todos os pontos que comp˜em uma imagem o precisam ser armazenados. o feixe de el´trons varre a tela muitas vezes por segundo. de acordo com uma trajet´ria fixa (Figura 2. a tecnologia tornou-se a alternativa mais acess´ a ıvel. na horizontal. e a ıcie e o o feixe de el´trons pode ser direcionado para qualquer ponto da tela atrav´s das voltagens x e y.6: Representa¸˜o esquem´tica de um CRT por varredura colorido. e n˜o somente linhas. denominada shadow mask ou metal mask (Figura 2. Ao final de uma varredura horizontal. outras vantagens co a e s˜o a capacidade de representar ´reas cheias. e os feixes de el´trons. o feixe ´ redirecionado ao ponto inicial da primeira linha e sempre que atingir o final da tela. toda a superf´ da tela ´ revestida com o mesmo tipo de f´sforo. Se a mem´ria consiste de apenas um bit por pixel. Entre a superf´ da tela recoberta de f´sforo. e n˜o apenas os pontos extremos dos segmentos de reta. Como o pre¸o da mem´ria digital est´ sendo a o c o a reduzido ` metade a cada ano que passa. Num e e monitor colorido. ent˜o cada pixel pode a variar entre 256 n´ ıveis de intensidade. Se existem oito bits por pixel. e o O feixe movimenta-se da esquerda para a direita. para nova varredura.5). por meio de a buracos em posi¸˜es estrat´gicas. cada pixel da tela ´ recoberto por trˆs tipos de f´sforo. passando por diferentes n´ ıveis de cinza. Blue . A dr´stica redu¸˜o dos custos de mem´ria de semicondutor. e a possibilidade de utiliza¸˜o de a a a ca cores ou diferentes n´ ıveis de cinza. Figura 2. utilizada tanto em microcomputadores como em esta¸˜es de trabalho gr´ficas. o feixe (com intensidade anulada) ´ reposicionado no in´ e ıcio da linha imediatamente abaixo.Figura 2.RGB). podendo chegar a completamente on (branco). que produzem as cores vermelho. Green. a gr´ficos de varredura requerem muito mais mem´ria. cada qual e ´ e e associado a uma cor de f´sforo.

Se existe apenas um o bit associado a cada feixe (ou seja. e o conforme mostrado na Tabela 2.. int *pixel_value) 20 . Um palette. o valor a co armazenado numa posi¸˜o da tabela ´ usado para controlar a cor do pixel associado no monitor. int dcy.1: Cores RGB em trˆs bits. trˆs bits de mem´ria por pixel). e portanto cada feixe pode ter 256 n´ a ıveis de intensidade. sendo que apenas 2D podem ser mostradas simultaneamente na tela. Isto resulta num total de 16 milh˜es de cores poss´ o ıveis. Se a profundidade do pixel ´ D.g.7 mostra um frame buffer com 8 bits por pixel. a tabela de cores ´ uma area fixa de RAM com 2D posi¸˜es de 24 bits cada: a cada feixe e ´ co (ou cor) s˜o associados 8 bits. ca 2. int pixel_value) Tamb´m ´ poss´ ler dados de um dispositivo.R 0 0 0 0 1 1 1 1 G 0 0 1 1 0 0 1 1 B 0 1 0 1 0 1 0 1 Valor Bin´rio a 0 1 2 3 4 5 6 7 Cor preto azul verde turquesa vermelho magenta amarelo branco Tabela 2. Alguns terminais gr´ficos tˆm pixels com profundidade quatro. CLUT). e portanto existem 2D palettes (0 a 2D − 1).1. pode ser bem maior. ou “profundidade” do pixel. e uma LUT com 12 bits por posi¸˜o. o n´mero real de cores poss´ e u ıveis ´ 2D . Se cada feixe tem profundidade p. ou intensidade total da cor mostrada. atrav´s da primitiva inversa: e e ıvel e int read_pixel(int dcx. varia-se a intensidade do brilho de cada f´sforo. Outros sistemas usam valores diferentes de profundidade de pixel.7: Organiza¸˜o de uma v´ ca ıdeo look-up table. verde e azul. Em geral. Ao inv´s de usar o valor do e pixel armazenado na mem´ria para controlar o feixe diretamente (e. denominado palette range. obtendo-se cores o diferentes. Um software pode atribuir valores associados a cores f´ ısicas `s posi¸˜es da look-up table correspondentes a um palette. no caso de um dispositivo matricial. tra¸a um ponto numa determinada posi¸˜o do a c ca retˆngulo de visualiza¸˜o: a ca int write_pixel(int dcx. Isto resulta em 24 = 16 cores poss´ ıveis para cada pixel. ele ´ usado o a e como um ´ ındice para uma tabela de cores (color lookup table. com significados diferentes associados aos respectivos bit planes. ca e Figura 2. mas o n´mero total de cores e u que podem ser mostradas.3. int dcy. ou “cor l´gica”. G e B. A Figura 2.3 Primitivas de Software A primitiva b´sica. us´-lo como uma cor). Assim como nos monitores monocrom´ticos o feixe de el´trons est´ associado a um conjunto de bits a e a na frame memory que determina a intensidade dos f´sforos vermelho. e Variando a intensidade de cada feixe. o pixel tem profundidade 3p. pode-se obter oito cores distintas. e o quarto especifica o brilho. O n´mero de bits associado a cada pixel ´ denominado pixel depth u e (bit planes). sendo que os trˆs primeiros bits correspondem a e e aos valores R. Assim. ´ um o e dos 2D valores de pixel poss´ ıveis. e pode-se gerar 23p cores.

Em ambos os casos, os dados s˜o lidos ou escritos no frame buffer, ou mem´ria de imagem, que a o armazena todos os pixels de uma imagem a ser visualizada ou lida. Al´m disso, o programador precisa e acessar a lookup table - caso ela exista - o que ´ feito atrav´s de duas primitivas: e e int write_CLUT(int pixel_value,int R, int G, int B) read_CLUT(int pixel_value, int *R, int *G, int *B) Todos os comandos gr´ficos num sistema envolvendo dispositivos matriciais podem ser constru´ a ıdos a partir dessas quatro primitivas. Num sistema b´sico com um dispositivo de visualiza¸˜o monocrom´tico, as primitivas podem ser a ca a reduzidas simplesmente a duas rotinas b´sicas, que s˜o casos especiais da rotina “write pixel”. Estas a a rotinas “acendem” e “apagam” o ponto definido pelas coordenadas (dcx, dcy). dot_on(int dcx, int dcy); dot_off(int dcx, int dcy) Apesar destas subrotinas usarem coordenadas de tela, rotinas num n´ ıvel superior executariam as transformadas de visualiza¸˜o para converter coordenadas do usu´rio para coordenadas do dispositivo. ca a

2.4

Exerc´ ıcios

1. Escreva um programa (em C) que desenhe um pol´ ıgono regular (ou seja, um pol´ ıgono com lados de comprimentos iguais e ˆngulos internos iguais) com raio igual a um ter¸o da altura da tela, e centro no a c centro da tela. O programa deve solicitar o n´mero de v´rtices, n. u e 2. Modifique o programa do exerc´ anterior para solicitar tamb´m o raio r do c´ ıcio e ırculo que circunscreve o pol´ ıgono. Fa¸a com que o seu programa estime o n´mero n de v´rtices necess´rios para que o pol´ c u e a ıgono pare¸a uma “boa aproxima¸˜o” para um c´ c ca ırculo, para diferentes raios. Usando os parˆmetros ndh, ndv, a width, height do dispositivo, obtenha uma rela¸˜o te´rica entre n e r para a aproxima¸˜o de c´ ca o ca ırculos atrav´s de pol´ e ıgonos. 3. Alguns dispositivos vetoriais oferecem um conjunto de trˆs primitivas gr´ficas: e a • pen up: levanta a caneta do papel, ou desliga o feixe de el´trons; e • pen down: coloca a caneta sobre o papel, ou liga o feixe; • locate(dcx,dcy): posiciona a CP num ponto do retˆngulo de visualiza¸˜o. a ca Escreva rotinas de software que simulem estas trˆs primitivas, usando as primitivas moveto e drawto. e 4. Calcule as raz˜es de aspecto (gr´fica e f´ o a ısica), e as resolu¸˜es de ´rea horizontal e vertical de uma tela co a de TV colorida padr˜o, onde: a • width = 42cm; • height = 31cm; • ndh = 546; • ndv = 434.

2.5

Dispositivos de Entrada

Juntamente com os dispositivos de sa´ ıda, os dispositivos de entrada gr´fica permitem o estabelecimento a ´ da comunica¸˜o usu´rio-m´quina. E importante que programadores de sistemas e aplicativos gr´ficos ca a a a compreendam a natureza dos principais dispositivos de entrada, de forma a selecion´-los adequadamente a em fun¸˜o da natureza das informa¸˜es a serem tratadas, e da maior ou menor facilidade que oferecem ca co aos usu´rios para exprimir informa¸˜es. a co

21

2.5.1

Teclado

O teclado alfanum´rico ´ o recurso mais utilizado na comunica¸˜o entre usu´rio e m´quina, permitindo e e ca a a a entrada de textos e dados num´ricos. Um teclado alfanum´rico estendido inclui teclas adicionais para e e a sele¸˜o de alternativas em menus ou para o disparo de fun¸˜es espec´ ca co ıficas. Teclas de movimento de cursor podem ser usadas para sele¸˜o de coordenadas de um ponto em uma tela gr´fica. ca a Em geral, valores de coordenadas especificando posi¸˜es de um cursor na tela s˜o fornecidas para o co a computador por meio de dispositivos como a ligth pen, o joystick, o mouse e as mesas digitalizadoras (tablets).

2.5.2

Ligth Pen

´ E um dispositivo que funciona associado a um monitor de v´ ıdeo, e que ´ capaz de detectar luz. A caneta e tem em sua ponta uma c´lula fotoel´trica e um interruptor de press˜o. Ao ser pressionado contra a tela, e e a o interruptor habilita a c´lula a detectar o pulso de luz emitido pelos f´sforos que recobrem a tela no e o ponto sendo apontado. Quando a ligth pen detecta um pulso de luz num terminal de varredura, o conte´do dos registradores u X e Y do controlador de v´ ıdeo ´ armazenado, e o processamento ´ interrompido. Atrav´s dos valores e e e armazenados, o software gr´fico determina as coordenadas do pixel apontado pela caneta. a Quando detecta um pulso de luz num monitor vetorial, a caneta informa ao processador, a execu¸˜o ca ´ interrompida, e o processador ´ capaz de detectar qual instru¸˜o de tra¸ado estava em execu¸˜o no e e ca c ca momento que ocorreu a interrup¸˜o, e portanto qual segmento de reta foi apontado pelo operador. A ca caneta ´ uma tecnologia um tanto ultrapassada, por ser cansativa para o usu´rio e sujeita a falhas. e a

2.5.3

Joystick

´ E uma alavanca que admite movimentos para frente e para tr´s, esquerda e direita. Dois potenciˆmetros a o s˜o respons´veis pela detec¸˜o dos movimentos na horizontal e na vertical. Sua manipula¸˜o fornece um a a ca ca ´ par de valores num´ricos em uma faixa limitada fixa para cada posi¸˜o da alavanca. E um dispositivo de e ca baixo custo, bastante utilizado em microcomputadores. Entretanto, o joystick ´ um dispositivo de baixa e resolu¸˜o, e n˜o ´ muito adequado para controlar a posi¸˜o absoluta de um cursor na tela. ca a e ca

2.5.4

Mouse

O mouse ´ uma pequena caixa que pode deslizar sobre uma superf´ plana. Na parte inferior, uma e ıcie pequena esfera incrustada no mouse rola livremente a medida que este se movimenta. Os movimentos de rota¸˜o da esfera relativos ` caixa s˜o transmitidos mecanicamente a dois potenciˆmetros que medem ca a a o o deslocamento do mouse em rela¸˜o a dois eixos ortogonais fixos. Como o sistema de eixos ´ fixo em ca e rela¸˜o ` caixa, o dispositivo ´ capaz apenas de detectar movimentos relativos ` sua pr´pria posi¸˜o ca a e a o ca atual. Ele pode ser levantado da superf´ ıcie, movido e colocado de volta sobre a superf´ sem que a sua ıcie posi¸˜o corrente no sistema seja alterada. ca

2.5.5

Mesa Digitalizadora (Tablet)

´ E o dispositivo mais adequado para entrada de dados geom´tricos. Consiste de uma superf´ plana e e ıcie um cursor que pode ser posicionado sobre a superf´ ıcie. Por indu¸˜o eletromagn´tica, a posi¸˜o corrente ca e ca do cursor, relativa a um referencial fixo ` mesa, pode ser detectada e transmitida ao processador. a

2.5.6

Data Glove

´ E o dispositivo de entrada e sa´ pelas m˜os utilizado em realidade virtual. Consiste de um conjunto ıda a de sensores acoplados a uma luva que detectam movimento e for¸a dos dedos. Antenas de transmiss˜o c a e recep¸˜o s˜o respons´veis por fornecer posicionamento das m˜os. Com isso, a posi¸˜o das m˜os pode ca a a a ca a indicar posi¸˜o de objetos, que s˜o ent˜o mapeados para tela ou para um dispositivo de headtrack. ca a a

2.5.7

Outros dispositivos

Entrada por voz, som via MIDI.

22

Cap´ ıtulo 3

Tra¸ado de Curvas em Dispositivos c Gr´ficos Matriciais a
O tra¸ado de primitivas gr´ficas elementares, como segmentos de reta ou arcos de circunferˆncia, requer a c a e constru¸˜o de algoritmos capazes de determinar na matriz de pixels da superf´ de exibi¸˜o quais pixels ca ıcie ca devem ser alterados de forma a simular-se a aparˆncia do elemento gr´fico desejado. Estes algoritmos e a recebem o nome de Algoritmos de Convers˜o Matricial, por converterem em representa¸˜o matricial a ca elementos gr´ficos expressos em uma representa¸˜o vetorial. a ca Um elemento geom´trico b´sico a ser tra¸ado num terminal gr´fico ´ o segmento de reta. Atualmente, e a c a e ´ comum que rotinas de tra¸ado de linhas estejam dispon´ e c ıveis em hardware (em chips controladores). O chip recebe as coordenadas dos pixels extremos, e calcula quais pixels intermedi´rios da superf´ de a ıcie exibi¸˜o devem ser tra¸ados para gerar uma reta (aproximada) na tela. ca c Gr´ficos complexos requerem o tra¸ado de uma grande quantidade de segmentos de reta, e a velocidade a c ´ importante - da´ a op¸˜o de tra¸ado por meio de hardware especializado, que libera o processador e ı ca c hospedeiro para outras atividades enquanto o chip controlador calcula os pixels a serem tra¸ados. c Se a fun¸˜o de tra¸ado precisa ser implementada em software, a rotina deve ser escrita em c´digo ca c o de m´quina otimizado para atingir o m´ximo de velocidade. Entretanto, ´ instrutivo estudar alguns a a e algoritmos para tra¸ado de linhas usando uma linguagem de alto n´ c ıvel. Suponhamos, que a superf´ de exibi¸˜o possua igual densidade de pixels na horizontal e na vertical ıcie ca (raz˜o de aspecto gr´fica igual a 1). a a A seguir ser´ apresentada uma importante propriedade do espa¸o onde os diversos elementos gr´ficos a c a ser˜o tra¸ados. a c

Figura 3.1: Representa¸˜o de segmentos de reta horizontais, verticais e diagonais. ca

23

como se o segmento fosse espesso.2). qualquer co c imagem representada no espa¸o matricial pode ser refletida em rela¸˜o a qualquer reta horizontal. ca e o 3. s´ que para as linhas horizontais. ca e Em (d) utilizou-se o mesmo crit´rio. Restri¸˜o: descontinuidade.2 Convers˜o Matricial de Segmentos de Reta a Alguns crit´rios de convers˜o matricial podem ser vistos atrav´s da Figura 3. a ca Figura 3. o 3. e Em (b) o crit´rio foi selecionar todos os pixels cujas coordenadas s˜o obtidas arredondando-se os e a valores das coordenadas de algum ponto do segmento.1). Restri¸˜o: com segmentos a 45 o crit´rio produz ca e resultados semelhantes ao anterior. Restri¸˜o: ca ca dessa forma obt´m-se linhas densas. A convers˜o ilustrada em (c) foi obtida selecionando-se em cada vertical o pixel mais pr´ximo do a o ponto de intersec¸˜o do segmento com a reta vertical. a menos quando o segmento passa por um pixel. A representa¸˜o matricial de segmentos de c ca reta horizontais. uma horizontal (a) e outra na diagonal (b). Na Figura 3. Logo. e o ca 24 . vertical c ca ou diagonal sem apresentar qualquer deforma¸˜o (ver Figura 3. Vantagens: aparˆncia leve e continuidade. verticais.2: Reflex˜o de uma imagem com rela¸˜o a um eixo diagonal. a Pode-se dizer que estas dire¸˜es formam na realidade eixos de simetria no espa¸o matricial. e a e Em (a) adotou-se o crit´rio de selecionar-se os dois pixels imediatamente acima e abaixo do ponto de e intersec¸˜o do segmento com cada vertical.Figura 3.3: Rota¸˜o de 90o obtida atrav´s de 2 reflex˜es.3 pode-se ver como efetuar a rota¸˜o de uma imagem ca ca utilizando de 2 reflex˜es. ca A Simetria ser´ explorada na convers˜o matricial de primitivas gr´ficas que apresentem simetria em a a a rela¸˜o a qualquer um destes eixos.4.1 Simetria e Reflex˜o a Tomemos como exemplo o tra¸ado de um segmento de reta. e diagonais a 45 e 135 n˜o apresenta nenhuma dificuldade (ver Figura 3.

4: Convers˜es matriciais de um segmento de reta resultante de diferentes crit´rios. calcula-se a soma dos quadrados das diferen¸as entre cada par (xr . a qual ´ precisamente definida por coordenadas reais. do pr´ximo ponto na linha. ou com inclina¸˜o de 45 graus. mas n˜o nos outros ca a casos. a 4. conta-se o a a n´mero de pixels tra¸ados. Isto ´ trivial c e a e no caso de segmentos paralelos aos eixos x ou y. o pr´ximo ponto ´ calculado e tra¸ado at´ que e c o e c e o outro extremo seja atingido e tra¸ado. y2 ). Os requisitos 4 e 6 s˜o avaliados u c a atrav´s da execu¸˜o de benchmarks em cada algoritmo. para efeito de compara¸˜o. O requisito 2 ´ problem´tico apenas quando os pontos e c e a extremos dos segmentos s˜o especificados em coordenadas do usu´rio. (x. obtidos por arredondamento ou truncamento. o e 3. y1 ) e (x2 .2 Crit´rio Adotado e Seja o segmento de reta definido por seus extremos (x1 . que consiste em executar os c´lculos e a iterativamente. yr ). yr ). o ca ca Nesse m´todo. a a pequenos gaps podem surgir entre o final de um segmento e o in´ de outro. Isto pode ser feito calculando as coordenadas reais. come¸ando por um dos extremos da linha. Para manter a densidade constante. Ent˜o estas coordenadas respeitam as a e a rela¸˜es: co 25 . Continuidade: a imagem n˜o apresenta interrup¸˜es indesej´veis.2.Figura 3. y). o que pode ser o feito atrav´s de um algoritmo que calcule a distˆncia entre dois pontos.1 Caracter´ ısticas Desej´veis para os Algoritmos de convers˜o Matricial a a de Segmentos de Retas 1. Rapidez no Tra¸ado dos segmentos. um sega mento de reta. c O problema da convers˜o matricial consiste essencialmente em ajustar uma curva. Qualquer algoritmo de tra¸ado de linhas pode ser testado com rela¸˜o aos requisitos acima: Para c ca o requisito 1. (xr . mantendo um registro (ou mem´ria) do progresso da computa¸˜o a cada passo da itera¸˜o. ıcio 3. os pixels devem ser igualmente espa¸ados. Intensidade independente da inclina¸˜o: para segmentos de diferentes inclina¸˜es ca co 5. A imagem do segmento n˜o varia de intensidade ou espessura ao longo de c a sua extens˜o. 2. Pode-se supor que este segmento est´ no 1o octante (porquˆ?!). c Os algoritmos que vamos estudar usam o m´todo incremental. Linearidade: os pixels tra¸ados devem dar a aparˆncia de que est˜o sobre uma reta. Precis˜o: os segmentos devem iniciar e terminar nos pontos especificados.2. no caso. a uma malha de coordenadas e inteiras. O melhor c algoritmo ´ o que resultar na menor diferen¸a. Para o requisito 3. e a 3. Espessura (Densidade) uniforme: a densidade da linha ´ dada pelo n´mero de pixels tra¸ados e u c dividido pelo comprimento da linha. a co a 6. y) mais se aproximam das coordenadas reais. Caso isso n˜o ocorra. e eso colhendo na malha os pixels cujas coordenadas (x. O requisito 5 pode e ca ca ser verificado analisando-se os tamanho dos “buracos” entre um ponto e o seu pr´ximo. e divide-se pelo comprimento da linha.

0 < x1 < x2 0 < y1 < y2 y2 − y1 < x2 − x1 (3. e e Considere a linha na Figura 3. (3. e o pr´ximo deve ser escolhido entre o pixel ` direita (pixel E) e o pixel acima ` direita (NE).4 Algoritmo do “Ponto-M´dio” e Um algoritmo equivalente a este mas que dispensa as opera¸˜es em ponto flutuante foi proposto por co Bresenham (em 1965).5 apresenta a convers˜o de segmentos pelo crit´rio acima. e M o ponto intermedi´rio ca a ´ f´cil verificar que entre os pixels E e NE. e a o e pois nesse caso o n´mero de verticais que corta o segmento ser´ menor que o de horizontais. NE est´ mais pr´ximo. y2 ) ´ o superior direito. yi ). em e (xp . E a e a se M est´ acima da reta. O ponto (x1 . e O algoritmo assume que a inclina¸˜o da linha est´ entre 0 e 1 (outras inclina¸˜es podem ser tratadas ca a co por simetria).4) onde a = Dessa forma. a a o a a o 26 . Solu¸˜o: u a ca para segmentos no 2o octante utilizar este crit´rio s´ que trocando x com y e vertical por horizontal.1) (3.6.2. O que se faz ´ observar de que lado da reta est´ o ponto M . 3.2. o ca Este crit´rio aplicado a segmentos do 2o octante n˜o produz resultados satisfat´rios (tente fazˆ-lo!).3 Algoritmos Equa¸˜o da reta: ca y = y1 + a(x − x1 ) (y2 −y1 ) (x2 −x1 ) .3) Nestas condi¸˜es o segmento de reta corta um n´mero maior de linhas verticais do reticulado do que co u de horizontais e assim: Crit´rio de Convers˜o: em cada vertical do retilado com abscissa entre x1 e x2 apenas o e a pixel mais pr´ximo da interse¸˜o do segmento com a vertical faz parte da sua imagem.1 implementa esta id´ia. o a a Seja Q o ponto de intersec¸˜o entre a reta e a coluna x = xp + 1 da malha.5: Imagens de segmentos de reta convertidos pelo crit´rio expl´ e ıcito acima. a e Figura 3. A e o Figura 3. Assumindo que o pixel que acabou de ser selecionado ´ P . determinemos o inteiro mais pr´ximo o da ordenada correspondente da reta. o pixel E est´ mais pr´ximo da reta. se M est´ abaixo. y1 ) ´ o inferior esquerdo. usando os c´lculos j´ feitos a a a para (xi . Bresenham desenvolveu um algoritmo cl´ssico que usa apenas vari´veis inteiras. O algoritmo 3. e (x2 . yp ). basta que para cada vertical da grade entre x1 e x2 .2) (3. Vamos estudar uma vers˜o do Algoritmo de Bresenham denominada MidPoint Line a Algorithm (“Algoritmo do Ponto-M´dio ou Meio-Ponto para Retas”) por Foley. yi + 1) seja feito incrementalmente. e 3. a a e que permite que o c´lculo de (xi + 1.

y. float a.x<=x2. a=(y2-y1)/(x2-x1). int x2. int valor. E pouco eficiente pois utiliza a c´lculos de ponto flutuante. a Figura 3. color). }/* end for */ }/*end line */ ´ Algoritmo 3.x++){ /* arredonda y */ y = (y1 + a * (x . write_pixel(x.void line(int x1.1: Algoritmo simples para convers˜o matricial de retas.x1)). e 27 .6: Grade de pixels para o Algoritimo o Ponto-M´dio (M) e as escolhas E e NE. int y2. y. for (x=x1. int color){ int x. int y1.

y) = 0 sobre a linha. se d < 0. dependendo do pixel escolhido. Escreva uma vers˜o melhorada do Algoritmo de Bresenham. M ´ incrementado de 1 e na dire¸˜o x. e e a 1 b b 1 F (x1 + 1. tem-se dnew = dold + a. Note que esta vers˜o do algoritmo funciona apenas para linhas com a a inclina¸˜o entre 0 e 1. Para isso. ´ E interessante verificar o que acontece com a localiza¸˜o de M e o valor de d no pr´ximo ponto da ca o reta. Isto multiplica cada constante e a vari´vel de decis˜o por 2. Se d > 0. y1 ) + a + 2 2 2 2 (3. Al´m disso. respectivamente. consequentemente dstart ´ dado por a + 2 = dy − dx . Escreva procedimentos para checar os 6 requisitos de um bom algoritmo de convers˜o matricial. o algoritmo escolhe entre 2 pixels. e ∆N E = a + b = dy − dx. M ´ incrementado de 1 em ambas as dire¸˜es. e e e 2 Usando dstart. sem necessidade de calcular F (M ) diretamente. NE e NE.Dessa forma. b = −dx.6) dy x+B dx (3.8) dold = a(xp + 1) + b(yp + ) + c 2 Subtraindo dold de dnew para obter a diferen¸a incremental. Em outras palavras. y1 ) ´ 0. ca 1 1 dnew = F (xp + 2. e c = B. Se E for escolhido. e dx = x2 − x1 . A Figura 3. a partir do a a o seu valor atual. e negativa para 1 pontos acima dela. x e y. escolhe-se o segundo pixel. Os valores sucessivos de d s˜o 2. Assim. a a 2 escolhemos o pixel E.11). positiva para pontos abaixo dela. tem-se dnew = dold +a+b. 0. ´ a E f´cil verificar que F (x. y1 ) ´ um ponto da reta.x − dx. a seguir a vari´vel de decis˜o ´ atualizada adicionando-se ∆E ou ∆N E ao valor ca a a e anterior.9) b Como (x1 . yp + 1 ). tem-se a = dy. a equa¸˜o da ca reta em termos de sua inclina¸˜o pode ser escrita como: ca y= e. tra¸ada por este algoritmo. y1 + 2 ).7 mostra a reta que vai do ponto (5. mas n˜o afeta o a a a sinal da vari´vel de decis˜o. consequentemente.5) Aqui. 6 e 4. pode-se calcular diretamente o valor inicial de 1 d para escolher entre E e NE. Como a decis˜o ser´ tomada com base no valor da fun¸˜o no ponto (xp + 1. pode-se derivar o valor da vari´vel de decis˜o no pr´ximo passo incrementalmente. se d = 0 pode-se escolher qualquer um deles. definimos a a ca 2 uma “vari´vel de decis˜o” d = a(xp + 1) + b(yp + 1 ) + c.y + B. Portanto. a e 2 O que precisamos agora ´ um m´todo para calcular de que lado da reta est´ o ponto M . que teste se as itera¸˜es devem ser a co feitas ao longo do eixo x ou ao longo do eixo y. mas a generaliza¸˜o n˜o ´ dif´ ca ca a e ıcil. e a aplique-os aos algoritmos de convers˜o estudados. que ´ o que interessa para o teste do ponto-m´dio. y) = ax + by + c = 0.dx. Denominamos ∆N E o incremento a ser adicionado depois da escolha de NE. com base no sinal da vari´vel de decis˜o calculada a a na itera¸˜o anterior.8) ao ponto (9. c Denominamos ∆E o incremento a ser adicionado depois da escolha de E. F (x. por exemplo E. E. yp + 2 ) e verificar o e seu sinal. Isto ´: e F (x. 28 . Se dy = y2 − y1 . yp + ) = a(xp + 2) + b(yp + ) + c 2 2 (3. Para o teste do ponto-m´dio. Se NE ´ escolhido. y1 + ) = a(x1 + 1) + b(y1 + ) + c = ax1 + by1 + c + a + = F (x1 . e e a considere sua fun¸˜o impl´ ca ıcita.7) mas 1 (3. F (x1 . F ´ ca e multiplicada por 2. y) = dy. o erro e o e (a distˆncia vertical entre o pixel escolhido e a linha) ´ sempre ≤ 1 . e tamb´m para checar exce¸˜es como linhas paralelas e co ao eixo x. y) = 2(ax + by + c). basta calcular F (M ) = F (xp + 1. a a e e A aritm´tica necess´ria para calcular dnew a cada passo ´ adi¸˜o simples . e ∆E = a = dy. resultantes c a da escolha de NE. e e co Subtraindo dold de dnew . Para eliminar a fra¸˜o em dstart . Ambos dependem. O primeiro ponto-m´dio est´ em (x1 + 1. F (x.nenhuma multiplica¸˜o ´ e a e ca ca e necess´ria (veja o algoritmo abaixo).dx = 0 (3. obviamente. escolhemos o pixel NE. Resumindo a t´cnica incremental do ponto-m´dio e e A cada passo. a 2. Como o primeiro pixel corresponde ao ponto (x1 . o teste do ponto-m´dio permite a escolha do pixel mais pr´ximo da reta. Exerc´ ıcios 1. e assim por diante. y1 ). da escolha de E ou NE.

1 4 de circunferˆncia. mais lento ser´ o algoritmo. mas ´ ineficiente porque requer opera¸˜es de multiplica¸˜o e raiz quadrada.8: Um arco de e arrendondando y. e v´rias estrat´gias de acelera¸˜o precisam ser a a e ca usadas.Figura 3. em coordenadas cartesianas. Entretanto. ca a quanto maior o valor de n. a a a Outra abordagem seria usar a equa¸˜o expl´ ca ıcita da circunferˆncia. poder´ 4 4 a 0 a R. y = f (x): e y = ± R2 − x2 (3. e 3. deve-se escolher um valor suficientemente alto para n. obtido variando-se x em incrementos unit´rios.7: Grade de pixels para o Algoritimo o Ponto-M´dio (M) e as escolhas E e NE. um pol´ a ıgono regular de n lados ´ usado como aproxima¸˜o para a circunferˆncia. e calculando e a e ıamos variar x de Para desenhar 1 de circunferˆncia (os outros 3 s˜o desenhados por simetria). em incrementos de uma unidade. e os pixels reais e a podem ser tra¸ados aplicando-se um offset aos pixels gerados pelo algoritmo de convers˜o matricial. Para e ca e que a aproxima¸˜o seja razo´vel. para o tra¸ado de c´ e c ırculos: Em algoritmos n˜o incrementais. Essa e ca estrat´gia funciona.11) Figura 3. Em geral os algoritmos incrementais de convers˜o matricial s˜o mais r´pidos. Al´m e e co ca e 29 . por´m ineficientes.10) Circunferˆncias n˜o centradas na origem podem ser transladadas para a origem. calculando +y a cada passo atrav´s da equa¸˜o acima. ´ dada ca e e por: x2 + y 2 = R2 (3.3 Convers˜o Matricial de Circunferˆncias a e A equa¸˜o de uma circunferˆncia com centro na origem e raio R. c a Existem muitas abordagens simples.

x1. color).dx. mas essa solu¸˜o tamb´m ´ ineficiente. write_pixel(-y. color). os e e e oito pontos sim´tricos podem ser tra¸ados usando o procedimento CirclePoints (Algoritmo 3. y = y + 1. write_pixel( x. pode-se calcular de maneira e a e trivial sete outros pontos da circunferˆncia (Figura 3. x. y) pertence ` circunferˆncia. color). e disso. Para uma circunferˆncia com centro na origem. color). d = 2 * dy . }else{ /* Escolhe NE */ d = d + incNE. write_pixel(-x. color). write_pixel( y. while (x < x2){ if (d <= 0){ /* Escolhe E */ d = d + incE. -y.2: Algoritmo do Ponto-M´dio incremental. }/* end while */ }/* end inc_line */ Algoritmo 3. y = y1. y. Consequentemente. color).void inc_line(int x1. Uma maneira de resolver o problema dos gaps ´ “plotar” x = R. /* Valor inicial de d */ incE = 2 * dy. basta computar um arco de e circunferˆncia de 45o para obter a circunferˆncia toda. x.1 Simetria de ordem 8 Note que o tra¸ado de uma circunferˆncia pode tirar proveito de sua simetria.3. int y1. -y. int x2. -x.3: Procedimento CirclePoints. Vamos estudar especificamente um algoritmo derivado do algoritmo de Bresenham para gera¸˜o de ca circunferˆncias. pois precisa de fun¸˜es caras (sin ca e e co e cos). Considere uma circunc e ferˆncia centrada na origem. write_pixel(-y. y. write_pixel(-x. incE. y. }/* end if */ write_pixel(x. color). -x. e 30 .9). e c void CirclePoints(int x. write_pixel( y. color). y. x = x + 1. Se o ponto (x. color). haver´ grandes gaps nas regi˜es onde a tangente ` circunferˆncia ´ infinita (valores de x pr´ximos a o a e e o a R. color). chamado “Midpoint Circle Algorithm” em [Foley et. int color){ int dx. write_pixel(x. /* Incremento de E */ incNE = 2 * (dy . dy. int y2.y1. int y. /* Incremento de NE */ x = x1. x. int color){ write_pixel( x. 3.8). }/* end CirclePoints */ Algoritmo 3. d.dx). dx = x2 . Figura 3. sin θ. cos θ e y = R. al]. incNE. dy = y2 . y. e para variando de 0 a 90 graus. x = x + 1.3).

E ´ escolhido. o 2o octante. Se dold ≥ 0. e a e Assim como no caso das linhas. Assim como o c e algoritmo gerador de linhas. ∆SE = 2xp − 2yp + 5. e o e a ca 1 1 (3. uma vez que as fun¸˜es s˜o lineares.3. y = R a x = y = √2 . a cada passo. No caso da circunferˆncia ca e (equa¸˜o quadr´tica).Figura 3. e o pr´ximo ponto-m´dio ser´ incrementado de 1 na dire¸˜o x e decree o e a ca mentado de 1 na dire¸˜o y. o pixel escolhido na itera¸˜o anterior (P ´ chamado “ponto de avalia¸˜o”). yp − ) = (xp + 2)2 + (yp − )2 − R2 2 2 e dnew = dold + (2xp + 3). porque est´ mais pr´ximo dela. positivo fora dela e negativo ca e e dentro. ∆E e ∆N E eram constantes. ca a e co a 31 . a o e escolha do pr´ximo pixel ser´ entre os pixels E e SE (Figure 3. sendo fun¸˜es do valor espec´ ca a co ıfico de (xp . E e SE variam a cada passo. e e usaremos o procedimento CirclePoints para tra¸ar todos os pontos da circunferˆncia. cujo valor ´ 0 sobre a circunferˆncia. Se o ponto intermedi´rio (o “ponto-m´dio”) entre os pixels E e SE est´ fora da circunferˆncia. yp − ) = (xp + 1)2 + (yp − )2 − R2 (3. se o pixel intermedi´rio est´ dentro e a o a a da circunferˆncia. o a Seja a fun¸˜o F (x. Por outro lado. Note que no caso da reta (equa¸˜o linear).14) 2 2 Como dnew = dold + (2xp − 2yp + 5). avaliando-se uma fun¸˜o no ponto intermedi´rio entre os dois pixels.13) dnew = F (xp + 2. a escolha ´ feita com base na vari´vel de decis˜o d. a estrat´gia ´ selecionar entre 2 pixels na malha aquele que est´ mais pr´ximo e e a o da circunferˆncia. que d´ o valor da e a a a fun¸˜o no “ponto-m´dio”: ca e Se dold 1 1 dold = F (xp + 1. yp ) foi previamente escolhido como o mais pr´ximo da circunferˆncia. ent˜o o pixel E ´ escolhido. e e 3. de x = 0.2 Algoritmo do “Ponto-M´dio” para Circunferˆncias e e R Consideraremos apenas um arco de 45o da circunferˆncia.9: Oito pontos sim´tricos em uma circunferˆncia. y) = x2 +y 2 −R2 . yp − ) = (xp + 2)2 + (yp − )2 − R2 (3. yp ).10).12) 2 2 < 0. As fun¸˜es podem ser avaliadas ca e ca co diretamente. Portanto: ca 3 3 dnew = F (xp + 2. SE ´ escolhido. Assim. Essa ca avalia¸˜o n˜o ´ computacionalmente cara. e o pr´ximo ponto-m´dio ser´ incrementado de 1 na dire¸˜o x. No segundo e ca a octante. o a e a e pixel SE ´ escolhido. consequentemente ∆E = 2xp + 3. se o pixel P em (xp . dados os valores de x e y do pixel escolhido na itera¸˜o anterior.

R− 1 ).10: Malha de pixels para o Algoritmo do Ponto-M´dio para circunferˆncias. atualizar a vari´vel d com o valor correspondente ao pixel escolhido. Limitando a utiliza¸˜o do algoritmo a raios ca ca inteiros no segundo octante. e o e a 2 1 e portanto F (1. R). ca ca ca Falta ainda calcular a condi¸˜o inicial (o 1o valor de d). a ca 2. 32 . calculada na itera¸˜o anterior. escolher o pixel com base no sinal da vari´vel d. calculamos uma fun¸˜o linear do ponto de avalia¸˜o.11: Segundo octante da circunferˆncia gerado com o algor´ e ıtimo do Ponto-M´dio e primeiro e octante gerado por simetria. R − 2 ) = 1 + (R2 − R + 1 ) − R2 = 5 − R. os mesmos dois passos executados para o algoritmo do tra¸ado de linhas s˜o executados c a para o algoritmo de circunferˆncias: e 1. bastante parecido com o algoritmo 4 4 para tra¸ado de retas. ilustrando a escolha e e entre os pixels E e SE. O algoritmo.Figura 3. ´ mostrado no Algoritmo 3.4. c e Figura 3. na atuaa c e liza¸˜o de d. Resumindo. A diferen¸a ´ que. O pr´ximo “ponto-m´dio” est´ em (1. o pixel inicial ´ dado por (0.

d = 5/4 . como o valor inicial de h ´ inteiro. color). e no algoritmo. (Para manter a e e nota¸˜o consistente com o algoritmo de linhas. }/* end while */ }/* end MidpointCircle */ Algoritmo 3. Vimos que as fun¸˜es s˜o equa¸˜es lineares. devido ao valor inicial de d. color). while (y > x){ if (d < 0){ /* Selecione E */ d = d + 2 * x + 3. h. A estrat´gia consiste em avaliar as fun¸˜es diretamente em dois pontos adjacentes. yp ) para (xp + 1. x++.assim o como foi feito com as vari´veis de decis˜o. float d.16) e a diferen¸a de 2 ordem ´ ∆SEnew − ∆SEold = 2. c e Analogamente. e Diferen¸as de Segunda Ordem c ´ E poss´ ıvel melhorar o desempenho do algoritmo usando ainda mais extensivamente a t´cnica da come puta¸˜o incremental.15) e a diferen¸a de 2a ordem ´ ∆Enew − ∆Eold = 2. Temos agora um algoritmo que opera ca em termos de h. e a vari´vel ´ incrementada de valores inteiros (∆E e e a e ∆SE). c ∆Enew em (xp + 1. elas est˜o sendo ca co a co a computadas diretamente. CirclePoints(x. ca Se escolhemos E na itera¸˜o atual.4: Algoritmo do Ponto-M´dio para circunferˆncias (Aritm´tica Real). o ca e ca 4 4 Entretanto. SEold em (xp . yp ) = 2xp − 2yp + 5.11 mostra ca o segundo octante de uma circunferˆncia de raio 14 gerada pelo algoritmo. que ´ mostrado no Algoritmo 3. Como ca ca e u vimos. substituimos novamente h por d). o ponto de avalia¸˜o move de (xp . um problema com esta vers˜o ´ a necessidade de usar aritm´tica a a e e real. e a compara¸˜o d < 0 torna-se h < − 1 . ca ca Conseq¨entemente u 33 . y. e e e O algoritmo pode ser facilmente modificado para manipular circunferˆncias centradas fora da origem. qualquer polinˆmio pode ser calculado incrementalmente .5. a inicializa¸˜o ´ h = 1 − R. Entretanto. o ponto de avalia¸˜o move de (xp . e ou de raios n˜o inteiros. }/*end if*/ CirclePoints(x. a diferen¸a de 1a ordem ´ ∆Eold em (xp . A Figura 3. yp ). e substituir co a a 4 d por h + 1 no c´digo. a compara¸˜o pode ser alterada simplesmente para h < 0. onde h = d − 1 . c e Se escolhemos SE na itera¸˜o atual.r. Agora. e aplicar esta diferen¸a a c o e o c cada itera¸˜o. int y. estamos calculando diferen¸as parciais de 1a e a a c 2a ordens). usando apenas aritm´tica inteira. u ∆SEnew em(xp + 1. y = r. x++. yp − 1). }else{ /* Selecione SE */ d = d + 2 * (x . Conseq¨entemente. int color){ int x. Para eliminar as fra¸˜es. yp ) para (xp + 1.void MidPointCircle(int r.y) + 5. yp ) = 2(xp + 1) + 3 (3. y--. vamos definir uma nova vari´vel de decis˜o. calcular a e co diferen¸a (que no caso de polinˆmios ´ sempre um polinˆmio de menor grau). y. /* Valores iniciais */ x = 0. yp ) = 2(xp + 1) − 2yp + 5 a (3. yp ) = 2xp + 3. (Na verdade. Conseq¨entemente. Entretanto.

∆E e ∆SE s˜o computados usando o pixel inicial (0. y) = b2 x2 + a2 y 2 − a2 b2 = 0 Consideremos a elipse padr˜o da Figura 3. usando o valor de calculado na itera¸˜o anterior.12. a ca 2.y) + 5. atualizar os ∆ s para considerar o movimento para o pr´ximo pixel. c a Primeiramente dividiremos o primeiro quadrante em duas regi˜es: o limite entre as duas regi˜es ´ o o o e ponto da curva cuja tangente tem inclina¸˜o igual a -1. color). }else{ /* Selecione SE */ d = d + 2 * (x . x++. bastante utilizando a otimiza¸˜o das diferen¸as de 2a ordem ´ apresentado em no Algoca c e ritmo 3. Ele ´ descrita pela equa¸˜o: a e ca (3.18) e a diferen¸a de 2a ordem ´ ∆SEnew − ∆SEold = 4. yp − 1) = 2(xp + 1) − 2(yp − 1) + 5 (3. o a O algoritmo. e e e ∆Enew em(xp + 1. int y. e 4. int color){ int x.r. A determina¸˜o deste ponto n˜o ´ t˜o simples. a vers˜o final do algoritmo a a dada a seguir e consiste dos seguintes passos: 1. assim a preocupa¸˜o ser´ de tra¸ar apenas o primeiro ca a c quadrante da elipse e depois tra¸ar os demais por reflex˜o. e a ca As elipses possuem simetria horizontal e vertical. yp − 1) = 2(xp + 1) + 3 e a diferen¸a de 2 c a (3. CirclePoints(x. d = 1 .6. while (y > x){ if (d < 0){ /* Selecione E */ d = d + 2 * x + 3. R). /* Valores iniciais */ x = 0. utilizando as diferen¸as conso c tantes previamente calculadas. y = r. 0). centrada em (0. ca ca a e a 34 . Al´m disso. y. e e ∆SEnew em(xp + 1. tomar-se-´ como base elipses centradas na origem (transla¸˜o !). escolher o pixel com base no sinal da vari´vel d calculada na itera¸˜o anterior. c e Considerando que ∆E e ∆SE s˜o computados usando o pixel inicial (0. x++.19) onde 2a ´ o comprimento do eixo maior (eixo x) e 2b ´ o comprimento do eixo menor (eixo y). R). e e Como foi feito para circunferˆncias. }/* end while */ }/* end MidpointCircleInt */ Algoritmo 3.17) ordem ´ ∆Enew − ∆Eold = 2. y--. color). y. atualizar a vari´vel d usando E ou SE. }/*end if*/ CirclePoints(x.void MidPointCircleInt(int r. d.4 Convers˜o Matricial de Elipses a F (x.5: Algoritmo do Ponto-M´dio para circunferˆncias utilizando aritm´tica inteira. a ca 3. mover para o pr´ximo pixel. 3.

void MidPointCircleInt(int r, int color){ // Fun¸~o de utiliza diferen¸as parciais de 2a ordem para incrementar variavel de ca c // decis~o d. Circunfer^ncia centrada na origem a e /* Valores iniciais */ int x = 0; int y = r; int d = 1 - r; int deltaE=3 inte deltaSE= -2*r+5 CirclePoints(x, y, color); while (y > x){ if (d < 0){ /* Selecione E */ d +=deltaE; deltaE += 2; deltaSE += 2; }else{ /* Selecione SE */ d +=deltaSE; deltaE += 2; deltaSE += 4; y--; }/*end if*/ x++; CirclePoints(x, y, color); }/* end while */ }/* end MidpointCircleInt */ Algoritmo 3.6: Algoritmo MidPoint para convers˜o matricial de circunferˆncias utilizando difea e ren¸as de 2 a ordem c

35

Figura 3.12: Elipse padr˜o centrada na origem. a Para tanto utilizaremos o vetor gradiente que ´ perpendicular ` tangente ` curva no ponto P , definido e a a como: GradienteF (x, y) = ∂F ∂F i+ j = 2b2 xi + 2a2 y j ∂x ∂x (3.20)

Figura 3.13: As duas regi˜e adotadas, definidas pela tangente a 45o . o O limite entre as duas regi˜es ´ o ponto cuja inclina¸˜o da curva ´ -1, e este ponto ocorre quando o e ca e o vetor gradiente tem inclina¸˜o igual a 1, isto ´, quando os componentes nas dire¸˜es i e j s˜o de ca e co a magnitudes iguais. A componente j do gradiente ´ maior do que a i na regi˜o 1, e vice-versa na regi˜o e a a 1 o a a 2. Assim, se o pr´ximo “ponto-m´dio” ´ a2 (yp − 2 ) ≤ b2 (xp + 1), n´s mudamos da regi˜o 1 para a regi˜o o e e 2 (ver Figura 3.13). Como nos outros algoritmos de “ponto-m´dio” anteriores, o sinal da vari´vel de decis˜o d (´ o valor e a a e da fun¸˜o no “ponto-m´dio”) ser´ usado para verificar que pixels fazem ou n˜o parte da elipse. ca e a a Assim, na regi˜o 1, se o pixel corrente est´ em (xp , yp ), ent˜o a vari´vel de decis˜o para a regi˜o a a a a a a 1, d1, ´ F (xp + 1, yp − 1 ), o ponto m´dio entre E e SE. Repetindo o processo de deriva¸˜o para a e e ca 2 fun¸˜o de incremento (como foi feito para circunferˆncia), tem-se que ∆E = b2 (2xp + 3) e ∆SE = ca e b2 (2xp + 3) + a2 (−2yp − 1).

36

Para a regi˜o 2, se o pixel corrente est´ em (xp , yp ), ent˜o a vari´vel de decis˜o para a regi˜o 2, d2, a a a a a a 1 ´ F (xp + 2 , yp − 1), o ponto m´dio entre S e SE. Pode-se fazer c´lculos idˆnticos aos da regi˜o 1. e e a e a A condi¸˜o inicial deve ser ent˜o computada. Assumindo valores inteiros para a e b, a elipse come¸a ca a c em (0, b), e o primeiro “ponto-m´dio” ´ calculado em (1, b − 1 ). Assim, e e 2 1 1 1 F (1, b − ) = b2 + a2 (b − )2 − a2 b2 = b2 + a2 (−b + ) 2 2 4 void MidpointElipse(int a, int b, int color){ int x, int y; float d1, d2; /* Valores iniciais */ x = 0; y = b; d1 = b * b - a * a * b + a * a / 4.0; ElipsePoints(x, y, color); /* Simetria de ordem 4 */ while(a * a * (y - 0.5) > b * b * (x + 1)){ /* Regi~o 1 */ a if (d1 < 0) d1 = d1 + b * b * (2 * x + 3); x++ }else{ d1 = d1 + b * b * (2 * x + 3) + a * a * (-2 * y + 2); x++; y--; }/*end if*/ ElipsePoints(x, y, color); }/* end while */ d2 = b * b * (x + 0.5) * (x + 0.5) + a * a * (y - 1) * (y - 1) - a * a * b * b; while(y > 0){ /* Regi~o 2 */ a if (d2 < 0){ d2 = d2 + b * b * (2 * x + 2) + a * a * (-2 * y + 3); x++; y--; }else{ d2 = d2 + a * a * (-2 * y + 3); y--; }/*end if*/ ElipsePoints(x, y, color); }/* end while */ }/*end MidpointElipse*/ Algoritmo 3.7: Algoritmo do Ponto-M´dio para convers˜o matricial de elipses. e a (3.21)

3.5

Corre¸˜o no Tra¸ado ca c

Para a maioria dos dispositivos gr´ficos, o retˆngulo de visualiza¸˜o n˜o ´ quadrado, e as densidades de a a ca a e pixels na horizontal e na vertical s˜o diferentes. Ou seja, a raz˜o de aspecto f´ a a ısica raramente ´ igual e a 1, e a consequˆncia ´ uma distor¸˜o vis´ e e ca ıvel no tra¸ado. Por exemplo, um quadrado (especificado c em coordenadas do usu´rio) pode ser deformado num retˆngulo ao ser convertido em coordenadas do a a dispositivo, ou uma circunferˆncia pode ser distorcida numa elipse. e A forma mais simples de corrigir esta deforma¸˜o ´ atrav´s de uma transforma¸˜o de escala dos dados ca e e ca que definem a curva a ser tra¸ada. Ou seja, no caso da circunferˆncia, bastaria converter os pontos c e que definem a circunferˆncia em pontos que na verdade definem uma elipse, mas que, como existe a e deforma¸˜o, aparecem na tela como uma circunferˆncia. ca e 37

e requerem um n´mero bem ca a a u maior de opera¸˜es do que o efetuado pelos algoritmos de convers˜o estudados.1 ´ Amostragem de Areas n˜o Ponderada a O fato ´ que. a Figura 3. Essa manipula¸˜o dos ca ca a ca pontos das curvas deve ser feita pelo programa que efetua a interface entre os programas do usu´rio e a os dispositivos gr´ficos de sa´ . mas tamb´m os pixels vizinhos.14) . A cada vez que se passa para a pr´xima coluna e o pixel mais pr´ximo da linha a o o ideal ´ o que est´ a nordeste (NE). ocorre um “efeito escada”.os chamados Pacotes gr´ficos de interfaceamento. podemos pensar em c a a um segmento de reta como um retˆngulo com uma certa espessura que cobre uma regi˜o da malha de a a 38 . com inclina¸˜o entre 0 e 1.6 Antialising As primitivas geradas apresentam o problema da aparˆncia “serrilhada”. com intensidades vari´veis. a Outra quest˜o complexa ´ a elimina¸˜o do efeito de “serrilhado” (aliasing) observ´vel nas imagens a e ca a geradas por m´todos de convers˜o matricial. que ser˜o a e a a tanto maiores quanto mais pr´ximos os pixels estiverem do centro da reta. e que n˜o resolve o problema. A aplica¸˜o de t´cnicas que o ca e reduzem (ou eliminam) o efeito de aliasing ´ denominado antialising. ou Ambientes a ıda a Gr´ficos. ca a 3. Assim. apesar da primitiva ideal. acima e abaixo. como um segmento de reta. pois ocupa uma ´rea finita da tela. ent˜o as abcissas dos pontos extremos de cada segmento a tra¸ar devem e a c ser dobradas para que mantenham a mesma propor¸˜o em rela¸˜o `s ordenadas. c As t´cnicas de anti-serrilhado (antialiasing) tra¸am n˜o s´ os pixels calculados pelo procedimento de e c a o convers˜o matricial. Este efeito e indesej´vel ´ o resultado da abordagem “tudo ou nada” adotada no processo de convers˜o matricial. e a Considere o algoritmo do ponto m´dio para tra¸ado de segmentos de reta sendo usado para tra¸ar e c c uma linha preta de um pixel de espessura. e exigem que se fa¸a um controle de intensidade do a c tra¸o.6. e primitivas ou imagens geradas e utilizando tais t´cnicas s˜o ditas antialiased. Uma forma de reduzir o problema (em termos visuais) ´ aumentar a resolu¸˜o e ca do dispositivo (usar mais pixels) (ver Figura 3. Esta ´ uma solu¸˜o cara em termos de mem´ria e ca o e tempo gasto no processo de convers˜o matricial. Alternativas menos a a custosas s˜o descritas a seguir. As t´cnicas usualmente aplicadas para a corre¸˜o desse c o e ca efeito s˜o “caras” (do ponto de vista computacional). no a e a qual cada pixel recebe a cor associada ` primitiva ou mant´m a sua cor original. em um fundo branco. Para corrig´ basta aplicar-se aos parˆmentros das curvas a serem tra¸adas uma ı-la a c transforma¸˜o de escala inversa.14: Segmento de reta renderizado com o algor´ ıtmo do ponto m´dio em diferentes escalas. Esse efeito ´ apenas a e e uma das v´rias manifesta¸˜es vis´ a co ıveis do fenˆmeno conhecido como aliasing. Em cada ca coluna de pixels interceptada pela linha o algoritmo seta a cor preta ao pixel que est´ mais perto do ponto a ideal pertencente ` linha. ter espessura zero. (a) ´ e e uma aplia¸˜o da regi˜o central de (b). Este efeito ´ mais pronunciado nos trechos de arcos com e a e inclina¸oes pr´ximas da horizontal ou vertical. se a densidade horizontal ca ´ o dobro da densidade vertical.As diferen¸as de densidades representam de fato uma opera¸˜o de escala n˜o homogˆnea realizada c ca a e pelo dispositivo. e n˜o ` leste (E). que compense a do dispositivo. O c´lculo das intensidades o a dos pixels e a determina¸˜o das suas coordenadas s˜o processos n˜o triviais. O mesmo acontece em e a a a outros tipos de primitivas. ou “efeito escada”. a primitiva e sendo tra¸ada tem espessura n˜o nula. Por exemplo. co a 3.

Figura 3. qual ´ a geometria de um pixel? Qual o seu tamanho? Qual intensidade a atribuir a um e ´ pixel interceptado pela linha? E computacionalmente simples assumir que os pixels definem uma malha regular de “quadrados” n˜o sobrepostos que recobre a tela. na coluna em quest˜o. Entretanto. a sua proximidade em rela¸˜o ca a e ca ao centro do pixel. 2) se a primitiva n˜o intercepta e aa a a ´rea do pixel. mas atribuir diferentes intensidades da cor a cada ´ pixel interceptado pela ´rea coberta pelo retˆngulo que aproxima a linha. Uma estrat´gia ainda mais eficiente ´ a amostragem por ´rea a e e a ponderada (weighted area sampling). ´reas iguais podem contribuir de forma desigual: uma ´rea pequena pr´xima a a o do centro do pixel tem maior influˆncia do que uma ´rea grande a uma distˆncia maior. cada qual com uma intensidade co e c apropriada.15. e a ´ Amostragem de Areas Ponderada Nessa outra estrat´gia. Uma primitiva pode sobrepor toda ou parte da ´rea ocupada por um pixel. a a a linhas horizontais ou verticais. assim como na anterior. o melhor procedimento n˜o ´ atribuir o valor u a e correspondente a preto a um unico pixel em uma coluna. afetam exatamente 1 pixel em uma coluna ou e linha. mais do que 1 pixel ´ tra¸ado. valem duas propriedades: 1) a intensidade atribu´ ao e ıda pixel ´ diretamente proporcional ` ´rea do mesmo coberta pela primitiva. como ilustrado na Figura 3. melhorando e ca sua aparˆncia visual quando observada ` distˆncia. ele recebe a intensidade m´xima (preto. Conseq¨entemente.16). Assim. Se a primitiva cobre toda a ´rea do pixel. ent˜o ela n˜o contribui nada para a cor do mesmo. o a precisamos mudar a geometria do pixel da seguinte forma: vamos considerar que o pixel ocupa uma ´rea a 39 . e a a para garantir que a primitiva contribui para um pixel apenas se ela sobrep˜e a ´rea ocupada pelo mesmo. se cobre parte o pixel recebe um tom de cinza cuja intensidade ´ proporcional ` ´rea coberta e aa (Figura 3. pixels s˜o tratados como “quadrados” com centro nas interse¸˜es da a co malha. tamb´m.pixels.. Assumimos tamb´m a e que a linha contribui para a intensidade do pixel segundo um valor proporcional ` porcentagem da ´rea do a a pixel coberta por ela.e. Mas. cuja espessura ´ 1 pixel. A diferen¸a ´ que. Essa estrat´gia ´ denominada amostragem por ´rea e a a e e a n˜o ponderada (unweighted area sampling). Figura 3. na estrat´gia a a a c e e ponderada.16: A intensidade do pixel ´ proporcional ` area coberta. O efeito ´ “suavizar” a defini¸˜o da reta ou das arestas que definem a primitiva. Assim. sendo que as intersec¸˜es da malha definem a co o posicionamento dos pixels. ao determinar a contribui¸˜o de uma ´rea considera-se. a a no caso).15: Segmento de reta definido com uma espessura diferente de zero. Para linhas com outras inclina¸˜es. i.

Portanto.W s. e e a tem-se I = Imax.18: Filtro cˆnico com diˆmetro igual ao dobro da largura de um pixel. como indicado na Figura 3. y). a soma das contribui¸˜es de intensidade para o cone ´ dada pelo ca co e 40 . o a Assim como na fun¸˜o ’caixa’. Figura 3. e a ca e ca intensidade I do pixel ´ dada por Imax. ela contribui para a intensidade do pixel. e no caso da amostragem ponderada. y). Para a amostragem por ´rea n˜o ponderada.circular maior do que a ´rea quadrangular considerada na situa¸˜o anterior. de forma que o volume da caixa ´ 1. cuja altura em rela¸˜o ao plano xy d´ o peso associado ` ca ca ca a a a ´rea dA no ponto (x. O volume representado por essa integral. No caso da ´rea da linha cobrir todo o pixel. A figura mostra os pixels como quadrados cujos centros (marcados) est˜o nas intersec¸˜es da malha regular.17: Filtro definido por um cubo para um pixel definido por um quadrado. na intensidade do pixel. ela diminui a ca e de forma inversamente proporcional ` distˆncia em rela¸˜o ao centro do pixel. essa fun¸˜o ´ representada por a a ca e uma ’caixa’. denominada dA. ´ sempre uma fra¸˜o entre 0 e 1. como indicado na Figura 3. A base do cone ´ uma circunferˆncia cujo centro a e e coincide com o centro do pixel. a intensidade total ´ dada pela integral da fun¸˜o peso sobre a e ca a ´rea de sobreposi¸˜o. No caso da amostragem n˜o ponderada a altura da ’caixa’ e a ´ normalizada para 1. A contribui¸˜o de cada pequena ´rea ´ proporcional a co ca a e aa ` ´rea multiplicada pelo peso. de uma ´rea ca e a pequena da primitiva. e seu a a gr´fico define um cone. no plano. Note que as bases das fun¸˜es peso em diferentes pixels se sobrep˜em. Essa sobreposi¸˜o a ca tamb´m garante que n˜o existem ´reas da grade que n˜o s˜o cobertas por algum pixel (esse n˜o seria o e a a a a a caso se o raio da base fosse de meia unidade. Figura 3. e cujo raio corresponde a uma unidade da distˆncia entre os pixels na a malha. No caso da ca a amostragem n˜o ponderada. W s.18. em fun¸˜o da distˆncia de dA ao centro do pixel. e portanto uma unica co o ´ pequena regi˜o da primitiva pode contribuir para a intensidade de diferentes pixels. essa fun¸˜o ´ constante. a Vamos definir uma fun¸˜o peso que determina a influˆncia.17. Podemos pensar nessa a a ca fun¸˜o como uma fun¸˜o W (x. por exemplo). Se a primitiva sobrep˜e essa a ca o nova ´rea.1 = Imax. Vamos agora construir uma fun¸˜o peso para a amostragem ponderada: a fun¸˜o adotada tem valor ca ca m´ximo no centro do pixel e diminui linearmente a medida que a distˆncia ao centro aumenta.

W s. Outros tipos de a ca fun¸˜es podem ser usadas. sendo que existem fun¸˜es ´timas melhores do que a fun¸˜o cˆnica (v. A altura do cone ´ normalizada para que e ca e o volume do mesmo seja igual a 1. garantindo que um pixel que est´ inteiramente sob a base do cone a seja tra¸ado com intensidade m´xima. como mostrado na Figura 3.10). o que n˜o ocorre na abordagem n˜o ponderada. Foley. Contribui¸˜es de ´reas da primitiva que interceptam a base mas c a co a est˜o distantes do centro do pixel s˜o pequenas. de forma a gerar transi¸˜es visuais mais suaves.volume sob o cone que est´ na regi˜o de interse¸˜o da primitiva com a base do cone. por´m pr´ximas do centro a a a e o do pixel contribuem mais para a cor do mesmo. a a ca ´ uma se¸˜o vertical do cone. Particularmente. Esse volume. [Fol90.17. se¸˜o 3. mas ´reas muito pequenas. ca 41 .4]. co co o ca o se¸˜o 4. linhas horizontais co ou verticais com espessura de um pixel agora resultam em mais do que uma unica linha ou coluna de ´ pixels acesos.18. Essa abordagem pode ser embutida nos a a algoritmos de convers˜o matricial. como descrito em Foley et al. O resultado dessa abordagem ´ reduzir o contraste entre e pixels adjacentes.

quais os pixels que pertencem a cada primitiva e quais os pixels que n˜o pertencem.1: Trecho de Algoritmo para Preenchimento de Retˆngulo. preenchendo os pixels em “blocos” (span) que est˜o dentro da primitiva a (que define o pol´ ıgono) da esquerda para a direita. Assim. a Consideremos agora dois retˆngulos que compartilham um mesmo lado. podemos definir os pixels que matematicamente se encontram no interior de uma ´rea definida a 42 . se em menos acessos a mem´ria pudermos escrever mais pixels estaremos ganhando o tempo. o a Para y = ymin at´ ymax do ret^ngulo { Por linha de varredura } e a Para x = xmin at´ xmax { Cada pixel dentro do bloco } e write_pixel (x. Deixaremos isso para discuss˜o posterior. Geralmente decidir que pixels devem ser pintados.valor) Algoritmo 4. 4. Coerˆncia ´ uma proe e priedade bastante explorada em CG. Posteriormente consideraremos a a e tamb´m coerˆncia de arestas (edge coherence) para lados de pol´ e e ıgonos em geral. sendo que nele n´s n˜o nos a o a preocuparemos em escrever eficientemente na mem´ria. 2. o lado (aresta) compartilhado pelos dois ser´ gerado duas vezes o que n˜o ´ a a a e desej´vel (perco tempo!). e preenchendo. o que garante coerˆncia de bloco (span coherence). da e esquerda para a direita. isto ´. Aqui surge o problema de defini¸˜o de ´rea pertencente a cada primitiva. Abaixo colocaremos um algoritmo para preencher um retˆngulo. Para um retˆngulo preenchido com a mesma cor. Vamos considerar inicialmente o preenchimento de primitivas gr´ficas n˜o “recortadas” (unclipped ) com uma unica cor. Assim. As primitivas para blocos exploram a Coerˆncia Espacial: o fato que freq¨entemente n˜o h´ e u a a altera¸˜o nas primitivas de um pixel para outro (pixels adjacentes) dentro de um bloco (span) ou de uma ca linha de varredura para a pr´xima linha de varredura. De forma e a natural. O a e retˆngulo tamb´m exibe coerˆncia de linha de varredura (scan-line coherence). Decidir com que valor pintar o pixel.Cap´ ıtulo 4 Preenchimento de Pol´ ıgonos A tarefa de preencher um pol´ ıgono pode ser dividida em duas: 1. todos c a os pixels num bloco receber˜o um mesmo valor. ca A capacidade de tratar v´rios pixels identicamente em um bloco (span) tem especial importˆncia a a para a diminui¸˜o de tempo gasto para gravar os pixels no Frame Buffer (mem´ria onde ´ armazenada ca o e a imagem). no sentido de que linhas a e e de varredura consecutivas que interceptam o retˆngulo s˜o idˆnticas.1 Retˆngulos a Para preencher um retˆngulo com uma unica cor. mas tamb´m a a e para visualiza¸˜o de primitivas 3D. podemos explorar a coerˆncia para buscar o e apenas os pixels em que ocorrem mudan¸as. blocos de pixels adjacentes (spans) que est˜o dentro da primitiva que define o a pol´ ıgono. a ca a isto ´. consiste em se varrer (scan) sucessivas linhas que interceptam a primitiva. pode-se preencher cada “bloco” de xmin e a xmax. a decis˜o sobre quais pixels a a ´ a preencher ´ feita “varrendo-se” (scan) linhas sucessivas que interceptam a primitiva. n˜o apenas para convers˜o matricial de primitivas 2D.y. pinta-se cada pixel dentro de uma linha de varredura a ´ da esquerda para a direita com o mesmo valor de pixel. Decidir que pixels pintar para preencher o pol´ ıgono. Se preenchermos cada a retˆngulo isoladamente. Em geral.

Os problemas apresentados nas considera¸˜es acima demonstram que n˜o h´ solu¸˜o perfeita para o co a a ca problema de n˜o escrever mais de uma vez linhas que sejam potencialmente compartilhadas por mais de a um pol´ ıgono. o pol´ ıgono inteiro ´ e convertido. Uma forma de obtˆ-los ´ e e usar o algoritmo de convers˜o de linhas do “Ponto-M´dio” para cada lado do pol´ a e ıgono. mesmo que eles tenham auto-intersec¸˜o e buracos em seu interior. os que est˜o sobre os seus lados. Assim. Devemos nos preocupar com a defini¸˜o dos pontos extremos do pol´ ca ıgono. enquanto as co intersec¸˜es com os lados EF e DE possuem coordenadas reais.2 ilustra este processo. como pertencente a ela. O extremo do bloco ´ calculado por um e algoritmo incremental que calcula a linha de varredura/lado de intersec¸˜o a partir da intersec¸˜o com a ca ca linha de varredura anterior. a 4. Ele opera computando blocos de ca pixels que est˜o entre os lados esquerdo e direito do pol´ a ıgono.1. e em cada retˆngulo a fique faltando o seu lado (aresta) superior. O v´rtice do canto inferior esquerdo ainda continua sendo desenhado duas vezes. uma aresta vertical compartilhada por dois retˆngulos pertence ao lado que a a est´ mais a direita. a o 43 . a a a 2. Figura 4. n˜o s˜o considerados parte e a a a da primitiva se o meio-plano definido pelo lado e que cont´m a primitiva est´ abaixo ou a esquerda do e a lado.1: Esta figura ilustra o processo de linha de varredura para um pol´ ıgono arbitr´rio. e Algumas considera¸˜es devem ser feitas sobre esta regra: co 1. As ina tersec¸˜es da linha de varredura 8 com os lados FA e CD possuem coordenadas inteiras. isto ´. e 3. A Figura 4. os pixels que est˜o sobre os lados (aresta) esquerdo e inferior pertencem a a primitiva e ser˜o desenhados. A regra pode tamb´m ser aplicada para retˆngulos e pol´ e a ıgonos n˜o preenchidos.pela primitiva. e e Repetindo este processo para cada linha de varredura que intercepta o pol´ ıgono. A regra se aplica da mesma forma a pol´ ıgonos arbitr´rios e n˜o somente a retˆngulos. 4. Note que esta estrat´gia inclui alguns pixels no extremo do pol´ e ıgono que na realidade n˜o se encontram no pol´ a ıgono. Eles foram escolhidos pelo algoritmo de convers˜o matricial de linhas. co ´ E preciso determinar que pixels da linha de varredura est˜o dentro do pol´ a ıgono. e estabelecer os pixels correspondentes (no exemplo da Figura 4. e s˜o colocados sobre o lado porque a a est˜o mais pr´ximas a ele. blocos para x = 2 at´ 4 e 9 at´ 13) com seu valor apropriado. Mas o que podemos falar acerca dos pixels que est˜o no limite a da primitiva? Se voltamos ao nosso problema do retˆngulo podemos adotar como uma regra que: os pixels que a constituem os limites da primitiva. A regra faz com que em cada bloco esteja faltando o seu pixel mais a direita. Ou. mais claramente.2 Pol´ ıgonos de Forma Arbitr´ria a O algoritmo que vamos discutir a seguir contempla tanto pol´ ıgonos cˆncavos quanto pol´ o ıgonos convexos. Sendo que na realidade. por´m os lados superior e direito n˜o pertencem a primitiva e portanto n˜o a e a a ser˜o desenhados. blocos dentro de um retˆngulo representam uma intervalo a a que ´ fechado a esquerda e embaixo e aberto em cima e a direita.

se a coordenada x do pixel mais a direita de um bloco ´ inteira. Se estamos dentro do pol´ ıgono (paridade ´ ımpar) e atingimos uma intersec¸˜o fracion´ria pela direita. o algoritmo de convers˜o deve ser ajustado de acordo. II Como tratar o caso de intersec¸˜o com coordenadas inteiras? ca Pode-se utilizar o crit´rio visto anteriormente. o a e Logo. Obter a intersec¸˜o da linha de varredura com todos os lados do pol´ ca ıgono. Ordenar os pontos de intersec¸˜o (em x crescente). um pol´ e ıgono n˜o invade a regi˜o definida por outro . Isto ´. Se a coordenada x de um pixel mais a esquerda de um bloco (span) ´ inteira ele a e ´ definido como interno. 8. 13) para a linha de varredura 8. (a) Extremo calculado pelo algoritmo do ”Meio-Ponto”.2(a) com 2(b).5. N˜o podemos desenhar pixels que n˜o perten¸am verdadeiramente ao interior do pol´ a a c ıgono. se a linha em quest˜o define um extremo e a que ´ compartilhado por outro pol´ e ıgono. Para a determinar quais os pares que s˜o internos ao pol´ a ıgono. 44 . e a cada intersec¸˜o encontrada o bit de paridade ´ invertido. e n˜o ´ pintado quando ´ par. mas nesse caso pol´ o ıgonos cheios e n˜o cheios n˜o teriam os mesmos pixels na fronteira! a a Como no algoritmo original do “Ponto-M´dio”. Compare a Figura 4. Poder´ a a e ıamos. ele ´ e e e definido como externo ao pol´ ıgono. a lista ordenada de coordenadas x ´ (2. o pixel e ca e ´ pintado quando a paridade ´ impar. O processo de preencher os pol´ ıgonos pode ser dividido em trˆs passos: e 1. H´ 4 pontos a serem discutidos sobre este passo: a I Se a intersec¸˜o ´ um valor fracion´rio. Isso garante que sempre teremos um ponto dentro do pol´ ıgono. alternativamente. pois podemos estar invadindo o dom´ ınio de outro pol´ ıgono. ca 3. e consideremos agora a estrat´gia e usada para o preenchimento dos blocos (passo 3). podemos usar um algoritmo incremental para calcular e o bloco (span) extremo sobre uma linha de varredura a partir da linha de varredura anterior. converter retˆngulos e pol´ a ıgonos n˜o cheios convertendo independentemente cada segmento de reta que a os comp˜e. podemos usar a regra de Paridade: A paridade inicialmente ´ par.a mesma t´cnica pode ser a a e aplicada para pol´ ıgonos n˜o preenchidos. estaremos entrando na regi˜o definida por ele. arredondamos ca a a coordenada x da intersec¸˜o para baixo. a a Com esta t´cnica. se estamos fora do pol´ ca ıgono arrendondamos para cima. ´ ´bvio a eo que ´ prefer´ tra¸ar apenas os pixels que estejam estritamente na regi˜o definida pelo pol´ e ıvel c a ıgono. Assim. sem ter que calcular analiticamente os pontos de intersec¸˜o da linha de varredura com os lados do pol´ ca ıgono. e os pixels no interior em cinza. e note a que os pixels fora da primitiva n˜o s˜o desenhados na parte (b). como determinar qual o pixel que dever´ ser ca e a a tomado para que fique interior ao pol´ ıgono? O valor dever´ ser arredondado de forma a que o ponto fique dentro do pol´ a ıgono. Os extremos em preto. Na Figura 4.5. mesmo que um pixel exterior esteja mais pr´ximo a aresta real (pelo algoritmo de convers˜o (“Ponto-M´dio”)). e e a e e Vamos tratar dos dois primeiros passos do processo mais adiante. (b) Extremo interior ao pol´ ıgno. para evitar conflitos entre lados compartilhados em e retˆngulos.2: Linhas de varredura em um pol´ ıgno. por uma quest˜o de consistˆncia. e 4. 2. Preencher os pixels entre pares de pontos de intersec¸˜o do pol´ ca ıgono que s˜o internos a ele.Figura 4.1.

assim o bloco continua sobre o lado CD (at´ D). Por exemplo. Isso acontece e e a a e com a intersec¸˜o da linha de varredura 9 com o v´rtice F. Para ca e ambos os lados. O bloco que come¸a em IJ e encontra C. contamos o v´rtice de ymin de um lado para alterar a e e paridade. e dessa forma o lado (que ´ o lado superior . j´ que eles n˜o correspondem a v´rtices ymin a e a a e ou ymax.III Como tratar o caso II para v´rtices que s˜o compartilhados por mais de uma aresta e a do pol´ ıgono? Usamos a t´cnica de paridade. Assim. 4. Ou seja. Para a linha de varredura 3. Entretanto.3: Tratamento dos lados horizontais de um pol´ ıgono. assim o bloco ´ desenhado a partir de A at´ um pixel a esquerda da intersec¸˜o com o lado CB.1. a paridade ´ ´ e ımpar (pela regra da paridade!) e o bloco (span) ´ desenhado. e e e e os lados AB e BC tem como v´rtice de ymin B. O lado vertical BC tem ymin em B. e e a Figura 4. mas n˜o contamos o v´rtice de ymax. e dessa forma n˜o afeta a paridade. Consideremos o lado AB (lado inferior). assim a paridade continua e o bloco sobre o lado HI n˜o ´ desenhado. desenha o pixel e sai por e e ele mesmo. o v´rtice A ´ contado uma e e e e vez no c´lculo de paridade porque ´ o v´rtice de ymin para o lado FA. Os pixels a ser˜o preenchidos a partir do ponto a (coordenadas (2. e pela e mesma raz˜o anterior o lado AB n˜o contribui para alterar a paridade. e do primeiro pixel a direita do ponto c (coordenadas (9. onde a paridade e e ca ´ estabelecida como par e o bloco ´ terminado. Como veremos. arestas horizontais inferiores s˜o tra¸adas.3. Finalmente n˜o h´ v´rtice ymin em ca a a e G nem em F. e a e 45 . A linha de varredura 1 passa apenas pelo v´rtice B. o a a e lado GH tem v´rtice ymin em H. e a paridade torna-se ´ e ımpar. Assim. por´m pixel de m´ximo local n˜o o ´.1 Arestas Horizontais Examinemos os casos apresentados na Figura 4. Ilustremos este processo. o qual ´ dessa forma contado como paridade par. at´ o primeiro pixel a esquerda do ponto b a e (coordenadas (4. pois a linha de varredura entra pelo v´rtice. O v´rtice A e ´ v´rtice ymin para o lado JA. O lado IJ tem ymax em I e o lado HI n˜o contribui para a a c´lculo da paridade. Assim ambos os lados e blocos s˜o tratados como intervalos que s˜o fechados a a em seu valor m´ ınimo e abertos em seu valor m´ximo. compartilhado pelos lados FA e EF. C ´ ymax para BC. mas ´ tamb´m o v´rtice de a e e e e e ymax para o lado AB. aplicando essas regras ` linha de varredura 8. a IV Como tratar o caso especial de II em que os v´rtices definem uma linha horizontal? e Assim como no caso dos retˆngulos. dessa forma o v´rtice de ymax ´ desenhado somente a e e e se ele ´ o v´rtice de ymin do lado adjacente.topo) FG n˜o ´ desenhado. e o bloco ´ desenhado a partir de H at´ o e e pixel a direita da intersec¸˜o da linha de varredura com o lado EF.1. o que ´ natural. B ´ v´rtice ymax. n˜o termina a´ porque e e c a ı. Este e e v´rtice atua como um bloco nulo. 8)). e arestas horizontais a a c superiores n˜o s˜o. O lado IJ tem v´rtice ymin em J (e em JA ele ´ m´ximo) assim a paridade torna-se ´ e e a ımpar e o bloco ´ desenhado at´ o lado BC. isso acontece automaticamente se n˜o contarmos os v´rtices a a a e dessas arestas no c´lculo da paridade. assim a paridade torna-se par e o a a bloco termina. no entanto DE tem ymin em D e e e a paridade torna-se par e o bloco termina. e AB por ser horizontal n˜o possui m´ e e a ınimo. na Figura 4. 8)). isto causa paridade ´ e e e e ımpar.2. 8)) at´ 1 pixel a esquerda e do ponto d (coordenadas (12. 8)). na Figura 4. o v´rtice A conta uma vez porque ´ o e e v´rtice de ymin do lado FA (e ´ tamb´m o v´rtice ymax do lado AB). um pixel m´ ınimo local ´ pintado. que continua par.

evitamos usar aritm´tica e a e fracion´ria calculando uma vari´vel de decis˜o inteira. o podemos calcular o pr´ximo x da intersec¸˜o da linha de varredura com o lado.2. m´ltiplas primitivas podem contribuir para o valor de um pixel. Aqui. notemos que muitos lados interceptados por uma linha de e varredura i tamb´m o s˜o pela linha de varredura i + 1. ´ e e ou seja.4). da representa¸˜o de um sinal cont´ ca ınuo atrav´s de uma aproxima¸˜o discreta (digital). Antialiasing implicaria em “suavizar” nossa regra de “tra¸ar apenas pixels que estejam no interior c ou numa aresta inferior ou ` esquerda”. tamb´m gostar´ o a e ıamos de usar aritm´tica inteira para calcular o pixel e interior mais pr´ximo da verdadeira intersec¸˜o. Consideremos arestas com inclina¸˜o maior que 1 que o ca ca 46 . 4. u Figura 4. Esta “Coerˆncia de Arestas” ocorre para muitas e a e linhas de varreduras que interceptam um lado. A ausˆncia de pixels ´ um outro exemplo do problema de aliasing. o • N˜o desenha os pixels que s˜o pontos m´ximos locais.2 Slivers Existe um outro problema com o nosso algoritmo de convers˜o matricial: pol´ a ıgonos com lados muito pr´ximos criam um “sliver” . somente poucos lados de um pol´ u ıgono s˜o de interesse para a uma dada linha de varredura. e c˜ No algoritmo do ponto-m´dio para convers˜o matricial de segmentos de reta.uma ´rea poligonal t˜o estreita que seu interior n˜o cont´m um bloco de o a a a e pixels para cada linha de varredura (Figura 4. mesmo se a primitiva for isolada. podem existir muitas linhas de varredura com um unico pixel.1) (ymax−ymin) onde m = (xmax−xmin) ´ a inclina¸ao da aresta. Usando a mesma t´cnica do algoritmo do “Ponto-M´dio”. Para e ca melhorar a aparˆncia nesses casos. a a a • Neste algoritmo. a • N˜o desenha os pixels sobre o topo interno de um pol´ a ıgono cˆncavo em formato de U. Nesse caso. pixels n˜o s˜o escritos (mesmo em a a seus lugares certos!). e verificando o seu sinal para escolher o pixel mais a a a pr´ximo ` reta “verdadeira”. e e temos: xi+1 = xi + 1 m (4. a partir do x da linha o ca de varredura anterior que interceptou o lado. freq¨entemente. Mas. de forma a permitir que pixels na fronteira ou mesmo no exterior a do pol´ ıgono assumam intensidades variando como uma fun¸˜o da distˆncia entre o centro do pixel e a ca a primitiva. Mas n˜o desenha os pixels ca a das arestas superiores nem os das arestas ` direita.4: Exemplo de uma convers˜o matricial de um Sliver a 4.3 Algoritmo para Convers˜o Matricial de Segmento de Reta que Utiliza a “Coerˆncia de Arestas” de um Pol´ e ıgono No m´todo anterior us´vamos “for¸a bruta” para calcular a intersec¸˜o da linha de varredura com os e a c ca lados de um pol´ ıgono. Devido ` regra de que s˜o tra¸ados apenas os pixels que a a c estejam no interior ou sobre arestas inferiores ou a esquerda. Ao movermos de uma linha de varredura para a pr´xima.OBSERVACOES: ¸˜ • O algoritmo acima contempla pol´ ıgonos que possuem auto-intersec¸˜o. pode-se usar t´cnicas de antialiasing (se tivermos m´ltiplos bits por e e u pixel). em vez de escrever pixels em lugares errados. ou sem nenhum.2. Al´m disso.

Depois. para cada linha de varredura. x = xmin. aquelas a a a o para as quais ymax = y) s˜o removidas. Vamos desenvolver um algoritmo de convers˜o matricial de linhas que se aproveita da coerˆncia a e de arestas e. para as arestas que ainda a est˜o na AET. subtraimos 1 da parte fracion´ria. y +1. o e arestas que est˜o na AET mas n˜o s˜o interceptadas por esta pr´xima linha de varredura (ou seja. y <= ymax. a AET ´ atualizada. podemos tra¸ar diretamente o pixel (x. y = ymin. Finalmente. (Arestas horizontais s˜o tratadas a a a implicitamente pelas regras de tra¸ado de blocos.2: Convers˜o matricial da aresta esquerda de um pol´ a ıgono. e x ´ incrementado. quando o numerador co e ´ decrementado pelo denominador. usando a vari´vel incremento para armazenar as sucessivas e a adi¸˜es feitas no numerador at´ que ocorra um overflow (ultrapasse o denominador). y++){ PintaPixel (x.s˜o arestas a esquerda. e xmin ´ 3. e movemos um pixel a direita. e Podemos evitar o uso de aritm´tica fracion´ria mantendo apenas o numerador da fra¸˜o. int xmax. a a Para que a inclus˜o de novas arestas na AET seja eficiente. e e void LeftEdgeScan (int xmin. 3 5 . As arestas na AET s˜o a ordenadas de acordo com as coordenadas x dos pontos de intersec¸˜o. armazena o conjunto de arestas por ela interceptadas numa estrutura de dados denominada AET . numerador = xmax . Se com o a incremento obtemos um valor inteiro para x. int ymax. incremento+=numerador. de forma que possamos preencher ca os blocos definidos por pares de valores de intersec¸˜o (devidamente arredondados) . ca a e a parte inteira ter´ de ser incrementada. Quando a parte fracion´ria de x torna-se maior a do que 1. usando o algoritmo incremental para a co a convers˜o matricial de arestas j´ visto. Arestas a direita e outras inclina¸˜es s˜o tratadas com argumentos similares aos a co a que ser˜o vistos para esse caso.active-edge table (tabela das arestas ativas). if (incremento > denominador){ /* Overflow. e arestas verticais s˜o casos especiais.xmin. Com a repeti¸˜o do processo.que definem as ca extremidades dos blocos. Por exemplo. de forma a mantˆ-la menor do que 1. a seq¨ˆncia de a ca e 2 e ue valores de x ser´ a 1 2 3. se a inclina¸˜o ´ 5 . a qual pode ser expressa como uma fra¸˜o com denominador igual a a ca ymax − ymin. a parte fracion´ria vai se tornar maior do que 1 (overflow ). y) a e c que est´ sobre a linha.ymin. ymin). A medida que y ´ incrementado. 3 6 = 4 5 5 5 e assim por diante. y. como vimos anteriormente. for (y = ymin. Este aumento resultar´ num valor de x com uma parte a inteira e uma parte fracion´ria. }/* end if */ }/* end for */ }/* end LeftEdgeScan */ Algoritmo 4. int valor){ int x. Primeiramente. Quando a parte fracion´ria de x ´ zero. mas quando ela ´ diferente de zero precisamos arredondar (para cima!) de forma a a e tomar um pixel que esteja estritamente dentro da linha. int ymin. os novos valores de x das intersec¸˜es s˜o calculados. Arredonda o pr´ximo pixel e decrementa o incremento */ o x++. a a O algoritmo abaixo implementa esta t´cnica. criamos uma tabela de arestas global a 47 .y. tra¸amos o pixel correspondente e decrementamos a fra¸˜o c ca de 1. A medida que movemos para a pr´xima linha de varredura.) c Precisamos tra¸ar um pixel no extremo (xmin. 3 4 . incrementamos x. e observando e a ca que a parte fracion´ria ser´ maior do que 1 quando o numerador tornar-se maior que o denominador. incremento-=denominador. denominador = ymax . quaisquer novas arestas interceptadas por essa linha (ou a seja. a coordenada c e 1 a x do ponto na linha ideal ser´ aumentada de m . aquelas para as quais ymin = y + 1) s˜o incluidas na AET.valor). incremento = denominador.

. Aho. como um pol´ a a ıgono arbitr´rio sempre pode a ser decomposto numa malha de triˆngulos que compartilham v´rtices e arestas.6 mostra a AET para as linhas de varredura 9 e 10 daquele pol´ ıgono.3. Podemos calcular os blocos num passo. o da triangula¸˜o. ou calcue lar um bloco e preenchˆ-lo num unico passo. Note que a coordenada x da aresta DE em (b) foi arredondada para cima. Para efeito de convers˜o matricial. os passos para o ıda algoritmo de convers˜o de arestas s˜o dados no Algoritmo 4. ou para slivers requer um a tratamento especial.1. uma vez que possuem apenas dois lados para cada linha de varredura (lembre-se que lados horizontais n˜o s˜o convertidos explicitamente). Figura 4. Tratar casos de c´lculo de blocos para arestas que se cruzam. triˆngulos e trapez´ides podem ser tratados como casos especiais a a o de pol´ ıgonos. e o incremento em x utilizado para passar para a pr´xima linha de varredura.1 a) linha de varredura 9 b) linha de varredura 10. Uma vez constru´ a ET.6 ´ feita numa lista quase que u ca e totalmente ordenada.6: AET para o pol´ ıgono da Figura 4. m . Ou seja. A ET ´ uma tabela hashing aberta (v. e preechˆ-los num segundo passo. A Figura o 4. e a Figura 4. Outra vantagem de se utilizar blocos ´ que o processo de e ´ e 48 . ou ”cestos”). uma para cada linha de varredura.5 mostra como estariam ordenadas as seis arestas do pol´ ıgono da Figura 4. Figura 4. Cada n´ da lista armazena ainda a coordenada ymax o 1 da aresta.Edge Table). poder´ a e ıamos converter um pol´ ıgono decompondo-o numa malha de triˆngulos. contendo todas as arestas do pol´ ıgono em ordem crescente de sua menor coordenada y (ymin). Este ´ um a a e problema cl´ssico da geometria computacional. quando a itera¸˜o corrente do algoritmo de a e ca convers˜o de arestas gera um ou mais pixels na mesma linha de varredura que os pixels gerados ana teriormente. a a Este algoritmo explora coerˆncia de arestas para calcular o valor x das intersec¸˜es e coerˆncia e co e de linhas de varredura (juntamente com ordena¸˜o) para calcular blocos.5: ET para o pol´ ıgono de Figura 4. Note que o c´lculo dos blocos ´ cumulativo. O processo de decomposi¸˜o ´ simples a ca ca e para pol´ ıgonos convexos. A cada ”cesto”y ´ associada uma lista co e encadeada com as arestas com ymin = y. pode-se usar um m´todo de ordena¸˜o por inser¸˜o. que ´ e ca ca e e O(N ). convertendo os triˆngulos a seguir. As arestas na lista est˜o ordenadas em ordem crescente da a coordenada x de sua extremidade inferior (xmin). Data Structures and Algorithms).(ET . Na verdade. ou o m´todo bubblesort. Uma vez que a ordena¸˜o ca ca trabalha com um n´mero pequeno de arestas. e a reordena¸˜o do passo 3.1. os blocos devem ser atualizados se um novo pixel tem um valor de x m´ximo ou m´ a ınimo mais extremo. com p e posi¸˜es (buckets.

clipping pode ser feito simultaneamente ao c´lculo dos blocos: os blocos podem ser recortados (clipped ) a individualmente nas coordenadas esquerda e direita do retˆngulo de corte. Transfere do cesto y na ET para a AET as arestas cujo ymin = y (lados que est˜o a come¸ando a serem varridos). Incremente y de 1 (coordenada da pr´xima linha de varredura). a 2. 3. mantendo a AET ordenada em x. Repita at´ que a ET e a AET estejam vazias: e 3. 3. Como o passo anterior pode ter desordenado a AET.4.2. Algoritmo 4. Inicializa a AET como vazia.1. a e 49 .5.3. Desenhe os pixels do bloco na linha de varredura y usando pares de coordenadas x da AET. a 1. ou seja. a 3. reordena a AET. 3.6. Obt´m a menor coordenada y armazenada na ET. o valor de y do primeiro “cesto” e n˜o vazio. o 3. atualiza x para o novo y. Para cada aresta n˜o vertical que permanece na AET. Retira os lados que possuem y = ymax (lados n˜o mais envolvidos nesta linha de a varredura. c 3.3: Algoritmo de convers˜o de arestas baseado na coerˆncia de arestas.

ca ca Logo. expressa pela Equa¸˜es .x y = sy . atrav´s das multiplica¸˜es: e co x = sx .5) (5.1 ´ mostrado o efeito de e e co ca e uma transla¸˜o de um objeto por (3. rota¸˜es para orientar corretamente esses s´ co ımbolos. onde pode-se usar movimentos de transla¸˜o para colocar os s´ ca ımbolos que definem edif´ ıcios e a ´rvores em seus devidos lugares. podendo estar desde em co e a u co a simples programas para representar layouts de circuitos eletrˆnicos.3) Podemos transladar um objeto. −4). Para a e transladar uma linha podemos fazˆ-lo apenas para seus pontos limites e sobre estes pontos redesenhar a e linha.Cap´ ıtulo 5 Transforma¸˜es 2D e 3D co Transforma¸˜es Geom´tricas (TG) s˜o a base de in´meras aplica¸˜es gr´ficas.1) P = P = T = ent˜o a transla¸˜o. e por dy unidades em rela¸˜o ao eixo y. cada ponto P (x. y ). pode ser definida como: a ca co P =P +T (5. em programas de planejamento de o cidades. y) adicionando-se quantidades inteiras as suas coordenadas.2) (5. e altera¸˜o de escala ca para adequar o tamanho desses s´ ımbolos. Pode-se efetuar a Transla¸˜o co e o ca de pontos no plano (x. ou mesmo em sistemas de software sofisticados que permitem a constru¸˜o de cenas realistas. Assim. ca Pode-se efetuar Mudan¸as de Escala (ou apenas Escala) de um ponto pelo eixo x (sx).y Ou em forma matricial: P =S·P ⇒ x y = sx 0 0 x · sy y (5.1 Transforma¸˜es em 2D co Primeiramente estudaremos as transforma¸˜es Geom´tricas em duas dimens˜es. Na Figura 5. pode ser escrito como: x = x + dx y = y + dy E se definimos os vetores colunas: x y x y dx dy (5. ou pelo eixo y c (sy).4) 50 . fazendo-o a todos os seus pontos (o que n˜o ´ muito eficiente). y) pode ser movido por dx unidades em rela¸˜o ao eixo x. o ponto P (x . ca 5. Isso tamb´m ´ verdade para altera¸˜es de Escala e Rota¸˜o.

Como a rota¸˜o ca ca ´ em rela¸˜o a origem. Como a escala ´ n˜o uniforme.Figura 5. sin(φ) sin(θ) y = r · sin(θ + φ) = r cos(φ) sin(θ) + r. isto ´.8 na Equa¸˜o 5. co a a A Rota¸˜o de pontos atrav´s de um ˆngulo θ qualquer tamb´m ´ feita a partir da origem. sin(θ) y = x. ca a Os ˆngulos positivos s˜o definidos quando a rota¸˜o ´ feita no sentido contr´rio aos do ponteiro do a a ca e a rel´gio.6) Escala e Rota¸˜o a partir de qualquer ponto ser˜o tratadas posteriormente. cos(θ) − r. cos(θ) − y.2: Mudan¸a de escala de uma casa. s˜o iguais. cos(θ) Podemos obter a Equa¸˜o 5.8) x = r · cos(θ + φ) = r. sin(φ). Assim a casa fica menor e mais pr´xima da origem.9) . sin(φ) (5. ca Figura 5.2 a casa sofre uma escala de 1 em x e de 1 em y.4 vemos que a rota¸˜o por θ transforma P (x. sin(θ) + y. Lembremos que o a ca e o sin(−θ) = − sin(θ) e que cos(−θ) = cos(θ). y) em P (x . as distˆncias de P e P a origem.9. ca ca ca 51 (5. e ca o Tamb´m as propor¸˜es da casa s˜o alteradas. uma escala em que sx ´ diferente de sy . A rota¸˜o ca e a e e ca ´ definida matematicamente por: e x = x. 2 4 Observe que a escala ´ feita em rela¸˜o a origem. Assim. cos(φ). y ). e ˆngulos negativos quando a rota¸˜o ´ feita no sentido dos ponteiros do rel´gio. substituindo a Equa¸˜o 5. sua propor¸˜o ´ alterada. Observando a Figura 5.7) (5. Por´m ao e co a e e e utilizar-se escalas uniformes (sx = sy ) as propor¸˜es n˜o s˜o afetadas. temos que: e ca a a x = r.1: Transla¸˜o de uma casa. cos(θ) e matricialmente: P =R·P ⇒ x y = cos θ sin θ − sin θ x · cos θ y (5. r na figura.6. cos(φ) y = r. c e a ca e Na figura 5.

Figura 5. e a y x Os n´meros W e W s˜o chamados de Coordenadas Cartesianas do ponto homogˆneo.3: Esta figura mostra a rota¸ao da casa por 45◦ . Tamb´m. as matrizes de transforma¸˜o s˜o respectivamente: ca ca ca a P =T +P P =S·P P =R·P (5. mas agora est˜o sendo usadas para representar pontos em 2D.1 para coordenadas homogˆneas fica: e ca ca e 52 . obtemos uma linha no espa¸o 3D. a rota¸˜o c˜ ca tamb´m ´ feita em rela¸˜o a origem. 1). cada ponto tem muitas diferentes representa¸˜es homogˆneas. todas as triplas e da forma (tx. W ) representam o mesmo ponto e se e somente se um ´ m´ltiplo do outro. y.4: Derivando a equa¸˜o de rota¸˜o. e a e y x Se W ´ a coordenada n˜o zero. 3. pelo e co e e menos uma das coordenadas homogˆneas precisa ser diferente de zero. co co Se os pontos s˜o expressos em Coordenadas Homogˆneas. isto ´. W . A Figura 5. as matrizes de transforma¸˜es que multiplicam um ponto por a co outro tamb´m precisam ser de 3x3. Assim. e Dizemos que 2 conjuntos de coordenadas homogˆneas (x.12) Infelizmente. Se homogeneizamos o ponto c (dividimos por W ). triplas u a e representam pontos em um espa¸o 3D. y. W ) e (x . ele ´ representado por uma tripla (x. Logo. Como ca c agora os pontos s˜o vetores de 3 elementos. Usualmente. mostra esse relacionamento. 12) ´ o mesmo ponto representado por e u e diferentes triplas. y.Rota¸˜o e ca e ca Escala . y). y . adicionamos uma terceira coordenada ao ponto. 0. co Em coordenadas homogˆneas. obtemos um ponto da forma (x. 6.5. Logo. A equa¸˜o de Transla¸˜o 5. a transla¸˜o ´ tratada de forma diferente (como uma soma) das outras . em vez de e um ponto ser representado por um par de valores (x. W ). 0) n˜o ´ permitido.10) (5. W ) por ela. Isto ´. tW ) com t diferente de 0. 6) e (4. devemos poder tratar do mesmo modo todas as 3 transforma¸˜es de uma forma consistente. (2. se tomarmos todas as triplas que representam o mesmo ponto. assim (0. Escala e Rota¸˜o. podemos dividir (x. Para que possamos combinar facilmente essas transa e co forma¸˜es. y.11) (5. Da mesma forma que para a escala. e e ca Figura 5.que s˜o tratadas atrav´s de multiplica¸˜es. c a Observemos que. y. 1). ty.2 Coordenadas Homogˆneas e Matrizes de Transforma¸˜o e ca Para a Transla¸˜o. ca ca 5. obtendo o mesmo ponto ( W . os pontos homogeneizados formam o plano definido pela equa¸˜o W = 1 no espa¸o (x. W ). todas as 3 transforma¸˜es podem ser traa e co tadas como multiplica¸˜es.

16) (5. Ou seja. ´ chamada de Transforma¸˜o de Composi¸˜o. dy2 ) · T (dx1 . co se: P = T (dx1 .14) (5. dy1 + dy2 ). dy1 ) para P’ e ent˜o transladado por e a T (dx2 . s˜o representadas matricialmente: co a 53 . dy2 ) · T (dx1 . co e ca Assim. ca co e ca ca Podemos mostrar similarmente que podemos realizar Composi¸˜es tamb´m com a Escala e a Rota¸˜o. ´: e       1 0 dx2 1 0 dx1 1 0 dx1 + dx2  0 1 dy2  ·  0 1 dy1  =  0 1 dy1 + dy2  0 0 1 0 0 1 0 0 1 (5.18) Substituindo 5.15) O que acontece se um ponto P ´ transladado por T (dx1 .4. W ) c e projetado sobre o plano W = 1. ca e Essa transforma¸˜o expressa pelas duas transforma¸˜es. dy2 ) · P (5. temos: P = T (dx2 . dy1 ) · P P = T (dx2 . dy ) =  0 1 dy  0 0 1  (5.18.5: O espa¸o de Coordenadas Homogˆneas XY W .13) (5.17) (5.17 em 5. Y.19) (5. dy2 ) para P ? Intuitivamente esperamos que essas transla¸˜es sejam equivalentes a T (dx1 + dx2 .13 pode ser representada como: ca P = T (dx . dy1 ).Figura 5. dy ) · P onde:  1 0 dx T (dx . com o plano W = 1 e o ponto P (X. dy1 )] · P e a matriz produto das matrizes T (dx2 . dy2 ) · [T (dx1 . as equa¸˜es de Escala 5. dy1 ) · P ] = [T (dx2 . a equa¸˜o 5.      x 1 0 dx x  y  =  0 1 dy  ·  y  1 1 0 0 1  Assim.20) e vemos que a Transla¸˜o ´ aditiva.

21) sx S(sx .S(sx1 .27) (5. sy2 ) · S(sx1 . e Finalmente. sy2 ) · P e substituindo: P = S(sx2 . sy2 ) · [S(sx1 .24) (5. sy1 ) · P P = S(sx2 .   x sx y  =  0 1 0 e definindo. mostre que duas rota¸˜es s˜o aditivas! co a  − sin θ cos θ 0  0 0 1 − sin θ cos θ 0    0 x 0 · y  1 1 (5. posteriormente escalado n˜o uniformemente.28) (5. Obtem-se a e a dessa forma uma transforma¸˜o afim.26) e temos que a Escala ´ multiplicativa. verifiquemos como ficam as equa¸˜es de rota¸˜o: co ca    x cos θ  y  =  sin θ 1 0 Definindo: cos θ R(θ) =  sin θ 0 temos que: P = R(θ) · P Como exerc´ ıcio.6: Um cubo unit´rio ´ rodados 45 graus.22) P = S(sx1 . sy2 ). sy1 ) ´: e    sx1 0 sx2 0 0  0 sy2 0  ·  0 sy1 0 0 0 0 1 (5. 0 sy 0    0 x 0 · y  1 1 (5.sx2 0 0 =  0 0 1 0 sy1 . sy1 ) · P ] = [S(sx2 . sy ) =  0 0 temos  0 sy 0  0 0 1 (5.23) (5. sy1 )] · P A matriz produto S(sx2 .25)   sx1 .sy2 0  0 0 1 (5. ca 54 .29) Figura 5.

5. o espelho ´ gerado relativamente a um eixo de reflex˜o rotacionando a e a o objeto de 180o em torno do eixo de reflex˜o. alterando a orienta¸˜o espacial do objeto.3 Transforma¸˜es 2D Adicionais: Espelhamento e Shearing co Duas transforma¸˜es adicionais bastante usadas em CG s˜o o Espelhamento (Reflex˜o) e Distor¸˜o co a a ca (Shearing). s˜o chamadas de transforma¸˜es afins. mas “inverte” os valores das ca e coordenadas y.32) .7: Reflex˜o de um objeto em torno do eixo x.1 Espelhamento (Mirror) A transforma¸˜o de reflex˜o. poder´ ıamos definir uma reflex˜o em torno do eixo y.3.31) Esta transforma¸˜o mant´m as coordenadas x do objeto inalteradas. Por exemplo. No caso de uma reflex˜o 2D. e a c˜ co a co As Transforma¸˜es Afins preservam paralelismo de linhas.30) onde a submatriz 2x2 do canto superior esquerdo ´ ortogonal. ou espelhamento. discutidas a seguir. Figura 5. Estas e a transforma¸˜es s˜o chamadas de Corpo R´ co a ıgido. que “inverteria” as coordenadas a x do objeto. mostra o resultado de se aplicar uma rota¸˜o de 45◦ e depois uma escala n˜o uniforme a um cubo ca a unit´rio. mas n˜o comprimentos e ˆngulos. “invertendo” nesse caso ambas as coordenadas x e y. pode-se aplicar uma reflex˜o em torno da a a linha y = 0 (o eixo x) usando a seguinte matriz de transforma¸˜o: ca 1 0 M irrorv =  0 −1 0 0   0 0 1 (5. aplicada a um objeto. produz um objeto que ´ o espelho do ca a e original. a Podemos tamb´m definir uma reflex˜o em torno de um eixo perpendicular ao plano xy e passando e a (por exemplo) pela origem do sistema de coordenadas. a Uma matriz de transforma¸˜o da forma: ca r11 M =  r21 0  r12 r22 0  tx ty  1 (5. A matriz de transforma¸˜o ´ dada por: ca e  −1 0 0 =  0 −1 0  0 0 1 55  M irrorxy (5. preserva ˆngulos e comprimentos.Uma sequˆncia arbitr´ria de rota¸oes. porque o corpo do objeto n˜o ´ distorcido de forma a e alguma. A figura co a a 5. transla¸˜es e escalas. ca Analogamente.6. 5.

e ca o a Figura 5. estamos t˜o somente rotacionando o objeto de 180o em torno da ca a origem. ou seja. um quadrado ser´ transformado em um paralelogramo. rota¸˜o de 45o na dire¸˜o anti-hor´ria para retomar a orienta¸˜o original da linha y = x.33) As coordenadas do objeto s˜o transformadas da seguinte maneira: a x = x + shx y y =y (5. A matriz de reflex˜o pode ser derivada pela e a a a concatena¸˜o de uma seq¨ˆncia de matrizes de reflex˜o e de rota¸˜o.34) Qualquer n´mero real pode ser usado como parˆmetro.3. ´ aplicado e ca e um deslocamento aos valores das coordenadas x ou das coordenadas y do objeto.2 Shearing Shearing (cisalhamento) ´ uma transforma¸˜o que distorce o formato de um objeto . Uma distor¸˜o na ca dire¸˜o x ´ produzida com a seguinte matriz de transforma¸˜o: ca e ca 1 shx Shearx =  0 1 0 0   0 0 1 (5. Por exema a plo. se a reflex˜o for em ca ue a ca a torno da linha diagonal definida por y = x. ca ca a 2. a 3. A opera¸˜o pode ser generalizada para adotar qualquer ponto de reflex˜o localizado no plano ca a xy. rota¸˜o de 45o na dire¸˜o hor´ria para fazer a linha y = x coincidir com o eixo x. Valores negativos deslocam as e a coordenadas para a esquerda. se shx ´ 2. ca ca a ca 5. reflex˜o em torno do eixo x. a Podemos tamb´m adotar um eixo de reflex˜o arbitr´rio. Por exemplo. y) s˜o u a e a deslocadas horizontalmente segundo um valor proporcional ` sua distˆncia em do eixo x.em geral.8.8: Reflex˜o de um objeto em torno de um eixo perpendicular ao plano xy. a matriz de reflex˜o pode ser derivada da combina¸˜o da a ca seguinte seq¨ˆncia de transforma¸˜es: ue co 1.A opera¸˜o ´ ilustrada na figura 5. Observe que a matriz de reflex˜o acima ´ idˆntica ` matriz de ca e a e e a rota¸˜o R(θ) com θ = 180o . O resultado ´ que as coordenadas (x.35) que produz as seguintes transforma¸˜es sobre as coordenadas: co 56 . passando pela origem.yref  0 1 Shearyref (5. Pode-se gerar distor¸˜es na dire¸˜o relativamente a outros eixos de referˆncia y = yref com a matriz: co ca e 1 shx = 0 1 0 0   −shx . e o efeito ´ o mesmo que aplicar uma rota¸˜o de 180o em torno do ponto pivˆ da reflex˜o.

−vx ) = (ux . y0 ). co Para transformar descri¸˜es de um objeto dadas em um sistema de coordenadas xy para um sistema co x y com origens em (0. uy ) (5. pode-se aplicar uma distor¸˜o na dire¸˜o y. o objeto ´ descrito em um sistema de coordenadas n˜o e a Cartesiano (como coordenadas polares ou el´ ıpticas).xref  0 1 Shearxref (5. Rotacionar o eixo x de forma que ele coincida com o eixo x: R(−θ) Concatenando as duas matrizes de transforma¸˜o obt´m-se a matriz de composi¸˜o que descreve a ca e ca transforma¸˜o necess´ria: ca a Mxy. vy ) |V | v= (5. Muitas vezes.4 Transforma¸˜es entre sistemas de coordenadas co J´ vimos que aplica¸˜es gr´ficas freq¨entemente requerem a transforma¸˜o de descri¸˜es de objetos de um a co a u ca co sistema de coordenadas para outro. transladar o sistema x y de modo que sua origem coincida com a origem do sistema xy: T (−x0 .x = x + shx (y − yref ) y =y (5. O vetor V ´ ca e especificado como um ponto no sistema de referˆncia xy em rela¸˜o ` origem do sistema xy. Neste texto vamos considerar especificamente transforma¸˜es entre dois sistemas de coordenadas Cartesianos. Isso pode ser feito em 2 passos: ca o 1. Um vetor e ca a unit´rio que d´ a dire¸˜o de y pode ent˜o ser obtido: a a ca a V = (vx .37) que gera as seguintes transforma¸˜es nas posi¸˜es das coordenadas: co co x =x y = y + shy . ca c˜ ue ca 5. a matriz de rota¸˜o a ser usada para rotacionar o sistema x y ca para que este coincida com o sistema xy ´ dada por: e 57 .39) Um m´todo alternativo para estabelecer a orienta¸˜o do segundo sistema de coordenadas consiste em e ca especificar um vetor V na dire¸˜o positiva do eixo y . −y0 ) 2. Portanto. (5. usando ca ca 1 =  shy 0   0 0 1 −shy . e precisa ser convertido para o sistema de coordenadas Cartesiano do dispositivo. precisamos a ca determinar a transforma¸˜o que superp˜e os eixos xy aos eixos x y . com um ˆngulo de orienta¸˜o θ entre os eixos x e x .x y = R(−θ) · T (−x0 .38) Esta transforma¸˜o desloca as coordenadas de uma posi¸˜o verticalmente segundo um fator proporca ca cional ` sua distˆncia da linha de referˆncia x = xref .40) E obtemos o vetor unit´rio u ao longo do eixo x rotacionando v de 90o no sentido hor´rio: a a u = (vy . Qualquer opera¸˜o de distor¸˜o pode ser descrita a a e ca ca como uma composi¸˜o de transforma¸oes envolvendo uma seq¨ˆncia de matrizes de rota¸˜o e escala. relativa a uma linha x = xref.36) Analogamente. 0) e (x0 . e as coordenadas locais devem ser transformadas para posicionar o os objetos no sistema de coordenadas global da cena.41) J´ vimos que os elementos de uma matriz de rota¸˜o podem ser expressos como elementos de um a ca conjunto de vetores ortogonais. Em aplica¸˜es de design e modelagem. passando pela origem do sistema xy. objetos individuais s˜o definidos em co a seu pr´prio sistema de coordenadas.(x − xref ). −y0 ) (5.

Dessa forma. a matriz de rota¸˜o ´ dada ca e por: 0 R =  −1 0   1 0 0 0 0 1 (5. e co o Considerando a rota¸˜o de um objeto em torno de um ponto arbitr´rio P 1. a transforma¸˜o em seq¨ˆncia ´: a e ca ue e 58 . Efetuar uma transla¸˜o. −y1 ).44) Esse procedimento pode ser usado de forma similar para se efetuar a Escala de um objeto em rela¸˜o ca a um ponto arbitr´rio P1 . Mas sabemos apenas ca a rotacionar um ponto em rela¸˜o a origem. ent˜o ´ feita a escala a e a e desejada.9: Rota¸˜o em rela¸˜o ao Ponto P 1. O prop´sito de ca ca ca o compor-se transforma¸˜es. Efetuar a Rota¸˜o desejada. ca ca a Esta sequˆncia ´ ilustrada na figura 5. pode-se usar a seguinte sequˆncia de ca e transforma¸˜es fundamentais: co 1. 0) (eixo x negativo no sistema atual). sin θ  0 0 1  (5. podemos dividir este problema de rota¸˜o em 3 ca ca problemas simples. y1 ). levando P 1 a posi¸˜o anterior. A transforma¸˜o ca e ´ ca e ca em sequˆncia ´: e e      1 0 x1 cos θ − sin θ 0 1 0 −x1 T (x1 . Assim. 1) (eixo y ca positivo no sistema atual) e V = (−1. sin θ  sin θ cos θ y1 (1 − cos θ) + x1 .5 Composi¸˜o de Transforma¸˜es ca co Usaremos composi¸˜o como uma combina¸˜o de matrizes de transforma¸˜o R. levando P 1 ` origem. ca 3. A primeira e e e ca transla¸˜o ´ por (−x1 . S e T. uma ap´s a outra.ux R =  vx 0  uy vy 0  0 0 1 (5. Primeiramente o ponto P1 ´ transladado para a origem.42) Por exemplo. ´ o ganho de eficiˆncia que se obt´m ao aplicar-se uma transforma¸˜o composta co e e e ca a um ponto em vez de aplicar-lhe uma s´rie de transforma¸˜es. e ent˜o o ponto P1 ´ transladado de volta.43) Essa matriz ´ equivalente ` matriz de rota¸˜o para θ = 90o e a ca 5.9. ou seja: para rotacionar em rela¸˜o a P 1. y1 ) =  0 1 y1  ·  sin θ cos θ 0  ·  0 1 −y1  = 0 0 1 0 0 1 0 0 1   cos θ − sin θ x1 (1 − cos θ) + y1 . por um ˆngulo θ. se escolhermos que a nova orienta¸˜o deve ser dada pelos vetores U = (0. e a ultima transla¸˜o (oposta a primeira) ´ por (x1 . ca a ca Figura 5. y1 ) · R(θ) · T (x1 . Efetuar uma Transla¸˜o oposta ` realizada em (1). onde a casa ´ rotacionada em rela¸˜o a P1 (x1 . ca a 2. y1 ).

Transladar P 1(x1 . metros. chamada de Porta de Vis˜o (Viewport). y1 ) como o centro da rota¸˜o e da escala. com o ponto P 1(x1 . ca ca Se M 1 e M 2 representam duas transforma¸˜es fundamentais (transla¸˜o. a ca ca 5. anos-luz.1). chamada de janela de coordenadas do mundo. ca 3.10: Escala e rota¸˜o de uma casa em rela¸˜o ao ponto P1 . se a janela e a porta de vis˜o n˜o possuem a mesma raz˜o largura-altura. ıda e Como pode ser visto pela figura. O termo Mundo (World ) ´ usado para representar o ambiente interativamente criado ou apresentado e para o usu´rio. Uma forma de se efetuar esta transforma¸˜o ´ especificando uma regi˜o retangular em coordenadas ca e a do mundo. e uma regi˜o retangular correspondente em a coordenadas de tela. onde a casa deve ser posicionada. o pacote gr´fico precisa a a a mapear as coordenadas do mundo em coordenadas de tela. sy ) · T (x1 . rotacionar e posicionar a casa mostrada na figura 5.1: Transforma¸˜es comutativas. Efetuar a escala e a rota¸˜o desejadas.). mapeando-as na tela. Entretanto ´ f´cil mostrar que nos seguintes ca a e e a casos especiais esta comutatividade existe (Tabela 5. e ca Figura 5. Como as primitivas s˜o especificadas em coordenadas do mundo. co Nestes casos n˜o precisamos estar atentos a ordem de constru¸˜o da matriz de transforma¸˜o. em que co ca ca casos M 1 · M 2 = M 2 · M 1? Isto ´. rota¸˜o ou escala). a e ca a 59 . usando a unidade de medida que melhor se adeque ao seu programa de aplica¸˜o (angstrons. A transforma¸˜o que mapeia a janela na porta de vis˜o ´ aplicada a todas as primitivas e ca a e de sa´ em coordenadas do mundo. Se o programa de aplica¸˜o altera a janela ou a porta de vis˜o. em que a janela em coordenadas do mundo a real ´ mapeada. y2 ). ca etc. chamado de sistema de coordenadas do Mundo Real. ca ca T (x2 .10. y2 ) · R(θ) · S(sx . y1 ) · S(sx . quando suas matrizes de transforma¸˜o comutam? Sabemos que e ca geralmente a multiplica¸˜o de matrizes n˜o ´ comutativa.Porta de Vis˜o (“Window-to-Viewport”) ca a Alguns sistemas gr´ficos permitem ao programador especificar primitivas de sa´ em um sistema de a ıda coordenadas em ponto-flutuante. −y1 ) ´ a matriz da Transforma¸˜o composta. Este procedimento ´ ilustrado na Figura 5.11. y1 ) =  0 0    0 x1 sx 1 y1  ·  0 0 1 0 0 sy 0    0 1 0 −x1 0  ·  0 1 −y1  = 1 0 0 1   sx 0 x1 (1 − sx )  0 sy y1 (1 − sy )  0 0 1 (5. a a a uma escala n˜o uniforme ´ realizada. A seq¨ˆncia de transforma¸˜es fica a seguinte: ca ue co 1. sy ) · T (−x1 .1 T (x1 . 2. s) M2 Transla¸˜o ca Escala Rota¸˜o ca Rota¸˜o ca Tabela 5.6 Transforma¸˜o Janela . microns. y1 ) para a origem. Efetuar a transla¸˜o da origem para a nova posi¸˜o P 2(x2 . m1 Transla¸˜o ca Escala Rota¸˜o ca Escala(s.45) Suponhamos que desejamos escalar.

) · T (−xmin . ´ primeiramente transladada para a origem do e mundo de coordenadas.porta de vis˜o com recorte (clipping) de a ca a primitivas gr´ficas de sa´ a ıda. qual ´ a matriz de transforma¸˜o que mapeia a janela em a e ca coordenadas do mundo real.46) (5. A matriz global Mjp ´: a ca e a e umax − umin vmax − vmin Mjp = T (umin . como ´ sugerido na Figura 5.Figura 5. Outro ponto a ıda e ´ que pode-se ter m´ltiplas portas de vis˜o de uma mesma janela. A seguir o tamanho da janela ´ escalonado para ser igual ao tamanho da porta e de vis˜o. Finalmente.12: Duas portas de vis˜o associadas a mesma janela. a ent˜o as novas primitivas de sa´ desenhadas sobre a tela precisam ser tamb´m atualizadas.11. e u a e Dada uma janela e uma porta de vis˜o. A janela especificada ca e pelo seu canto inferior esquerdo e canto superior direito.47) Muitos pacotes gr´ficos combinam a transforma¸˜o janela . e 60 .14 ilustra esta t´cnica de recorte. ymax −vmin + vmin  ymax −ymin max −ymin 0 0 1   x Multiplicando P = Mjp ·  y . ymax −ymin + vmin  · max min 1 (5. na porta de vis˜o em coordenadas de tela? Esta matriz pode ser desenvolvida a como uma transforma¸˜o composta por 3 passos. A figura 10. a Figura 5. umax −umin + umin xmax −x v −v P =  (y − ymin ). xmax −xmin + umin xmax −xmin vmax −vmin v  0 −ymin . a transla¸˜o ´ usada para posicionar a porta de vis˜o.12. vmin ) · S( . o que ´ mostrado na Figura 5. temos: 1   min (x − xmin ).11: Janela em Coordenadas do mundo e porta de vis˜o em coordenadas de tela. −ymin ) = xmax − xmin ymax − ymin    umax −umin    0 0 1 0 umin 1 0 −xmin xmax −xmin vmax −vmin  0 1 vmin  ·  0 0  ·  0 1 −ymin  = ymax −ymin 0 0 1 0 0 1 0 0 1  umax −umin  umax −umin 0 −xmin .

O seu a ıda a interior ´ apresentado na tela (viewport). cos θ ´ quase 1. como a ultima a a co co ´ linha da matriz ´ fixa.porta de vis˜o. Dessa co co e e aproxima¸˜o. o que ´ um ganho significante em termos co co e de eficiˆncia.49) o que reduz o processo a quatro multiplica¸˜es e duas adi¸˜es. ca a Figura 5. onde cada vis˜o ´ o e o a e geralmente rotacionada a poucos graus da vis˜o anterior. produz uma matriz da forma: ca e co r11 M =  r21 0  r12 r22 0  tx ty  1 (5. Especialmente se considerarmos que esta opera¸˜o deve ser aplicada a centenas ou mesmo e ca milhares de pontos por cena ou figura.r11 + y.8) requerem 4 multiplica¸˜es e 2 adi¸˜es. os c´lculos efetivamente necess´rios s˜o: e a a a x = x.13: Os passos da transforma¸˜o janela .. Ao calcularmos M · P (um vetor de 3 elementos multiplicado a e ca por uma matriz 3x3). As equa¸˜es de rota¸˜o (Equa¸˜o co ca ca 5.r21 + y.Figura 5. avi˜es. enquanto tx e e ca ca ty s˜o obtidos por influˆncia da transla¸˜o. e 5. ´ uma composi¸˜o das matrizes de rota¸˜o e escala. sin θ 61 . etc. Se cada vis˜o pode ser gerada e apresentada a a de forma bastante r´pida (30 a 100 milisegundos cada uma). Para conseguirmos isto. Mas.14: Primitivas gr´ficas de sa´ em coordenadas do mundo s˜o recortadas pela janela.7 Eficiˆncia e Uma composi¸˜o gen´rica de transforma¸˜es R. a e e e ca o tal como por exemplo vis˜es consecutivas de sistemas de mol´culas. ent˜o parecer´ ao observador que o objeto a a a est´ sendo rotacionado continuamente (efeito de anima¸˜o!). Mas se θ ´ pequeno (poucos graus). devemos efetuar as a ca transforma¸˜es sobre os pontos do objeto o mais rapidamente poss´ co ıvel. verificamos que s˜o necess´rias 9 multiplica¸˜es e 6 adi¸˜es.r22 + ty (5.r12 + tx y = x.48) A submatriz 2x2 superior esquerda. temos que: ca x = x − y. S e T . Outra ´rea onde a eficiˆncia ´ muito importante ´ na cria¸˜o de sucessivas vis˜es de um objeto.

sin θ + y = x.50. sin θ).y = x . Cada vez que a f´rmula ´ aplicada a novos valores de x e y o erro torna-se um pouquinho o e maior. Uma aproxima¸˜o melhor ´ usar x em vez de x na segunda equa¸˜o: ca e ca x = x = y. ´ somente uma aproxima¸˜o para os valores corretos de x e y (existe um erro ca e ca embutido!).52) Esta ´ uma melhor aproxima¸˜o que a equa¸˜o 5. sin θ + y = (x − y. o que significa que as ´reas transformadas pela equa¸˜o 5. e a ca a a 62 . A Equa¸˜o 5.(1 − sin2 θ) (5. sin θ + y (5. porque o determinante da matriz 2x2 correspone ca ca dente ´ 1.50) sin −θ = − sin θ (5.50. sin θ y = x .52n˜o s˜o alteradas. sin θ + y.51) que requer 2 multiplica¸˜es e 2 adi¸˜es (livranos de 2 multiplica¸˜es pode ser muito importante em co co co computadores sem hardware espec´ ıfico para isto!).

ca O sentido positivo de uma rota¸˜o. Por´m. y. e e Dessa forma. z) ser´ representado por (x. a O sistema de coordenadas para 3D utilizado ser´ o da Regra da M˜o Direita.54) (5. ca 5. Figura 5. a Equa¸˜o 5. W . W ). z.2: Sentido de rota¸˜o.15. 1). teremos se w for diferente de 0. movimentando-o atrav´s de rota¸˜es. sz ) · P 63 (5.2. como poder ser visto na figura 5. ( W . W . e co co Assim.53 pode ser representada tamb´m como: ca e P = T (dx . em muitas situa¸˜es ´ necess´rio mais do que isto. poder “manusear” o e co e a objeto. uma rota¸˜o de 90◦ ir´ levar um eixo positivo em outro positivo. um ponto P de coodenadas (x. y. ca a A Regra da M˜o Direita foi escolhida porque este ´ o padr˜o utilizado na matem´tica (lembre-se da a e a a defini¸˜o do produto vetorial!). onde estas transforma¸˜es foram representadas co por matrizes 3x3 (utilizando coordenadas homogˆneas). ´ dado quando observando-se sobre um eixo positivo em dire¸˜o ca e ca a ` origem. ca A TRANSLACAO em 3D pode ser vista como simplesmente uma exten¸˜o a partir da transla¸˜o 2D. generalizando o que foi visto para TG em 2D. ou seja. sy .53) (5.56) .8 Transforma¸˜es em 3D co A capacidade para representar e visualizar um objeto em trˆs dimens˜es ´ fundamental para a percep¸˜o e o e ca de sua forma.15: Sistema de Coordenadas dado pela Regra da M˜o Direita. Ou conforme a Tabela 5. com o eixo Z perpena a dicular ao papel e saindo em dire¸˜o ao observador. transla¸˜es e mesmo escala. dz ) · P Similarmente a ESCALA em 3D.Eixo de Rota¸˜o ca x y z Dire¸˜o da Rota¸˜o Positiva ca ca y para z z para x x para y Tabela 5. dy . Padronizando a y z x (ou homogeneizando) o ponto. ¸˜ ca ca ou seja:      x 1 0 0 dz x  y   0 1 0 dy   y   = ·  z 0 0 1 dz z 1 0 0 0 1 1  Assim.55) P = S(sx . as TGs em 3D ser˜o representadas por matrizes e a 4x4 tamb´m em coordenadas homogˆneas. fica:   x sx y   0   = z 0 1 0  0 sy 0 0 0 0 sz 0    0 x 0 y  ·  0 z 1 1 (5.

58) A matriz de rota¸˜o em rela¸˜o ao eixo y ´: ca ca e   x cos θ y   0  = z − sin θ 1 0  Para a rota¸˜o tamb´m temos que: ca e P = R(θ) · P (5.z (θ) s˜o mutuamente perpendiculares. para uma matriz ca a ca e ortogonal B. Al´m disso. escala e rota¸˜o podem ser multiplicadas e a co ca ca juntas.8. uma sequˆncia arbitr´ria e a e e a de rota¸˜es ´ tamb´m ortogonal especial. Al´m disso. a submatriz 3x3 do canto superior esquerdo R. a a Todas estas matrizes de transforma¸˜o (T. Para obter-se um pouco ca ´ a co mais de eficiˆncia (ganho computacional) pode-se executar a transforma¸˜o explicitamente como: e ca    x x y y   =R· +T z z 1 1  (5.y. Deve-se lembrar que as transforma¸˜es ortogonais preservam co e e co distˆncias e ˆngulos. ou seja B −1 = B T . SeR) possuem inversas. Para cada uma das matrizes de rota¸˜o R. pois as rota¸˜es podem ser co ¸˜ co efetuadas em rela¸˜o a qualquer um dos trˆs eixos. P1 P2 dever´ ficar sobre ca a o eixo z positivo.16. e a submatriz possui determinante igual a 1.61) Como no caso de 2D. Para a matriz S. a qual ´: ca ca e ca e   cos θ x  y   sin θ  = 0 z 0 1  A matriz de rota¸˜o em rela¸˜o ao eixo x ´: ca ca e   x 1 y  0  = z 0 1 0  0 cos θ sin θ 0 0 − sin θ cos θ 0    0 x 0 y  ·  0 z 1 1 − sin θ cos θ 0 0    0 0 x 0 0 y  ·  1 0 z 0 1 1 (5. Assim o ponto P1 deve ser transladado para a origem. agrega as transforma¸˜es de co escala e rota¸˜o. dy e dz . sy e sz por seus valores inversos. basta substituir sx . e Uma sequˆncia arbitr´ria de transforma¸˜es de transla¸˜o.Finalmente. O objetivo ´ transformar os segmentos de reta P1 P2 e P1 P3 da posi¸˜o inicial em (a) para e ca a posi¸˜o final em (b).60) 0 sin θ 1 0 0 cos θ 0 0    0 x 0 y  ·  0 z 1 1 (5. o que significa a que as trˆs matrizes s˜o chamadas de Ortogonais Especiais.62) 5. A inversa de T ´ obtida simplesca e mente negando-se dx . enquanto a ultima coluna ` direita T agrega as transla¸˜es. e P 1P 3 dever´ ficar no plano positivo de yz. ca e A equa¸˜o de rota¸˜o em 2D ´ justamente uma rota¸˜o em torno do eixo z em 3D.1 Composi¸˜o de Transforma¸˜es em 3D ca co A composi¸˜o de transforma¸˜es em 3D pode ser entendida mais facilmente atrav´s do exemplo indicado ca co e na figura 5.59) OBS: Os vetores compostos pelas linhas e colunas da submatriz 3x3 do canto superior esquerdo de Rx. verifiquemos como ficam as equa¸˜es de ROTACAO em 3D. sua inversa (B −1 ) ´ a sua matriz transposta. resultando uma matriz da seguinte forma: r11  r21 M = r31 0  r12 r22 r32 0 r13 r23 r33 0  tx ty   tz 1 (5. os comprimentos das linhas a e n˜o devem ser alterados. basta negar o ˆngulo de rota¸˜o.57) (5. a 64 . Al´m disso.

65) . −y1 . ca 3. 2.16: Transformando P1 . −y1 . Ent˜o: a ca e a sin(θ − 90o ) = − cos θ = − x2 − x1 x2 =− D1 D1 z2 z2 − z1 cos(θ − 90o ) = − sin θ = − =− D1 D1 65 0 1 0 0  0 −x1 0 −y1   1 −z1 0 1 (5. O ˆngulo utilizado na a ca ca ca a o ca realidade ´ −(90o − θ)) mostra P1 P2 ap´s o primeiro passo. −z1 ) · P3 =  3  z3 − z1 1 Segundo Passo: Rotacionar em Rela¸˜o ao eixo Y ca A Figura 5. de forma que ele (P1 P2 ) fique sobre o eixo z. Rx . ca ca Uma primeira maneira de se obter a transforma¸˜o desejada ´ atrav´s da composi¸˜o das primitivas ca e e ca de transforma¸˜o T . Rotacionar o segmento P1 P2 em rela¸˜o ao eixo y. teremos os seguintes quatro passos: 1. P2 e P3 . de forma que ele (P1 P2 ) fique no plano yz. −y1 . e O ˆngulo de rota¸˜o ´ −(90o − θ) = θ − 90o . −z1 ) =  0 0  Aplicando T a P1 . −y1 . ca Subdividindo o problema. −z1 ) · P2 =  2  z2 − z1 1   x3 − x1  y − y1  P3 = T (−x1 .Figura 5.17 (o ˆngulo θ indica a dire¸˜o positiva de rota¸˜o em rela¸˜o a y. Rotacionar o segmento P1 P2 em rela¸˜o ao eixo x.64) (5. bem como a proje¸˜o de P1 P2 no plano xz. temos:   0 0 P1 = T (−x1 . Ry e Rz . Transladar P1 para a origem. ca Primeiro Passo: Transladar P1 para a Origem A equa¸˜o de transla¸˜o ´: ca ca e 1 0 T (−x1 . de forma que ele (P1 P3 ) fique no plano yz. Rotacionar o segmento P1 P3 em rela¸˜o ao eixo z. ca 4. −z1 ) · P1 =   0 1   x2 − x1  y − y1  P2 = T (−x1 .63) (5. P2 e P3 da posi¸˜o inicial em (a) para a posi¸˜o final em (b).

a A Figura 5. P2 e P3 .17: Rota¸˜o dos pontos P1 .68) .) a e a ca a O ˆngulo de rota¸˜o ´ φ. ca onde (z2 )2 + (x2 )2 = (z2 − z1 )2 + (x2 − x1 )2 D1 = (5.59. Ambos os segmento s˜o rotacionados por Rx (φ).18: Rota¸˜o em rela¸˜o ao eixo x. P1 e P2 de comprimento D2 ´ rotacionado em dire¸˜o ao ca ca e ca eixo z. e z possui comprimento D1 . e Terceiro Passo: Rotacionar em Rela¸˜o ao eixo X ca (5. e a ca e z2 D2 y sin φ = 2 D2 66 cos φ = (5.67) Figura 5.18 mostra P1 P2 ap´s o segundo passo (o segmento de reta P1 P3 n˜o ´ mostrado porque o a e n˜o ´ utilizado para determinar os ˆngulos de rota¸˜o. a componente x de P2 ´ zero. pelo ˆngulo positivo f. temos: a ca  0  y − y1  P2 = Ry (θ − 90o ) · P2 =  2  D1 1  Como era esperado.66) Ent˜o substituindo estes valores na Equa¸˜o 5.Figura 5.

71) A rota¸˜o ´ dada pelo ˆngulo positivo α.69) O resultado da rota¸˜o no terceiro passo ´: ca e  0  0  = Rx (φ) · P2 = Rx (φ) · Ry (θ − 90o ) · P2 = Rx (φ) · Ry (θ − 90o ) · T · P2 =   |P1 P2 | 1  P2 (5.70) Dessa forma. −z1 ) · P3 z3 1  P3 (5. P2 e P3 para verificar que P1 ca ´ transformado para a origem. agora P1 P2 agora est´ sobre (coincidindo) o eixo z positivo. e a 67 .19: Rota¸˜o em rela¸˜o ao eixo z. dessa forma e D2 = |P1 P2 | = |P1 P2 | = (x2 − x1 )2 + (y2 − y1 )2 + (z2 − z1 )2 (5. o e c A matriz de composi¸˜o M ´ a transforma¸˜o necess´ria ` composi¸˜o solicitada na Figura 5. ap´s o quarto passo o resultado ´ alcan¸ado como visto na Figura 5. a Quarto Passo: Rotacionar em Rela¸˜o ao eixo Z ca Figura 5.16(b). o comprimento de P1 P2 ´ o mesmo de P1 P2 . −z1 ) = R · T (5.73) Exerc´ ıcio: aplique a matriz de composi¸˜o a cada um dos pontos P1 . e ca e a y3 D3 x sin α = 3 D3 x3 2 + y3 2 cos α = D3 = (5. ca e ca a a ca M = Rx (α) · Rx (φ) · Ry (θ − 90o ) · T (−x1 .72) P1 P3 ´ trazido para o plano yz.16. Como as transla¸˜es e rota¸˜es preservam e co co o comprimento. P2 est´ sobre o eixo z positivo e P3 no plano yz positivo. e Dessa forma. −y1 . com P2 sobre o eixo z e P3 em o  x3 y  =  3  = Rx (φ) · Ry (θ − 90o ) · T (−x1 .onde D2 = |P1 P2 | ´ o comprimento do segmento de reta P1 P2 . −y1 .19 mostra P1 P2 e P1 P3 ap´s o terceiro passo. ca ca A figura 5.

A matriz de composi¸˜o ´ dada por a ca ca e r1x  r1y  r1z 0  r2x r2y r2z 0 r3x r3y r3z 0  0 0  · T (−x1 . P2 e P3 e ir´ rotacionar em dire¸˜o ao eixo a e a ca x positivo. a a ca T Rz = [ r1z r2z r3z ] = P1 P2 |P1 P2 | (5. Ry e Rz .20: Os vetores unit´rios Rx .78. podemos encontrar uma segunda forma de encontrar a matriz de transforma¸˜es.62 e a observa¸˜o da se¸˜o co ca ca 5. a ca Assim. r1x R =  r1y r1z  r2x r2y r2z  r3x r3y  r3z (5.77) ir´ rotacionar em dire¸˜o ao eixo y positivo.76) Ry = [ r1x r2y r3z ] = Rz × Rx T (5.61.Utilizando as propriedades de matrizes ortogonais (ver Equa¸˜es 5.74) Colocando Rz como o vetor unit´rio ao longo de P1 P2 que ir´ rotacionar em dire¸˜o ao eixo z positivo.78) Figura 5. a a e R e T s˜o como em 5. r2x r3x ] = P1 P3 × P1 P2 |P1 P3 × P1 P2 | (5.75) O vetor unit´rio Rx ´ perpendicular ao plano de P1 . a 68 . −z1 ) = R · T 0 1 (5.20 mostra os vetores individuais Rx . os quais s˜o transformados nos eixos principais. A Figura 5. dessa forma Rx deveria ser o produto vetorial de dois vetores do plano (relembre-se das propriedades de Produto Vetorial vistos em Geometria Anal´ ıtica !): T Rx = [ r1x e finalmente. −y1 . Relembremos que co os vetores unit´rios (de comprimento igual a 1) de R rotacionam em rela¸˜o aos eixos principais.8). 5. Ry e Rz .

ca ca deve-se determinar o ˆngulo de vis˜o da cˆmera. perca a pendiculares a ele. ou centro da proje¸˜o.1: Atributos da cˆmera [Schr¨eder. Na proje¸˜o perspectiva. de forma que apenas os atores que est˜o na ´rea englobada pelos planos a a a de recorte s˜o potencialmente vis´ a ıveis. Estes trˆs e ca e parˆmetros definem completamente a cˆmera. os planos de recorte s˜o perpendiculares ` dire¸˜o a a ca 69 . sua orienta¸˜o e ponto focal). 1998]. respectivamente. sua orienta¸˜o e ponto focal. Estes e parˆmetros incluem a posi¸˜o da cˆmera.1 Pipeline de observa¸˜o (“viewing pipeline”) ca Ap´s a cria¸˜o de cenas e objetos tridimensionais o pr´ximo passo ´ efetuar a sua apresenta¸˜o. O plano de imagem. aonde a cˆmera est´ e para onde ca a a a ela est´ apontando. o processo de mapeamento ´ paralelo: assume-se que todos os raios de a ca e luz que atingem a cˆmera s˜o paralelos ao vetor de proje¸˜o. a o O m´todo de proje¸˜o controla como os atores da cena s˜o mapeados no plano de imagem: na proje¸˜o e ca a ca ortogr´fica. tipicamente. denominado ponto de observa¸˜o. Os planos de recorte s˜o usados para eliminar atores que est˜o muito pr´ximos ou a a o muito distantes da cˆmera. que ´ o plano no qual a cena ser´ projetada. est´ posicionado no ponto ca e a a focal e. Ao o ca o e ca gerar imagens de cenas 3D em computa¸˜o gr´fica. a a Figura 6. seu ponto focal e por um outro vetor denominado view up. posicionado em um ponto de observa¸˜o.Cap´ ıtulo 6 Observa¸˜o de Cenas 3D ca 6. Nesse caso. ou proje¸˜o paralela. Em geral.1). A orienta¸˜o da cˆmera e ca ca ca a ´ controlada pela sua posi¸˜o. a imagem que se obt´m da cena sint´tica depende de v´rios fatores que determinam e e a como esta ´ projetada em um plano para formar a imagem 2D exibida (por exemplo) no monitor. fazemos uma analogia com uma cˆmera fotogr´fica: ca a a a imaginamos um observador que. O vetor que vai da posi¸˜o da cˆmera ao ponto focal ´ denominado dire¸˜o de a ca a e ca proje¸˜o. Da mesma forma a e ca a que no mundo real. A fotografia que se obt´m com uma ca a ca e cˆmera real ´ uma proje¸˜o da cena em um plano de imagem 2D (o filme na cˆmera). ca A posi¸˜o e o ponto focal da cˆmera definem. o tipo de proje¸˜o efetuada a ca a ca ca e a posi¸˜o dos “planos de recorte” (clipping planes). geralmente. vˆ a cena atrav´s das lentes de ca e e uma cˆmera virtual que pode ser posicionada de forma a obter a imagem desejada da cena (o “fot´grafo” a o pode definir a posi¸˜o da cˆmera. todos os raios a a ca ca convergem para um ponto comum. a a a Os planos de recorte anterior e posterior interceptam o vetor de proje¸˜o e s˜o. ´ perpendicular ao vetor dire¸˜o de proje¸˜o (Figura 6.

1 Coordenadas de Observa¸˜o ca Especifica¸˜o do sistema de coordenadas de observa¸˜o ca ca Escolhemos uma “vista” espec´ ıfica para uma cena estabelecemos primeiramente um sistema de coordenadas de observa¸˜o (Viewing Coordinate System . O tipo e o tamanho da lente da cˆmera determinam quais partes da cena aparecem na foto final.altera o ˆngulo de vis˜o da cˆmera. A regi˜o da cena que aparece no visor da m´quina ´ o que vai ser projetado na superf´ do a a a e ıcie filme.2 e 6. Figura 6. Suas posi¸˜es podem ser especificadas usando o chamado intervalo de recorte (“clipping ca co range”) da cˆmera: a localiza¸˜o dos planos ´ dada a partir da posi¸˜o da cˆmera. como ilustradas nas figuras co 6.3: • Azimuth . com centro na posi¸˜o da a ca cˆmera. de modo que uma regi˜o maior ou menor da cena fique a a a a na regi˜o que ´ potencialmente vis´ a e ıvel. out) move a posi¸˜o da cˆmera ao longo da dire¸˜o de proje¸˜o (mais pr´ximo ou mais ca a ca ca o distante do ponto focal). 1998]. com centro na posi¸˜o da cˆmera.de proje¸˜o. mas existem a e a algumas opera¸˜es comuns que facilitam a tarefa de quem gera a imagem. a • Pitch .(in.2: Movimentos de cˆmera [Schr¨eder. com centro no ponto focal ca a • Elevation . ca ca • Roll (Twist) . com centro no ponto focal.rotaciona o ponto focal ao redor do vetor dado pelo produto vetorial entre o vetor view up e o vetor dire¸˜o de proje¸˜o.2 6. Podemos e o e caminhar na cena e fotografar de qualquer ˆngulo. • Zoom . ca • Yaw .rotaciona o ponto focal da cˆmera em torno do vetor view up. A posi¸˜o do plano anterior d´ o valor m´ ca ca a ınimo do intervalo. de forma que vistas de uma cena podem ser geradas e a a a partir da defini¸˜o de parˆmetros como posi¸˜o espacial. 6.rotaciona o vetor view up em torno do vetor normal ao plano de proje¸˜o. ou View reference Coordinate System).VCS. a Estas id´ias est˜o incorporadas nas APIs gr´ficas 3D. orienta¸˜o e ˆngulo de abertura da “cˆmera ca a ca ca a a virtual”. e a posi¸˜o do plano posterior ca d´ o valor m´ximo. ca ca ca a • Dolly .rotaciona a posi¸˜o da cˆmera ao redor do seu vetor view up.rotaciona a posi¸˜o da cˆmera ao redor do vetor dado pelo produto vetorial entre o ca a vetor view up e o vetor dire¸˜o de proje¸˜o. a a A cˆmera pode ser manipulada diretamente atrav´s dos parˆmetros acima descritos. ao longo da dire¸˜o a ca e ca a ca de proje¸˜o. de v´rias distˆncias e com diferentes orienta¸˜es da a a a co cˆmera. a o Em resumo. Um plano ca 70 . gerar uma vista de um objeto em trˆs dimens˜es ´ similar a fotografar o objeto.2.

yv e zv .VRP.5). ca ca Mas. a o de observa¸˜o. especificando o vetor normal ca ca ao plano de observa¸˜o. que define a dire¸˜o para o eixo xv do VCS (veja Figuras 6.World Coordinates) ca para uma descri¸˜o no sistema de coordenadas de observa¸˜o VCS. ca desde que n˜o seja paralela ` N . V deve ser perpendicular a N .4 e 6. ca Figura 6.4: Um VCS baseado na regra da m˜o direita com xv . Pode ser dif´ para o programador ıcil determinar V exatamente de forma a satisfazer essa condi¸˜o. bem como a orienta¸˜o do plano de observa¸˜o. A convers˜o das coordenadas de WC para VCS ´ a e 71 . as transforma¸˜es de obca co serva¸˜o implementadas nos pacotes gr´ficos ajustam V projetando-o em um plano que ´ perpendicular ca a e ao vetor N : dessa forma. 1994]. definimos a dire¸˜o do eixo y do VCS (yv ) especificando-se um ca ca vetor V (View Up). estabelecemos a origem do sistema. 1998]. perpendicular a ambos. N . ou plano de proje¸˜o. Em seguida. Em seguida.3: Movimentos de cˆmera [Schr¨eder. Tipicamente. que ´ perpendicular ao eixo z do sistema de coordenadas ca ca e e de visualiza¸˜o VCS (esse plano faz o papel do plano do filme na cˆmera virtual). o programador pode escolher qualquer dire¸˜o conveniente para o vetor V .relativos ao sistema de coordenadas a do mundo [Hearn and Baker.2. selecionamos a dire¸˜o positiva para o eixo z do VCS (vamos ca a ca denotar esse eixo por zv ). como determinamos o VCS? Inicialmente.Figura 6. Para isso. A partir dos vetores N e V .2 Transforma¸˜o do sistema de coordenadas do mundo para o sistema de ca coordenadas de observa¸˜o ca Antes que as descri¸˜es do objeto (em WC) possam ser projetadas no plano de observa¸˜o. Obviamente. o View Reference Point . Podemos pensar nesse ponto como sendo a posi¸˜o da cˆmera. ´ definido. Finalmente. ´ preciso ca a e transformar a descri¸˜o da cena dada no sistema de coordenadas do mundo (WC . usamos um ponto inicialmente definido no WC. elas precico ca sam ser transformadas para as coordenadas do VCS. 6. o pacote gr´fico pode computar um terceiro a a a vetor U .

os vetores unit´rios podem ser calculados da seguinte forma: a N = (n1 . 0. 0. respecco tivamente. y0 . zw ). z0 ). Se as coordenadas do ponto VRP em WC s˜o dadas por (x0 .vc (6. ue co e e co dependo da dire¸˜o escolhida para N . A seq¨ˆncia de rota¸˜es pode exigir at´ trˆs rota¸˜es em torno dos eixos coordenados. uma vez que esses vetores s˜o ortogonais entre si e definem uma matriz ca a ortogonal.3) Este m´todo tamb´m ajusta automaticamente a dire¸˜o de V de forma que v seja perpendicular a n. a Uma forma alternativa de gerar a matriz que descreve as transforma¸˜es de rota¸˜o necess´rias ´ co ca a e calcular os vetores unit´rios u. a orienta¸˜o em (b) [Hearn and Baker. ca equivalente a uma transforma¸˜o que superp˜e o VCS ao WC. e formar a matriz a ca de composi¸˜o diretamente.5) 72 . −y0 . v3 ) n= (6. 0) d´ a orienta¸˜o co ca a ca em (a) e (1. rotacionamos em torno do eixo yw para alinhar os eixos zw e zv .1) (6. O vetor (1. A seq¨ˆncia de transforma¸˜es ´ dada por: ue co e 1. Em seguida. a ca a a superposi¸˜o de ambos os sistemas vai exigir uma seq¨ˆncia Rz · Ry · Rx . A matriz de transforma¸˜o composta ´ ent˜o aplicada a todas as descri¸˜es de objetos no WC para ca e a co transform´-las para VCS. u3 ) |V × N | v = n × u = (v1 . Aplica rota¸˜es para alinhar os eixos do VCS (xv . se N n˜o est´ alinhado com qualquer um dos eixos. usando as transforma¸˜es geom´tricas j´ ca o co e a vistas.Figura 6. Em geral. primeiro rotacionamos ca ue e em torno do eixo xw para trazer o eixo zv para o plano xw zw .2) (6. n2 . Dados os vetores N e V . yv . translada o VRP para a origem do WC .5: Orienta¸˜es do plano de observa¸˜o conforme o vetor normal. v e n do sistema de coordenadas de observa¸˜o. zv ) com os eixos do WC (xw . −z0 ). Isto ´. A rota¸˜o final em torno do eixo zw ´ para alinhar os eixos yw e ca e yv .4) A matriz de transforma¸˜o completa a ser aplicada aos objetos da cena para transferi-los para o ca sistema de coordenadas de observa¸˜o ´ dada por: ca e u1  v1 =R·T = n1 0  u2 v2 n2 0 u3 v3 n3 0  −x0 −y0   −z0 1 Mwc. v2 . e e ca A matriz de rota¸˜o composta para a transforma¸˜o de visualiza¸˜o ´ ent˜o dada por: ca ca ca e a u1  v1 R= n1 0  u2 v2 n2 0 u3 v3 n3 0  0 0  0 1 (6. yw . 2. 1994]. a matriz de transla¸˜o ´ dada por a ca e T (−x0 . n3 ) |N | V ×N u= = (u1 . u2 . 1).

3 Proje¸˜es co Tendo os objetos descritos no sistema de coordenadas de observa¸˜o. Pode-se dizer que o olho do observador coloca-se no centro de proje¸˜o. (b) ortogonal. pode-se projetar os objetos tridica mensional no plano de observa¸˜o. tem sido tratado exaustivamente por desenhistas.7) Figura 6. ca artistas e arquitetos que buscaram t´cnicas e artif´ e ıcios para sistematiz´-lo e solucion´-lo. e ca Figura 6. Denominam-se a a ca 73 . denominado de Proje¸˜o. 1999]. que ´ a tela do monie tor de v´ ıdeo. convergem para um ponto de fuga. ca Os desenhos em perspectiva s˜o caracterizados pelo encurtamento perspectivo e pelos pontos de fuga. co 6. Dois segmentos de reta ca que saem do centro de proje¸˜o e atingem o objeto projetado no plano de proje¸˜o.6 a a apresenta uma taxonomia dos m´todos de proje¸˜o.7: Linha AB e sua proje¸˜o A’B’: (a) perspectiva. Esse processo. A figura 6.3.6: Taxomia de proje¸˜es [Plastock and Kalley. No processo de gera¸˜o da imagem de uma cena deparamos com o ca ca problema de apresentar uma entidade tridimensional num meio bidimensional (2D).1 Proje¸˜o Perspectiva ca As t´cnicas utilizadas em proje¸˜o perspectiva s˜o derivadas daquelas utilizadas pelos artistas e desee ca a nhistas profissionais. a O encurtamento perspectivo. Tem-se tamb´m a ilus˜o de que conjuntos de linhas a ca e a paralelas que n˜o s˜o paralelas ao plano de proje¸˜o.6. ´ a ilus˜o de que os objetos e comprimentos s˜o cada vez menores ` medida e a a a que sua distˆncia ao centro de proje¸˜o aumenta. e o plano ca que deve conter o objeto ou cena projetada transforma-se no plano de proje¸˜o. s˜o chamadas de ca ca a projetantes (veja a Figura 6.

8: Proje¸˜es de um cubo (com 1 ponto de fuga) sobre um plano cortando o eixo Z. quando d´-se a aparˆncia de haver uma intersec¸˜o entre um conjunto de a e ca retas pararelas com um dos eixos principais Ox . como mostra a figura 6. ou seja o co a u n´mero de eixos que o plano de proje¸˜o intercepta. pontos de Fuga: As proje¸˜es de retas n˜o paralelas ao plano de proje¸˜o.pontos de fuga principais. ca a ca 74 . A Figura 6. 3. O n´mero de pontos de fuga principais ´ u e determinado pelo n´mero de eixos principais intersectados pelo plano de proje¸˜o. a co e o custo de implementa¸˜o ´ bem maior (veja Figura 6.10). Os pontos deste plano s˜o projetados no infinito pela transforma¸˜o perspectiva. ca e Figura 6. s˜o tamb´m paralelas ao plano de a e proje¸˜o. Confus˜o Visual: Os objetos situados atr´s do centro de proje¸˜o s˜o projetados no plano de a a ca a proje¸˜o de cima para baixo e de tr´s para a frente (ver Figura 6. provocam a ilus˜o de co a ca a que se interceptam num ponto do horizonte. Distor¸˜o Topol´gica: Consideremos o plano que cont´m o centro de proje¸˜o e que ´ paralelo do ca o e ca e plano de proje¸˜o. a co a pois adicionam muito pouco em termos de realismo comparativamente `s proje¸˜es com 2 pontos de fuga. Proje¸˜es perspectivas com 2 pontos de fuga (quando 2 eixos principais s˜o interceptados pelo plano co a de proje¸˜o) s˜o mais comumente usadas em arquitetura. Est´ claro que possui apenas um ponto de fuga? Somente as a linhas paralelas ao eixo z convergem. somente o eixo z possui ca a e um ponto de fuga principal.9: Proje¸˜es perspectivas com 2 pontos de fuga ( o plano de proje¸˜o intercepta 2 eixos (x e z)).8 mostra 2 proje¸˜es perspectivas (com u ca co um ponto de fuga) distintas de um cubo. J´ as proje¸˜es perspectivas com 3 pontos de fuga s˜o bem menos utilizadas. pois linhas paralelas aos eixos x e y.11. ca 2. e dessa forma n˜o ocorre a ilus˜o de convergˆncia. Encurtamente perspectivo: Quanto mais distante um objeto est´ do centro de proje¸˜o. menor a ca parece ser (o tamanho de sua proje¸˜o torna-se menor. desenho publicit´rio e projeto ca a a industrial (ver Figura 6. ca mas tamb´m alteram as medidas e formas reais do objetos. co ca Anomalias da Perspectiva A proje¸˜o perspectiva introduz certas anomalias que aumentam o realismo em termos de profundidade.9). Por exemplo: se o u ca plano de proje¸˜o intercepta apenas os eixo z (ent˜o ´ perpendicular ao eixo z).12) ca a 4. e 1. ca a a e Proje¸˜es Perspectivas s˜o categorizadas pelo seu n´mero de pontos de fuga principais. Oy ou Oz . apresentando co o ponto de fuga. engenharia. e as linhas paralelas aos eixos x e y continuam paralelas! Figura 6.

normal ao eixo z.6) O parˆmetro u assume valores no intervalo [0. por´m ambas aparecem com o mesmo tamanho e e quando projetadas no plano de vis˜o. s˜o transformados os pontos ao longo dos proca a jetores que se encontram no centro de proje¸˜o. Podemos escrever as equa¸˜es que descrevem as ca co coordenadas (x . y . zprp ). est´ posicionado em zvp. um ponto no eixo zv. e podemos resolver a equa¸˜o de z’ para obter o valor do parˆmetro u nessa posi¸˜o ca a ca ao longo da linha de proje¸˜o: ca Zvp − z Zprp − z 75 u= (6. z). e que o plano de proje¸˜o.7) . zp ). a Figura 6. ca co ca ca sabemos que z = zvp . Precisamos determinar as coordenadas (xp . y. um segmento de reta que une um ponto situado ` frente do observador a um ponto a situado atr´s dele e efetivamente projetado segundo uma linha quebrada de comprimento infinito.10: Proje¸˜es perspectivas com 3 pontos de fuga ( o plano de proje¸˜o intercepta os 3 eixos). que s˜o as coordenadas a do ponto P = (x. e quando a u = 1 temos exatamente o centro de proje¸˜o (0. yp . 1] quando u = 0. y. co ca Em particular. estamos em P = (x. As proje¸˜es perspectiva e paralela tamb´m ca co e podem. Suponha que o centro de proje¸˜o est´ posicionado ca ca a em zprp. 0.13. a Desenvolvimento Matem´tico para Proje¸˜es Perspectivas a co Para obter uma proje¸˜o perspectiva de um objeto 3D. No plano de observa¸˜o. ca a como mostra a Figura 6. z ) de qualquer ponto ao longo da linha de proje¸˜o perspectiva como: ca x = x − xu y = y − yu z = z − (z − zprp )u (6. o que ´ co e a e e interessante para a composi¸˜o de transforma¸˜es juntamente com a proje¸˜o. ser definidas atrav´s de matrizes 4x4.11: A esfera B ´ bem maior que a esfera A. z) projetado no plano de proje¸˜o. assim como as transforma¸˜es geom´tricas b´sica.Figura 6.

8) Usando coordenadas homogˆneas pode-se escrever a transforma¸˜o na forma matricial: e ca  1 0 0 xh 0 1 0  yh     =  0 0 − zvp  zh dp h 0 0 − d1 p  Nesta representa¸˜o o fator homogˆneo ´ ca e e zprp − z dp 0 0 −zvp zprp dp z rp − pp d    x  y ·   z 1 (6. yp. z) na posi¸˜o (xp. a a ca Figura 6.11) Observa-se que o valor original da coordenada z precisa ser mantido nas coordenadas de proje¸˜o ca para uso por algoritmos de remo¸˜o de linhas ocultas. y. Em geral.9) h= (6. o centro da proje¸˜o n˜o precisa ser ca ca a 76 . obtemos as equa¸˜es de transforma¸˜o perspectiva: co co ca Zvp − z Zprp − z Zvp − z yp = y Zprp − z dp Zprp − z dp =y Zprp − z xp = x =x (6.13: Proje¸˜o em perspectiva de um ponto P=(x.10) E as coordenadas do ponto projetado no plano de observa¸˜o s˜o obtidas a partir das coordenadas ca a homogˆneas dividindo-se por h: e xp = xh h yh yp = h (6. ca Substituindo esse valor de u nas equa¸˜es de z e y . 1994]. zp) sobre o plano de ca ca proje¸˜o [Hearn and Baker.12: Confus˜o visual da perpectiva (objeto atr´s do centro de proje¸˜o).Figura 6.

Proje¸˜es ortogr´ficas s˜o muito comuns em engenharia e co a a arquitetura para gerar vistas frontais. i. Em alguns ca a pacotes gr´ficos ´ assumido que o centro de proje¸˜o coincide com a origem do sistema de coordenadas a e ca de observa¸˜o. ca 6. a co Por exemplo. ca ca e ca ca a caso contr´rio tem-se uma proje¸˜o obl´ a ca ıqua. Se o plano de observa¸˜o est´ posicionado ca ca a e ca a em zvp ao longo do eixo zv .posicionado ao longo do eixo zv .e. se o plano de proje¸˜o coincide com o plano uv.2 Desenvolvimento Matem´tico para Proje¸˜es Paralelas a co Podemos especificar uma proje¸˜o paralela com um vetor de proje¸˜o que define a dire¸˜o dos projetoca ca ca res. ent˜o dp = zprp .12) 77 .. e as equa¸˜es acima podem ser generalizadas para considerar o centro co em um ponto qualquer. y. Existem v´rios casos especiais a serem considerados para as equa¸˜es acima.3. 1994]. zvp = 0. A deriva¸˜o das equa¸˜es de transca co forma¸˜o para uma proje¸˜o paralela ortogr´fica ´ imediata.14): ca e ca Figura 6. ca ca A matriz de transforma¸˜o para coordenadas homogˆneas ´ dada por: ca e e 1 0 = 0 0  0 1 0 0 0 0 0 0  0 0  0 1 Mortograf (6. nesse caso zprp = 0. laterais e traseiras de objetos. i.e.14: Proje¸˜o ortogonal de um ponto no plano de proje¸˜o [Hearn and Baker. ent˜o a descri¸˜o de qualquer ponto P = (x. Quando a dire¸˜o proje¸˜o ´ perpendicular ao plano de proje¸˜o tem-se uma proje¸˜o ortogr´fica. z) em coordenadas do sistema a ca de observa¸˜o ´ transformada para as coordenadas de proje¸˜o (veja Figura 6..

Esta ´ a t´cnica mais frequentemente utilizada para recortar segmentos de reta. Uma t´cnica ´bvia ´ recortar a primia e o e tiva antes da convers˜o matricial. de maneira o e n˜o extensiva. calculando analiticamente suas intersec¸˜es com o ret8ngulo de rea co corte/visualiza¸˜o [clip rectangle]. e portanto devem ser mostrados (Figura 7. por exemplo].1 Recorte de segmentos de reta Figura 7. s˜o sempre transformados a a num unico segmento. evidente. ou num ıvel a o frame buffer (mem´ria de imagem no controlador do dispositivo. a e Outra estrat´gia seria converter todo o pol´ e ıgono. cuja ´rea pode ser muito menor que a a a original. existem maneiras de acelerar o processo que evitam o teste de cada a a pixel individualmente. (O “recorte” ´ necess´rio para que e a a imagem “apare¸a” dentro do rectˆngulo de visualiza¸˜o definido para ela. A vantagem. Segmentos que est˜o sobre a fronteira do retˆngulo de recorte s˜o considerados ´ a a a como dentro dele. Vamos a a a a estudar agora alguns algoritmos para clipping [recorte] de primitivas.Cap´ ıtulo 7 Recorte de Primitivas 2D J´ vimos que um “pacote gr´fico” atua como intermedi´rio entre o aplicativo (e o seu modelo/estrutura de a a a dados interna) e o hardware de visualiza¸˜o. ca ca e a descritas em termos de v´rtices num sistema de coordenadas cartesianas. depois de recortados. At´ o momento estudamos. mas tra¸ar apenas os pixels vis´ c ıveis no retˆngulo de a visualiza¸˜o [scissoring]. Na pr´tica. Sua fun¸˜o ´ aproximar primitivas matem´ticas (“ideais”). Se o teste dos limites puder ser feito rapidamente [por hardware especializado. 78 .1: Exemplos de recorte de segmentos de reta. o a 7. por conjuntos de pixels com a e cor ou n´ de cinza apropriado.1). c a ca Existem v´rias abordagens para o processo de clippings. Estes pontos de intersec¸˜o s˜o ent˜o usados para definir os novos ca ca a a v´rtices para a vers˜o recortada da primitiva. Estes pixels s˜o armazenados num bitmap na mem´ria da CPU. e os algoritmos que vamos estudar s˜o baseados nesta estrat´gia. lsto pode ser feito checando as coordenadas de cada pixel a ser escrito contra ca os limites do retˆngulo. ´ que o processo de convers˜o e a e a matricial precisa tratar apenas da vers˜o recortada da primitiva. alguns algoritmos b´sicos para convers˜o matricial utilizados por pacotes gr´ficos. Segmena tos que interceptam uma regi˜o de recorte retangular. e tem a vantagem de ser extens´ ıvel a regi˜es de recorte arbitr´rias. esta abordagem pode ser mais eficiente que a anterior. Vamos estudar especificamente o processo de recorte de segmentos de reta contra retˆngulos. retˆngulos e e e a pol´ ıgonos.

determinado pela posi¸˜o da regi˜o com rela¸˜o aos semi-planos a e ıdo o ca a ca externos `s arestas do retˆngulo de recorte. vamos considerar o problema mais simples de recortar pontos extremos. e executa testes iniciais na linha para determinar e se c´lculos de intersec¸˜o podem ser evitados.2 Algoritmo de Cohen-Sutherland para Recorte de Segmentos de Reta Para recortar um segmento de reta. Na Figura 7. respectivamente. Uma maneira eficiente de calcular os c´digos resulta da a a o observa¸˜o de que o bit 1 ´ igual ao bit de sinal de (ymax − y). precisamos considerar apenas os seus pontos extremos. a a O algoritmo de Cohen-Sutherland ´ mais eficiente. o 2 ´ o bit de sinal de (y − ymin ). e est´ parcialmente ca a a dentro dele. e portanto deve ser descartado.1. as arestas do retˆngulo de visualiza¸˜o s˜o ca ca a ca a estendidas de forma a dividir o piano do retˆngulo de visualiza¸˜o em 9 regi˜es [Figura 7. tomamos as duas retas (matematicamente a infinitas) que as cont´m. os c´digos s˜o 0001 e 1201. A cada a ca o regi˜o ´ atribu´ um c´digo de 4 bits. Para EF. a linha intercepta a o retˆngulo de visualiza¸˜o. A consequˆncia ´ que o segmento EF pode ser trivialmente rejeitado. Se ambas as extremidades a ca ca est˜o fora. e o ponto de intersec¸˜o precisa ser calculado.1). precisamos resolver duas equa¸˜es simultˆneas usando multiplica¸˜o e divis˜o para co a ca a cada par < aresta. o 3 ´ o ca e e e bit de sinal de (xmax − x). a Uma estrat´gia de for¸a bruta seria checar a linha contra cada aresta do retˆngulo de visualiza¸˜o. a o a 79 . mas I a ca ca a e J n˜o s˜o. Se os 4 bits dos c´digos das extremidades s˜o iguais a zero. Se existe um. y) esteja dentro do retˆngulo de recorte: a xmin ≤ x ≤ xmax ymin ≤ y ≤ ymax (7. • 1◦ bit: semiplano acima da aresta superior y > ymax • 2◦ bit: semiplano abaixo da aresta inferior y < ymin • 3◦ bit: semiplano a direita da aresta direita x > xmax • 4◦ bit: semiplano a esquerda da aresta esquerda x < xmin A cada extremidade do segmento de reta ´ atribu´ o c´digo da regi˜o a qual ela pertence. Esses e ıdo o a c´digos s˜o usados para determinar se o segmento est´ completamente dentro do retˆngulo de visualiza¸˜o o a a a ca ou em um semiplano externo a uma aresta. se est´ dentro do retˆngulo de visualiza¸˜o e da linha. que envolve quantidade e consider´vel de c´lculos e testes.1). duas compara¸˜es a a co o co simples em x mostram que ambos os pontos extremos da linha EF na Figura 7. Dessa forma. e coordenada y no intervalo ymin e ymax. um segmento ´ recortado interativamente testando-se e aceita¸˜o ou rejei¸˜o trivial.1) 7. A seguir. a linha pode ou n˜o interceptar o retˆngulo. a Para executar os testes de aceita¸˜o ou rejei¸˜o trivial. verifica pares de pontos extremos. podemos rejeitar trivialmente linhas com ambos a c os extremos em regi˜es a direita de xmax . a linha corta o retˆngulo.7. sendo subdividido se nenhum dos dois testes for bem-sucedido. e n˜o os a infinitos pontos no interior.1 Recorte de Pontos Extremos Antes de discutir o problema do recorte de segmentos de reta. Para cada linha e cada aresta do retˆngulo. e precisamos verificar se as intersec¸˜es existem a a a co e onde est˜o.1 tˆm coordenada x menor e que xmin. o a ent˜o a linha est´ completamente dentro do retˆngulo. como para EF na Figura 7.2].1. toda a linha est´ dentro do retˆngulo e pode ser tra¸ada (neste caso diz-se que a reta foi a a c trivialmente aceita).1. Se ambas as extremidades estiverem no semi plano a a a externo a uma aresta em particular. testamos se este ponto ´ interior e ca e . Primeiramente. ele ´ subdividido em dois segmentos por uma aresta de recorte. linha >. Se a fronteira do retˆngulo de recorte tem coordenada x no intervalo xmin a e xmax.1. a a Nesta abordagem. e portanto est˜o na regi˜o a esquerda do retˆngulo de visualiza¸˜o (ou seja. at´ que o ca ca e segmento remanescente esteja totalmente contido no retˆngulo ou totalmente fora dele. Se apenas uma das extremidades est´ dentro (CD na Figura 7. s˜o feitas verifica¸˜es por regi˜es. Se este ´ o caso. abaixo de ymin e acima de ymax . fora do semi-plano a a a ca definido pela aresta esquerda). Por exemplo. este ´ um esquema bastante ineficiente. e o 4 e o de (x − xmin ). os pontos de intersec¸˜o G e H s˜o interiores. ent˜o 4 desigualdades precisam ser satisfeitas para a que um ponto (x.ou seja. e calculamos a intersec¸˜o entre elas. Entretanto. existe uma intersec¸˜o a a ca e ca com o retˆngulo de visualiza¸˜o. um dos e quais pode ser trivialmente rejeitado. e e e n˜o precisa ser recortado ou tra¸ado. os c´digos de ambas as extremidades o tem o bit correspondente `quela aresta igual a 1. Se a a ca linha n˜o pode ser trivialmente aceita. Se o segmento n˜o pode ser o a trivialmente aceito ou rejeitado. para e c a ca localizar um eventual ponto de intersec¸˜o. Se ambas as extremidades est˜o dentro do retˆngulo de visualiza¸˜o (AB na a a ca Figura 7. Da mesma forma.

e e usa os bits do c´digo iguais a um) para determinar uma aresta de recorte. ou seja. gerando AB.4. 0 ca a e teste de quais arestas interceptam a linha segue a mesma ordem dos bits nos c´digos: de cima-para-baixo. o o Se a linha n˜o puder ser trivialmente aceita ou rejeitada. 0 c´digo do ponto A ´ 0000.Figura 7. e o segmento falha a nos testes de rejei¸˜o trivial. ca a a que ´ portanto interceptada pelo segmento. 0 novo c´digo ca ca o para o segmento correspondente ´ calculado. tomamos uma ca ca extremidade externa (pelo menos uma delas ´ externa). o da direita-para-a-esquerda. Podemos ent˜o descartar o segmento que vai do ca a extremo externo ao ponto de intersec¸˜o. o algoritmo sempre escolhe um ponto que esteja fora. 0 algoritmo escolhe D como o ponto e a externo. a correspondente ao primeiro bit igual a 1 no c´digo.2: C´digos das regi˜es. usamos primeiro a aresta superior para recortar AD. O primeiro extremo. o o o que mostra com o 4◦ bit que o segmento est´ no semiplano externo ` aresta esquerda. o ca a c Figura 7. substituindo o ponto externo pela intersec¸˜o. A subdivis˜o ´ feita usando uma aresta que seja interceptada pela a e linha para subdividi-la em dois segmentos: a se¸˜o que fica no semiplano externo ` aresta ´ descartada. e testamos seu c´digo para obter uma aresta que e o seja interceptada e determinar o ponto de intersec¸˜o. O c´digo de B ´ 0000 e na o e pr´xima intera¸˜o o segmento ser´ trivialmente aceito e tra¸ado. e o 0 algoritmo funciona da seguinte maneira: Calcula primeiramente os c´digos de ambas as extremio dades. e o ca Considere por exemplo o segmento AD na Figura 7. e o do ponto D o e ´ 1001 . preparando os dados para a pr´xima itera¸˜o. devemos subdividi-la em dois segmentos de a forma que um deles possa ser rejeitado. Uma propriedade chave dos c´digos ´ que os bits iguais a um correspondem o e a arestas interceptadas: se uma extremidade est´ no semiplano externo a uma aresta. De acordo com a ordem o de teste. A linha EI requer mais itera¸˜es. Q segmento n˜o pode ser trivialmente aceito ou rejeitado. Assim. o segmento pode ser trivialmente rejeitado.3: Funcionamento do algoritmo de Cohen-Sutherland para recorte de segmentos. e checa aceita¸˜o ou rejei¸˜o trivial. Se nenhum dos testes for bem-sucedido. Portanto. tem c´digo 0100 e ´ escolhido pelo algoritmo co o e 80 . ent˜o a outra extremidade deve estar no semiplano interno `quela aresta. e o seu c´digo mostra que a linha cruza as arestas superior e esquerda. E. A aresta escolhida ´ a o e primeira encontrada na ordem pr´-definida. se um a a and l´gico dos c´digos das extremidades for diferente de zero.

1 e 7. e ca e co a seguir fazer a convers˜o matricial dos arcos resultantes. Na segunda itera¸˜o. no caso a aresta o e inferior.y) */ void CalculaOutCode(float x. e a terceira itera¸˜o resulta num corte pela aresta direita. /* Retorna TRUE se a interseccao logica entre codigo1 e codigo * 2 e vazia. */ boolean InterseccaoVazia(outcode codigo0[].12). e a c Um algoritmo para recorte de pol´ ıgonos precisa tratar de muitos casos distintos. */ boolean Igual(outcode codigo0[].5. outcode codigo1 []). resultando no segmento FH. /* Fim se */ if (x > xmax) codigo[RIGHT] = TRUE. ela ´ subdivida em quadrantes. e FALSE c. de forma que o algoritmo escolhe o ponto externo I.c. por ser simples e bastante conhecido.c. cujo o e c´digo ´ 1010. e FALSE c. /* Fim Se */ }/* End CalculaOutCode */ Algoritmo 7. Existem algoritmos mais eficientes (v. resolvendo suas equa¸˜es simultaneamente. float y. testando e a e e cada pixel na circunferˆncia contra os limites do retˆngulo antes de tra¸a-lo. */ boolean Vazio(outcode codigo[]). else if (x < xmax) codigo[BOTTOM] = TRUE. BOTTOM = 2. e testes de aceita¸˜o/rejei¸˜o e a e ca ca ´ trivial s˜o feitos para cada um.c. a a a eventualmente ser˜o feitos recortes desnecess´rios. Estes testes podem levar a testes por octantes. TOP = 3} aresta. E poss´ ent˜o calcular a ıvel a a intersec¸˜o da circunferˆncia e da aresta analiticamente. for (i . O caso (a) ´ particularmente interessante porque um pol´ e ıgono cˆncavo ´ recortado em dois pol´ o e ıgonos 81 .como os testes e recorte s˜o executados numa ordem fixa. e * FALSE c.como ponto externo. F.1: Calculando os c´digos do algoritmo de Cohen-Sutherland. ou se a cira a e a cunferˆncia n˜o ´ muito grande. O Algoritmo 7. FALSE} boolean. o 7. Foley. O c´digo ´ testado para obter a primeira aresta que a linha cruza. ´ 0000. Se a circunferˆncia intercepta o retˆngulo. /* Calcula outcode para ponto (x. 3. c ca Este algoritmo n˜o ´ o mais eficiente . podemos primeiro executar um teste de aceita¸˜o/rejei¸˜o e a ca ca trivial interceptando a extens˜o da circunferˆncia (um quadrado do tamanho do diˆmetro da circuna e a ferˆncia) com o retˆngulo de visualiza¸˜o usando o algoritmo para recorte de pol´ e a ca ıgonos que ser´ visto a sea guir. i < = TOP. /* Retorna TRUE se todos os outcodes em codigo sao FALSE. outcode codigo1[]). typedef enum {TRUE. typedef enum {LEFT = 0. else if (y < YMIN) codigo[BOTTOM] = TRUE. Por exemplo. i++) codigo[i] = FALSE. mas este ainda ´ o mais e utilizado. O c´digo de H o e e o ´ 0010. typedef boolean outcode. /* Fim for */ if (y > YMAX) codigo[TOP] = TRUE. FI n˜o pode ser trivialmente aceito ou rejeitado.2 ilustram este procedimento.2 Recorte de Circunferˆncias e Para recortar uma circunferˆncia contra um retˆngulo. como mostra a Figura 7. Figura 7. que n˜o est´ na fronteira do retˆngulo de visualiza¸˜o (ponto a e ca a a a ca H na linha EI. A primeira aresta interceptada ´ a superior. O segmento resultante ´ trivialmente e ca e aceito e tra¸ado na quarta itera¸˜o. seria provavelmente mais eficiente usar a t´cnica de scissoring. e ca a O c´digo da primeira extremidade.4). quando a intersec¸˜o com uma aresta a a ca do retˆngulo ´ uma “intersec¸˜o externa”. /* Retorna TRUE se codigo0 e codigo 1 sao iguais.LEFT. Se a convers˜o matricial ´ r´pida. RIGHT = 1. e EI ´ recortado para FI. outcode codigo[]) { int i.

y1.float y0.x1.outcode0)) { x0 = x. e retangulo de recorte com diagonal de (xmin. *outcode0ut. }else if (interseccao_vazia(outcode0. y0 = y. P1 e quaisquer outros pontos que estao fora do retangulo de recorte */ float x. seleciona-o */ outcode0ut= vazio(outcode0) ? outcode1 : outcode0.y1). aceito = FALSE.y1 . y. x = xmin. y= ymax. }else if (outcode0ut[LEFT]) { /* divide a linha na aresta esquerda do retangulo de recorte */ y = y0 + (y 1 -y0) + (xmin-x0)/(x1-x0). /* outcodes para P0.y0.2: Desenhando a linha com o algoritmo de Cohen-Sutherland.outcode0). para recortar e preparar para o proximo passo */ if (igual(outcode0ut. if (aceito) MeioPontoLinhaReal(x0. /* acha agora o ponto de interseccao.ymin) a * (xmax.float y1. else { /* ambos os testes falharam.y0. */ void RecorteLinhaCohenSutherland(float x0. CalculaOutCode(x0. Algumas das fun¸˜es co usadas est˜o ilustradas no Algoritmo 7.y0) a * P1(x1.float x1. usando as formulas: y = y0 + inclinacao * (x-x0). y = ymin. x = x0 + ( 1 /inclinacao) * (y-y0) */ if (outcodeOut(TOP)) { /* divide a linha no topo do retangulo de recorte */ x= x0 + (x1-x0) * (ymax-y0)/(y1-y0).y0. outcode outcode0[4].outcode1). y1 = y. }else if (outcode0ut[BOTTOM]) { /* divide a linha na base do retangulo de recorte */ x = x0 + (x1-x0) + (ymin-y0)/(y1-y0). }else{ x1 = x. pronto = TRUE. }else if (outcode0ut[RIGHT]) { /* divide a linha na aresta direita do retangulo de recorte */ y = y0 + (y1 -y0) + (xmax-x0)/(x1-x01. outcode1 [4].outcode0).valor). do { if (vazio(outcode0) && vazio(outcode1)){ /* aceitacao trivial e sai */ aceito = TRUE. entao calcula o segmento de reta a recortar: a partir de um ponto externo a uma interseccao com a aresta de recorte */ /* pelo menos um ponto esta fora do retangulo de recorte. } }/* fim do else da subdivisao */ } while (pronto). /* versao do algoritmo para coordenadas reais */ } /* fim do algoritmo de recorte e tracado */ Algoritmo 7. x = xmax.ymax). pronto.2. } /* Fim se */ /* agora move o ponto externo para o ponto de interseccao.outcode1)) /* rejeicao trivial e sai */ pronto = TRUE. a 82 . CalculaOutCode(x0.outcode1).y1).int valor){ boolean aceito. CalcuiaOutCode(xl . pronto = FALSE. CalculaOutCode(x1./* algoritmo de recorte de Cohen-Sutherland para linha P0(x0.

Em 3D. (a) M´ltiplos componentes. definem as arestas de um pol´ e e ıgono. O problema b´sico consiste em recortar o pol´ a ıgono contra uma unica aresta de recorte ´ infinita. O algoritmo aceita como entrada uma s´rie de v´rtices v1. quando combinadas.Figura 7. arestas existentes precisam ser ca descartadas. recortam o pol´ a ıgono sucessivamente contra o retˆngulo de visualiza¸˜o. enquanto que o algoritmo para linhas testa o c´digo para verificar qual aresta ´ interceptada. v2.. indo do v´rtice vn ao v´rtice v1. Figura 7. pol´ ıgonos podem ser recortados contra volumes poliedrais convexos definidos por planos. e recorta apenas quando o e necess´rio.. e assim por diante.5: Exemptos de recorte de pol´ ıgonos. e e examinando a cada passo a rela¸˜o entre um v´rtice e a aresta de recorte.. e ´ ´ e necess´rio uma abordagem organizada para tratar todos os caso poss´ a ıveis. V´rios pol´ a ıgonos podem resultar do recorte de um unico. resolve uma s´rie de problemas simples e idˆnticos cujas solu¸˜es. Em cada passo. zero. Num segundo passo. cada qual definindo um lado do retˆngulo. resolvem o e e co problema todo. em 2D. dependendo 83 . novas arestas precisam ser acrescentadas. . e de volta a vn. O problema ´ complexo porque cada aresta do pol´ e ıgono precisa ser testada contra cada aresta do ret9ngulo de visualiza¸˜o. o separados.4: Algoritmo de Sutherland-Hodgman para Recorte de Pol´ ıgonos. recorta o pol´ ıgono contra uma unica aresta de recorte infinita. o pol´ ıgono parcialmente recortado ´ recortado novamente contra e a segunda aresta. mantidas ou subdivididas. Quatro arestas. O algoritmo movimenta-se em torno do pol´ ıgono. a ca Note a diferen¸a entre esta estrat´gia para um pol´ c e ıgono e o algoritmo de Cohen-Sutherland para recorte de linhas: O algoritmo para pol´ ıgonos recorta quatro arestas sucessivamente. um ou ca e dois v´rtices s˜o adicionados ` lista de sa´ dos v´rtices que definem o pol´ e a a ıda e ıgono recortado. (b) Caso convexo (c) Caso u cˆncavo com muitas arestas exteriores. O algoritmo para recorte de pol´ ıgonos de Sutherland-Hodgman usa a estrat´gia “dividir para conquise tar”. e retorna outra s´rie de v´rtices que definem o ´ e e pol´ ıgono recortado. O algoritmo de Sutherland-Hodgman ´ na verdade mais geral: um pol´ a e ıgono (cˆncavo ou o convexo) pode ser recortado contra qualquer pol´ ıgono de recorte convexo. vn que. A seguir.

6). aceita um vetor de v´rtices. e a intera¸˜o corrente este e e ca ca analisando p. e usamos o procedimento Output() para incluir um v´rtice em outVertexArray. ambos os pontos de intersec¸˜o. quando olha-se do primeiro para o segundo v´rtice da aresta”. Assume-se que o v´rtice est´ no interior da fronteira se estiver “a e a esquerda da aresta de recorte. 0 algoritmo ´ bastante geral.da posi¸˜o do v´rtice sendo analisado em rela¸˜o ` aresta de recorte. e pode ser estruturado para chamar a si pr´prio recursivamente de uma e o forma que o torna bastante eficiente para implementa¸˜o em hardware. No caso 1 . ca 84 . mostrado no Algoritmo 7. que define a intersec¸˜o ca entre a aresta do pol´ ıgono e a aresta do retˆngulo. s˜o colocados na lista de sa´ ca a ıda. O procedimento. inVertexArray. A fun¸˜o Inside() retorna true se o v´rtice est´ ca e a no interior da fronteira de recorte. ambos os v´rtices est˜o fora do retˆngulo. o ponto i.3.6: Quatro situa¸˜es poss´ co ıveis no recorte de pol´ ıgonos. n˜o inclu´ o a ımos verifica¸˜o dos erros nos limites dos ca vetores. e o v´rtice p ´ adicionado ` lista de sa´ ca e e a ıda. definida por dois v´rtices da fronteira do pol´ e ıgono de recorte. Consideremos uma aresta do pol´ ıgono que vai do v´rtice e s ao v´rtice p. No caso 4. ca e ca a Figura 7. S˜o quatro situa¸˜es poss´ a co ıveis (Figura 7. e cria outro e vetor outVertexArray. No caso 2. podemos testar o sinal do produto vetorial do vetor normal ` fronteira a a de recorte e da aresta do pol´ ıgono. Para manter o c´digo simples. Suponha que o v´rtice s foi analisado na itera¸˜o anterior. a aresta do pol´ ıgono est´ completamente dentro da fronteira do retˆngulo de a a visualiza¸˜o. No caso 3. O procedimento e Intersect() calcula a intersec¸˜o de uma aresta s-¿p do pol´ ca ıgono com a aresta clipBoundary. Para calcular se um ponto ca ca a est´ fora da fronteira de recorte. e nenhum ´ colocado na lista de sa´ e a a e ıda. ´ colocado como um v´rtice na lista de sa´ a e e ıda. Esta e orienta¸˜o corresponde a uma enumera¸˜o das arestas no sentido anti-hor´rio. i e p.

aresta arestaRecorte). int *tamSaida.p. saida(i. / * comeca com o ultimo vertice em vetorEntrada */ for (j = 1 .vetorSaida). vertice seg. e atualiza tamSaida */ void saida(vertice novoVertice. void RecortePoligonosSutherlandHodgman( VetorVertices vetorEntrada.arestaRecorte).arestaRecorte)) { /* casos 1 e 4 */ if (dentro(s. /* Acrescenta um novo vertice a vetorSaida. /* recorta a aresta (prim. * retorna o novo ponto */ vertice intercepta(vertice prim. aresta arestaRecorte). /* contador para o loop de vertices */ *tamSaida = 0. s = vetorEntrada[tamEntrada]. 85 . ponto vertice.vetorSaida).tamSaida.arestaRecorte)) { i = intercepta(s.p.} ponto.tamSaida.tamSaida./* Algoritmo de Sutherland-Hodgman para recorte do pol´gonos */ ı #define MAX 20 typedef typedef typedef typedef typedef struct {float x. /* pontos inicial e final da aresta de recorte corrente */ vertice i. FALSE = 0} boolean. VetorVertices vetorSaida). /* ponto de interseccao com uma aresta de recorte */ int j. }/* Fim Se */ }else{ /* casos 2 e 3 */ if (dentro(s.vetorSaida). p. /* vetor de vertices de saida */ int tamEntrada. vertice VetorVertices[MAX].j + + ) { p= vetorEntrada[j]. enum {TRUE = 1. saida(i. /* Checa se o vertice esta dentro ou fora da aresta de recorte */ boolean dentro(vertice testeVertice. }/* fim do for */ }/* fim do algoritmo de recorte */ Algoritmo 7.vetorSaida). vertice aresta[2]. /* vetor de vertices de entrada */ VetorVertices vetorSaida.tamSaida.3: Algoritmo de Cohen-Sutherland. */ if (dentro(s.y.seg) do poligono contra arestaRecorte.arestaRecorte)) saida(p. /* numero de vertices em vetorSaida */ aresta arestaRecorte /* aresta do poligono de recorte */){ vertice s. else { i = intercepta(s. saida(p. }/* Fim Se */ }/*Fim Se */ s = p.arestaRecorte).j < = tamEntrada. /* agora s e p correspondem aos vertices na Fig. /* numero de entradas em vetorEntrada */ int tamSaida.

e posterior ajuste de uma curva matem´tica aos pontos digitalizados. Frequentemente. Observe que nas regi˜es da curva onde a curvatura ´ grande. cascos de o navios. ca c Figura 8. etc. lˆminas de propuls˜o. f´ a ısica e medicina. projeto e manufatura de uma ampla gama de produtos. como autom´veis. As curvas podem ser obtidas atrav´s da digitaliza¸˜o de um modelo f´ e ca ısico ou desenho. e 8.1). • Projeto Geom´trico Apoiado por Computador (Computer Aided Geometric Design): nova e disciplina que incorpora modelos matem´ticos e computacionais desenvolvidos para apoiar os proa cessos de engenharia. uma representa¸˜o visual adequada pode ser gerada ca conectando-se os pontos por segmentos de reta. o a a co • na descri¸˜o e interpreta¸˜o de fenˆmenos f´ ca ca o ısicos em ´reas como geologia. ou geradas a partir de formula¸˜es a co criadas especificamente para a defini¸˜o de curvas no espa¸o. a proxima¸˜o por segmentos de o e ca 86 . superf´ ıcies s˜o descritas por uma malha de curvas definidas em planos ortogonais a (Figura 8. sapatos. garrafas. fuselagem e asas de avi˜es.1: Representa¸˜o de superf´ ca ıcies atrav´s de malhas.Cap´ ıtulo 8 Curvas e Superf´ ıcies em Computa¸˜o ca Gr´fica a Curvas e superf´ ıcies tridimensionais (espaciais) desempenham um papel importante: • na engenharia. projeto e manufatura. se estes forem espa¸ados adequadamente (Figura c ??). edifica¸˜es.1 Representa¸˜o de Curvas ca Existem duas formas alternativas de representa¸˜o: ca • por um conjunto de pontos: nesse caso.

Para esse caso.reta ´ particularmente ruim (Figura ??(a)).2: Aproxima¸˜o de curvas por segmentos de reta conectados. a ca • facilidade para calcular propriedades da curva como inclina¸˜o e curvatura (em uma representa¸˜o ca ca por pontos tais propriedades precisam ser calculadas por diferencia¸˜o num´rica.3 Representa¸˜es Param´tricas e N˜o Param´tricas (expl´ co e a e ıcita e impl´ ıcita) Para uma curva plana. t´cnicas usuais s˜o as c e e a representa¸˜es de B´zier e B-splines (ambas s˜o estrat´gias de aproxima¸˜o de curvas). • facilidade para fazer altera¸˜es cont´ co ınuas no formato da curva de forma a atender requisitos de projeto (“design”). o que apresenta v´rias vantagens em rela¸˜o e co a a ca a ` representa¸˜o anterior: ca • precis˜o. a forma n˜o param´trica expl´ a e ıcita ´ dada por e y = f (x) por exemplo. um procedimento ca e que ´ pouco preciso). esse ´ um problema de interpola¸˜o. a equa¸˜o de uma linha reta ´ dada por ca e (8. Alternativamente. co e a e ca 8. o • anal´ ıtica: ou seja. a e e Em geral. Uma maneira de melhorar a representa¸˜o ´ aumentar e ca e a densidade dos pontos nessas regi˜es (Figura ??(b)).por exemplo. ent˜o o que se deseja ´ uma curva que mostre a tendˆncia dos dados. Figura 8. por exemplo. Do ponto ıcie de vista matem´tico.2. a • armazenagem compacta. ca 8.1 Curve Fitting x Curve Fairing Ajuste de curvas (curve fitting) Frequentemente. pontos em uma curva ou superf´ real foram digitalizados. deseja-se obter representa¸˜es anal´ co ıticas para curvas definidas originalmente por conjuntos de pontos . atrav´s de formula¸˜es matem´ticas. s˜o pontos coletados ou a co a obtidos em medidas experimentais.2 8. Uma curva que ajusta (fit) os pontos daa e ca dos passa por todos esses pontos. e diz-se que a curva aproxima a (fair ) os dados. • facilidade de c´lculo (exato) de pontos intermedi´rios (em uma representa¸˜o por pontos pontos a a ca intermedi´rios precisam ser determinados por interpola¸˜o). e ca 8.1) 87 . Uma t´cnica usual de ajuste de curvas s˜o as splines c´ bicas. e • facilidade para desenhar as curvas. a curva obtida pode n˜o passar por nenhum dos pontos dados.2 Aproxima¸˜o de curvas (curve fairing) ca Se os pontos dados s˜o aproxima¸˜es para valores desconhecidos. uma e a u estrat´gia de aproxima¸˜o polinomial por partes. pode-se desejar gerar uma descri¸˜o matem´tica de uma curva no ca a espa¸o sem qualquer conhecimento pr´vio da forma da curva.2.

surgem problemas se no sistema de coordenadas escolhido for necess´ria uma inclina¸˜o infinita como condi¸˜o de contorno. Se a co o a se¸˜o cˆnica ´ definida em rela¸˜o a um sistema de coordenadas local e passa pela origem. na forma f (x.1 Limita¸˜es das representa¸˜es n˜o param´tricas co co a e • Ambas (expl´ ıcita e impl´ ıcita) s˜o dependentes do sistema de coordenadas. a hip´rbole e a elipse (um c´ co o a a e ırculo ´ um caso especial de uma elipse) e (Figura ??).y = mx + b (8. Essa limita¸˜o a ca n˜o existe no caso de representa¸˜es impl´ a co ıcitas. c.4) engloba uma variedade de curvas bi-dimensionais denominadas se¸˜es cˆnicas. diferentes tipos de se¸˜es cˆnicas s˜o produzidas. 88 . y) = 0 A equa¸˜o impl´ ca ıcita de segundo grau gen´rica: e ax2 + 2bxy + cy 2 + 2dx + 2ey + f = 0 (8. Figura 8. n˜o podem ser representadas explicitamente. ca a positivo ou negativo. e e f . e ou com valores m´ltiplos. cuja escolha afeta a a facilidade de uso.3) (8. ca Dependendo dos valores de a.3.2) Desta forma.3: Aproxima¸˜o de curvas por segmentos de reta conectados. Os trˆs tipos de co o e se¸˜es cˆnicas s˜o a par´bola. ou a inclina¸˜o infinita ser´ representada numericamente por um valor muito grande. Por exemplo. curvas fechadas. ent˜o f = 0. d. obt´m-se um valor de y para cada valor de x dado. Consequentemente. Ou o sistema de coordenadas ´ ca e e alterado. pois essa inclina¸˜o n˜o pode ser a ca ca ca a usada diretamente como uma condi¸˜o de contorno num´rica. b. como um c´ u ırculo. ca o e ca a 8.

co a co e Na forma param´trica.7) = x (t) y (t) (8. de maneira que a segunda a co e e forma de representa¸˜o param´trica representa um meio termo entre a forma expl´ ca e ıcita e a forma param´trica padr˜o. No caso da param´trica. a forma pae ´ a ram´trica ´ independente do sistema de coordenadas. as coordenadas cartesianas de um ponto na curva s˜o: a a x = x(t) y = y(t) O vetor que define a posi¸˜o de um ponto na curva ´ portanto dado por ca e P (t) = [ x(t) y(t) ] A derivada.8) 89 . dado x. • Determinar um ponto em uma curva. por conveniˆncia. elas s˜o facilmente manipuladas a a usando as transforma¸˜es geom´tricas afins (ver Cap´ co e ıtulo 5). uma representa¸˜o param´trica do co ca e segmento ´ dada por e Como P (t) ´ um vetor de posi¸˜o. ´ a ca e a Para uma curva 2D que usa t como parˆmetro. e • Ambas as formas de representa¸˜o tˆm vantagens e desvantagens em situa¸˜es espec´ ca e co ıficas! Exemplos: 1.• pontos em uma curva calculados a partir de incrementos uniformes em x ou y n˜o est˜o distribu´ a a ıdos uniformemente ao longo da curva. e a dx dt dy dt (8. uma co e t´cnica iterativa pode ser mais conveniente). Os extremos e o comprimento da curva s˜o e e a fixos pelo intervalo de varia¸˜o do parˆmetro. determinar o valor de y. ca a e Como as curvas s˜o independentes do sistema de coordenadas. respectivamente. cada um de seus componentes tem uma representa¸˜o param´trica e ca ca e x(t) e y(t) entre P 1 e P 2. ao contr´rio da segunda (a qual. a partir e e a a de x. o c´lculo das fun¸˜es trigonom´tricas ´ computacionalmente caro. (Para equa¸˜es param´tricas mais complexas. 2.4 (observe que a representa¸˜o e ca param´trica para uma curva n˜o ´ unica!) e a e´ Os pontos na circunferˆncia mostrados nas Figuras 8. e a seguir usar este valor para obter y.6) (8. i. a ca a Estas limita¸˜es s˜o superadas pelo uso de representa¸˜es param´tricas.4(c) foram obtidos com intervalos e constantes dos parˆmetros q e t. C´ ırculo no primeiro quadrante Uma compara¸˜o das representa¸˜es visuais obtidas a partir das formas param´trica e n˜o-param´trica ca co e a e para um c´ ırculo no primeiro quadrante ´ apresentada na Figura 8. tem e e a aparˆncia visual melhor que a mostrada em 8.5) (8. ou vetor tangente da curva ´ dada por e P (t) = [ x (t) y (t) ] A inclina¸˜o da curva ´ dada por ca e dx = dy Observa¸˜es co • A forma param´trica ´ adequada para representar curvas fechadas e com valores m´ltiplos. gerada pela representa¸˜o expl´ e ca ıcita). A forma e e u n˜o param´trica pode ser obtida eliminando-se o parˆmetro para obter uma unica equa¸˜o em x e a e a ´ ca y. cada coordenada de um ponto em uma curva ´ representada como uma fun¸˜o e e ca de um unico parˆmetro. Por outro lado. segmento de reta Para 2 vetores que especificam as posi¸˜es iniciais P1 e P2. A primeira representa¸˜o produz comprimentos a ca de arcos idˆnticos ao longo da circunferˆncia.4(b) e 8.. ´ trivial no caso da e representa¸˜o expl´ ca ıcita. • Uma vez que um ponto na curva ´ especificado por um unico valor de parˆmetro. frequentemente normalizado para . sendo que a posi¸˜o de um ponto na curva ´ fixada pelo valor do parˆmetro. ´ necess´rio obter o valor do parˆmetro t.e.4(a). o que afeta a qualidade e precis˜o de uma representa¸˜o gr´fica. entretanto.

i (t) ´ a i-´sima fun¸˜o base de Bernstein de ordem n. ca Figura 8.5 e ??). ou fun¸˜es base de B´zier s˜o co co e a n i Jn.4 Curvas de B´zier e T´cnicas de aproxima¸˜o de curvas s˜o muito usadas em ambientes de projeto (CAD) interativos.5: Representa¸˜o de uma curva de B´zier definida pelos pontos B0 . ´ um menos o n´mero de pontos do pol´ e u ıgono de defini¸˜o. A Figura 8. por e ca a serem mais intuitivas do que as t´cnicas de ajuste.11) Jn. uma curva de B´zier param´trica ´ definida como e e e n P (t) = i=0 Bi Jn. onde n. Um m´todo adequado para o design de curvas e e e superf´ ıcies de forma-livre em ambientes interativos foi desenvolvido por Pierre B´zier. e 8. Uma curva de e B´zier ´ determinada por um pol´ e e ıgono de defini¸˜o (Figuras 8.10) = n! i!(n − i)! (8.6 mostra as fun¸˜es de blending a co 90 .9) onde as fun¸˜es de blending.Figura 8.4: Pontos de uma circunferˆncia.i (t) 0≤t≤1 (8. e portanto e e ca ca do segmento de curva polinomial.5). o grau da fun¸˜o-base. ca e Matematicamente. Os v´rtices ca e do pol´ ıgono s˜o numerados de 0 a n (como na Figura 8.i (t) = com n i ti (1 − t)n−i (8. B2 e B3 . B1 .

Observe a simetria das fun¸˜es.i = 1 i=0 (8.13) e o primeiro ponto na curva coincide com o primeiro ponto do pol´ ıgono de controle. mas por v´rias curvas a ´ a que s˜o conectadas em seus pontos extremos.1 · · · Jn.14) A equa¸˜o para uma curva de B´zier pode ser expressa na forma matricial como ca e P (t) = T N G = F G (8.. i.e.e.e.15) onde F = Jn. verifica-se que Jn. Ao criar as jun¸˜es.0 Jn.0 (0) = 1 Jn.6 ilustram estes resultados.n e Gr = B0 B1 · · · Bn . o somat´rio das fun¸˜es base ´ e a o co e 1. e Em geral. 4) s˜o de particular interesse.11 para o a co co primeiro ponto na curva. ´ co Al´m disso. pode-se mostrar que para qualquer valor do parˆmetro t. P (0) = B0 Jn. uma forma complexa n˜o pode ser modelada por uma unica curva.. co a para v´rios valores de n.6: Fun¸˜es de blending para v´rios valores de n.i (0) = 0 i=0 i=0 (8. deseja controlar a co 91 . i.Figura 8. Verifica¸˜o an´loga ca a pode ser feita para o ultimo ponto. n Jn.9 a 8. i.12) Portanto.0 (0) = B0 (8. o projetista. a matriz [N] ´ sim´trica em rela¸˜o ` diagonal principal e o canto triangular inferior direito e e ca a cont´m apenas zeros. em t = 1. As fun¸˜es base da Figura 8. As matrizes espec´ ıficas para valores pequenos de n (n = 3. em geral.. Examinando-se as Equa¸˜es 8. Para qualquer a valor de n. em t = 0.

cont´m tamb´m a curva. a curva nunca e cruza uma linha reta arbitr´ria mais vezes que a sequˆncia de segmentos que conectam os pontos a e de controle (v. A importˆncia desta propriedade est´ principalmente no contexto de verifica¸˜o de interferˆncia. ca basicamente. Por exemplo. basta definir o pol´ ıgono e depois ajustar os pontos que forem necess´rios para aproximar melhor a forma desejada. a Isso torna a formula¸˜o adequada para o design interativo. Algumas representa¸˜es matem´ticas tˆm a tendˆncia de amplificar. e a c u e que agora queremos desenhar a mesma curva depois de uma rota¸˜o. e a segunda requer a sua aplica¸˜o apenas 4 vezes! E interessante ca ca observar que as curvas de B´zier n˜o s˜o invariantes sob transforma¸˜es projetivas. pela propriedade do fecho convexo. co • O primeiro e ultimo pontos da curva coincidem com o primeiro e ultimo pontos do pol´ ´ ´ ıgono de defini¸˜o. ca • A forma da curva geralmente acompanha a forma do pol´ ıgono de defini¸˜o (na verdade ´ uma vers˜o ca e a “suavizada” da forma do pol´ ıgono (v. mais verifica¸˜es precisam ser feitas nas curvas. Verficar e e se os 2 retˆngulos se interceptam ´ um teste trivial. para desenhar uma curva. Uma consequˆncia simples ca e deste fato ´ que um pol´ e ıgono plano sempre gera uma curva plana. a a ca e Suponha que desejamos saber se 2 curvas se interceptam. e continuidade ca de segunda ordem exige que as curvaturas sejam as mesmas.Mathematical Elements for Computer Graphics 92 . que a curva n˜o oscila em rela¸˜o a qualquer linha reta com mais frequˆncia que o a ca e pol´ ıgono de defini¸˜o. Fig. no maior pol´ ca ıgono convexo que pode ser obtido com os v´rtices do pol´ e ıgono de defini¸˜o (Figura 8. A primeira estrat´gia requer que ca e ´ a rota¸˜o seja aplicada 100 vezes. co a • O grau do polinˆmio que define uma curva ´ um menos o n´mero de pontos do pol´ o e u ıgono de defini¸˜o. em geral ´ desej´vel ter controle direto sobre os pontos extremos ca co a e a da curva.5). aplica uma transforma¸˜o afim ca ca ao pol´ ıgono de defini¸˜o. Podemos aplicar a rota¸˜o a ca ca cada um dos 100 pontos. calcular novamente os 100 pontos e tra¸´-los. respectivamente.3)). ca • A curva est´ contida no fecho convexo do pol´ a ıgono de defini¸˜o. e desenhar os pontos resultantes. Assim. pois na pr´tica ´ freq¨ente que a e a e a e u tais testes precisem ser feitos milhares de vezes para cada objeto. e depois aplica a ele uma transforma¸˜o afim. O retˆngulo cont´m a a e o pol´ ıgono de controle e. Assim. pois ´ essencial reposicionar. Transforma¸˜es afins est˜o dispon´ e co co a ıveis em qualquer sistema de CAD. ca continuidade de primeira ordem exige que as curvas sejam tangentes no ponto de jun¸˜o.. os objetos. e a a co Bibliografia Fonte: Caps. podemos fazer o e ıvel a um teste muito mais barato: envolver o pol´ ıgono de controle no menor retˆngulo que o cont´m a e e cujas arestas s˜o paralelas a um sistema de coordenadas (minmax boxes). Isto significa. etc. 3.a continuidade nos pontos de jun¸˜o.) • A curva ´ invariante sob transforma¸˜es afins. • Os vetores tangentes nos extremos da curva tˆm a mesma dire¸˜o que o primeiro e o ultimo sege ca ´ mentos do pol´ ıgono de defini¸˜o. e fica simples checar a n˜o-intersec¸˜o. A possibilidade ca a co de detectar n˜o-interferˆncia de forma r´pida ´ muito importante. ca Uma consequˆncia pr´tica: suponha que tra¸amos uma curva c´bica calculando 100 pontos sobre ela. cada uma representa o caminho a ser percorrido pelo bra¸o de um robˆ. Um projetista experiente consegue obter ca a forma desejada depois de 2 ou 3 intera¸˜es com um sistema computacional. i. Continuidade de ordem 0 significa que as 2 curvas se encontram. e b) primeiro. sempre suavizam os pontos de controle. ao inv´s ca co a e e e de suavizar. A formula¸˜o de B´zier apresenta v´rias propriedades interessantes: ca e a • As fun¸˜es-base s˜o reais. escalar. ou aplicar a rota¸˜o a cada um dos 4 pontos ca do pol´ ıgono de controle.e. Ao inv´s de tentar calcular uma poss´ intersec˜o. Fig. Esta propriedade garante e que os 2 procedimentos abaixo produzem os mesmos resultados: a) primeiro calcula um ponto na curva. Se a e a ca houver intersec¸˜o dos retˆngulos. quaisquer irregularidades de formato esbo¸adas pelos pontos de defini¸˜o.5 Rogers & Adams . Em situa¸˜es pr´ticas. e depois gera o ponto na curva. 4. • A curva exibe a propriedade da varia¸˜o decrescente (variation diminishing property). evitando colis˜es. e nosso objetivo ´ garantir que os caminhos n˜o se c o e a interceptam. como as curvas de B´zier. enquanto c ca que outras.

br/documentacao/apostilas/cg/downloads/modelagem.icmc.pdf 93 .usp.Cap´ ıtulo 9 Apostila Modelagem O texto sobre modelagem pode ser encontrado no seguinte endere¸o: c http://gbdi.

usp.html 94 .icmc.br/~cg/ap10. A vers˜o anterior pode a ser encontrada em: http://gbdi.Cap´ ıtulo 10 Rendering Esta apostila est´ sob revis˜o e ser´ adicionada nesta vers˜o assim que poss´ a a a a ıvel.

Cap´ ıtulo 11 Cores e Sistemas de Cores 11. tipicamente.5 × 10 hertz). ou que a luz percebida possui uma freq¨ˆncia dominante (ou um e ue comprimento de onda dominante) na freq¨ˆncia baixa do espectro.1 Percep¸˜o de Cor ca A cor ´ o atributo da percep¸˜o visual que pode ser descrito atrav´s dos nomes usados para identificar as e ca e cores. p´rpura [Hun78]. ou da combina¸˜o delas.1: Espectro eletromagn´tico [Gro94]. etc. conseq¨entemente. As a a e caracter´ ısticas da luz s˜o descritas atrav´s de propriedades como o matiz e as sensa¸˜es de brilho e a e co satura¸˜o. o brilho corresponde ao grau de luminˆncia ca e a 95 . ou espectros ca luminosos. como mostrado na Figura 11. A utiliza¸˜o simultˆnea de cores localizadas em extremos opostos do espectro fazem ca a com que a lente altere o seu formato constantemente. laranja. Os valores de freq¨ˆncia intermedi´rios correspondem a cores que a ue a passam pelo alaranjado e amarelo e por todas as outras cores. que possui matiz. em a e nanˆmetros (nm). Parte dessa luz ´ absorvida e a outra e parte ´ refletida. requerem a u maior curvatura da lente do olho para serem focalizados. Figura 11.1. microondas. que ´ desprovida de matiz. A vis˜o estereosc´pica c a o da cor ´ um efeito relacionado ao processo de focaliza¸˜o da imagem na retina. u ca pode-se diferenciar a cor crom´tica. A freq¨ˆncia dominante tamb´m ´ ue ue e e chamada de matiz ou.3 × 1014 hertz) e a mais a 14 alta ` cor violeta (7. o Os comprimentos de onda maiores possuem distˆncias focais maiores e. preto. As diferentes cores. a cor a a c a vermelha parece estar mais pr´xima e a cor azul parece estar mais distante. o sol ou uma lˆmpada) emite em todas as freq¨ˆncias do a ue espectro vis´ ıvel. (a cor vermelha possui a maior distˆncia focal a e a azul. A partir dessa defini¸˜o. Quando h´ predominˆncia das freq¨ˆncias e a a ue baixas. que podem ser percebidos pelo sistema visual humano correspondem a uma pequena faixa de freq¨ˆncias do espectro eletromagn´tico. e A freq¨ˆncia mais baixa do espectro vis´ ue ıvel corresponde ` cor vermelha (4. que inclui as ondas de r´dio. As cores e s˜o ondas eletromagn´ticas descritas pelo seu comprimento de onda (l) e especificadas.. simplesmente. por exemplo. at´ chegar nos verdes e azuis. de cor da luz. diz-se que o objeto ´ vermelho. como branco. produzindo a luz branca que incide sobre um objeto. determinando a cor resultante do objeto. os raios infravermelhos ue e a e os raios X. O matiz ´ usado para dar um nome a uma cor. amarelo. causando cansa¸o no olho. que faz com que cores e ca puras localizadas ` mesma distˆncia do olho pare¸am estar a distˆncias diferentes. cinza. por exemplo. a menor). azul. da acrom´tica. o Uma fonte de luz (como. O matiz ´ o atributo de uma sensa¸˜o visual que faz com que uma ´rea pare¸a ser similar a uma e ca a c ou 2 das cores percebidas vermelha. amarela.

Quanto maior o dom´ ınio de um comprimento de onda. e a satura¸˜o ´ a pureza aparente ca a a ca ca e de um matiz. foi baseado principalmente em u ca a Hearn [Hea94]. As cores e ca preta. Ele ca a atinge cerca de 8% dos homens. Apesar dessa limita¸˜o. mas que a o utilizam os sistemas em propor¸˜es diferentes das pessoas normais e das pessoas com o mesmo defeito. a luminˆncia e cromaticidade do fundo e da luz ambiente. como o cubo definido pelas componentes do modelo ca RGB. a O estudo da utiliza¸˜o de 3 fontes de luz espectral para a gera¸˜o de cores ´ chamado de colorimetria. a ca os espa¸os perceptuais de cores fornecem ferramentas adequadas para a solu¸˜o de problemas como a c ca compress˜o de imagens (para decidir o n´ a ıvel de codifica¸˜o da informa¸˜o de cor) e pseudo-colora¸˜o1 ca ca ca (para mapear as cores da imagem em um conjunto com espa¸amento perceptual m´ximo). RGB e XYZ). Os monocromatas percebem apenas gradua¸˜es de claro e de escuro. c a Os sistemas de cores podem ser aditivos ou subtrativos. Os matizes intermedi´rios (amarelo. As cores a a podem ser produzidas a partir de uma combina¸˜o das prim´rias. da composi¸˜o de 2 comca a a ca bina¸˜es. que descreve alguns sistemas de cores prim´rias. Nos modelos aditivos (por exemplo. N˜o existe um conjunto finito de cores prim´rias que proa a duza todas as cores vis´ ıveis. Os tricomatas s˜o daltˆnicos que possuem os 3 sistemas de pigmentos.2 a a ilustra a demonstra¸˜o do funcionamento desses modelos atrav´s da sobreposi¸˜o de c´ ca e ca ırculos coloridos. Algumas pessoas possuem uma anomalia. pois sua estimula¸˜o visual se baseia em um unico co ca ´ sistema crom´tico. Pode-se pensar que o branco ´ a mistura das intensidades m´ximas das 3 cores prim´rias aditivas e a a (vermelha. o RGB. mas sabe-se que uma grande parte delas pode ser produzida a partir de 3 prim´rias. e ca ca e tem como um de seus objetivos determinar espa¸os de cor perceptualmente uniformes. fazendo com que as pessoas se tornem menos sens´ ıveis. Alternativamente. branca e cinza possuem satura¸˜o uniforme em todos os comprimentos de onda e.5% das mulheres. por exemplo ` cor amarela do que ` cor azul. a cor resultante corresponde ` luz que ´ refletida. A Figura 11. a 1 A colora¸˜o “falsa” (“pseudocoloring”) ocorre quando as cores “verdadeiras” de uma imagem s˜o mapeadas em outro ca a conjunto de cores. Cap´ ıtulo 15. a a s˜o utilizados sistemas diferentes para ajudar a descrever as diferentes caracter´ a ısticas da cor que s˜o a percebidas pelo ser humano. Um espa¸o de cores c c (ou sistema de cores) perceptualmente uniforme ´ um no qual distˆncias perceptuais iguais separam todas e a as cores. ou quando uma imagem adquirida em tons de cinza ´ colorida. Por isso. e 96 . a quantidade de branco numa cor ´ indicada pela diferen¸a a e c entre o preto e a intensidade m´ ınima das 3 cores prim´rias aditivas. Os co dicromatas percebem as cores defeituosamente porque combinam apenas 2 sistemas. s˜o ca a diferenciadas apenas pelo brilho. o CMY). ou o cone definido pelo modelo HSV. As cores prim´rias s˜o as 2 ou 3 cores que um sistema utiliza para produzir outras cores. Por exemplo. as intensidades das cores prim´rias s˜o adicionadas para produzir outras cores. denominada daltonismo. turquesa e magenta) s˜o obtidos atrav´s a a e da combina¸˜o das intensidades m´ximas de 2 cores. Existem v´rios sistemas de cores. A defini¸˜o de um espa¸o de cores uniforme ´ feita atrav´s de medi¸˜es emp´ ca c e e co ıricas obtidas sob condi¸˜es experimentais rigidamente controladas . maior ´ a sua satura¸˜o. por isso. As propriedades de satura¸˜o e de matiz de uma cor s˜o referenciadas ca a como cromaticidade. a escala de cinzas do espa¸o deve transmitir uma transi¸˜o suave entre o preto c ca e o branco.2 Sistemas de Cores Prim´rias a O conte´do desta se¸˜o.de uma cor em rela¸˜o ` luminˆncia de outra ou em rela¸˜o ao fundo. da mesma forma. Esse defeito pode se manifestar em 1.3 a e ilustra a demonstra¸˜o do funcionamento desses modelos atrav´s da sobreposi¸˜o de c´ ca e ca ırculos coloridos. que impede a distin¸˜o de uma ou ca mais cores. 2 ou nos 3 tipos de receptores. um espa¸o de cores (color space) pode ser definido como c uma representa¸˜o visual de um modelo de cores. O universo de cores que podem ser reproduzidas por um sistema ´ chamado de espa¸o de cores co e c (color space ou color gamut). Um sistema de cores ´ um m´todo que explica as propriedades ou o comportamento das cores num e e contexto particular. A Figura 11. E. ou ent˜o. Um outro aspecto que tamb´m influencia na percep¸˜o de cores ´ o amarelamento das a e ca e lentes do olho que ocorre com o passar dos anos. e ca A quantidade de preto numa cor ´ indicada pela diferen¸a entre o branco e a intensidade m´xima das 3 e c a cores prim´rias aditivas. o espa¸amento c entre as amostras. N˜o existe um sistema que explique todos os aspectos relacionados ` cor. as cores s˜o geradas subtraindo-se o comprimento da a onda dominante da luz branca. o HSV e o HLS. por isso. e apenas 0. verde e azul). ca a Nos modelos subtrativos (por exemplo. Pode-se pensar que o preto ´ a combina¸˜o das 3 cores subtrativas (turquesa.as condi¸˜es do ambiente e outros parˆmetros co co a importantes devem ser mantidos constantes. magenta e amarela). sendo que ser˜o apresentados apenas a a alguns dos principais: o XYZ. O daltonismo se deve a um defeito na constitui¸˜o dos cones e est´ vinculada ao sexo. como o tamanho das amostras de cores. a a 11.

preto e a e ca cinza `s cores saturadas.3: Ilustra¸˜o da mistura de cores subtrativas [For94]. Uma composi¸˜o monocrom´tica ´ formada inteiramente de tints. 97 . respectivamente. ca a e shades e tones da mesma cor.Y + z. a adi¸˜o de cinza reduz e ca o brilho de uma cor e cria um tone. `s cores obtidas atrav´s da adi¸˜o de branco.html.cmu.contrib_andrew. shades e tones.edu:8001/usr/dw4e/color/tints.2: Ilustra¸˜o da mistura de cores aditivas [For94]. A adi¸˜o de preto escurece uma cor e cria um shade (por exemplo. 11. causando uma altera¸˜o no efeito da cor.42 ilustra de tints. Nesse sistema.1) de http://www.Figura 11. shades e tones que correspondem.X + y. adicionando ca preto ao vermelho para obter um castanho-avermelhado (maroon). Al´m disso.Z 2 reproduzida (11. A Figura 11.4: Ilustra¸˜o da obten¸˜o de tints. existem ainda os tints. shades a ca e tones obtidos a partir da cor vermelha. Y e Z. as cores Cl podem ser expressas pela seguinte equa¸˜o: ca Cl = x. ca Figura 11.3 Modelo XYZ O sistema XY Z de cores prim´rias da CIE (Comiss˜o Internacional de Ilumina¸˜o) ´ um sistema aditivo a a ca e que descreve as cores atrav´s de 3 cores prim´rias virtuais X. ca ca A adi¸˜o de branco clareia uma cor e cria um tint (por exemplo. adicionando branco ao vermelho ca para obter a cor pink). Figura 11. ca As cores puras e saturadas n˜o representam toda a classe de cores poss´ a ıveis. Esse sistema foi criado devido ` e a a inexistˆncia de um conjunto finito de cores prim´rias que produza todas as cores vis´ e a ıveis poss´ ıveis.

Atrav´s desse a a e diagrama. A normaliza¸˜o dessa quantidade em rela¸˜o ` luminˆncia (X + Y + Z) possibilita a ca ca a a caracteriza¸˜o de qualquer cor. ´ poss´ e ıvel determinar e comparar os espa¸os de cores dos diferentes conjuntos de prim´rias.3) onde z = 1 − x − y.6a. a ca Devido ` normaliza¸˜o. As cores desse sistema podem ser expressas como combina¸˜es das ca co quantidades normalizadas abaixo: Y Z X y= z= (11.6b).6a podem ser obtidas atrav´s da mistura de quantidades apropriadas das cores correspondentes a esses pontos. s˜o chamadas de coordenadas de cromaticidade. somadas. A e escala de cores para 3 pontos (por exemplo. ca a A descri¸˜o completa de uma cor ´ dada pelas coordenadas de cromaticidade e pelo valor de um dos 3 ca e est´ ımulos originais. ca Os espa¸os de cor s˜o representados no diagrama. Todas as cores ao longo da linha que une os pontos C1 e C2 na Figura 11. as e a a combina¸˜es de valores negativos e outros problemas relacionados ` sele¸˜o de um conjunto de prim´rias co a ca a reais s˜o eliminados.5: Diagrama de cromaticidade do CIE [Hea94]. As coordenadas de cromaticidade x e y permitem representar todas as cores num a gr´fico bidimensional. Os pontos que representam as cores puras no espectro eletromagn´tico s˜o rotulados de acordo com os e a seus comprimentos de onda e est˜o localizados ao longo da curva que vai da extremidade correspondente a a ` cor vermelha at´ a extremidade correspondente ` cor violeta. e 98 . Por isso. misturando quantidades apropriadas de 2 cores C1 e C2 (Figura 11. ilustrado na Figura 11. Por exemplo. que cont´m a informa¸˜o de luminˆncia. e n˜o faz parte do espectro. As cores complementares s˜o identificadas por 2 pontos localizados em lados opostos do ponto C e conectados por a uma linha reta. e o ponto C corresponde ` posi¸˜o da luz branca.2) X +Y +Z X +Y +Z X +Y +Z com x + y + z = 1.5. Y e Z especificam as quantidades das prim´rias padr˜es necess´rias para descrever uma a o a cor espectral. c a identificar as cores complementares (2 cores que. pois nenhum triˆngulo contido no diagrama abrange todas as cores poss´ a ıveis. A linha reta que une os pontos espectrais e a vermelho e violeta ´ chamada linha p´rpura. produzem a cor branca) e determinar o comprimento de onda dominante e a satura¸˜o de uma cor. O sistema XYZ ´ formado por cores imagin´rias que s˜o definidas matematicamente. a ca a a as cores com luminˆncias diferentes e cromaticidades iguais s˜o mapeadas no mesmo ponto. normalmente do Y . o diagrama de cromaticidade n˜o representa os valores de luminˆncia. c a Observando o diagrama ´ poss´ perceber que nenhum conjunto formado por 3 prim´rias pode gerar e ıvel a todas as cores. qualquer cor pode ser definida apenas pelas quantidades de x e y que. Nesse sistema. O tra¸ado dos valores normalizados de x e y para as cores no espectro vis´ a c ıvel resulta na curva ilustrada na Figura 11. Os pontos internos correspondem e u a a todas as combina¸˜es poss´ co ıveis de cores vis´ ıveis. por dependerem apenas do matiz e da satura¸˜o. C3 . Figura 11. Essa descri¸˜o possibilita e ca a ca a obten¸˜o das quantidades de X e Z com as equa¸˜es abaixo: ca co x= X= x Y y Z= z Y y (11. obt´m-se a luz branca.em que X. C4 e C5 na Figura 11. atrav´s de linhas retas c a e ou de pol´ ıgonos.6a) ´ representada por um triˆngulo e a cujos v´rtices s˜o definidos pelas cores correspondentes `s 3 posi¸˜es e inclui cores contidas no interior e e a a co nas margens fronteiri¸as desse triˆngulo. Assim.

4 Modelo RGB (Red. 1. ca a a 99 . que vai da origem (ponto correspondente a cor preta) at´ o v´rtice e e que corresponde ` cor branca. Tra¸a-se a u e c uma linha a partir do ponto C (Figura 11. Os tons de cinza s˜o representados ao a longo da diagonal principal do cubo. de C1 na figura 11. Cada tom ao longo dessa diagonal ´ formado por contribui¸˜es iguais de a e co cada prim´ria. no ponto Csp . o ponto C2 ´ referenciado como sendo e uma cor n˜o espectral e o seu comprimento de onda dominante ´ obtido atrav´s do prolongamento da a e e reta at´ que ela intercepte a curva espectral. G e B variando de 0 a 1. corresponde ent˜o. A cor C1 ´ cerca de 25% pura porque est´ situada a aproximadamente 4 da a e a distˆncia total entre C e Cs . como ilustrado na Figura 11. G. Blue) O sistema RGB de cores prim´rias tamb´m ´ aditivo e est´ baseado na teoria dos 3 est´ a e e a ımulos (Tristimulus Color Theory) proposta por Young-Helmholtz e discutida na se¸˜o 2. G e B. a 11.3. e s˜o geradas atrav´s da subtra¸˜o do comprimento da onda dominante (como. um tom de cinza m´dio entre o branco e o preto ´ representado por (0. 530 nm (Verde-Green) e 450 nm (Azul-Blue). O comprimento de onda dominante da cor C1 . ` combina¸˜o da luz branca a a ca com a cor espectral Cs .Figura 11. ca A determina¸˜o do comprimento de onda dominante de uma cor pode ser feita interpretando-se ca a escala de cores entre 2 prim´rias. por isso. o v´rtice de coordenadas (1.5). Esse sistema pode ser representado graficamente atrav´s do cubo unit´rio definido sobre os eixos R.6c) passando pelo ponto C2 e intersectando a linha p´rpura u no ponto Cp . O comprimento de onda e dominante das cores que est˜o entre o ponto C e a linha p´rpura ´ determinado de outra forma.6c. 0. com os valores R. Logo. Por isso. algumas cores n˜o podem ser a e a reproduzidas pela sobreposi¸˜o das 3 prim´rias. n˜o pode ser reproduzido com precis˜o (conforme discutido em Wolf [Wol93]).R + g.4) A resposta do olho aos est´ ımulos espectrais n˜o ´ linear e.6c) ´ determinada atrav´s da distˆncia relativa e e a do ponto C1 . representada na a Figura 11. que e ca possuem picos de sensibilidade aproximada nos seguintes comprimentos de onda: 630 nm (VermelhoRed ). 1) representa a cor branca. Green. por exemplo.5. A cor C1 . Cada ponto no interior do cubo corresponde a uma cor que pode ser representada a pela tripla (R. a e ca o Csp ) da luz branca. um fenˆmeno natural colorido como. Como esse ponto n˜o pertence ao espectro vis´ a ıvel. pois Cs ´ o comprimento de onda dominante de C1 . Segundo essa teoria. ´ determinado tra¸ando-se uma linha reta que parte do ponto C passando pelo ponto C1 e e c intersectando a curva espectral no ponto Cs .B (11.7.5. os v´rtices e e que est˜o sobre os eixos representam as cores prim´rias e os demais v´rtices representam o complemento a a e de cada cor prim´ria.6: Representa¸˜o de escalas de cor no diagrama de cromaticidade do CIE [Hea94]. B). 0. onde dc1 representa a distˆncia entre C e C1 e dcs representa a e ca dcs 1 distˆncia entre C e Cs . por exemplo. As cores n˜o espectrais est˜o entre p´rpura e a a u e magenta. A pureza de uma cor (por exemplo. o olho ca humano percebe a cor atrav´s da estimula¸˜o dos 3 pigmentos visuais presentes nos cones da retina.G + b. a e e As cores Cl desse sistema podem ser expressas na forma: Cl = r. Pode-se calcular a pureza a e a do ponto C1 atrav´s da rela¸˜o dc1 . de a o forma¸˜o de rochas. e a A origem representa a cor preta. que corresponde ` linha reta que vai do ponto C at´ o ponto Cs . Isso significa que algumas cores existentes na natureza ca a n˜o podem ser mostradas nesse sistema.

por isso. como mostra a figura 9. (lightness): Segundo Foley [Fol96]. a 1 (na base).Figura 11. e Figura 11. A representa¸˜o gr´fica a ca ca a tridimensional do sistema HSV ´ um cone de 6 lados derivado do cubo RGB. A luminˆncia varia de 0 (no pico do a cone). Saturation) O sistema HLS3 tamb´m ´ baseado em parˆmetros mais intuitivos para a descri¸˜o de cores. Lightness. que representa a cor preta. Saturation [Rog93a].25. Saturation. mostrado na figura 11.8. que passa pelo centro do a e cone. a a 11. e e a ca A representa¸˜o gr´fica tridimensional desse sistema ´ um cone duplo. Os parˆmetros de cor utilizados nesse sistema s˜o o matiz (hue). 4 Luminosidade 3 Outros 100 . Os v´rios matizes est˜o representados na parte superior do cone. Os 3 ca a e parˆmetros de cor utilizados s˜o o matiz (hue). a a ca autores denominam esse sistema como Hue. 11. a luminosidade (lightness 4 ) e a satura¸˜o (saturation). onde as intensidades das cores s˜o m´ximas. Um determinado matiz possui 1 a 4 de pureza em S = 0. a satura¸˜o ´ medida a a a ca e ao longo do eixo horizontal e a luminˆncia ´ medida ao longo do eixo vertical. ´ mais adequado para ser usado na especifica¸˜o de cores em n´ a e ca ıvel de interface com o usu´rio. A satura¸˜o varia de 0 a 1 e ´ representada como sendo a raz˜o entre e e ca e a a pureza de um determinado matiz e a sua pureza m´xima (S = 1). tints e tones diferentes. a satura¸˜o (saturation) e a lua a ca minˆncia (value). esse termo est´ relacionado ` no¸˜o acrom´tica da intensidade pera a ca a cebida de um objeto que reflete luz. Luminance. Quando S = 0 tem-se a escala de cinzas.8: Cone hexagonal do HSV [Fol96]. A cor ´ especificada atrav´s de uma cor espectral e das quantidades de branco e a e e preto que ser˜o adicionadas para a obten¸˜o de shades.7: Cubo do RGB [Fol96]. que corresponde `s arestas ao redor do eixo vertical. Brilho (brightness) ´ usado no lugar de luminosidade para denotar a intensidade e percebida de um objeto que emite luz. Value) O sistema HSV utiliza descri¸˜es de cor que s˜o mais intuitivas do que combina¸˜es de um conjunto co a co de cores prim´rias e. e o a a ˆngulo entre os v´rtices ´ de 60◦ . varia de 0◦ (vermelho) a 360◦ . O matiz.5 Modelo HSV (Hue.6 Modelo HLS (Hue.

As cores ca intermedi´rias s˜o obtidas atrav´s da diminui¸˜o da satura¸˜o. O ˆngulo em rela¸˜o ao eixo vertical varia de 0◦ (matiz azul) a 360◦ em intervalos de 60◦ e especifica a ca um matiz. A satura¸˜o varia de 0 a 1. tem-se a escala de cinzas. tints. As cores s˜o especificadas atrav´s de um ˆngulo. Quanto menor o valor da satura¸˜o menor ´ e ca e ca e a pureza do matiz. e os matizes puros s˜o encontrados no plano ca a onde a luminosidade ´ igual a 0. e tones de cada cor s˜o obtidos a e a a atrav´s do ajuste do brilho ou luminosidade e da satura¸˜o. c˜ e Os sistemas HLS e HSV permitem que se pense em termos de cores mais “claras” e mais “escuras”.Figura 11.9: Cone duplo do HLS [Fol96]. e os diversos shades. a a e ca ca 101 . e quando a satura¸ao ´ igual a 0. As cores mais claras s˜o obtidas atrav´s do e ca a e aumento do brilho ou da luminosidade e as cores mais escuras pela diminui¸˜o dos mesmos.5 e a satura¸˜o ´ igual a 1. O eixo vertical corresponde ` luminosidade e varia de 0 (preto) a 1 (branco) e ´ onde se a e encontra a escala de cinzas.

usualmente associa-se a tonalidade de cinza mais escura. Na Figura 12. a ´ e com a utiliza¸˜o de imagens e gr´ficos em uma grande variedade de aplica¸˜es. que u a representam a intensidade na escala de tons de cinza de um ponto da imagem. ca a apresenta uma imagem de 512x512 pixels. Usualmente estes n´meros s˜o inteiros positivos.3 mostra-se um esquema de um pixel p com profundidade 8. t] (12. Ao valor A(x. ao maior valor permitido na escala. a ıvel Imagens s˜o geralmente definidas como uma grande cole¸˜o de dados.2 Considera¸˜es Sobre Imagens co Uma imagem cont´ ınua. o preto ´ associado ao valor zero. s]. Quando utiliza-se escalas de tons de cinza. reconhecer elementos que comp˜em a imagem. y) definida ca em uma certa regi˜o do plano. e o branco ao valor 255. u e A profundidade da imagem est´ associada ao n´mero de planos de mem´ria em que uma imagem ´ a u o e mapeada. e Os objetivos deste processamento s˜o: a 1. t]. y) no ponto (x.1. e As dimens˜es do conjunto de valores que especifica a imagem s˜o chamadas de largura e altura da o a imagem. aliado ao fato de que ca a co a tecnologia de constru¸˜o de computadores tamb´m tem se aprimorado. ao n´ zero da escala de ıvel cinza. onde cada valor ´ um n´mero que e e e u descreve os atributos de um pixel na imagem. para v´rios tamanhos de grade. y) d´-se o nome de N´ de cinza. etc. Uma imagem. r] × [0. possibilitando a utiliza¸˜o de ca e ca sistemas mais eficientes e mais baratos.1) Assim a imagem ´ definida num retˆngulo [0. A Figura ??. e o n´mero de bits associado com cada pixel da matriz ´ chamado de profundidade da imagem. 12. permitir ca o medir elementos contidos na imagem. agricultura. medicina. classific´-los e compar´-los com algum modelo colocado. Ou seja. r]×[0. o preto. A Figura 12. tais como: reconhecimento de padr˜es (ind´stria). em sistemas que comportam este procedimento.Cap´ ıtulo 12 Processamento Digital de Imagens 12. Imagem Digital pode ser definida como uma fun¸˜o bidimensional A(x. o u meteorologia. pesquisas espaciais. sendo que cada bit da palavra que armazena o valor do pixel reside em um plano da imagem (“frame buffer”). ´ representada atrav´s de um conjunto de valores. a A : [0. e o mais claro. se cada pixel ´ representado e em um sistema de 8-bits. ilustra o processo de quantiza¸˜o. a a 102 . ca ca • Quantiza¸˜o: digitaliza¸˜o em termos de amplitude (no de n´ ca ca ıveis de cinza).1 Introdu¸˜o ca A ´rea de Processamento Digital de Imagens tem crescido consideravelmente nas ultimas duas d´cadas. que est˜o frequentemente a ca a dispostos em forma de uma matriz ou alguma outra estrutura de dados discreta. a Matematicamente. quantizada de v´rias formas. Atrav´s de Processamento Digital de Imagens. ´ digitalizada atrav´s de dois processos: e e • Amostragem (Sampling): digitaliza¸˜o em termos espaciais (tamanho da grade de digitaliza¸˜o). ou seja. Extrair informa¸˜o da imagem. e os valores tomados est˜o contidos no intervalo e a a [0. pode-se analisar e modificar imagens por computador. Muitas ´reas vˆm utilizando Sistemas de Processamento Digital a e de Imagens. s] → [0. ou a cor associada ao ponto pela “look-up table”. o branco.

o valor do pixel n˜o indica a cor em que ele ´ mapeado. a Um dispositivo que facilita grandemente essa manipula¸˜o com cores. para a co monitores coloridos. de se reduzir o tamanho da grade de amostragem. verde e azul (do inglˆs. a Em muitos sistemas gr´ficos ´ desej´vel poder-se alterar rapidamente a colora¸˜o da imagem sem a e a ca alterar a sua forma. Assim. em preto e branco).RGB). A tabela “look-up” possui tantas entradas quanto o n´mero de valores armazenados pelo pixel. 8 e a e bits para cada cor prim´ria aditiva (vermelha. e 12. 2. sem comprometer a eficiˆncia ca e da opera¸˜o de visualiza¸˜o de imagens s˜o as tabelas de Busca (“Look-up Table” . Logo. a LUT ter´ u a 256 (28 ) entradas.Figura 12. poder´ produzir no m´ximo quatro cores (22 ). corrigindo alguma imperfei¸˜o c ca gerada na imagem durante o processo de aquisi¸˜o). Se o pixel a utiliza dois bits. sendo que todas entram em partes iguais. Este processo pode ser entendido como de “redu¸˜o de dados”. ıvel 12. E os n´ e ıveis de cinza tamb´m s˜o uma composi¸˜o das trˆs e a ca e cores. se um pixel possui profundidade 1 (um bit por pixel). sugere-se que trˆs vezes a quantidade de bits necess´ria ´ um bom valor. enquanto a sa´ ´ uma descri¸˜o n˜o a e ıda e ca a pict´rica da imagem. ou seja. A Figura 12. RGB). de forma que a informa¸˜o seja mais facilmente ca ca discern´ por um analista humano.1: Efeitos sobre uma imagem. cada cor ´ uma composi¸˜o de trˆs cores prim´rias: e ca e a vermelho. ou mesmo a partir de uma imagem monocrom´tica criar uma imagem em pseudo-cor. se o pixel tem profundidade 8. real¸ando bordas. sem na realidade e alterar os pr´prios dados que a definem. Transformar a imagem (aumentando contraste. verde e azul . em que se diminui o ca 103 . Usualmente 6 bits s˜o a a a suficientes para permitir a visualiza¸˜o da imagem de forma que n˜o se perceba descontinuidade entre ca a as tonalidades de cinza. mas 8 ou mais bits podem ser necess´rios em algumas aplica¸˜es. e e o pixel poder´ ser pintado apenas com duas cores (21 ) (por exemplo. ou seja. e assim por diante.4 Tipos de Manipula¸˜o de Imagens ca Na an´lise de imagens. Assim permite-se alterar a aparˆncia visual de uma imagem. que os ca ca a controladores de monitores por varredura vem utilizando. mostrar todos os pixels abaixo de um certo valor o com o preto. mas sim a entrada a e na LUT onde a cor est´ armazenada. Assim. o n´mero de bits utilizados para representar o u valor do pixel ´ dividido entre as trˆs cores. Assim.4 ilustra o procedimento de mapeamento de um pixel a atrav´s da LUT. produzindo 24 bits por pixel. Por exemplo.3 Tabelas “Look-up” Em sistemas que permitem trabalhar com cores.LUT). a entrada do processamento ´ uma imagem.

(f) 8 n´ ıveis. ca ca • Realce .5 Transforma¸˜es Radiom´tricas co e Pode-se ter basicamente dois tipos de transforma¸˜es ou opera¸˜es radiom´tricas: co co e • Restaura¸˜o .3: Representa¸˜o de um pixel P com 8-bits (8 planos) de profundidade. quantizada em (a) 256 n´ ıveis. ca o volume dos dados. na maioria. ca a Embora muitas da t´cnicas de restaura¸˜o e realce sejam as mesmas (por exemplo. heur´ e a ısticas. sem modifica¸˜o de sua geometria. Por vezes estes dois objetivos produzem resultados coincidentes. mantendo-se o m´ximo co e e a poss´ os valores dos n´ ıvel ıveis de cinza. por exemplo. restaur´-la. os e ca objetivos e enfoques divergem num e noutro caso. a As transforma¸˜es radiom´tricas podem tamb´m ser classificadas quanto ao seu grau de abrangˆncia. Duas grandes a classes de transforma¸˜es s˜o: co a • Transforma¸˜es Radiom´tricas: onde os valores de n´ co e ıveis de cinza dos pontos da imagem s˜o a alterados. e u ca ca Na manipula¸˜o de imagens em geral.Figura 12. tanto as entradas quanto as sa´ ca ıdas s˜o imagens. (d) 32 n´ ıveis.que visa corrigir alguma distor¸˜o sofrida pela imagem. No realce esta preocupa¸˜o n˜o existe. ou o ca ca enfatizar certas caracter´ ısticas da imagem (“realce”). 12. (b) 128 n´ ıveis.que procura enfatizar alguma caracter´ ıstica de interesse da imagem. (c) 64 n´ ıveis. mas mant´m-se o conte´do da informa¸˜o relevante para uma dada aplica¸˜o. ´ E o caso. quando uma imagem sofreu uma distor¸˜o que diminuiu seu contraste. introduzidas geralmente pelo pr´prio sistema de aquisi¸˜o de imagens (“restaura¸˜o”). uma ca transforma¸˜o que realce as bordas dos objetos das imagens pode. (e) 16 n´ ıveis. (g) 4 n´ ıveis e (h) 2 n´ ıveis de cinza. n˜o havendo compromisso com a imagem original. As transforma¸˜es radiom´tricas e geom´tricas podem ser feitas com a finalidade de eliminar distor¸˜es co e e co da imagem. pois no realce as ca e ca a t´cnicas utilizadas s˜o.2: Uma imagem de 512 x 512 pixels. O procedimento geral da restaura¸˜o ´ a modelagem ca e do processo de distor¸˜o para tentar invertˆ-lo. Figura 12. de fato. ca • Transforma¸˜es Geom´tricas: onde a geometria da imagem ´ alterada. co e e e em: 104 . filtragem).

cujo n´ mais baixo ´ min1 e o mais alto ´ max1 . pode-se for¸ar que ela seja c mapeada usando todos os n´ ıveis de cinza. ou mesmo aumentar o contraste em apenas uma regi˜o dos n´ a ıveis de intensidade da imagem [Gonzalez and Wintz. ou uma faixa deles (“janela”). Se todos os e ca pontos da imagem s˜o de um mesmo objeto. e atrav´s ıvel ıvel e e e de manipula¸˜o no histograma deseja-se transform´-lo para o valor p com n´ N . para um sistema de pixels de 8 bits. os valores associados v˜o de 0 a 255. resultando uma imagem com pouco contraste. c˜ 105 . Ou seja. Atrav´s de Histogramas de Intensidades pode-se obter uma maneira simples para se manipular o e contraste de imagens.5 apresenta uma imagem e seu histograma de intensidades associado. Ele cont´m uma informa¸˜o global sobre os “objetos” da imagem. uma opera¸˜o pontual que toma uma imagem A(x. e co Assim. 12. pode-se adicionar algum valor a todos os pontos da imagem.3) (12. y) = f [A(x. y) e produz outra imagem B(x. a fun¸˜o de transforma¸˜o ser´: e a ca ca a (N − min1 )(max2 − min2 ) + min2 (max1 − min1 ) N = f (N ) (12. Por exemplo caso deseja-se tornar uma imagem mais brilhante. Suponha-se uma imagem A(x. 2. Atrav´s de opera¸˜es pontuais ca ca e e co pode-se tamb´m corrigir sombras que porventura tenham surgido junto com o processo de aquisi¸˜o da e ca imagem. y)] Histogramas de Intensidades O Histograma de Intensidades indica para cada n´ ıvel de cinza da imagem a quantidade de pontos mapeados com tal n´ ıvel. se ao construir o histograma de uma imagem vˆ-se que n˜o se est´ utilizando toda a e a a abrangˆncia dos n´ e ıveis de cinza. define-se uma fun¸˜o cujo efeito reverta a opera¸˜o de sombreamento indesej´vel. Por exemplo. sendo que o ponto pertence ao objeto. em um sistema de 8-bits por pixel. cuja fun¸˜o ´ tornar a imagem mais “clara”. Opera¸˜es Locais: onde o novo n´ de cinza de um ponto depende n˜o s´ de seu antigo n´ co ıvel a o ıvel de cinza.6 ilustra a transforma¸ao do histograma H1 (A) da imagem A para o histograma H2 (A).4: Organiza¸˜o de uma LUT.Figura 12. ca ca a por´m isto requer que se estime as fun¸˜es de sombreamento.5. pode ca ser definida matematicamente como: B(x. pode-se definir uma a fun¸˜o brilho(p) = p + 40. Se um ponto p da imagem est´ mapeado a com o n´ N dentro da faixa de valores ∆1 . y). pode-se definir as “janelas” de intensidade que se queira manipular. A Figura 12. Dessa forma. modificando a escala de tonalidades de cinza de uma imagem. Opera¸˜es Pontuais: onde o n´ co ıvel de cinza de um ponto na imagem transformada depende s´ o do n´ ıvel de cinza do ponto da imagem original (ou nas imagens originais se houver mais de uma imagem de entrada (“frames”)). y) e seu histograma H1 (A). mas tamb´m dos n´ e ıveis de cinza de seus pontos vizinhos. Por exemplo.1 Opera¸˜es Pontuais sobre Imagens co Algoritmos que realizam Opera¸˜es Pontuais percorrem a imagem e utilizam o valor do pixel associado co a cada ponto. o histograma mostra a probabilidade condicional p(z/objeto) a de um ponto possuir um dado n´ ıvel de cinza z. o qual estar´ dentro ca a ıvel a da faixa ∆2 cujo valor m´ ınimo ´ min2 e m´ximo max2 . ca 1.4) A Figura 12. 1987].2) f (N ) = (12.

s˜o aquelas que produzem uma imagem que ´ a soma.5) (12. consegue-se obter uma imagem apenas das art´rias e veias. Assim. a e A seguir s˜o apresentadas algumas aplica¸˜es imediatas para as opera¸˜es alg´bricas: a co co e 1. Esse procedimento de manipula¸˜o do histograma para ampliar ou diminuir o contraste de uma ca imagem ´ mostrado na Figura 12.8) . se o cora¸˜o ´ o ´rg˜o em e ca ca e o a aprecia¸˜o. ca e 3. e na parte (b) o histograma da mesma imagem depois da ca manipula¸˜o do histograma.2?). por exemplo. ´ para se obter a m´dia de m´ltiplas imagens de ca ca e e u uma mesma cena. ca Opera¸˜es Alg´bricas co e Por defini¸˜o. y) C(x. y) − B(x. y) C(x. y) C(x.7) (12. A subtra¸˜o ´ tamb´m utilizada para detectar mudan¸as entre duas imagens da mesma ca e e c cena. y) + B(x. para corrigir poss´ ca a ıveis defeitos de um digitalizador em que a sensibilidade do sensor de luz varia conforme a posi¸˜o dos pontos ca da imagem. ´ para se comparar e duas imagens de uma mesma regi˜o do corpo. Multiplicar uma imagem por uma “m´scara” pode esconder certas regi˜es da imagem a o deixando expostos apenas objetos de interesse.5: Imagens e histogramas de intensidade. y) ´ a imagem resultante.2. na e qual especifica-se uma janela de visualiza¸˜o. y) = A(x.4.6) (12. y) = A(x. Por exemplo. y) = A(x.Figura 12. 106 (12. diferen¸a. uma fun¸˜o muito usada para ca ca detec¸˜o de bordas (ver se¸˜o 2. Obt´m-se a imagem da regi˜o (ou ´rg˜o) normal e a e a o a tamb´m ap´s injetar um meio de contraste. opera¸˜es Alg´bricas. Isto ´ eficazmente utilizado para reduzir os efeitos de ru´ e ıdos aleat´rios aditivos. Subtra¸˜o de imagens pode ser usada para calcular o gradiente. Ap´s esta opera¸˜o. e u 2.7. y) e B(x. y) s˜o imagens de entrada e C(x. y)/B(x. Uma utiliza¸˜o t´ ca ca ca ıpica em medicina. Multiplica¸˜o e divis˜o de imagens podem ser utilizadas. As quatro opera¸˜es alg´bricas de processamento de imagens podem ser explicitadas: co e C(x. y) × B(x. por exemplo. No caso de soma ou multiplica¸˜o mais de duas ca imagens podem estar envolvidas. y) = A(x. y) onde: A(x. Uma importante utiliza¸˜o de adi¸˜o de imagens. o Pode tamb´m ser utilizado para colocar o conte´do de uma imagem sobrepondo outra. pode-se detectar movimento subtraindo-se imagens sequenciais de uma cena. adquire outra imagem. pode-se e o o ca comparar as duas atrav´s de subtra¸˜o digital. Subtra¸˜o de imagens pode ser utilizada para remover algum padr˜o indesej´vel presente em uma ca a a imagem. Na parte (a) apresenta-se um histograma de uma imagem. ca co e a e c produto ou quociente pixel a pixel de suas imagens.

2 Opera¸˜es Locais Sobre a Imagem co Algor´ ıtmos que realizam Opera¸˜es Locais utilizam informa¸˜o dos valores dos pontos vizinhos para co ca modificar o valor de um ponto. pode-se procurar formas na imagem atrav´s de “padr˜es de busca” (“match”). ca e Ao se efetuar opera¸˜es sobre as imagens. obter medidas dos elementos da imagem. Assim. acentuando as mudan¸as de intensidades (atrav´s de filtros c c e Passa-Altas).7: Manipula¸˜o de janelas de intensidade da imagem atrav´s do histograma. ou mesmo para verificar a existˆncia de alguma propriedade neste ponto e da imagem. deve-se estar atento para que o novo valor obtido n˜o co a ultrapasse o dom´ ınio de valores. ıdo As transforma¸˜es locais s˜o divididas em dois grandes grupos: co a • Transforma¸˜es Lineares: s˜o aquelas em que os pixels vizinhos ao que est´ sendo calculado co a a influenciam no novo valor segundo uma combina¸˜o linear dos mesmos. tornando as mudan¸as de intensidade menos abruptas (atrav´s de c e filtros Passa-Baixas). co a a 107 .5. Se este cuidado n˜o for tomado. remover ru´ suavizando a imagem [?].6: Efeito de uma transforma¸˜o dos n´ ca ıveis de cinza efetuado sobre o histograma. ou podem prover outras formas de se melhorar a imagem.Figura 12. ou “suavizar” a imagem. pode-se obter valores totalmente inconsistentes. levando-se a a a uma degenera¸˜o da imagem. Elas podem “agu¸ar” a imagem. Opera¸˜es Locais s˜o tipicamente utilizadas para filtragem espacial e altera¸˜o da pr´pria estrutura co a ca o da imagem. • Transforma¸˜es n˜o Lineares: utilizam outra forma de arranjo que n˜o a linear. Tais opera¸˜es incluem ca co superposi¸˜o e convolu¸˜o de imagens. o que ´ usualmente utilizado para implementar filtros disca ca e cretos. e o definir bordas na imagem. ca 12. permitido pela amplitude dos n´ ıveis de intensidade em que a imagem est´ mapeada. Figura 12.

y). Estes “pesos” e ıdo s˜o colocados em uma matriz.B(x − m. 1. n). M −1] e [0. a ca e a Dadas duas imagens A(x. pois como alguns pesos s˜o negativos eles tendem c a a real¸ar diferen¸as. e dada pela seguinte express˜o: a 1 M. y) (12. y) = A(m. onde o ponto base para a gera¸˜o do novo ponto ´ colocado no centro da m´scara. onde os pesos s˜o dados pela imagem B. e a a Neste caso a m´scara ´ normalmente chamada de tentativa (“template”).11) As rela¸˜es acima s˜o equivalentes a considerar uma imagem A(x. −y) = A(x. a ca O realce de bordas... 1.Opera¸˜o de Convolu¸˜o ca ca Um dos algoritmos cl´ssicos de processamento de imagens ´ aquele que efetua a Convolu¸˜o entre a e ca imagens. 1.. deve-se utilizar as seguintes rela¸˜es: co A(x. co a como definida em [−M.N M −1 N −1 C(x. 7 ou 9). M − 1 e y = 0. e quanto ca ca a maior o m´scara maior ser´ o tempo de processamento da opera¸˜o.10) (12. a opera¸˜o de convolu¸˜o ´ a base para efetuar-se filtragem espacial ca ca e de imagens. y) com x = 0. N − y) A(−x. chamada de m´scara.16) Pode-se tamb´m utilizar m´scaras que contenham algum padr˜o que se quer procurar na imagem.. . que se encontram fora dos intervalos [0. a 108 . c c  1 1 1 (a)  1 −2 1  −1 −1 −1   −1 −1 −1 (b)  1 −2 1  1 1 1  (12. N − 1]. M − 1 e y = 0. 5.12) Implementa um filtro passa-baixas (de suaviza¸˜o): ca   0 −1 0  −1 5 −1  0 −1 0 (12.N − 1. usualmente de dimens˜o pequena. sendo comumente usado para realizar filtragem espacial e procurar peculiaridades na imagem. a ca −1 1 (a)  −1 −2 −1 1   1 1 1  1 1 −1 (b)  1 −2 −1  1 1 −1  (12. e a Como foi mencionado acima.. A opera¸˜o de convolu¸˜o substitui o valor de um ponto com o valor obtido atrav´s de uma opera¸˜o ca ca e ca linear do ponto e de seus vizinhos. 1.14) Apresenta uma m´scara de filtro para dete¸˜o de borda ao (a) norte e (b) ao sul do ponto. Se para obter um a a a novo valor de um ponto deseja-se que apenas os vizinhos imediatos influenciem..9) e para os valores da borda da imagem. a a ca A seguir ser˜o apresentadas algumas m´scaras normalmente utilizadas para filtragem espacial [Mascarenhas and Vel a a  1/9  1/9 1/9 1/9 1/9 1/9  1/9 1/9  1/9 (12... y) = A(M − x. N −1]. . N − 1]. y − n) m=0 n=0 (12. M − 1] e [−N. y) e B(x. y) definida em [0. a convolu¸˜o ca (discreta) destas duas imagens ´ uma terceira imagem C(x.15) Apresenta uma m´scara de filtro para dete¸˜o de borda a (a) leste e (b) a oeste do ponto. onde o tamanho da m´scara a e a depende do padr˜o a ser procurado. . M − 1] e [0. independente da dire¸˜o pode ser obtido atrav´s de m´scaras como: ca e a   0 −1 0  −1 4 −1  0 −1 0   −1 −1 −1  −1 8 −1  −1 −1 −1   1 −2 1  −2 4 −2  1 −2 1 (12. A imagem que indica os pesos para a convolu¸˜o normalmente possui dimens˜o pequena e ca a ´ ımpar (3. O resultado da convolu¸˜o de A por B num ponto p ´ na ca e realidade uma m´dia ponderada dos pontos de A.13) Normalmente utilizada para “agu¸ar” uma imagem... com x = 0.. pois a opera¸˜o de convolu¸˜o envolve uma grande quantidade de c´lculos. . escolhe-se uma m´scara a de dimens˜o 3x3. N − 1. sendo que ´ atribu´ “peso” aos vizinhos e ao ponto.

Exemplos de Transforma¸˜es n˜o Lineares co a Usualmente as transforma¸˜es n˜o lineares conseguem uma melhor rela¸˜o sinal/ru´ na imagem proco a ca ıdo duzida do que por transforma¸˜es lineares. a Figura 12.9: Sinais “ru´ ıdo” (a) e “degrau” (b). y) s˜o ordenados. ca ıdo ca ıdo Os efeitos indesejados mostrados na Figura 12. Este efeito indesejado pode ser minorado atrav´s de transforma¸˜es (filtros) n˜o lineares. como ser´ visto a seguir. e co a Figura 12.8: Sinais “ru´ ıdo” (a) e “degrau” (b). Tome-se como exemplo os sinais unidimensionais dos tipos “ru´ ıdo” e “degrau” mostrados na Figura 12. 1/3] e diferen¸a [−1.9. “borramento” da borda (b). no filtro da mediana. Os filtros lineares utilizados para atenuar os ru´ co ıdos de uma imagem (passa-baixas) produzem uma imagem “borrada”. 3. Os efeitos de uma transforma¸˜o linear (filtro) dos tipos m´dia ca e [1/3. 1/3. Por exemplo. y) o valor mediano obtido pela ordena¸˜o.9 [Mascarenhas and Velasco. e tomado c a como novo valor para (x. amplia¸˜o do ru´ (c) e realce da borda (d). O efeito do filtro da mediana ca (unidimensional) que envolve 3 elementos (o ponto e seus vizinhos mais pr´ximos) ´ mostrado na Figura o e 109 . Pode-se notar nestes casos os efeitos c a de atenua¸˜o do ru´ (a). 1989]. −1] s˜o mostrados na Figura 12. os pontos da vizinhan¸a do ponto (x. ou seja as bordas n˜o ficam mais t˜o n´ a a ıtidas.10 (c) e (d) podem ser minorados atrav´s de filtros n˜o e a lineares.

11. Pode-se utilizar vizinhan¸a seletiva de um ponto. tomar a m´dia n˜o em toda a vizinhan¸a. para se obter o valor m´ e a ınimo entre dois pontos. e para o valor m´ximo a opera¸˜o l´gica OU. ou seja.10: Efeitos de filtros lineares ao “ru´ ıdo” e ` “borda”: (a) efeitos de atenua¸˜o. a sele¸˜o da vizinhan¸a procura o ca c fazer com que o ponto (x. y).Figura 12. isto ´. c e e a c mas sim numa sub-vizinhan¸a que satisfa¸a alguma propriedade dada. que c c apresente um valor m´dio pr´ximo do valor do ponto (x. y) ´ a imagem dada. y) − A(x − 1. 12. o a Pode-se tamb´m utilizar filtros n˜o-lineares para detectar. (d) realce da borda. ou seja. ´ E tamb´m usual. em vez de se utilizar a mediana da vizinhan¸a. y) seja operado s´ com pontos de sua regi˜o. bordas e linhas curvas. (c) amplia¸˜o do ru´ ca ıdo. e 110 (12. y)] ] 2 onde A(x. como uniformidade. dado por e a e [Mascarenhas and Velasco. ca o c a ca o Uma outra alternativa utilizada ´ tomar-se o valor mais frequente de uma vizinhan¸a. Se a imagem ´ bin´ria. entre eles. y − 1)] + [A(x.17) . Para o realce e a de bordas o m´todo n˜o-Linear mais simples ´ o Operador Gradiente de Roberts (GR). pode-se utilizar a opera¸˜o l´gica E dos valores da vizinhan¸a dois a dois. (b) borramento a ca da borda. enquanto em (b) ıdo a o degrau permaneceu inalterado. Note-se que na parte (a) da figura o ru´ foi eliminado (n˜o somente atenuado). escolher o valor m´ximo ou o valor de e c a ordem qualquer. Figura 12.11: Efeito do filtro da mediana sobre o “ru´ ıdo” e o “degrau”. Assim. y) = [[A(x. y − 1) − A(x − 1. O uso do filtro da vizinhan¸a seletiva presume e o c que a imagem seja composta de regi˜es razoavelmente uniformes. utilizar e c a Moda. 1989]: 2 2 1 GR(x.

y + 1) + 2A(x + 1. y − 1) + A(x + 1. Pode-se ca ver que o primeiro processo ´ geralmente mais oneroso em termos de tempo de computa¸˜o do que o e ca segundo. certas e ca bordas s˜o mais real¸adas que outras. y − 1)] = [A(x − 1.12: Uma transforma¸˜o geom´trica de 90o graus.0) ´ mapeado segundo a f´rmula: ca e o x = (Y SIZE − 1) − y y =x (12. y) em um novo endere¸o. O primeiro ´ o algoritmo que define a co e e movimenta¸˜o dos pixels. Ali uma imagem ´ rotacionada e de 90o graus. y + 1) + 2. y) = f (x . Um pixel na posi¸˜o (0. ama ca ca plia¸˜o.21) 111 . y ) = f (a(x. y). transla¸˜o. y + 1)]− [A(x + 1. mesmo tendo igual magnitude. ca e Como exemplo. A defini¸˜o geral para opera¸˜es geom´tricas ´ [Castleman. ca ca ca Figura 12. y − 1) + 2.A(x. y)) (12. Na realidade. a c Um operador gradiente para delimita¸˜o de bordas mais sofisticado (3x3). Isso co e a pode ser feito transformando-se ponto a ponto a imagem. geralmente s˜o necess´rios dois algoritmos sea a parados para a maior parte das transforma¸˜es geom´tricas. em processamento digital de imagens. y − 1) + 2A(x. e a Este operador ´ dado por: e GS(x. y ).Uma desvantagem do operador de Roberts ´ sua assimetria. e u Em muitas aplica¸˜es. pois.18) (12. Muitas vezes s˜o utico e a lizadas para corrigir distor¸˜es causadas pelo processo de aquisi¸˜o. y + 1) + A(x + 1. ou transformando-se apenas pontos chave da imagem. ´ o Operador de Sobel ca e (GS). ou diminui¸˜o da imagem. ´ necess´rio preservar a continuidade dos objetos que definem a imagem.20) onde Y SIZE ´ o n´mero de pixels no eixo y. o qual ´ frequentemente utilizado como o primeiro passo para algoritmos de vis˜o computacional. y − 1)] 1 (12. ´ E conveniente especificar matematicamente o relacionamento espacial entre pontos das imagem de entrada e da imagem de sa´ ıda. Tranforma¸˜es geom´tricas t´ ca a co e ıpicas s˜o: rota¸˜o. b(x. pode-se tomar a imagem ilustrada na Figura 12. y + 1)]− [A(x − 1. ou mesmo para efetuar alguma co ca manipula¸˜o solicitada pelo usu´rio. Algoritmos para efetuarem estas opera¸˜es podem ser apresentados ca ca co como um conjunto de equa¸˜es que mapeiam um pixel localizado na posi¸˜o (x.19) Transforma¸˜es Geom´tricas co e As transforma¸˜es geom´tricas mudam o arranjo espacial dos pixels da imagem. 1979]: ca co e e g(x. y) + A(x − 1.12. fazendo que os outros pontos acompanhem a transforma¸˜o por algum outro processo. como ele move a partir da posi¸˜o inicial para a posi¸˜o final. dependendo da dire¸˜o. y) = (X 2 + Y 2 ) 2 onde:  X  Y  = [A(x − 1. co ca c (x .A(x − 1. y) + A(x + 1.

y) pode ser tomado a partir de coordenadas n˜o inteiras (pela continuidade) de f (x. Mas na equa¸˜o geral acima. Assim novamente deve ser realizada alguma opera¸˜o (ex. Na imagem de entrada f (x. y) ´ a imagem de sa´ e e ıda. a continuidade ser´ preservada na a nova imagem. ca a 112 . y) e b(x.onde f (x. y) ´ a imagem de entrada e g(x. pode-se ver que o valor do n´ de ca ıvel cinza para g(x. y). y) especificam co as transforma¸˜es espaciais. y). escala) para ca corrigir a distor¸˜o de pontos n˜o inteiros. O segundo algoritmo necess´rio para uma transforma¸˜o geom´trica ´ um algoritmo para interpola¸˜o a ca e e ca dos valores dos n´ ıveis de cinza. os valores do n´ ıveis de cinza s˜o definidos a somente para valores inteiros de x e y. pixels de f podem ser mapeados ca e e entre pixels de g e vice-versa. Se essas tranforma¸˜es forem cont´ co co ınuas. As fun¸˜es a(x. Se a a opera¸˜o geom´trica ´ considerada como um mapeamento de f para g.

Prentice-Hall.. (1997).An Object-Oriented Approach to 3D Graphics. and Wintz. 1979] Castleman.. Uma introdu¸˜o ` visualiza¸˜o ca a ca computacional xvi jai’97. and Lorensen. and Oliveira. C. G. M. (1996). R. pages 85–131. F. Inc. K. (1998). 1996] Schr¨eder. (1989). W. M. Processamento digital de imagens. 113 . Termas do Rio Hondo .J. The Visualization Toolkit o o . Computer Graphics. volume 1777 of Jornadas de Atualiza¸˜o em ca Inform´tica. 1999] Plastock. [Hearn and Baker. Digital Imagem Processing. o o [Schr¨eder et al. P. second edition edition. D. R. R. D. (1999). P. 1989] Mascarenhas. and Velasco.Referˆncias Bibliogr´ficas e a [Castleman. 1998] Schr¨eder. (1979). and Kalley. Universidade Cat´lica de Santiago a o del Estero. D. F. W. A. Prentice-Hall. W. Martin. R. Livros T´cnicos e Cient´ a e ıficos Editora Ltda. C.. C. (1987). (1994). A. Introdu¸˜o ` Computa¸˜o ca a ca Gr´fica. [Mascarenhas and Velasco. Prentice-Hall. In XVII Congresso da SBC. In IV Escola Brasileiro-Argentina de Inform´tica. Computa¸˜o Gr´fica. [Plastock and Kalley. Mc Graw Hill. K.Argentina. F. Bras´ . 1987] Gonzalez.Brazil. R.. Englewood Cliffs. a ılia [Persiano and Oliveira. R. J. A. (1989). The Visualization Toolkit. AddisonWesley Publishing Company. N. 1994] Hearn. N. [Minghim and Oliveira. Digital Image Processing. [Gonzalez and Wintz. and Baker. and Oliveira. ca a [Schr¨eder. 1997] Minghim. 1989] Persiano.

a • Algumas referˆncias precisam ser corrigidas.08. Modelagem e Processamento de Imagens est˜o faltando. e 114 . a • Ainda h´ referˆncias com problemas.2003 Novidades • Apostila de processamento de imagens adicionada.11.2003 Novidades • Vers˜o totalmente revisada. • Links externos corrigidos. a Problemas • Os cap´ ıtulos de Rendering.Apˆndice A e Hist´rico o 01. a e 27. Problemas • Os cap´ ıtulos de Rendering e Modelagem ainda est˜o faltando.

Sign up to vote on this title
UsefulNot useful