Você está na página 1de 109

1

Algoritmos Geomtricos
em SIG

Diversas funes de SIG dependem fundamentalmente de resultados obtidos em


algumas disciplinas da computao, da matemtica e da estatstica, entre outras reas.
Especificamente na computao, as tcnicas derivadas da rea de bancos de dados so
especialmente importantes, uma vez que so responsveis pelos mecanismos de
armazenamento e recuperao de dados geogrficos. No entanto, como o diferencial do
SIG est no uso de informao georreferenciada, em geral visualizvel graficamente,
duas outras disciplinas da computao adquirem grande importncia nesse contexto:
processamento digital de imagens e computao grfica. A primeira essencial para o
uso de imagens em SIG, em aplicaes que vo desde a converso de dados at o
sensoriamento remoto. A segunda rene as tcnicas de tratamento e visualizao de
dados vetoriais, que por sua vez se beneficiam dos avanos obtidos em uma rea de
pesquisas nova, porm importante: a geometria computacional.
A geometria computacional procura desenvolver e analisar algoritmos e estruturas de
dados para resolver problemas geomtricos diversos. Neste particular, tem um ponto
importante de contato com a rea de projeto e anlise de algoritmos, uma vez que
tambm procura caracterizar a dificuldade de problemas especficos, determinando a
eficincia computacional dos algoritmos e usando tcnicas de anlise de complexidade
assinttica [Knut73a]. Existe tambm uma preocupao em desenvolver solues para
problemas clssicos de geometria, construindo estruturas mais apropriadas para a
representao geomtrica robusta no ambiente computacional, que tem limitaes
conhecidas quanto preciso numrica e a capacidade de armazenamento de dados.
Os mesmos problemas ocorrem na rea de topologia, em que se procura desenvolver
solues, geralmente baseadas em estruturas de dados, para representar as relaes
espaciais que so independentes da geometria, tais como conteno, adjacncia e
conectividade. Alm da caracterizao e comparao das estruturas topolgicas
propriamente ditas, a geometria computacional preocupa-se com os algoritmos
necessrios para compor e manter estas estruturas a partir da geometria bsica dos
objetos.
Existe tambm muito desenvolvimento na rea de indexao espacial para SIG. So
algoritmos e estruturas de dados desenvolvidos especialmente para agilizar a busca e
recuperao de dados em bancos de dados geogrficos. As estruturas de indexao
espacial procuram agilizar a resposta a dois tipos fundamentais de perguntas:
dada uma regio do espao, identificar o que est contido nela;

dado um ponto, determinar que objetos geogrficos o contm.


Com isso, a indexao espacial utilizada a todo momento na operao de um SIG, em
situaes corriqueiras como a execuo de um zoom ou a identificao de um objeto na
tela com o mouse.
As sees seguintes abordam alguns dos principais algoritmos e estruturas de dados
aplicados freqentemente em SIG, nas reas de geometria vetorial, topologia e
indexao espacial.
1.1 Geometria computacional aplicada a SIG
Num sentido amplo, a geometria computacional compreende o estudo de algoritmos
para resolver problemas geomtricos em um computador. Nesta seo, os algoritmos
geomtricos utilizados para resolver problemas tpicos de um SIG vetorial sero
enfatizados, procurando transmitir uma noo dos recursos utilizados pelos sistemas na
soluo de problemas geogrficos. O enfoque ser o de mostrar como os algoritmos
funcionam, indicando tambm, porm com menor nfase, a sua complexidade.
1.1.1 Definies bsicas
Em um SIG vetorial, cada objeto codificado usando um ou mais pares de coordenadas,
o que permite determinar sua localizao e aparncia visual. Adicionalmente, os objetos
so tambm caracterizados por atributos no-espaciais, que os descrevem e identificam
univocamente. Este tipo de representao no exclusivo do SIG: sistemas CAD e
outros tipos de sistemas grficos tambm utilizam representaes vetoriais. Isto porque
o modelo vetorial bastante intuitivo para engenheiros e projetistas, embora estes nem
sempre utilizem sistemas de coordenadas ajustados superfcie da Terra para realizar
seus projetos, pois para estas aplicaes um simples sistema de coordenadas cartesianas
suficiente. Mas o uso de vetores em SIG bem mais sofisticado do que o uso em
CAD, pois em geral SIG envolve volumes de dados bem maiores, e conta com recursos
para tratamento de topologia, associao de atributos alfanumricos e indexao
espacial. Por outro lado, os vetores que se constri tipicamente em um SIG so menos
sofisticados geometricamente que aqueles possveis em um CAD. Enquanto em um
SIG, em geral, se pode apenas representar pontos e conjuntos de segmentos de reta, em
um CAD possvel ter tambm crculos, arcos de crculo, e curvas suavizadas como
spline e Bezier. Alm disto, o tratamento da terceira dimenso em SIG ainda
rudimentar, enquanto os sistemas CAD so utilizados para operaes tridimensionais
bem mais complexas, como modelagem de slidos.
Para entender melhor a maneira como os SIG tratam a informao vetorial, esto
relacionadas a seguir algumas definies fundamentais [ref. Vetores em GIS]. Como na
maioria dos SIG comerciais, as definies consideram apenas duas dimenses.
Ponto: um ponto um par ordenado (x, y) de coordenadas espaciais.
Alguns SIG denominam objetos localizados com apenas um ponto como smbolos. Isto
se deve ao fato de sempre se associar um smbolo cartogrfico ao ponto, para fins de
apresentao em tela ou em um mapa.

Reta e segmento de reta: Sejam p1 e p2 dois pontos distintos no plano. A combinao


linear . p1 + ( 1 ) p2 , onde qualquer nmero real, uma reta no plano. Quando
0 1 , se tem um segmento de reta no plano, que tem p1 e p2 como pontos extremos.
Esta definio estritamente geomtrica, e nos interessa uma definio mais aplicada.
Assim, partimos para o conceito de linha poligonal, que composta por uma seqncia
de segmentos de reta. O mais comum, no entanto, definir a linha poligonal atravs da
seqncia dos pontos extremos de seus segmentos, ou seja, seus vrtices.
Linha

poligonal:

Sejam

v 0 , v1 ,

, v n 1

pontos

no

plano.

Sejam

s0 = v 0 v1 , s1 = v1v 2 , , sn 2 = v n 2 v n 1 uma seqncia de n - 1 segmentos, conectando


estes pontos. Estes segmentos formam uma poligonal L se, e somente se, (1) a
interseo de segmentos consecutivos apenas o ponto extremo compartilhado por eles
(i.e., si si +1 = vi +1 ), (2) segmentos no consecutivos no se interceptam
(i.e., si s j = para todo i, j tais que j i + 1), e (3) v 0 v n 1 , ou seja, a poligonal
no fechada.
Observe-se, na definio acima, a excluso da possibilidade de auto-interseo. Os
segmentos que compem a poligonal s se tocam nos vrtices. Formalmente, poligonais
que no obedecem a este critrio so chamadas poligonais complexas. De modo geral,
os SIG no impedem que poligonais complexas sejam criadas; no entanto, dificilmente
este tipo de linha ocorrer na natureza. Alm do mais, poligonais complexas podem
criar dificuldades na definio da topologia e em operaes como a criao de buffers
(ref. Interna).
Polgono: Um polgono a regio do plano limitada por uma linha poligonal fechada.
A definio acima implica que, apenas invertendo a condio (3) da linha poligonal,
temos um polgono. Assim, tambm aqui no permitida a interseo de segmentos fora
dos vrtices, e os polgonos onde isto ocorre so denominados polgonos complexos. Os
mesmos comentrios que foram feitos para poligonais valem para os polgonos.
Observe-se tambm que o polgono divide o plano em duas regies: o interior, que
convencionalmente inclui a fronteira (a poligonal fechada) e o exterior.
Assim, quando utilizamos a expresso vetores, estamos nos referindo a alguma
combinao de pontos, poligonais e polgonos, conforme definidos acima. Combinaes
porque teoricamente poderamos utilizar mais de um tipo de primitiva grfica na criao
da representao de um objeto. Por exemplo, pode-se ter objetos de rea mais
complexos, formados por um polgono bsico e vrios outros polgonos contidos no
primeiro, delimitando buracos. Pode-se tambm ter objetos compostos por mais de um
polgono, como seria necessrio no caso do estado do Par, que alm da parte
continental tem a ilha de Maraj e outras como parte de seu territrio.
1.1.1.1 Classes de vetores

Apesar de estarmos sempre concebendo representaes sob a forma de pontos, linhas e


reas para objetos em SIG, existem algumas variaes com relao adaptao destas
representaes realidade, ou seja, considerando a forma com que estes objetos

ocorrem na natureza. A opo entre as alternativas a seguir feita na fase de modelagem


conceitual do SIG, e deve ser feita com bastante cuidado.
Objetos de rea podem ter trs formas diferentes de utilizao: como objetos isolados,
objetos aninhados ou objetos adjacentes. O caso de objetos isolados bastante comum
em SIG urbanos, e ocorre no caso em que os objetos da mesma classe em geral no se
tocam. Por exemplo, edificaes, piscinas, e mesmo as quadras das aplicaes cadastrais
ocorrem isoladamente, no existindo segmentos poligonais compartilhados entre os
objetos. O caso tpico de objetos aninhados o de curvas de nvel e todo tipo de
isolinhas, em que se tem linhas que no se cruzam, e so entendidas como estando
empilhadas umas sobre as outras. Este caso tem muitas variaes, pois curvas de nvel
podem ser tambm representadas como linhas, uma vez que podem permanecer abertas
em algumas situaes, e tambm podem ser entendidas como subproduto de modelos
digitais de terreno, que so campos. Finalmente, temos objetos adjacentes, e os
exemplos tpicos so todas as modalidades de diviso territorial: bairros, setores
censitrios, municpios e outros. So tambm exemplos mapas geolgicos e
pedolgicos, que representam fenmenos que cobrem toda a rea de interesse. Neste
caso, pode-se ter o compartilhamento de fronteiras entre objetos adjacentes, gerando a
necessidade por estruturas topolgicas. Estes tambm so os casos em que recursos de
representao de buracos e ilhas so mais necessrios.
Tambm objetos de linha podem ter variadas formas de utilizao. Analogamente aos
objetos de rea, pode-se ter objetos de linha isolados, em rvore e em rede. Objetos de
linha isolados ocorrem, por exemplo, na representao de muros e cercas em mapas
urbanos. Objetos de linha organizados em uma rvore podem ser encontrados nas
representaes de rios e seus afluentes, e tambm em redes de esgotos e drenagem
pluvial. E podem ser organizados em rede, nos casos de redes eltricas, telefnicas, de
gua ou mesmo na malha viria urbana e nas malhas rodoviria e ferroviria.
1.1.1.2 Problemas de nomenclatura

Um problema que aflige a todos os usurios de SIG a grande variedade de diferentes


nomenclaturas para elementos vetoriais. A linha poligonal, conforme definida, pode ser
denominada de diversas formas em SIG e CAD: linha, polilinha, arco, link, 1-cell,
cadeia, e outras. Algumas destas denominaes incluem consideraes topolgicas. Por
exemplo, um arco muitas vezes definido como um elemento que conecta dois ns e
que pode ter ou no uma direo, e n (ou 0-cell) uma denominao alternativa para
ponto ou smbolo. O mesmo ocorre com relao a polgonos, denominados s vezes
como reas, regies ou ainda 2-cells.
Quase sempre aparecem sutilezas com relao definio que sero especificamente
ligadas a aspectos da lgica de construo do software SIG. Um SIG baseado em
topologia, por exemplo, define reas ou regies a partir de seqncias de arcos, que por
sua vez conectam ns. Um sistema desktop mapping poder impedir a utilizao de
objetos compostos por vrios polgonos. Um SIG baseado em SGBD relacional poder
permitir buracos, mas no permitir polgonos externos adicionais.

1.1.1.3 Tipos abstratos para dados vetoriais

Ser apresentada a seguir um breve resumo das definies da seo anterior, seguida da
a formulao de tipos abstratos de dados para suportar os dados vetoriais. Esta
formulao ser usada na descrio de algoritmos geomtricos no restante deste
captulo.
Ponto: um ponto um par ordenado (x, y) de coordenadas espaciais.
Linha

poligonal:

Sejam

v 0 , v1 ,


, v n 1

pontos

no

plano.

Sejam

s0 = v 0 v1 , s1 = v1v 2 , , sn 2 = v n 2 v n 1 uma seqncia de n - 1 segmentos, conectando


estes pontos. Estes segmentos formam uma poligonal L se, e somente se, (1) a
interseo de segmentos consecutivos apenas o ponto extremo compartilhado por eles
(i.e., si si +1 = vi +1 ), (2) segmentos no consecutivos no se interceptam
(i.e., si s j = para todo i, j tais que j i + 1), e (3) v 0 v n 1 , ou seja, a poligonal


no fechada.
Polgono: Um polgono a regio do plano limitada por uma linha poligonal fechada.
Estas trs entidades geomtricas bsicas podem ser definidas em uma linguagem de
programao usando tipos abstratos de dados, conforme apresentado no Programa 1.1.
Essa definio inclui tipos abstratos para retngulos e para segmentos, que sero
bastante teis na indexao espacial e em alguns algoritmos geomtricos. No foi
definido um tipo abstrato especfico para polgonos, uma vez que corresponde a
poligonais em que o primeiro e o ltimo vrtices coincidem. Para as poligonais, foi
includo no tipo uma varivel Retngulo, para armazenar os limites do objeto em
cada eixo1.

Este retngulo usualmente denominado retngulo envolvente mnimo (REM), e o menor retngulo
com lados paralelos aos eixos que contm o objeto em questo.

estrutura Ponto
incio
inteiro x;
inteiro y;
fim;
estrutura Segmento
incio
Ponto p1;
Ponto p2;
fim;
estrutura Retngulo
incio
inteiro x1;
inteiro y1;
inteiro x2;
inteiro y2;
fim;
estrutura Poligonal
incio
inteiro numPontos;
Retngulo retnguloEnvolventeMnimo;
Ponto[] vertice;
fim;

Programa 1.1 - Tipos abstratos de dados para Ponto, Retngulo e Poligonal


Um grande problema para a implementao de rotinas geomtricas est relacionado com
a preciso numrica. Como se sabe, a representao de nmeros no computador finita,
uma vez que uma seqncia finita de bits apenas consegue representar uma seleo
limitada de nmeros de ponto flutuante [Schn97]. Esta limitao em geral no
considerada nos desenvolvimentos tericos. O fechamento desta lacuna de preciso
deixado a cargo do programador, o que conduz a freqentes problemas numricos e de
topologia nas aplicaes reais.
Assim, em muitas situaes, para minimizar o problema de preciso e melhorar o
desempenho no tratamento da geometria, SIG e outros tipos de sistemas optam por
representar coordenadas por meio de variveis inteiras2. Isso viabiliza clculos mais
robustos e precisos, mas em contrapartida aparece a possibilidade de overflow numrico
em determinadas circunstncias. Em SIG, este problema torna-se ainda mais complicado
devido aos sistemas de coordenadas utilizados mais freqentemente. O sistema UTM
(Universal Transverso de Mercator), por exemplo, divide o globo longitudinalmente em
60 fusos. Cada fuso cobre 6 graus de longitude, e identificado por seu meridiano
central. Em cada fuso, um sistema cartesiano de coordenadas estabelecido, usando
metros como unidades. O eixo y (ou seja, Norte) tem origem no Equador, e o eixo x
(Leste) posicionado de modo que a coordenada x seja equivalente a 500.000 metros
sobre o meridiano central. As coordenadas y, que no hemisfrio sul seriam negativas,
so somadas a um fator constante de 10.000.000 metros. Assim, coordenadas UTM
podem basicamente variar entre 0 e 1.000.000 metros em x, e entre 0 e 10.000.000

Esta opo tambm feita neste trabalho, considerando principalmente que a alternativa mais usada
pelos SIG comerciais.

metros em y. Para limitar a possibilidade de distoro na projeo, no entanto, os


valores x variam de fato apenas de 166.667 a 666.667 metros.
Muitos SIG adotam inteiros de 32 bits, sem sinal, para representar coordenadas. Isto
permite valores entre 0 e 4.294.967.295. Valores decimais so geralmente representados
pela adoo de um nmero fixo de casas decimais, validos para todos os dados grficos.
Por exemplo, para representar coordenadas UTM com preciso de 1 centmetro, pode
ser estabelecido um fator de preciso de 100. As coordenadas inteiras no mais
representam metros, mas centmetros. O SIG assume a responsabilidade de inserir o
ponto decimal na posio correta quando necessrio, mas todos os clculos internos
sero realizados usando as coordenadas inteiras. Com um fator de 100, adequado para
aplicaes urbanas, a faixa de coordenadas efetivamente utilizveis passa a ser de 0 a
42.949.672,95, que corresponde a mais de 40.000 quilmetros suficiente para dar a
volta ao mundo, e claramente mais do que o necessrio para representar um fuso UTM.
No entanto, este limite nos fora a prestar ateno a operaes de multiplicao
envolvendo coordenadas, ou valores derivados. Dependendo da ordem de grandeza dos
valores a e b, o numerador da Equao 1.8 pode exceder os limites de representao. O
valor de a pode se tornar arbitrariamente grande, medida em que a reta se torna mais
vertical. O valor de b tambm pode ser grande, dependendo do valor de a e da ordem de
grandeza das coordenadas de um dos pontos extremos. Este problemas poderiam ser
resolvidos com uma mudana de eixos, mas o processo seria muito complicado,
computacionalmente intensivo e sujeito a erros. Seria tambm possvel usar variveis de
ponto flutuante para estas operaes, mas neste caso estariam sendo introduzidos erros
de arredondamento e mais esforo computacional.
Um enfoque alternativo apresentado em [Schn97], onde so descritas as bases da
geometria computacional de preciso (ou resoluo) finita. A idia bsica consiste em
apoiar as coordenadas de quaisquer pontos ou vrtices em uma malha regular baseada
em valores inteiros. Qualquer ponto com coordenadas fracionrias (por exemplo, um
ponto de interseo entre segmentos) deslocado para o n mais prximo desta grade
regular. Este enfoque robustece bastante o tratamento numrico das coordenadas de
pontos e vrtices, e ainda garante consistncia na representao topolgica. No entanto,
ainda no est presente em SIG comerciais.
1.1.2 Formulaes e algoritmos bsicos
1.1.2.1 Tringulos e produtos vetoriais

Diversos problemas de geometria computacional utilizam resultados bsicos de


problemas mais simples em sua soluo. Alguns destes resultados bsicos vm da
anlise geomtrica do mais simples dos polgonos, e o nico que sempre plano: o
tringulo.
rea. Uma vez que na representao vetorial se trabalha com vrtices e suas
coordenadas, a frmula elementar da geometria para clculo da rea de um tringulo (a
rea de um tringulo igual metade do produto entre sua base e sua altura) no
muito prtica. Em vez dela, sero utilizados dois resultados equivalentes da lgebra
linear. O primeiro usa o produto de dois vetores, que determina a rea de um

paralelogramo, o dobro da rea do tringulo que interessa. Outro mtodo calcula a rea
diretamente, por meio de um determinante 3x3.
C

U
B

Figura 1.1 - Produto vetorial dos vetores U e V, equivalente ao dobro da rea do


tringulo ABC
O primeiro mtodo pode ser descrito como se segue. Sejam U e V vetores. A rea do
paralelogramo com lados U e V U V (Figura 1.1). O produto vetorial pode ser
calculado a partir do seguinte determinante:


i
xU

j
yU

k
zU = ( yU zV zU yV )i + ( zU xV xU zV ) j + ( xU yV yU xV ) k

xV

yV

zV

onde i , j , k so vetores unitrios nas direes x, y e z respectivamente. Como se est


tratando de vetores bidimensionais, temos zU = zV = 0, e portanto a rea S do tringulo
dada por
S=

( xU yV yU xV )
2

Mas, na realidade, U = B - A, e V = C - A. Portanto, a expresso acima pode ser reescrita


como
S=

1
( x y y A x B + y A xC x A yC + x B yC y B xC )
2 A B

(1.1)

A rea calculada pela expresso acima ser positiva se os vrtices A, B e C formarem


um circuito em sentido anti-horrio, e negativa se formarem um circuito no sentido
horrio. A rea ser exatamente zero se os trs vrtices estiverem alinhados.

A expresso acima pode ser tambm obtida quando se calcula o determinante dos trs
pares de coordenadas, substituindo a coordenada z por 1:
xA
1
S = xB
2
xC

yA
yB
yC

1
1
1 = ( x A y B y A x B + y A xC x A yC + x B yC y B xC )
2
1

(1.2)

Tambm neste caso a rea ser negativa se a seqncia de vrtices estiver orientada em
sentido horrio, e positiva caso contrrio.
O clculo efetivo da rea de um tringulo, em nmeros reais, desprezando o sinal, pode
ser feito usando a funo reaTringulo (Programa 1.2). Como pode ser
interessante obter a rea orientada, ou seja, com sinal, o Programa 1.2 tambm inclui a
funo reaOrientadaTringulo.
funo reaOrientadaTringulo(Ponto A, Ponto B, Ponto C): real
incio
retorne ((A.x*C.y - A.y*C.x + A.y*B.x - A.x*B.y +
C.x*B.y - C.y*B.x) / 2);
fim;
funo reaTringulo(Ponto A, Ponto B, Ponto C): real
incio
retorne abs(reaOrientadaTringulo(A, B, C));
fim.

Programa 1.2 - Funes reaTringulo e reaOrientadaTringulo


Coordenadas baricntricas. Para determinar se um determinado ponto pertence ou no
a um tringulo, utiliza-se um mtodo baseado em coordenadas baricntricas [FiCa91].
Teorema 1.1 - Sejam p1, p2 e p3 pontos no colineares no plano. Ento cada
ponto p do plano pode ser escrito na forma
p = 1 p1 + 2 p2 + 3 p3

(1.3)

onde 1, 2 e 3 so nmeros reais e 1 + 2 + 3 = 1 . Os coeficientes 1, 2 e 3


so denominados coordenadas baricntricas de p em relao a p1, p2 e p3.
Prova - Com as coordenadas dos pontos p, p1, p2 e p3, e a equao
1 + 2 + 3 = 1 , constri-se um sistema de trs equaes e trs incgnitas para
encontrar as coordenadas baricntricas:

1 x1 + 2 x 2 + 3 x 3 = x p
1 y1 + 2 y 2 + 3 y 3 = y p

+
+
=
O sistema acima tem por determinante exatamente aquele apresentado na
Equao 1.2 e seu valor corresponde ao dobro da rea do tringulo p1p2p3. A rea
no-nula, pois p1, p2 e p3 no so alinhados por hiptese. Assim, o sistema tem
soluo nica para cada p.

Os valores de 1, 2 e 3 podem ser obtidos usando a regra de Cramer, e expressos em


termos de reas de tringulos. Temos, portanto:

1 =

S ( pp2 p3 )
S ( p1 pp3 )
S ( p1 p2 p)
, 2 =
e 3 =
S ( p1 p2 p3 )
S ( p1 p2 p3 )
S ( p1 p2 p3 )

1 >0
2 <0
3 <0

=
3 0

A anlise do sinal das coordenadas baricntricas indica a regio do plano em que se


encontra p, em relao ao tringulo p1p2p3 (Figura 1.2). Observe-se que, para isso, as
reas devem ser orientadas, ou seja, com sinal.

1 >0
2 <0
3 >0

p1

1= 0
1 >0
2 >0
3 >0

1 >0
2 >0
3 <0

p2

p3

2 = 0

1 <0
2 <0
3 >0

1 <0
2 >0
3 >0

1 <0
2 >0
3 <0

Figura 1.2 - Sinais das coordenadas baricntricas


Este resultado leva implementao de uma funo bastante til, que determina se um
ponto est contido em um tringulo (Programa 1.3).
funo pontoEmTringulo(Ponto P,
Ponto P1, Ponto P2, Ponto P3):

booleano

incio
real lambda1, lambda2, lambda3, S;
S = reaOrientadaTringulo(P1, P2, P3);
lambda1 = reaOrientadaTringulo(P, P2, P3) / S;
lambda2 = reaOrientadaTringulo(P1, P, P3) / S;
lambda3 = reaOrientadaTringulo(P1, P2, P) / S;
retorne ((lambda1 > 0) e (lambda2 > 0) e (lambda3 > 0))
fim.

Programa 1.3 - Funo pontoEmTringulo


1.1.2.2 Pontos e segmentos

Schneider [Schn97] define exaustivamente os tipos de situaes de posicionamento


relativo entre pontos e segmentos de reta, por meio de predicados. Estes predicados
esto listados na Tabela 1.1 e na Tabela 1.2.

Tabela 1.1 - Posicionamento relativo de ponto e segmento


B

em(P, AB)

Ponto interior ao segmento; pontos extremos so


excludos.

emExtremo(P, AB)

Ponto coincide com um ponto extremo do


segmento

P
A

P
A

Tabela 1.2 - Posicionamento relativo entre dois segmentos


iguais(AB, CD)

Ambos os pontos extremos coincidem

seEncontram(AB, CD)

Compartilham exatamente um ponto extremo

superpostos(AB, CD)

So colineares e compartilham um trecho comum

alinhados(AB, CD)

So colineares e no tm ponto em comum

paralelos(AB, CD)

Tm a mesma inclinao e no so iguais nem


superpostos

seTocam(AB, CD)

No so superpostos e um dos pontos extremos de


um segmento pertence ao outro segmento

seInterceptam(AB, CD)

Tm um ponto em comum e no se encontram nem


se tocam

disjuntos(AB, CD)

No so iguais, nem se encontram, nem se tocam,


nem so paralelos, nem se interceptam, nem se
superpem

D
B
C
A

C
A

D
C
A

D
C
B

D
B
C
A

C
D
A

C
D
A

Adicionalmente aos predicados listados acima, existe a necessidade de definir uma


nica funo, denominada pontoInterseo, que retornar as coordenadas do
ponto de interseo (se houver) entre dois segmentos.
A implementao dos predicados depende de funes mais bsicas. Uma delas, a funo
para detectar o posicionamento relativo entre ponto e segmento orientado de reta,
baseada no sinal do produto vetorial, conforme apresentado na seo 1.1.2. Por
exemplo, para determinar se o ponto C est direita ou esquerda do segmento
orientado AB, basta calcular a rea do tringulo ACB pela Equao 1.1. Se esta for
positiva, o ponto C est esquerda (Figura 1.3a); se for negativa, C est direita (Figura
1.3b). Se a rea calculada for nula, ento A, B e C esto alinhados (Figura 1.3c).
Naturalmente, para esta e outras aplicaes, desnecessrio calcular a rea: apenas o
sinal do produto vetorial interessa.
B

C
C

S>0
S<0

S=0
C

(a)

(b)

(c)

Figura 1.3 - Posicionamento relativo de ponto e segmento orientado


Uma implementao possvel para este teste est apresentada no Programa 1.4. Observese que, em comparao com a funo reaTringulo, o clculo da rea est
incompleto: no h a necessidade de efetuar a diviso por 2.
funo lado(Ponto A, Ponto B, Ponto C): inteiro
/* determina se C est direita, esquerda ou alinhado com AB */
/* direita: retorna -1; esquerda: retorna 1; alinhado: retorna 0 */
incio
inteiro S;
S = A.x*C.y - A.y*C.x + A.y*B.x - A.x*B.y + C.x*B.y - C.y*B.x;
se (S < 0) ento retorne -1;
se (S > 0) ento retorne 1 seno retorne 0;
fim.

Programa 1.4 - Funo lado


A mesma formulao vale para determinar a posio relativa entre dois vetores U e V.
Se o resultado do produto vetorial U V for positivo, ento o giro de U a V antihorrio (Figura 1.4a); caso contrrio, o giro no sentido horrio (Figura 1.4b). Tambm
aqui, se o resultado for nulo, significa que os vetores so colineares (Figura 1.4c). Este
resultado importante para a ordenao de raios no algoritmo de fecho convexo de
Graham [Sedg90] (vide seo 1.1.6).

A
C

U
V

B
A

(a) U x V > 0

(b) U x V < 0

(c) U x V = 0

Figura 1.4 - Posicionamento relativo entre dois vetores


Com a funo lado, somada a um teste simples de coincidncia de pontos, denominado
sobre (Programa 1.5), pode-se implementar os dois predicados da Tabela 1.1
(Programa 1.6) e, utilizando estes, pode-se implementar alguns dos predicados
relacionados na Tabela 1.2, como iguais, seEncontram, superpostos,
alinhados e seTocam (Programa 1.7).
funo sobre(Ponto A, Ponto B): booleano
/* testa se A e B coincidem */
incio
retorne ((P.x = A.x) e (P.y = A.y));
fim.

Programa 1.5 - Funo sobre

funo em(Ponto P, Ponto A, Ponto B): booleano


/* testa se P est dentro de AB, mas no coincide com A ou B */
incio
se (lado(A, B, P) = 0) /* P pertence reta AB */
ento incio
/* se AB no for vertical, testar em x; senao, em y */
se (A.x != B.x)
ento retorne (((A.x < P.x) e (P.x < B.x)) ou
((A.x > P.x) e (P.x > B.x)) )
seno retorne (((A.y < P.y) e (P.y < B.y)) ou
((A.y > P.y) e (P.y > B.y)) );
fim ento
seno
retorne falso;
fim.
funo extremo(Ponto P, Ponto A, Ponto B): booleano
/* testa se P coincide com um ponto extremo de AB */
incio
retorne (sobre(P, A) ou sobre(P, B));
fim.

Programa 1.6 - Funes de comparao entre ponto e segmento

funo iguais(Ponto A, Ponto B, Ponto C, Ponto D): booleano


/* testa se AB e CD so iguais (coincidentes) */
incio
retorne ((sobre(A, C) e sobre(B, D)) ou
(sobre(A, D) e sobre(B, C)));
fim.
funo seEncontram(Ponto A, Ponto B, Ponto C, Ponto D): booleano
/* testa se AB e CD se encontram (um ponto extremo coincidente) */
incio
se iguais(A, B, C, D) ento retorne falso;
retorne ((sobre(A,
(sobre(A,
(sobre(B,
(sobre(B,

C)
D)
C)
D)

e
e
e
e

no
no
no
no

em(D,
em(C,
em(D,
em(C,

A,
A,
A,
A,

B)
B)
B)
B)

e
e
e
e

no
no
no
no

em(B,
em(B,
em(A,
em(A,

C,
C,
C,
C,

D)) ou
D)) ou
D)) ou
D));

fim.
funo superpostos(Ponto A, Ponto B, Ponto C, Ponto D): booleano
/* testa se AB e CD so alinhados e tm um trecho em comum */
incio
se ((lado(A, B, C) = 0) e (lado(A, B, D) = 0))
ento retorne (em(C, A, B) ou em(D, A, B) ou
em(A, C, D) ou em(B, C, D));
fim.
funo alinhados(Ponto A, Ponto B, Ponto C, Ponto D): booleano
/* testa se AB e CD so alinhados e no tm um trecho em comum */
incio
se ((lado(A, B, C) = 0) e (lado(A, B, D) = 0))
ento retorne (no em(C, A, B) e no em(D, A, B) e
no em(A, C, D) e no em(B, C, D));
fim.
funo seTocam(Ponto A, Ponto B, Ponto C, Ponto D): booleano
/* testa se AB e CD se tocam */
incio
se (alinhados(A, B, C, D) ou superpostos(A, B, C, D))
ento retorne falso
seno retorne (em(C, A, B) ou em(D, A, B) ou
em(A, C, D) ou em(B, C, D));
fim.

Programa 1.7 - Funes iguais, seEncontram, superpostos,


alinhados e seTocam
No caso do predicado paralelos, a soluo mais simples consiste em calcular e
comparar os coeficientes angulares das retas que contm os segmentos, tomando os
cuidados necessrios para o caso de retas verticais. Para evitar problemas numricos,
pode-se usar a formulao descrita abaixo.
Para que a reta AB seja paralela reta CD, devemos ter
y B y A y D yC
=
xB x A
x D xC

e portanto

(y

y A ) (x D xC ) ( y D yC ) (x B x A ) = 0

(1.4)

Desenvolvendo, temos uma forma mais elegante, e mais freqente na literatura:


x A ( y D yC ) + x B ( yC y D ) + xC ( y A y B ) + x D ( y B y A ) = 0

(1.5)

Note-se na Equao 1.5 que apenas so realizadas operaes de multiplicao e


subtrao, eliminando a necessidade de testes para casos especiais, como retas verticais.
A implementao da funo paralelos est no Programa 1.8. dada preferncia na
implementao Equao 1.4, uma vez que, quando as operaes de subtrao so
realizadas antes da multiplicao, corre-se menos risco de overflow. Observe-se os
testes de alinhamento, superposio e igualdade realizados no incio da funo,
necessrios para eliminar as outras trs situaes em que o coeficiente angular das retas
tambm coincide.
funo paralelos(Ponto A, Ponto B, Ponto C, Ponto D): booleano
/* testa se A e B so paralelos */
incio
se (alinhados(A, B, C, D) ou
superpostos(A, B, C, D) ou
iguais(A, B, C, D))
ento retorne falso;
retorne (((B.y - A.y) * (D.x - C.x) (D.y - C.y) * (B.x - A.x)) = 0);
fim.

Programa 1.8 - Funo paralelos


Existem diversas maneiras de implementar o predicado seInterceptam. A
alternativa mais conveniente consiste em usar um mtodo baseado no produto vetorial
para detectar a interseo entre dois segmentos, fazendo o exame dos tringulos que
podem ser formados por quaisquer trs dos quatro pontos extremos. Ser utilizada para
isso a funo lado, descrita anteriormente (Programa 1.4).
Cuidados especiais devero ser tomados para garantir que a interseo prpria. Se o
ponto de interseo no pertence a pelo menos um dos segmentos, diz-se que a
interseo imprpria (Figura 1.6a). Quando o ponto de interseo interior a ambos
os segmentos, como na Figura 1.5, a interseo prpria. O conceito de interseo
prpria em geral no inclui o caso em que a interseo ocorre em um dos pontos
extremos (Figura 1.6b), que corresponde ao caso dos predicados seTocam e
seEncontram.

D
A
P
B
C

Figura 1.5 - Interseo prpria de segmentos


A

B
C
P

B
D

A
C

(a)

(b)

Figura 1.6 - Interseo imprpria de segmentos


A implementao do teste de interseo entre dois segmentos pode ser dividida em duas
etapas [CLR90]. Inicialmente, utilizado um teste rpido, para determinar se os
retngulos definidos pelos segmentos se tocam. Se os retngulos no se tocarem em x ou
em y, os segmentos tambm no tero interseo, mas no se pode afirmar o contrrio
(Figura 1.7b). Este teste semelhante ao de interseo prpria. Os segmentos AB e CD
podero se tocar (Figura 1.7a) caso

(x

x 3 ) ( x 4 x1 ) ( y 2 y 3 ) ( y 4 y1 )

onde
x1 = min( x A , x B )
x 2 = max ( x A , x B )
y1 = min( y A , y B )
y 2 = max ( y A , y B )

x3
x4
y3
y4

= min( x C , x D )
= max ( x C , x D )
= min( y C , y D )
= max ( y C , y D )

ou seja, P = (x1, y1) e Q = (x2, y2) so respectivamente o canto inferior esquerdo e


superior direito do REM de AB, e P = (x3, y3) e Q = (x4, y4) so, analogamente, os
cantos do REM de CD (Figura 1.7).

Q'

Q
Q'

P
P'
P'

(a)

(b)

Figura 1.7 - Interseo de retngulos envolventes mnimos


A implementao deste teste, a funo interseoRetngulos, est apresentada
no Programa 1.9.
funo interseoRetngulos(Ponto A, Ponto B, Ponto C, Ponto D):
booleano
incio
Ponto P, Ponto Q, Ponto P1, Ponto Q1;
P.x = min(A.x, B.x);
P.y = min(A.y, B.y);
Q.x = max(A.x, B.x);
Q.y = max(A.y, B.y);
P1.x = min(C.x, D.x);
P1.y = min(C.y, D.y);
Q1.x = max(C.x, D.x);
Q1.y = max(C.y, D.y);
retorne ((Q.x >= P1.x) e (Q1.x >= P.x) e
(Q.y >= P1.y) e (Q1.y >= P.y));
fim.

Programa 1.9 - Interseo de retngulos envolventes mnimos


O segundo estgio consiste em verificar se os segmentos efetivamente se interceptam.
Isto ocorre quando os pontos extremos de um segmento ficam de lados opostos da reta
definida pelo outro, e vice-versa. Os resultados do produto vetorial tm que ter sinais
opostos (Figura 1.8a). Se apenas um dos produtos for nulo, ento um ponto extremo de
um segmento est contido na reta definida pelo outro (Figura 1.8b). Se ambos os
produtos forem nulos, os segmentos so colineares (Figura 1.8c), com interseo (a
possibilidade de colinearidade sem interseo foi descartada pelo teste dos retngulos).
O teste precisa ser aplicado duas vezes, usando cada segmento como base, ou seja, no
basta verificar se C e D esto de lados opostos da reta definida por AB, tambm
preciso verificar se A e B esto de lados opostos da reta CD.

D
B

D
D

A
(a)
(B-A) x (D-A) < 0
(B-A) x (C-A) > 0

A
(b)
(B-A) x (D-A) = 0
(B-A) x (C-A) > 0

(c)
(B-A) x (D-A) = 0
(B-A) x (C-A) = 0

Figura 1.8 - Verificao de interseo


Para implementar este teste, utiliza-se o teste de posicionamento relativo entre ponto e
reta (funo lado), gerando o predicado seInterceptam (Programa 1.10). Nesta
funo est contida uma chamada ao teste rpido de interseo de retngulos, para que
os produtos vetoriais s sejam calculados caso estritamente necessrio.
funo seInterceptam(Ponto A, Ponto B, Ponto C, Ponto D): booleano
incio
inteiro abc, abd, cda, cdb;
se no interseoRetngulos(A, B, C, D)
ento retorne falso;
abc
abd
cda
cdb

=
=
=
=

lado(A,
lado(A,
lado(C,
lado(C,

B,
B,
D,
D,

C);
D);
A);
B);

retorne ((abc * abd < 0) e (cda * cdb < 0));


fim.

Programa 1.10 - Funo seInterceptam


Se, em alguma situao, o caso de interseo em um dos pontos extremos puder ser
considerado, basta incluir uma chamada s funes seEncontram e seTocam,
gerando uma nova funo, seInterceptamImprpria (Programa 1.11).
funo seInterceptamImprpria(Ponto A, Ponto B, Ponto C, Ponto D):
booleano
incio
retorne (seEncontram(A, B, C, D) ou
seTocam(A, B, C, D) ou
seInterceptam(A, B, C, D));
fim.

Programa 1.11 - Funo seInterceptamImprpria


O predicado restante, disjuntos, implementado com testes para os demais casos,
chegando a uma concluso por excluso: dois segmentos so disjuntos se no so iguais,
nem se encontram, nem se tocam, nem so paralelos, nem se interceptam, nem se
superpem (Programa 1.12).

funo disjuntos(Ponto A, Ponto B, Ponto C, Ponto D): booleano


incio
retorne (no
no
no
no
no
no
fim.

iguais(A, B, C, D) e
seEncontram(A, B, C, D) e
seTocam(A, B, C, D) e
paralelos(A, B, C, D) e
superpostos(A, B, C, D) e
seInterceptam(A, B, C, D));

Programa 1.12 - Funo disjuntos


A funo seInterceptam serve para determinar, rapidamente e com o mnimo de
problemas numricos possvel, se um par de segmentos tem interseo, o que
suficiente em diversas situaes. O clculo das coordenadas deste ponto de interseo
exige um pouco mais de esforo.
A primeira e mais bvia soluo baseada em geometria analtica. Dados dois pares de
pontos, cada par definindo um segmento no plano, deve-se deduzir as equaes das retas
e resolver um sistema de duas equaes e duas incgnitas, cuja soluo o ponto de
interseo.
A formulao a seguinte: sejam AB e CD dois segmentos de reta quaisquer no plano
(Figura 1.5). A reta que passa por A e B tem a seguinte equao:
y = a1 x + b1 .

(1.6)

Como na reta AB temos


y y A yB y A
,
=
x xA
xB x A
ento
a1 =

yB y A
e b1 = y A a1 x A .
xB x A

O mesmo se aplica reta CD, produzindo


y = a 2 x + b2 ,
e
a2 =

y D yC
e b2 = y C a 2 x C .
x D xC

Resolvendo o sistema formado pelas equaes 1.6 e 1.7, temos

(1.7)

x=

b2 b1
b2 a1 b1a 2
ey=
a1 a 2
a1 a 2

(1.8)

A soluo para o sistema indica o ponto de interseo entre as retas AB e CD, que no
necessariamente pertence aos segmentos AB e CD. Assim, um teste adicional
necessrio para verificar se a interseo ou no prpria. Isto pode ser feito verificando
se ambas as coordenadas do ponto de interseo P esto dentro do intervalo formado
pelas coordenadas dos pontos extremos de ambos os segmentos, ou seja:
min( x A , x B ) x P max ( x A , x B ) e min( y A , y B ) y P max ( y A , y B )
e tambm
min( x C , x D ) x P max ( x C , x D ) e min( y C , y D ) y P max ( y C , y D ) .
necessrio permitir a condio de igualdade, nos testes acima, de modo a considerar o
caso de retas verticais ou horizontais. Portanto, para garantir que a interseo seja
prpria, ser ainda necessrio comparar diretamente o ponto de interseo com os
pontos extremos dos segmentos.
Embora a formulao acima parea ser uma boa maneira de resolver o problema, alguns
obstculos e inconvenincias persistem. Em primeiro lugar, um programa que
implemente esta formulao precisa lidar com a possibilidade de se obter zero em um
dos denominadores. Isto pode acontecer em trs situaes: (1) a reta AB vertical
(xA = xB), (2) a reta CD vertical (xC = xD), ou (3) as retas AB e CD so paralelas
(a1 = a2). Nos casos (1) e (2), o ponto de interseo pode ser calculado de forma trivial,
aplicando a abscissa da reta vertical equao da outra reta. No caso (3) fica claro que
as retas no tm ponto de interseo, e portanto o problema no tem soluo, i.e., no
existe ponto de interseo, prprio ou imprprio. Em todos os casos, no entanto, mas
problemas numricos ainda podem surgir quando o denominador quase zero. Lidar
com estas excees no cdigo pode ser problemtico, levando ao desenvolvimento de
programas menos robustos.
Uma soluo um pouco mais conveniente para o problema usa tambm a geometria
analtica, mas aplica uma representao paramtrica para os segmentos que evitar as
inconvenincias listadas acima. Esta formulao a seguinte: seja AB um segmento de
reta qualquer no plano. Seja U = B A um vetor correspondente ao segmento.
Qualquer ponto P ao longo da reta que passa por A e B pode ser obtido a partir da soma
vetorial P( s) = A + sU , onde s denominado o parmetro da equao. Mas temos que
P(0) = A , e P(1) = A + U = B , e possvel chegar a qualquer ponto do segmento AB
variando s entre 0 e 1.

Analogamente, pode-se representar o segmento CD pela expresso Q(t ) = C + tV , onde


V = D C e t o parmetro. Um ponto de interseo entre AB e CD aquele para o
qual P( s) = Q(t ) , e portanto A + sU = C + tV . Decompondo os pontos e os vetores em
coordenadas, temos novamente um sistema de duas equaes e duas incgnitas em s e t,
cuja soluo [ORou94]:
s=

x A ( y D yC ) + xC ( y A y D ) + x D ( yC y A )
denom

(x (y
t=
A

y B ) + x B ( y A yC ) + xC ( y B y A )

(1.9)

denom

onde
denom = x A ( y D y C ) + x B ( y C y D ) + x C ( y A y B ) + x D ( y B y A )
As coordenadas do ponto de interseo I sero:
x I = x A + s( x B x A )

y I = y A + s( y B y A )

(1.10)

mas a interseo somente ser prpria se 0 < s < 1 e 0 < t < 1.


Observe-se que o valor de denom equivalente expresso esquerda da Equao 1.5,
e mais uma vez mais conveniente implement-la sob a forma da Equao 1.4. Se
denom for igual a zero, ento os segmentos so paralelos e no existe ponto de
interseo. No caso, mais conveniente calcular o valor de denom e no utilizar a
funo paralelas para detectar este caso especial, uma vez que denom ser utilizado
no clculo de s e t.
A implementao est no Programa 1.13. A funo pontoInterseo retornar um
valor booleano, indicando se existe ou no o ponto de interseo prprio, enquanto o
ponto propriamente dito, se existir, ser retornado na varivel I.
Em uma tentativa de evitar que o clculo seja feito inutilmente, ou seja, para evitar que
um ponto de interseo imprprio seja calculado, inseriu-se no incio da funo um teste
preliminar, usando o predicado seInterceptam. Note-se tambm que os problemas
numricos no so totalmente eliminados com esta implementao. Ainda existe o risco,
por exemplo, de se ter um valor de denom exageradamente alto, correspondente
situao em que as retas so quase paralelas, podendo gerar impreciso numrica no
clculo de s e t. Faz sentido, portanto, assumir o custo adicional do teste
seInterceptam, que incorpora o teste simples e seguro de interseo de retngulos,
para evitar ao mximo situaes numericamente problemticas.

funo pontoInterseo(Ponto A, Ponto B, Ponto C, Ponto D, Ponto I):


booleano
incio
real s, t, denom;
se no seInterceptam(A, B, C, D)
ento retorne falso;
denom = ((B.y - A.y) * (D.x - C.x) - (D.y - C.y) * (B.x - A.x));
se (denom = 0)
ento retorne falso;
s = (A.x *
C.x *
D.x *
t = - (A.x
B.x
C.x

(D.y (A.y (C.y * (C.y


* (A.y
* (B.y

C.y) +
D.y) +
A.y)) / denom;
- B.y) +
- C.y) +
- A.y) / denom;

se ((s > 0) e (s < 1) e (t > 0) e (t < 1))


ento incio
I.x = A.x + s * (B.x - A.x);
I.y = A.y + s * (B.y - A.y);
retorne verdadeiro;
fim
seno retorne falso;
fim.

Programa 1.13 - Funo pontoInterseo


1.1.2.3 Robustez numrica das implementaes

Como j mencionado, um dos principais problemas que afetam os algoritmos


geomtricos a robustez numrica da implementao. Como se sabe, a representao de
nmeros reais em computador limitada, em termos de preciso. No entanto, o
desenvolvimento terico dos algoritmos baseada na hiptese de que se dispe de
operadores aritmticos com preciso infinita, ignorando em sua concepo os possveis
erros de arredondamento.
No momento da implementao prtica, o programador em geral ignora este problema, e
passa a conviver com uma srie de problemas que so tratados caso a caso. Isso ajuda a
explicar parte da instabilidade de comportamento que infesta os SIG comerciais,
especialmente quando se trata de operaes sobre objetos geogrficos vetoriais. A
correo destes problemas feita, em geral, introduzindo tolerncias em lugar de
testes exatos. Por exemplo, a comparao se denom = 0 na funo
pontoInterseo pode ser implementada na prtica como se denom < ,
para evitar overflow numrico na expresso seguinte, e para diminuir provveis
problemas de arredondamento. Ainda assim, existe dvida sobre qual valor de utilizar.
A concepo e a descrio dos algoritmos apresentados na seo anterior procurou
evitar ao mximo possveis problemas numricos. Dentre todas as funes apresentadas
na seo anterior, apenas trs contm riscos relativos robustez numrica de
implementao: as funes lado, paralelos e pontoInterseo Todas as
outras funes que poderiam apresentar problemas numricos, como em,
superpostos e alinhados, utilizam diretamente uma dessas funes. O problema

numrico da funo lado est na exatido do teste de alinhamento dos trs pontos,
anlogo ao clculo da diferena entre inclinaes na funo paralelos e ao clculo
de denom em pontoInterseo. Seria possvel estabelecer uma tolerncia para as
comparaes nestas situaes? No caso de aplicaes de SIG, a tolerncia precisaria
variar de acordo com o sistema de coordenadas e com a escala da representao. Uma
possibilidade tambm seria a determinao da tolerncia por parte do usurio,
considerando estes fatores, para cada camada de informao vetorial.
ORourke [ORou94] observa que a introduo generalizada de tolerncias pode causar
problemas em outras reas, como na deteco de pontos coincidentes (funo sobre), e
sugere que o nico mtodo infalvel de soluo seria implementar os algoritmos usando
nmeros racionais, ao preo de tornar o cdigo excessivamente complexo. Novamente,
o caminho de soluo mais interessante parece ser o proposto pela geometria
computacional de preciso finita [Schn97], mas ao custo de uma maior complexidade na
implementao de funes bsicas como as de interseo entre dois segmentos.
1.1.3 Interseo de n segmentos
Informalmente, este problema pode ser enunciado da seguinte maneira: dados n
segmentos de reta no plano, determinar se existe alguma interseo entre quaisquer dois
destes segmentos. Um problema correlato seria: dados n segmentos de reta no plano,
determinar todas as intersees que ocorram.
A idia para soluo do primeiro problema vem da anlise de intervalos em uma
dimenso. Considere-se que, em vez de n segmentos, tenha-se n intervalos entre
nmeros reais, do tipo [xL, xR], onde x L x R . Uma soluo exaustiva seria analisar
todos os n2 pares de intervalos existentes, comparando-os sempre dois a dois, e
interrompendo o processamento assim que a primeira interseo fosse detectada.
No entanto, uma maneira mais eficiente de resolver o problema construir uma lista
ordenada dos valores extremos dos intervalos, tomando o cuidado de identific-los
como sendo L ou R, de acordo com sua situao no intervalo. Assim, no haver
interseo alguma entre os intervalos se e somente se a lista ordenada contiver uma
seqncia alternada de Ls e Rs: L R L R ... L R L R. Em qualquer outra situao, pode-se
afirmar que existe superposio entre algum par de intervalos (Figura 1.9). Esta soluo
tem complexidade computacional da ordem de O(n log n), uma vez que dominada pela
ordenao dos valores extremos [PrSh88].

(a)

(b)

Figura 1.9 - Verificao de interseo em intervalos na reta


Em duas dimenses, o problema torna-se um pouco mais complicado, j que no existe
maneira de produzir uma ordenao adequada para segmentos no plano. A tcnica
empregada clssica na geometria computacional, e denominada de varredura do
plano (plane sweep). Esta tcnica faz uso de duas estruturas de dados bsicas, uma para
registrar a situao da linha de varredura (sweep line status), e a outra que registra
eventos ocorridos durante a varredura (event-point schedule).
A idia consiste em deslocar uma reta vertical pelo conjunto de segmentos, buscando
identificar inverses na ordem em que esta reta encontra dois segmentos quaisquer. Para
implementar esta idia, necessrio definir uma nova relao de comparao, da
seguinte forma: considere-se dois segmentos s1 e s2 no plano, sendo que s1 no
intercepta s2. Diz-se que s1 comparvel a s2 se, para alguma abscissa x, existe uma
linha vertical que intercepta tanto s1 quanto s2. Assim, diz-se que s1 est acima de s2 em
x se, naquela abscissa, a interseo da reta com s1 est acima da interseo da reta com
s2. Esta relao denotada como s1 >x s2. Na Figura 1.10, temos as seguintes relaes: s3
>v s2; s4 >v s3; s4 >v s2; s4 >w s2; s4 >w s3; s2 >w s3.

s4

s1

s2

Figura 1.10 - Relao de ordenao entre segmentos

Com esta relao construda uma ordenao total dos segmentos, que muda medida
em que a linha deslocada da esquerda para a direita. Nesse processo de varredura do
plano, trs coisas podem ocorrer:
o ponto extremo esquerda de um segmento encontrado; o segmento , portanto,
inserido na ordenao;
o ponto extremo direita de um segmento encontrado; o segmento , portanto,
retirado da ordenao;
um ponto de interseo entre dois segmentos s1 e s2 foi encontrado; portanto, s1 e s2
trocam de posio na ordenao.
Observe-se que, para que s1 e s2 possam trocar de posio, necessrio que exista algum
x para o qual s1 e s2 so consecutivos na ordenao. O algoritmo usa este fato, testando
apenas elementos consecutivos, medida em que novos eventos vo sendo detectados
conforme descrito acima.
Portanto, necessrio operar duas estruturas de dados no processo. A primeira (sweep
line status) a responsvel por manter a ordenao das intersees dos segmentos com a
linha de varredura, e usualmente implementada como um dicionrio [PrSh88] ou
como uma rvore red-black [CLR90]. As operaes que o sweep line status deve
suportar so insero (insere, complexidade O(log n)), excluso (exclui, tambm
O(log n)), e duas funes para determinar qual segmento est imediatamente acima e
imediatamente abaixo de um segmento dado na ordenao (acima e abaixo, O(1)). A
segunda estrutura de dados (event-point schedule) responsvel por manter a seqncia
das abscissas que sero analisadas pela linha de varredura, e implementada como uma
fila de prioridades. Deve suportar as clssicas operaes de incluso (insere), retirada
do elemento de mais alta prioridade (min) e uma funo que testa a presena de um
determinado elemento na estrutura (membro), todas com complexidade O(log n).
Inicialmente, as abscissas dos pontos extremos dos segmentos so ordenadas e inseridas
no event-point schedule. Em seguida, as abscissas so retiradas a partir da menor, e so
realizadas as seguintes operaes:
Se a abscissa corresponder a um ponto extremo esquerda de algum segmento,
inserir o segmento no sweep line status. Verificar se existem intersees entre este
segmento e os segmentos que esto imediatamente acima e abaixo dele na linha de
varredura. Caso exista interseo, a abscissa do ponto de interseo deve ser
calculada e inserida no event-point schedule, caso j no pertena a ele.
Se for um ponto extremo direita, excluir o segmento do sweep line status. Verificar
se existem intersees entre os segmentos que esto imediatamente acima e abaixo
dele na linha de varredura. Caso exista interseo (que estar necessariamente
direita do ponto extremo), a abscissa do ponto de interseo deve ser calculada e
inserida no event-point schedule, caso j no pertena a ele.
Se for um ponto de interseo entre dois segmentos, trocar a posio destes
segmentos no sweep line status. Informar a existncia de um ponto de interseo e
suas coordenadas.

O algoritmo final est delineado no Programa 1.14. Para melhorar a legibilidade, foram
omitidos detalhes da implementao e uso das estruturas de dados bsicas, como as
listas e a fila de prioridades.
procedimento interseoNSegmentos
incio
FILA A;
FILA_DE_PRIORIDADES E;
SWEEP_LINE_STATUS L;
Segmento s, s1, s2, s3, s4;
Ponto I;
ordenar os 2N pontos extremos por x e y;
organizar os pontos extremos em uma fila de prioridades E;
A = nil;
enquanto (E != nil) faa incio
p = min(E);
se (p extremo esquerda) ento incio
s = segmento do qual p ponto extremo;
insere(s, L);
s1 = acima(s, L);
s2 = abaixo(s, L);
se (seInterceptam(s1.p1, s1.p2, s.p1, s.p2)) ento
insere(s1, s, A);
se (seInterceptam(s2.p1, s2.p2, s.p1, s.p2)) ento
insere(s, s2, A);
fim
seno incio
se (p extremo direita) ento incio
s1 = acima(s, L);
s2 = abaixo(s, L);
se (pontoInterseo(s1.p1,s1.p2, s2.p1,s2.p2, I)) ento
se (I.x > p.x) ento insere(s1, s2, A);
exclui(s, L);
fim
seno incio /* p uma interseo */
s1 = segmento que intercepta s2 em p;
s2 = segmento que intercepta s1 em p;
/* sendo s1 acima de s2 esquerda de p */
s3 = acima(s1, L);
s4 = abaixo(s2, L);
se (seInterceptam(s3.p1, s3.p2, s2.p1, s2.p2)) ento
insere(s3, s2, A);
se (seInterceptam(s1.p1, s1.p2, s4.p1, s4.p2)) ento
insere(s1, s4, A);
trocar s1 e s2 de posio em L;
fim;
fim;
/* processamento das intersees */
enquanto (A != nil) faa incio
retira(s, s1, A);
x = abscissa da interseo de s e s1;
se (membro(x, E) = FALSO) ento incio
sada(Existe interseo entre ,s, e , s1);
insere(x, E);
fim;
fim;
fim;
fim.

Programa 1.14 - Interseo entre N segmentos

Com relao complexidade deste algoritmo, observa-se que, inicialmente, a operao


de ordenao consome tempo O(n log n). As operaes executadas a cada passo no
event-point schedule consomem O(log n), correspondente ao pior caso das trs
operaes mutuamente exclusivas que atuam sobre o sweep line status. O teste de
interseo propriamente dito (pontoInterseo) executado em tempo constante.
O nmero de iteraes do lao principal 2n + K, onde K o nmero de intersees, o
que corresponde ao nmero de eventos que so inseridos no event-point schedule. O
lao mais interno, de tratamento das intersees, pode potencialmente ser executado a
cada iterao do lao principal, sendo portanto executado O(n + K) vezes. Como cada
execuo do teste de presena na fila de prioridades executada em tempo logartmico,
n
temos o tempo O(log(n + K)). Mas como K = O(n 2 ) , ento o tempo fica sendo
2
simplesmente O(log(n)). Portanto, o tempo total do lao externo O((n + K) log n)
[PrSh88].
Com ligeiras modificaes, o programa acima pode ser modificado para verificar se
existe alguma interseo entre os n segmentos. Neste caso, no necessrio manter a
fila de prioridades, pois a primeira interseo detectada interromper o algoritmo, e o
event-point schedule pode ser implementado como um simples arranjo [CLR90]. Com
isso, a complexidade computacional cai para O(n log n), tendo sido demonstrado que
este resultado timo [PrSh88].
Em SIG, o algoritmo de deteco de intersees entre n segmentos tem muita utilidade
na deduo de relaes topolgicas (como toca ou cruza), na deteco de intersees
entre poligonais, entre polgonos ou entre poligonais e polgonos. Tambm serve para
verificar a qualidade de dados digitalizados, testando se uma dada poligonal ou polgono
possui auto-intersees indesejveis.
1.1.4 Simplificao de poligonais
Muitas entidades do mundo real podem ser modeladas como linhas ou, mais
genericamente, poligonais. Essas entidades so freqentes em bases de dados
geogrficas, onde correspondem tipicamente a cerca de 80% do volume de dados
vetoriais [McSh92]. So usadas para representar feies tais como rios, estradas, ruas,
linhas de transmisso e adutoras. Os nomes dados pelos SIG comerciais a essas
entidades, no entanto, variam muito: linha, polilinha (polyline), line string, arco, 1-cell,
poligonal, cadeia (chain), e outros [Davi97]. A complexidade das representaes
lineares em SIG pode variar de simples segmentos de reta (dois pares de coordenadas),
como um trecho de tubulao de esgoto, at poligonais contendo milhares de pares de
coordenadas, como um rio ou uma curva de nvel.
Os algoritmos que trabalham com poligonais3 so muito importantes para os SIG, uma
vez que diversas operaes bsicas, freqentemente repetidas, so baseadas neles. Em
particular, estamos interessados em estudar problemas relacionados representao de
objetos utilizando poligonais, visando conseguir formas de representao mais simples e
3

Deste ponto em diante, ser utilizado o termo poligonal, em lugar de simplesmente linha, para evitar
confuso com a definio geomtrica da linha reta (infinita).

compactas a partir de dados mais detalhados. Dentro desse escopo, necessrio levar
em considerao que uma das caractersticas da poligonal em cartografia o fato de
possuir sempre uma espessura [Peuc75][Bear91], o que a distingue da linha geomtrica
ideal.
1.1.4.1 Caracterizao do Problema

Linhas poligonais so utilizadas em muitas situaes para aproximar e representar


vetorialmente os limites de objetos complexos encontrados em aplicaes de
cartografia, SIG, computao grfica, reconhecimento de padres e outros [ImIr86]. O
problema de simplificao de linhas particularmente importante em cartografia e SIG,
e estudado intensivamente desde os anos 60, quando ocorreram as primeiras
experincias com o uso de instrumentos de transcrio de mapas para o computador,
como a mesa digitalizadora. No processo de digitalizao de linhas com esses
instrumentos, freqentemente so introduzidos vrtices em excesso, vrtices que, se
descartados, no provocariam uma alterao visual perceptvel na poligonal. Assim, um
primeiro objetivo para algoritmos de simplificao de linhas limpar
(significativamente, o verbo utilizado em ingls weed, capinar) a poligonal de
pontos claramente desnecessrios, do ponto de vista de sua visualizao [Weib95],
mantendo a qualidade de sua aparncia grfica.
Outro objetivo o de gerar uma nova verso da linha, uma verso mais adequada para a
representao do mesmo fenmeno geogrfico em outra escala, menor que a escala
original de digitalizao. Neste caso, est sendo obtida uma generalizao da linha
[McSh92]. Em uma extenso deste enfoque, existe o interesse em organizar os vrtices
da poligonal de tal forma que seja possvel produzir, dinamicamente, verses
generalizadas adequadas para uma escala definida no momento da visualizao
[Oost93][OoSc95], conseguindo portanto gerar mltiplas representaes geomtricas
para o mesmo fenmeno sem introduzir dados redundantes. No entanto, a utilizao de
mtodos e algoritmos desenvolvidos originalmente apenas pensando na reduo do
nmero de vrtices da linha podem no ser adequados para alcanar o objetivo de
generalizao [LiOp92], em geral por no conseguirem uma boa representao
geomtrica4, e portanto devem ser analisados cuidadosamente quanto a este aspecto.
Medidas de proximidade. Assim, o problema de simplificao de linhas consiste em
obter uma representao mais grosseira (formada por menos vrtices, e portanto mais
compacta) de uma poligonal a partir de uma representao mais refinada, atendendo a
alguma restrio de aproximao entre as duas representaes. Essa restrio pode ser
definida de vrias maneiras [McMa86], mas em geral alguma medida da proximidade
geomtrica entre as poligonais, tais como o mximo deslocamento perpendicular
permitido (Figura 1.11a) ou o mnimo deslocamento angular permitido (Figura 1.11b).
Na Figura 1.11a, o vrtice 2 ser mantido, uma vez que a distncia entre ele e a reta que
passa pelos vrtices 1 e 3 superior permitida. Na Figura 1.11b, o vrtice 3 ser
eliminado, uma vez que o ngulo 324 menor que o mnimo tolervel. Uma alternativa


Para auxiliar na manuteno do aspecto natural da poligonal, existem enfoques que integram algoritmos
de simplificao com algoritmos de suavizao [McMa89].

mais rara a rea entre as poligonais (Figura 1.11c), onde se estabelece um limite para
ao deslocamento de rea.
3

3
2

4
ngulo mnimo

distncia mxima
1

(a)

(b)
3
2

deslocamento de
rea mximo
1

(c)

Figura 1.11 - Medidas de proximidade para simplificao de linhas


Dentre todas as medidas possveis, a mais utilizada a distncia perpendicular. Este fato
provavelmente deriva de trabalhos antigos, como o de Perkal ([Perk66] apud [Bear91]).
Perkal props o conceito de banda epsilon como sendo a regio ao redor da poligonal
que contm todos os pontos do plano situados a uma distncia menor que ou igual a ,
em uma tentativa de simular o comportamento da linha cartogrfica, que tem largura
definida [Peuc75]. Foi tambm definido que uma poligonal -convexa se todos os
pontos dela tivessem raio de curvatura superior a . Caso isso no ocorra, a banda
epsilon se auto-intercepta, indicando perda de legibilidade. Este raciocnio valida o
trabalho com distncias perpendiculares, embora nos algoritmos que a utilizam no
esteja explcito qualquer teste de -convexidade5.
O conceito de banda de tolerncia, apoiado no clculo de distncias perpendiculares,
utilizado em grande parte dos algoritmos de simplificao que sero apresentados a
seguir. Um problema eventualmente abordado na literatura a escolha do parmetro de
tolerncia (), e sua correlao com a escala da representao simplificada.
Uma regra freqentemente utilizada em cartografia a chamada Lei do Radical
[ToPi66], que determina que o nmero de objetos a serem mantidos em uma operao
de generalizao deve ser proporcional raiz quadrada da mudana de escala. Esta regra
foi deduzida a partir da observao emprica da tendncia apresentada pelos cartgrafos
em manter aproximadamente mesma quantidade de objetos em um mapa de
determinada escala. Considerando seu sucesso para esta finalidade prtica, foi tentada
sua adaptao para determinar a variao da tolerncia em funo da escala, e para
definir o nmero de segmentos a manter em cada poligonal simplificada. No entanto,

Um algoritmo baseado nestes conceitos foi implementado em um software chamado WHIRLPOOL


[Bear91], mas sua utilizao comprometida por sua tendncia em alterar a topologia percebida das
poligonais durante o processo de generalizao, especialmente nas situaes em que canais estreitos e
pennsulas so estrangulados e ilhas inexistentes so formadas. Devido a este problema, o algoritmo de
Perkal no ser abordado por este trabalho.

seu efeito incuo para o problema de simplificao, pois conduz a uma seleo
aleatria dos objetos e segmentos de poligonal que sero mantidos, assumindo que a
poligonal um conjunto de vrtices equiprovveis [Butt85]. Assim, em generalizao a
Lei do Radical continua sendo til na determinao prtica de quantos objetos devem
ser mantidos pelo processo de generalizao embora no permita determinar quais
seriam estes objetos.
Um enfoque mais interessante o que determina a tolerncia com base no tamanho do
menor objeto visvel em uma determinada escala [LiOp92]. Este tamanho pode ser dado
em termos de uma distncia medida no espao de coordenadas do mapa plotado, ou seja,
em milmetros do papel, independente da escala utilizada. Assim, definida uma
correspondncia linear entre a escala e a tolerncia linear adotada. No existe, contudo,
consenso sobre este critrio. Existem indicaes que o valor ideal seria funo no
apenas da escala, mas tambm da complexidade da poligonal [Horn85][Butt89]. Por
exemplo, um parmetro fixo poderia simplificar suficientemente uma poligonal mais
simples, e no simplificar suficientemente uma poligonal mais complexa. Este
fenmeno pode ocorrer at mesmo dentro de uma dada poligonal, em situaes da
natureza que fazem com que a estrutura do fenmeno representado pela poligonal mude.
Apesar de todos os problemas relatados, a escolha de um parmetro fixo de tolerncia
parece ser mais indicado para aplicaes prticas do que, por exemplo, a minimizao
do nmero de segmentos da poligonal [GHMS93], ou o acoplamento da distncia linear
com algum critrio de otimizao geomtrica [Crom88][CrCa91]. A escolha do
parmetro de tolerncia linear ideal ainda discutida, no havendo consenso na
literatura. Para aplicaes prticas, no entanto, vai-se levar em especial considerao as
necessidades da aplicao proposta. Portanto, a escolha do parmetro de tolerncia, seja
ele linear, angular ou de rea, buscar eficincia geomtrica e computacional na
generalizao de poligonais para representao em tela.
Clculo de distncias ponto-reta. Grande parte dos algoritmos de simplificao que
sero apresentados a seguir necessita realizar de maneira eficiente clculos de distncia
entre um ponto dado e uma reta definida por outros dois pontos. A maneira mais
interessante de calcular essa distncia utilizar o produto vetorial, conforme
apresentado na seo 1.1.2, para determinar a rea S do tringulo formado por um ponto
A e uma reta definida por outros dois (B e C), de acordo com a equao 1.1. Assim, a
distncia do ponto A reta definida pelos pontos B e C pode ser calculada como:
d=

| S|
dist ( B, C )

onde dist(B, C) a distncia euclidiana entre os pontos B e C, e o nico valor que tem
que ser testado contra zero para evitar erros numricos no processamento.
Algoritmos hierrquicos e no-hierrquicos. O resultado do algoritmo de
simplificao pode ser (1) uma nova poligonal formada por um subconjunto dos pontos
da poligonal original, ou (2) uma poligonal que formada por pontos distintos dos que
formam a poligonal original, exceo do primeiro e do ltimo [ZhSa97]. No primeiro
caso, se a aplicao de tolerncias progressivamente menores simplesmente causam a
incluso de novos vrtices nova poligonal, o algoritmo dito hierrquico [Crom91].
Mais formalmente, o algoritmo hierrquico aquele em que todos os vrtices

selecionados para produzir uma poligonal de n vrtices sero tambm selecionados


quando for gerada uma poligonal com n+1 vrtices.
Na literatura existem propostas de utilizao de algoritmos hierrquicos para construir
bases de dados geogrficas independentes de escala [BCA95][OoSc95]. Estes estudos
indicam que os algoritmos hierrquicos so mais eficientes na reduo do tempo
operacional, j que a simplificao fica reduzida a uma operao de recuperao de
dados ou, caso tenha sido formada uma estrutura de dados adequada, a uma operao de
pruning [Crom91]. Por outro lado, os algoritmos no-hierrquicos tendem a produzir
representaes mais eficientes, com relao preservao de algumas caractersticas
geomtricas da linha [BCA95], de acordo com parmetros geomtricos estabelecidos na
literatura (vide seo 0).
Classificao dos algoritmos. Uma classificao dos algoritmos de simplificao de
linhas foi proposta em [McMa87a], considerando a poro da linha que processada a
cada passo (Tabela 1.3).
Tabela 1.3 - Classificao dos algoritmos de simplificao de poligonais
Categoria

Descrio

Exemplos

Algoritmos de pontos
independentes

No consideram as relaes geomtricas


entre vrtices vizinhos; operam de forma
independente da topologia

k-simo ponto [Tobl64]

Usam as caractersticas dos vrtices vizinhos


imediatos para determinar seleo/rejeio
do ponto

Jenks [Jenk81]

Algoritmos de
processamento local
restrito estendidos

Pesquisam alm dos vizinhos imediatos,


avaliando sees da poligonal de cada vez.
O tamanho das sees depende de critrios
baseados em distncias, ngulos ou nmero
de vrtices

Lang [Lang69]

Algoritmos de
processamento local
estendido irrestrito

Pesquisam alm dos vizinhos imediatos,


avaliando sees da poligonal de cada vez.
O tamanho das sees limitado pela
complexidade geomorfolgica da poligonal,
e no por critrios determinados no
algoritmo

Reumann-Witkam
[ReWi74]

Consideram a poligonal inteira no


processamento. Selecionam pontos crticos
iterativamente.

Douglas-Peucker
[DoPe73]

Algoritmos de
processamento local

Algoritmos globais

seleo aleatria de
pontos [RSM78]

Visvalingam-Whyatt
[ViWh93]

Opheim [Ophe81]

Zhao-Saalfeld [ZhSa97]

A classificao acima no considera as propostas includas em [PAF95], onde so


apresentadas duas novas formas de representao simplificada de poligonais. A primeira
delas a representao freqencial, baseada em sries de Fourier e wavelets, que tentam
capturar as tendncias oscilatrias presentes em alguns tipos de linhas, como curvas de
nvel e hidrografia. A segunda a representao da poligonal com uma seqncia de

curvas algbricas (conjuntos de arcos cbicos), adequada para estradas e outras feies
construdas pelo homem. Esta adoo de recursos diferentes para a simplificao de
elementos diferentes conduz necessidade de dividir a linha em sees que sejam
razoavelmente homogneas em relao a alguns parmetros geomtricos, tais como
sinuosidade, complexidade, homogeneidade local e densidade de pontos. De modo
geral, no entanto, os algoritmos de simplificao existentes no conseguem captar este
tipo de comportamento da linha, com a possvel exceo dos algoritmos globais, e ainda
assim com problemas [ViWh93].
Avaliao da qualidade da simplificao. A avaliao da qualidade da simplificao
foi proposta por McMaster [McMa86] com base em uma srie de medidas geomtricas.
Estas medidas so divididas em duas categorias: medidas de atributos de uma nica
linha, e medidas de deslocamento entre a poligonal original e a poligonal resultante. So
ainda divididas em grupos, de acordo com a grandeza geomtrica que est sendo
avaliada em cada caso. Estas medidas esto listadas na Tabela 1.4.
Tabela 1.4 - Medidas para avaliao da qualidade da simplificao de linhas
I. Medidas de
atributos lineares

A. Dados sobre o
comprimento
B. Dados sobre vrtices

C. Dados sobre ngulos

D. Dados sobre
curvilinearidade

II. Medidas de
deslocamento
linear

E. Dados de diferenas
vetoriais

F. Dados de diferenas
poligonais

1. Razo de mudana no comprimento da linha


2. Razo de mudana no nmero de vrtices
3. Diferena do nmero mdio de vrtices por unidade de
comprimento
4. Razo de mudana do desvio padro de nmero de vrtices
por unidade de comprimento
5. Razo de mudana da angularidade (somatrio dos ngulos
entre vetores consecutivos)
6. Razo de mudana da angularidade esquerda (positiva)
7. Razo de mudana da angularidade direita (negativa)
8. Diferena na mudana angular mdia por unidade de
comprimento
9. Diferena na mudana angular mdia para cada ngulo
individual
10. Razo de mudana do nmero de ngulos positivos
11. Razo de mudana do nmero de ngulos negativos
12. Diferena na mudana angular positiva mdia para cada
ngulo individual
13. Diferena na mudana angular negativa mdia para cada
ngulo individual
14. Razo de mudana do nmero de segmentos curvilneos
(seqncias de ngulos positivos ou negativos)
15. Razo de mudana da mdia do nmero de segmentos
curvilneos
16. Razo de mudana do comprimento mdio dos segmentos
curvilneos
17. Razo de mudana do desvio padro do comprimento
mdio dos segmentos curvilneos
18. Somatrio das diferenas vetoriais por unidade de
comprimento
19. Nmero de diferenas vetoriais positivas por unidade de
comprimento
20. Nmero de diferenas vetoriais negativas por unidade de
comprimento
21. Somatrio das diferenas vetoriais positivas por unidade de
comprimento
22. Somatrio das diferenas vetoriais negativas por unidade de
comprimento
23. Diferena de rea total (rea entre as poligonais)

G. Dados de permetro

24. Nmero de polgonos-diferena positivos por unidade de


comprimento
25. Nmero de polgonos-diferena negativos por unidade de
comprimento
26. Diferena de rea positiva por unidade de comprimento
27. Diferena de rea negativa por unidade de comprimento
28. Permetro total das diferenas de rea (comprimento ao
redor dos polgonos de diferena) por unidade de comprimento
29. Permetro total das diferenas de rea positivas
(comprimento ao redor dos polgonos de diferena) por
unidade de comprimento
30. Permetro total das diferenas de rea negativas
(comprimento ao redor dos polgonos de diferena) por
unidade de comprimento

Foram analisadas em [McMa86] todas as 30 medidas listadas na Tabela 1.4, para 31


poligonais cartogrficas diferentes6, com caractersticas geomorfolgicas variadas. As
poligonais foram inicialmente digitalizadas e limpas, at que se tornassem, quando
plotadas, cpias fiis das linhas contidas nos mapas originais. Em seguida, o mesmo
algoritmo de simplificao (no caso, o algoritmo Douglas-Peucker) foi aplicado a cada
uma delas, com vrias tolerncias, obtendo-se as medidas acima para cada situao. Ao
final do processo, aps uma anlise estatstica rigorosa, o autor concluiu pela
possibilidade de se reduzir o nmero de medies a apenas seis, que so suficientemente
descorrelacionadas para permitir uma comparao adequada. Estas medidas so:
Mudana percentual no nmero de vrtices: fornece uma indicao do grau de
compactao atingido, mas s pode ser usada para verificar a qualidade da simplificao
em conjunto com outras medidas. Mais formalmente, pode ser definida como:
MPCV =

n
100
n

onde n o nmero de vrtices da poligonal simplificada, e n o nmero de vrtices da


poligonal original.
Mudana percentual no desvio padro do nmero de coordenadas por unidade de
comprimento: mede a regularidade da insero de vrtices ao longo da poligonal,
indicando se a linha resultante assumiu uma densidade uniforme de vrtices em relao
linha original. Ou seja:
MPCN =

(n ) l
100
( n) l

onde l o comprimento da poligonal simplificada, e l o comprimento da poligonal


original.

Neste e em outros estudos existe a preocupao em utilizar naturally occurring lines, ou seja, poligonais
usadas para delimitar ou representar fenmenos que ocorrem na natureza, considerando uma ampla gama
de fenmenos: curso e esturio de rios, linhas costeiras e curvas de nvel, por exemplo. Dentro de cada
tipo de fenmeno, busca-se selecionar poligonais com comportamento variado. Por exemplo seriam
includos tanto rios jovens, com muitos meandros de curvatura brusca, quanto rios antigos, com curvas
suaves e em menor quantidade. Um estudo anterior que procurou utilizar estes critrios foi [Mari79].

Mudana percentual na angularidade: avalia a reduo da microssinuosidade aps


a simplificao. Esta medida pode ser definida como:
n 3

MPCA =

ang (v , v

i +1

, vi + 2 )

ang(v , v

i +1

, vi +2 )

i =0
n3

i =0

100

onde ang uma funo que calcula o ngulo definido por trs pontos (Figura 1.11b),
que no caso utilizada em segmentos consecutivos na poligonal simplificada e na
poligonal original.
Deslocamento vetorial total por unidade de comprimento: indica o deslocamento
geomtrico total da linha com relao original. Ou seja,
n 1

DVT =

d (v , P)
i

i =0

onde P a poligonal original, e a funo d calcula a distncia perpendicular entre um


ponto dado e uma poligonal (Figura 1.11a).
Deslocamento de rea total por unidade de comprimento: como a anterior, indica o
deslocamento geomtrico total da linha, s que considerando a rea entre a poligonal
simplificada e a original:
DAT =

A( P , P)
l

onde A uma funo que calcula a rea total entre duas poligonais (Figura 1.11c), e l o
comprimento da poligonal original.
Mudana percentual do nmero de segmentos curvilneos: quando processos de
suavizao so aplicados juntamente com a simplificao, muitos segmentos curvilneos
podero ser eliminados. Cada segmento curvilneo caracterizado por uma seqncia de
mudanas angulares (ngulos entre segmentos consecutivos) direita ou esquerda.
Esta medida indica o grau de suavizao obtido na simplificao, pela eliminao de
segmentos curvilneos, e pode ser definida como:
MPCS =

NSC
100
NSC

onde NSC e NSC representam, respectivamente, o nmero de segmentos curvilneos na


poligonal simplificada e na original.
Com base nas medidas propostas em [McMa86], um estudo posterior [McMa87b]
comparou nove algoritmos, chegando concluso de que quatro deles apresentavam
comportamento superior: Douglas-Peucker, Opheim, Reumann-Witkam e Lang. A
avaliao visual, no entanto, indica que o algoritmo Douglas-Peucker se comportou

melhor quanto ao deslocamento de rea. No entanto, o mais computacionalmente


complexo dos quatro. O artigo conclui que o algoritmo de Lang mais adequado para
certas tarefas de mapeamento menos exigentes, tais como mapeamento temtico. Estes
algoritmos, e outros, sero apresentados em detalhes em seguida. Alguns algoritmos de
interesse especfico deste trabalho, tais como Visvalingam-Whyatt e Zhao-Saalfeld, no
fizeram parte do estudo, pois so mais recentes do que ele.
Algoritmos. Existem vrios algoritmos na literatura que se propem a resolver o
problema de simplificao de poligonais. Conforme discutido na seo 0, a comparao
entre os algoritmos no pode se ater simplesmente anlise de sua complexidade
computacional. So muito importantes parmetros de avaliao da qualidade da
representao geomtrica resultante [Mari79][McMa86][Whit85], alm da avaliao do
grau de compactao atingido. Considerando as aplicaes em generalizao, tambm
necessrio avaliar as possibilidades de gerao de estruturas de dados hierrquicas, para
possibilitar a produo dinmica de novas representaes.
Em seguida sero apresentados alguns dos algoritmos de simplificao de linhas
propostos na literatura7. A seleo dos algoritmos foi feita com base na sua importncia
histrica, no grau de correo cartogrfica, em sua eficincia computacional, e tambm
com base na aplicabilidade ao problema de generalizao dinmica. Em todas as
descries abaixo, ser utilizada a letra n para denotar o nmero de pontos na linha
original, e n indicar o nmero de pontos na linha simplificada.
1.1.4.2 k-simo vrtice [Tobl64]

Este algoritmo foi proposto por Tobler em 1964, para um experimento de generalizao
de mapas para a Marinha americana [Tobl64]. possivelmente o mais antigo algoritmo
de simplificao conhecido, e tambm o mais simples. A idia formar a nova
poligonal selecionando um vrtice a cada k, sendo k determinado pelo usurio, e
desprezando os demais. O grau de generalizao obtido bastante grosseiro, uma vez
que o algoritmo no considera qualquer fator geomtrico, correndo portanto o risco de
descaracterizar completamente a linha.
Observe-se que a mesma lgica utilizada para simplificar imagens digitais,
selecionando arbitrariamente um pixel a cada k, em um processo conhecido como
subamostragem [Jain89], que um caso particular da reamostragem pelo mtodo do
vizinho mais prximo, quando se reduz o tamanho da imagem [Wolb90]. O mtodo tem
tambm pouco sucesso pois, apesar de ser simples, tende a provocar o efeito de aliasing
sobre a imagem.
Complexidade computacional. O(n/k) = O(n)
1.1.4.3 Vrtice aleatrio [RSM78]

Proposto por Robinson et al. [RSM78], este algoritmo pouco acrescenta ao do k-simo
vrtice. Parte do princpio de que a linha cartogrfica composta por vrtices
7

So deixados intencionalmente de fora alguns algoritmos, como os propostos em [Deve85], [Will78] e


[Joha74], por no acrescentarem elementos relevantes discusso.

equiprovveis [Peuc75][Butt85]. Trata-se de selecionar aleatoriamente uma quantidade


predeterminada (n) dos vrtices que compem a poligonal, gerando desta forma uma
nova poligonal simplificada. Como no caso do k-simo vrtice, o algoritmo no
considera a geometria da linha, e tambm corre o risco de desprezar pontos
caractersticos.
Complexidade computacional. O(n)
1.1.4.4 Jenks [Jenk81]

Este algoritmo considera uma seqncia de trs vrtices na linha, calculando a distncia
do vrtice intermedirio reta definida pelos outros dois [Jenk81]. Quando esta
distncia inferior a uma tolerncia dada, o vrtice central eliminado, e o algoritmo
reiniciado com o primeiro, o terceiro e o quarto vrtices. Se a distncia exceder a
tolerncia, o segundo vrtice mantido, e o processamento recomea a partir dele
(Figura 1.11a). Apesar de no apresentar um tratamento mais sofisticado da geometria
da linha, este algoritmo consegue eliminar os vrtices efetivamente desnecessrios, ou
seja, que esto alinhados com os vrtices anterior e posterior, e portanto so
geometricamente dispensveis. Em especial, este comportamento melhor caracterizado
quando a tolerncia bastante pequena.
Uma variao interessante deste algoritmo estabelece, como tolerncia, no a distncia
do vrtice central ao segmento formado pelos outros dois, mas sim o ngulo entre os
segmentos v1v2 e v1v3. Quando este ngulo estiver abaixo de um valor dado, os pontos
so considerados alinhados e v2 descartado, sendo reiniciado o processamento em v3.
Caso contrrio, v2 mantido, e o processamento recomea por ele (Figura 1.11b).
De acordo com [McMa87a], Jenks posteriormente props uma variao desta rotina
angular considerando trs valores distintos de tolerncia, denominados min1, min2 e ang.
Se a distncia entre v1 e v2 for inferior a min1, ou se a distncia entre v1 e v3 for inferior a
min2, ento v2 eliminado. Caso as duas distncias ultrapassem os valores mnimos,
ento testado o ngulo entre os segmentos v1v2 e v1v3 contra a tolerncia ang, da maneira
descrita acima.
Complexidade computacional. O pior caso do algoritmo de Jenks ocorre quando todos
os vrtices so eliminados. Assim, cada iterao vai testar se o vrtice vi ( 2 i n 2 )
vai ser ou no mantido, calculando as distncias dos vrtices entre v2 e vi reta definida
por v1 e vi+1, totalizando portanto i - 2 clculos de distncia. Este comportamento pode
ser traduzido pelo seguinte somatrio:
(n 2)(n 1)

(n 2) (i 2) = (n 2)
2 ( n 2)
2

i =2
n 1

A complexidade computacional do algoritmo de Jenks no pior caso , portanto, O(n2).


O melhor caso, por outro lado, ocorre quando nenhum vrtice eliminado. Nesta
situao, cada um dos n - 2 vrtices intermedirios testado uma nica vez contra seus
vizinhos imediatos, produzindo um clculo de distncia ponto-reta. O algoritmo ,
assim, O(n) no melhor caso.

Observe-se que este comportamento o inverso do apresentado pelo algoritmo DouglasPeucker, que ser apresentado adiante, no sentido de que seu pior caso ocorre quando
elimina todos os vrtices, e o melhor ocorre quando todos os vrtices so mantidos.
Sendo assim, este algoritmo poder ser mais eficiente que o Douglas-Peucker em
situaes de simplificao mnima, e est recomendado para situaes em que o
interesse seja simplesmente a eliminao de vrtices alinhados, com tolerncia
baixssima.
1.1.4.5 Reumann-Witkam [ReWi74]

Este algoritmo [ReWi74] utiliza, em cada iterao, duas linhas paralelas a cada
segmento da poligonal para determinar uma regio de eliminao de vrtices.
Naturalmente, a tolerncia precisamente a metade da distncia entre as paralelas. A
poligonal analisada seqencialmente, sendo buscado o primeiro segmento que
intercepta uma das duas paralelas. Sendo vi vi+1 o segmento localizado, o vrtice vi
mantido e todos os intermedirios, entre o vrtice inicial e vi, so descartados.
15

15

16

14

13

16

14

17

13

17

12

12
18

11

18

19

11

29
4

20

22

1
5
7

10

21

20

28

22

23
6

29
4

10

19

27
24

26

21

28

23
6

27
24

26
25

25

(a)

(b)
15

15

16

14

13

16

14

17

13

12

17

12
18

11

18

19

11

29
4

2
9
1
5

20
22

28

9
1

27
24

26
25

(c)

10

21

23
6

29
4

10

19

20
22

21

28

23
6

27
24

26
25

(d)

Figura 1.12 - Algoritmo Reumann-Witkam


No exemplo da Figura 1.12, observe-se que, at o vrtice v19, poucos vrtices haviam
sido eliminados. Aplicando as paralelas a partir de v19, na direo do segmento v19 v20,
possvel eliminar os vrtices v20 a v22 (Figura 1.12a). O processamento retomado a

partir do vrtice v23 (Figura 1.12b), desta vez eliminando o vrtice v24. Reiniciando de
v25, elimina-se v26 (Figura 1.12c). O processamento termina em seguida, eliminando v28
e terminando no ltimo vrtice, v29 (Figura 1.12d). No total, doze vrtices foram
eliminados.
O algoritmo Reumann-Witkam , segundo a classificao proposta por McMaster
[McMa87a], do tipo processamento local estendido irrestrito, pois a verificao
iniciada em um determinado vrtice, e prossegue at que algum segmento tenha
interceptado uma das paralelas, ou at que a linha termine. Opheim [Ophe81] props
uma variao deste enfoque em que so impostos limites quanto seo da linha que
analisada, produzindo assim um algoritmo com processamento local estendido restrito.
So definidos uma distncia mnima (dmin) e uma distncia mxima (dmax), que
funcionam limitando, juntamente com as paralelas, uma regio que contm todos os
vrtices que sero eliminados. Como no Reumann-Witkam, o processamento recomea
no primeiro vrtice do primeiro segmento que sai da regio limitada. Esta variao
apresenta a tendncia a preservar melhor a aparncia das curvas, pois evita que vrtices
muito prximos e vrtices muito distantes do vrtice de partida sejam eliminados.
Conseqentemente, o grau de compactao ainda menor do que o que se pode alcanar
com o algoritmo Reumann-Witkam.
Na Figura 1.13a apresentada a regio de eliminao de vrtices do algoritmo Opheim.
Qualquer vrtice que fique dentro da rea marcada ser eliminado, a menos que seja o
primeiro vrtice de um segmento que intercepta as linhas paralelas. o caso do vrtice
v7 na Figura 1.13b, que no ser eliminado, e servir de ponto de partida para a prxima
iterao. O vrtice v6, tambm na Figura 1.13b, no ser eliminado pois est a uma
distncia inferior a dmin com relao ao vrtice de partida, v5. A mesma situao se
repete a partir de v7, pois v8 precisa ser mantido e v9 se torna o novo vrtice de partida
(Figura 1.13c). Partindo de v9, finalmente temos a eliminao de v10.
11
3

dm

in

10

2
dmax

9
1
rea de eliminao
de vrtices

(a)

22
23

(b)

11

11

3
4

10

10

2
9

22
1

23
6

22

21

23
6

(c)

24

(d)
Figura 1.13 - Algoritmo Opheim

Complexidade computacional. Como se pode perceber, cada vrtice considerado


apenas uma vez, buscando a interseo de segmentos da poligonal com as retas
paralelas. Caso a interseo ocorra, o procedimento reiniciado a partir do ltimo
vrtice analisado, mantendo o padro de varredura. Assim, este algoritmo claramente
linear sobre o nmero de vrtices: O(n). O mesmo se aplica variao proposta por
Opheim.
Apesar de eficiente computacionalmente, seu desempenho cartogrfico, por outro lado,
deixa bastante a desejar, pois tende a eliminar poucos vrtices. Alm disso, tende a no
eliminar pontos situados em curvas mais abertas, como o vrtice v2 no caso do exemplo
da Figura 1.12. Por isso, este algoritmo foi posteriormente modificado por Roberge
[Robe85], que o robusteceu matematicamente com testes de linhas crticas verticais e
com uma verificao de pontos de inflexo. Roberge props tambm um fator de
extenso da linha crtica, visando permitir a eliminao de vrtices em curvas de grande
raio.
1.1.4.6 Lang [Lang69]

Este algoritmo, proposto por Lang [Lang69], requer dois parmetros de entrada: uma
distncia de tolerncia, semelhante do algoritmo de Jenks, e um parmetro (p) de lookahead, ou seja, uma quantidade de vrtices que devem ser considerados a cada etapa do
processo. Por exemplo, se p for igual a 5, sero analisados os vrtices v1 a v6. Nesse
caso, ser calculada a distncia entre os vrtices v2, v3, v4 e v5 reta que passa por v1 e
v6. Se a alguma distncia obtida for maior que a tolerncia, o algoritmo retrocede um
ponto (no caso, at v5) e recomea, se necessrio fazendo o mesmo enquanto existirem
vrtices intermedirios. Se todas as distncias intermedirias forem menores que a
tolerncia, os vrtices intermedirios so eliminados, e o prximo passo ser iniciado no
ltimo vrtice extremo encontrado, considerando novamente p pontos frente. No
exemplo da Figura 1.14, foi necessrio recuar de v5 (Figura 1.14a) at v3, eliminando
apenas v2 (Figura 1.14d), uma vez que existiam em cada uma das etapas intermedirias
(Figura 1.14b e c) vrtices fora da faixa de tolerncia. O algoritmo recomea a partir de
v3, o ltimo vrtice mantido, e vai analisar em seguida o trecho entre v3 e v8.

1
5

6
tolerncia

tolerncia

(a)

(b)
3

4
1
1

8
tolerncia
tolerncia

(c)

(d)
Figura 1.14 - Algoritmo Lang

Este algoritmo se comporta bem do ponto de vista geomtrico [McMa87a], sendo capaz
de preservar razoavelmente as caractersticas da linha original. No entanto, sofre a
influncia do parmetro de look-ahead: valores diferentes levaro a resultados
diferentes. Apesar disso, sua implementao interessante por fixar a quantidade
mxima de pontos que sero analisados a cada etapa, possibilitando um
dimensionamento esttico de memria em tempo de compilao, caso se limite o valor
de p.
Com relao ao grau de compactao, observe-se que este algoritmo s ser capaz de
eliminar n n p vrtices, uma vez que, em cada intervalo so preservados, no mnimo,
os dois vrtices extremos. A manuteno dos vrtices extremos de cada intervalo
prejudica a aparncia final da poligonal, pois sua seleo to arbitrria quanto a
realizada pelo algoritmo do k-simo vrtice.
Complexidade computacional. O pior caso ocorre quando nenhum ponto eliminado, e
portanto o algoritmo precisa fazer o look-ahead n / p vezes e retroceder, em cada passo,

p 1 vezes. Em cada um dos n / p passos, o algoritmo executa ( p 1)( p 2) 2


clculos de distncia ponto-reta. Assim, o algoritmo O(n), mas com um fator constante
que cresce ao ritmo de O(p2). Particularmente, quando n = p , teremos complexidade
O(n2) para o algoritmo.
No melhor caso, todos os p 1 pontos intermedirios sero eliminados na primeira
passada, e portanto teremos p 1 clculos de distncia para cada um dos n / p passos,
e portanto o algoritmo O(n). Observe-se que temos um compromisso entre o tempo de

processamento, dependente de p, e o grau de compactao: valores maiores de p


possibilitaro uma compactao maior, mas provocaro um aumento no custo
computacional em relao ao caso linear. Assim, a escolha do valor ideal para p
dificultada, e depender de uma anlise do processo de digitalizao com relao
quantidade de vrtices desnecessrios.
1.1.4.7 Douglas-Peucker [DoPe73]

Este o mais conhecido e utilizado algoritmo de simplificao de pontos. Foi proposto


em 1973 por Douglas e Peucker [DoPe73], e reconhecidamente o melhor em termos
de preservao das caractersticas da poligonal original [Mari79][McMa87a],
especialmente se utilizado com tolerncias pequenas [ViWh90]. Curiosamente, o
algoritmo foi proposto quase que simultaneamente por Ramer [Rame72] e Duda e Hart
[DuHa73], embora visando aplicaes diferentes. O algoritmo Douglas-Peucker
permanece sendo o mais citado na literatura de geoprocessamento, uma vez que foi
originalmente publicado em um peridico da rea de cartografia.
Procedimento Douglas-Peucker(linha, numvert, tol)
Procedimento DP(a, f, tol)
incio
se ((f
maxd =
maxp =
para i
incio

- a) == 1) ento retorne;
0;
0;
= a+1 at f-1 faa

d = distncia(linha[i], linha[a], linha[f]);


se d > maxd ento
incio
maxd = d;
maxp = i;
fim se;
fim para;
se maxd > tol ento
incio
vrtice maxp selecionado;
DP(a, maxp, tol);
DP(maxp, f, tol);
fim
seno retorne;
fim;
incio
vrtice 1 selecionado;
vrtice numvert selecionado;
DP(1, numvert, tol);
fim.

Programa 1.15 - Algoritmo Douglas-Peucker


Funcionamento. O algoritmo recursivo (Programa 1.15), e a cada passo processa o
intervalo de pontos contido entre um vrtice inicial (chamado de ncora) e um vrtice
final (denominado flutuante). estabelecido um corredor de largura igual ao dobro da
tolerncia, formando duas faixas paralelas ao segmento entre o ncora e o flutuante
(Figura 1.16), como no algoritmo de Lang. A seguir, so calculadas as distncias de
todos os pontos intermedirios ao segmento bsico, ou seja, contidos entre o ncora e o

flutuante. Caso nenhuma das distncias calculadas ultrapasse a tolerncia, ou seja,


nenhum vrtice fica fora do corredor, ento todos os vrtices intermedirios so
descartados. Caso alguma distncia seja maior que a tolerncia, o vrtice mais distante
preservado, e o algoritmo reiniciado em duas partes: entre o ncora e o vrtice mais
distante (novo flutuante), e entre o vrtice mais distante (novo ncora) e o flutuante. De
acordo com este processo, os pontos tidos como crticos para a geometria da linha, a
cada passo, so mantidos, enquanto os demais so descartados.
15

16

14

13

17

12
18

11

19

29
4

10

2
9
1
5

20
22

21

28

23
6

27
24

26
25

Figura 1.15 - Linha original, 29 vrtices


Para a anlise deste algoritmo e dos prximos ser utilizada a poligonal da Figura 1.15.,
com 29 vrtices. As figuras seguintes ilustram melhor o comportamento do algoritmo
Douglas-Peucker. Inicialmente, so calculadas as distncias dos vrtices 2 a 28 at a reta
definida pelos vrtices 1 e 29. O vrtice mais distante nesta primeira iterao o 15, a
uma distncia muito superior tolerncia (Figura 1.16). Assim, o vrtice 15
selecionado e o procedimento chamado recursivamente duas vezes, entre os vrtices 1
e 15 e entre os vrtices 15 e 29. Continuando pela primeira chamada, o vrtice mais
distante da reta entre 1 e 15 o 9, tambm a uma distncia superior tolerncia, e
portanto selecionado (Figura 1.17). Duas novas chamadas recursivas so feitas, e
agora esto empilhados os intervalos 1-9, 9-15 e 15-29. No intervalo 1-9, temos tambm
que preservar o vrtice 3, e portanto ficamos na pilha com os intervalos 1-3, 3-9, 9-15 e
15-29 (Figura 1.18). Analisando agora o intervalo 1-3, verificamos que o vrtice 2 pode
ser dispensado (Figura 1.19). Ao final, so preservados os vrtices 1, 3, 4, 6, 9, 15, 16,
17, 22, 24, 27 e 29, ou seja, 41% do nmero original de vrtices (Figura 1.20).
A utilizao de recursividade no processamento do algoritmo j inspirou
implementaes paralelas [Mowe96], em que cada nova subdiviso do problema vai
sendo atribuda a um processador diferente, sendo gerada ao final uma lista dos vrtices
selecionados. No entanto, a grande diferena entre o melhor e o pior caso de
processamento (vide anlise de complexidade computacional) podem ser um problema,

uma vez que poder haver pouco equilbrio entre as tarefas atribudas a cada
processador [HeSn92].
15

29

tolerncia

Figura 1.16 - Douglas-Peucker, primeiro passo: seleo do vrtice 15


15

29

9
1

tolerncia

Figura 1.17 - Douglas-Peucker, segundo passo: seleo do vrtice 9

15

3
29

9
1

tolerncia

Figura 1.18 - Douglas-Peucker, terceiro passo: seleo do vrtice 3


15

3
2

29

9
1

tolerncia

Figura 1.19 - Douglas-Peucker, passo 4: eliminao do vrtice 2


O resultado deste algoritmo aclamado pela literatura como sendo o que mais respeita
as caractersticas (ou, como no ttulo do artigo de Douglas e Peucker, a caricatura) da
linha cartogrfica [Mari79][Jenk89][McMa87a]. Assim, este algoritmo veio a ser a
escolha dos desenvolvedores de software comercial na implementao de funes de
simplificao de linhas para processamento ps-digitalizao [LiOp92], ou seja, para
limpeza de vrtices desnecessrios. O uso do algoritmo Douglas-Peucker em

generalizao, no entanto, comprometido pelo seu comportamento em situaes de


generalizao mais radical, ou seja, com tolerncias maiores [ViWi95]. Conforme a
situao, o algoritmo pode ser levado a escolher vrtices que terminam por deixar a
linha com uma aparncia pouco natural [ViWh93], com tendncia a apresentar picos
(como no exemplo da Figura 1.21, entre os vrtices 17, 24 e 29), com ngulos agudos e
mudanas bruscas de direo.
15

16

17

29
4

22

24
tolerncia

Figura 1.20 - Douglas-Peucker, final


Se a mesma linha da Figura 1.15 for processada novamente com uma tolerncia, por
exemplo, quatro vezes maior que a apresentada, seriam preservados apenas os vrtices
1, 9, 15, 17, 24 e 29, todos pertencentes soluo anterior (Figura 1.21). Portanto, o
algoritmo de Douglas-Peucker hierrquico, pois os pontos so sempre selecionados na
mesma ordem, e a tolerncia serve para determinar at que ponto o processamento deve
ser realizado.

15

17

29

9
1

24

tolerncia

Figura 1.21 - Douglas-Peucker, simplificao radical


Se a tolerncia for igual a zero, todos os vrtices sero eventualmente selecionados. O
armazenamento das subdivises nos permite representar a hierarquia dos vrtices em
uma rvore binria [Crom91][Oost93]. Em cada n desta rvore representado um
vrtice selecionado, e armazenado o valor da distncia calculado por ocasio da
seleo, que corresponde ao valor maxd do Programa 1.15 (Figura 1.22). Tendo sido
estabelecido um valor de tolerncia, basta caminhar na rvore em preordem para
determinar quais vrtices sero selecionados. Quando um n interno contiver um valor
de distncia inferior tolerncia, o vrtice correspondente e todos os descendentes
podero ser eliminados, no sendo necessrio continuar com o caminhamento. Observese, no entanto, que a rvore binria pode ser bastante desbalanceada, e dificilmente ser
completa, o que vir a dificultar o seu armazenamento no banco de dados.

15
2.632

24

1.614

2.705

11

17

27

0.750

0.213

1.094

0.514

10

13

16

22

25

28

0.177

0.894

0.070

0.267

0.354

0.256

0.247

0.078

12

14

18

23

26

0.371

0.224

0.224

0.100

0.238

0.108

0.054

19

0.250

0.094

0.062

21
0.044

20
0.028

Figura 1.22 - rvore binria formada a partir do exemplo da Figura 1.15


Complexidade computacional. Como no caso do quicksort [Knut73], a anlise da
complexidade computacional do algoritmo Douglas-Peucker depende da escolha do
vrtice mais distante, anlogo ao piv do algoritmo de classificao, o que vai
determinar o nmero de clculos de distncia ponto-reta necessrios (analogamente ao
nmero de comparaes no caso do quicksort). Para eliminar a influncia do parmetro
de tolerncia na anlise do pior caso do algoritmo, necessrio considerar que todos os
vrtices sero selecionados, ou seja, n = n , o que equivale a fazer a tolerncia igual a
zero.
Assim, a melhor situao para o particionamento ocorre quando o vrtice mais distante
o vrtice central do intervalo8. Neste caso, possvel formular a seguinte equao de
recorrncia:

Esta situao pode ocorrer, por exemplo, quando os vrtices da poligonal esto dispostos ao longo de
um semicrculo [Nick88].

n
n
T (n) = (n 2) + T 2 + T 2
2
2
T ( 2) = 0

(1.11)

Como geralmente n >> 2 , pode-se simplificar a Equao 1.11 para obter:


n
T ( n) = n + 2 T
2

(1.12)

T ( 2) = 0
Resolvendo a Equao 1.12, resulta O(n log n), que indica o melhor desempenho do
algoritmo quando todos os vrtices so mantidos. No entanto, o pior caso ocorre, de
forma tambm anloga ao quicksort, quando a diviso feita no segundo vrtice ou no
penltimo, fazendo com que a recorrncia assuma a seguinte forma:
T (n) = (n 2) + T ( n 1)
T ( 2) = 0

(1.13)

A soluo da Equao 1.13 , portanto, a complexidade computacional do algoritmo


Douglas-Peucker no pior caso: O(n2). O pior caso tambm pode ocorrer quando o
objetivo formar a estrutura de dados exemplificada na Figura 1.22, pois aquela
situao equivale a processar toda a poligonal considerando tolerncia zero.
O melhor caso ocorre quando todos os vrtices da poligonal podem ser simplificados
imediatamente. Assim, apenas uma iterao necessria, calculando as distncias de
todos os vrtices intermedirios reta definida pelos extremos, e portanto o algoritmo
O(n).
O comportamento em situaes reais, portanto, depende fortemente do parmetro de
tolerncia e da escolha do vrtice mais distante em cada passo. Tolerncias baixas,
significando a preservao de uma quantidade maior de vrtices, indicam um tempo de
processamento maior. Por outro lado, tolerncias grandes fazem com que o
processamento seja resolvido com poucas iteraes, e portanto em menos tempo. Uma
anlise considerando tolerncia zero e quebra em um vrtice intermedirio escolhido
aleatoriamente indica que o tempo de execuo mdio um fator de 2 log(e) 2,885
sobre o caso linear [HeSn92].
A literatura contm propostas para melhorar o desempenho do algoritmo DouglasPeucker com o uso de tcnicas de geometria computacional. Hershberger et al.
[HeSn92] observam que, quando a diviso do problema produz um subproblema com
tamanho quase igual ao original, o algoritmo Douglas-Peucker precisa recomear o
processamento do zero, sem armazenar ou levar em conta qualquer conhecimento sobre
a geometria da linha que poderia ter sido obtido na primeira iterao. Assim,
propuseram uma variao baseada no path hull, uma estrutura de dados baseada no

fecho convexo9 aplicado a uma linha [DGHS88], buscando maior eficincia na etapa de
seleo do vrtice mais distante.

Figura 1.23 - Os pontos do conjunto convexo C mais distantes


da reta r esto em uma das tangentes a C paralelas a r
A modificao proposta parte do princpio de que o vrtice mais distante, utilizado para
a diviso, necessariamente um dos que compem o fecho convexo dos vrtices da
poligonal. Esta constatao parte de um lema da geometria computacional que garante
que, dados um conjunto convexo C e uma reta r, os pontos de C mais distantes de r
estaro em uma das duas tangentes a C paralelas a r (Figura 1.23). Se C um polgono
convexo, ento apenas os seus vrtices precisam ser considerados para determinar o
ponto mais distante de uma dada reta. Considerando a implementao deste conceito, o
path hull definido da seguinte maneira:
Definio 1.1 - Dada uma cadeia de vrtices (vi, ..., vj) pertencentes a uma poligonal
P, o path hull da cadeia definido como sendo a tripla [vm, CC(vi, ..., vm),
CC(vm, ..., vj)], onde CC(vi, ..., vj) o fecho convexo dos vrtices entre vi e vj. O
vrtice vm chamado de tag.
Em seguida, so definidas as operaes bsicas sobre path hulls: criao, diviso e
localizao do vrtice mais distante. A operao de localizao do vrtice mais distante
utiliza uma pesquisa binria sobre os dois fechos convexos do path hull, localizando
dois pontos extremos em cada. Em seguida, calculada a distncia de cada um destes
extremos reta, e retornado o vrtice mais distante em cada fecho. O custo total desta
operao O(log n) no pior caso. Como esta operao chamada O(n) vezes, isto
determina o custo total do algoritmo em O(n log n).
A operao seguinte a criao, que consiste em dividir um conjunto (vi, ..., vj) de
vrtices ao meio, escolhendo o vrtice central como tag, (i.e., m = (i + j ) / 2 ) e criar dois
fechos convexos: um entre todos os pontos anteriores ao tag (vi a vm), e outro com os
pontos posteriores (vm a vj). Para construir os fechos convexos, os autores indicam a

Vide seo 1.1.6

utilizao de um algoritmo de Melkman [Melk87], incremental e baseado em pilhas.


Estas pilhas conseguem armazenar no apenas o fecho convexo desejado, mas tambm
todos os fechos convexos intermedirios, que sero usados a partir das divises. A
operao final, diviso, utiliza estas pilhas para reconstruir o histrico do fecho
convexo que contm determinado vrtice k, retrocedendo o fecho previamente calculado
para todos os vrtices at o momento da insero de vk no fecho. Os autores demonstram
que a combinao das etapas de criao e diviso custam tambm O(n log n) no pior
caso.
O algoritmo modificado para incluir o path hull tem, desta forma, complexidade
computacional O(n log n) no pior caso, contra O(n2) no algoritmo original. Os autores
chamam a ateno, no entanto, para os fatores constantes, bem mais significativos no
caso do path hull do que no algoritmo Douglas-Peucker, uma vez que o algoritmo
original no trabalha a estrutura geomtrica da poligonal. Para desenvolver uma melhor
noo comparativa quanto a este aspecto, torna-se necessrio implementar ambos os
algoritmos no mesmo ambiente computacional e comparar diretamente os tempos de
execuo na soluo de problemas tpicos. Os autores do aperfeioamento o fizeram,
mas somente compararam linhas artificiais, tentando simular os casos extremos de
desempenho. No entanto, destacaram a dificuldade de se selecionar um conjunto
representativo de linhas para realizar uma comparao adequada.
Um aspecto que caracteriza o algoritmo Douglas-Peucker, e que utilizado em vrios
outros algoritmos, o conceito de banda de tolerncia, s vezes chamado de corredor
de tolerncia. Visvalingam e Whyatt [ViWh93] observam que, embora a utilizao do
critrio de largura de banda para determinar pontos a eliminar seja bastante razovel, a
escolha do vrtice mais distante como ponto crtico ou ponto caracterstico da linha
questionvel do ponto de vista cartogrfico. Dessa forma, contestam tambm a
classificao do Douglas-Peucker como algoritmo global, uma vez que, a partir do
momento da separao da linha em duas, a avaliao da linha quanto continuao do
processo de seleo de pontos passa a no mais abranger todos os vrtices. Conforme j
observado, a preservao do ponto mais distante leva gerao e conservao de
picos na linha, deteriorando sua aparncia em simplificaes mais radicais. Alguns
autores atribuem este fato escolha de um valor nico para a tolerncia, indicando que
mais razovel ter variaes neste valor de acordo com a geomorfologia da linha
[Horn85][PAF95], mas at o momento nenhuma variao proposta provou resolver
integralmente o problema.
Embora exista um conceito geral de que os vrtices selecionados pelo algoritmo
Douglas-Peucker sejam os crticos, estudos demonstram que os vrtices considerados
crticos por humanos nem sempre coincidem com os selecionados pelo algoritmo. Mais
grave do que isso a constatao de que os vrtices so selecionados de maneira
desbalanceada, isto , existe a tendncia de selecionar vrtices demais em reas mais
ricas em detalhes, e vrtices de menos nas regies geometricamente mais simples,
causando ao mesmo tempo o efeito j descrito de picos e o detalhamento excessivo de
reas pouco significativas no sentido global. Isto explicado pelo fato do
comportamento do algoritmo ser invariante com relao escala, ou seja, independente
da escala o algoritmo continua eliminando vrtices menos crticos em vez de feies
menos significativas, e no processo vai deixando para trs vrtices crticos que
terminam por introduzir distores esteticamente inaceitveis na linha. Para corrigir esta

distoro, Thapa ([Thap88] apud [ViWh90]) observa que alguns dos vrtices crticos
precisam ser eliminados para que se possa obter linhas generalizadas suaves, uniformes
e agradveis esteticamente. Neste conceito, portanto, existem vrtices crticos que no
so to crticos assim.
Outro problema amplamente reportado na literatura [ViWh90] diz respeito variao
que se pode obter no resultado final quando se varia a linha ncora-flutuante inicial. o
caso da aplicao do algoritmo Douglas-Peucker a poligonais fechadas: dependendo do
ponto de partida, ou da estratgia de particionamento da poligonal fechada em duas ou
mais poligonais abertas, um resultado diferente ser obtido.
Mais grave ainda a possibilidade, j tambm amplamente documentada na literatura
[ViWh90], de que o algoritmo Douglas-Peucker produza, em situaes de generalizao
mais radical, modificaes na topologia da linha (como por exemplo auto-intersees),
ou modificaes na sua situao com relao a linhas vizinhas (como intersees entre
curvas de nvel simplificadas). Trata-se de um comportamento francamente indesejvel,
que precisa ser verificado em implementaes mais robustas do algoritmo, com o uso de
rotinas especficas para detectar este tipo de problema.
1.1.4.8 Zhao-Saalfeld [ZhSa97]

Este algoritmo utiliza uma tcnica denominada sleeve-fitting, para realizar a


simplificao de poligonais em tempo linear [ZhSa97]. O processo baseado em uma
medida angular varivel para verificar o atendimento ao critrio de tolerncia, que
apesar disso expresso em termos de mxima distncia perpendicular.
A verificao da tolerncia perpendicular atravs de medidas angulares feita utilizando
alguns conceitos geomtricos. Inicialmente, definida a medida (p1, p2) como sendo o
ngulo do vetor p1p2 com a horizontal (eixo X), calculado em sentido anti-horrio.
Observe-se que o sentido importante, e portanto p1 p2 p2 p1 . A partir de ,
definido o setor limite, da seguinte forma (Figura 1.24):
Definio 1.2 - O setor limite do ponto p e ngulos 1 e 2 o conjunto dos pontos
do
plano
cujo
ngulo
a
est
entre
1
e
2.
Ou
seja,
A( p, 1 , 2 ) = {q R 2 |1 ( p, q ) 2 } .

2
1
p

Figura 1.24 - Setor limite

Pode-se sempre assumir que, no setor limite, o ngulo inicial 1 menor que o ngulo
final 2. Para garantir isso, basta somar 360o a 2 quando este for menor que 1. Assim,
possvel definir a operao de interseo de setores limite baseados no mesmo ponto,
da seguinte forma (Figura 1.25):
Definio 1.3 - A interseo de dois setores limite A( p, 1 , 2 ) e A( p, 3 , 4 ) um
terceiro setor A( p, , ) = A( p, 1 , 2 ) A( p, 3 , 4 ) , onde = max(1 , 3 ) e
= max( 2 , 4 ) . Se > , ento A( p, , ) = .
4
2
3

1
p

Figura 1.25 - Interseo de setores limite


No caso da distncia perpendicular, o interesse dos algoritmos de simplificao est em
calcular a distncia de um vrtice vk reta definida por dois vrtices da poligonal, vi e vj,
sendo i< k < j. Testar esta distncia contra uma tolerncia equivale, portanto, a
verificar se vk pertence ao setor limite A(p, 1, 2) sendo 1 = (vi, vj) - , 2 = (vi, vj)
+ , e = arco seno( / |vivj|) (Figura 1.26). Isto ocorre quando 1 (vi , v k ) 2 .
Assim, possvel testar se um vrtice atende ou no ao critrio de tolerncia apenas
calculando o ngulo (vi, vk) em cada passo, uma vez que todos os demais parmetros
(1, 2, ) so constantes locais.

vk

vj

2
vi

Figura 1.26 - Equivalncia entre setor limite e tolerncia perpendicular


O algoritmo Zhao-Saalfeld iniciado calculando o setor limite entre o primeiro e o
terceiro vrtices, de acordo com o processo descrito acima. O segundo vrtice testado
contra este setor limite. Caso esteja fora dele, o segundo vrtice mantido e o
processamento recomea a partir dele. Caso contrrio, o segundo vrtice ser

descartado, e nova avaliao do setor limite feito entre o primeiro e o quarto vrtices.
calculada a interseo entre este setor limite e o setor limite anterior. O terceiro
vrtice testado contra a interseo dos setores, caso o resultado no seja o conjunto
vazio, e aplicam-se as regras de aceitao e rejeio descritas para o segundo vrtice. Se
a interseo dos setores limite for anulada, o vrtice que est sendo testado (no caso, o
terceiro) mantido, e o processamento recomea a partir dele.
Note-se que o algoritmo prossegue de forma incremental, e possvel verificar a
excluso de grandes seqncias de vrtices sem recorrer a verificaes de trs para
diante, como no caso do algoritmo de Lang, ou recurses, como no caso do DouglasPeucker. No entanto, o mtodo altamente dependente do parmetro de tolerncia,
produzindo resultados diferentes de acordo com a variao deste parmetro. Assim, o
algoritmo Zhao-Saalfeld, embora seja bastante eficiente do ponto de vista
computacional, no produz uma hierarquia dos vrtices de acordo com sua importncia
na poligonal, e portanto tem sua utilizao para generalizao dinmica dificultada.
Uma variao, proposta no artigo, permite inclusive a determinao de novos vrtices,
totalmente diferentes dos originais, formando uma nova poligonal que cabe dentro do
mesmo sleeve que contm a poligonal original.
No entanto, dada sua natureza incremental e seu comportamento linear, este algoritmo
pode ser uma excelente opo para aplicativos de digitalizao de linhas, onde
trabalharia para eliminar vrtices desnecessrios medida em que o trabalho prossegue.
Uma demonstrao desta possibilidade foi implementada pelos autores em Java, e
colocada disposio no URL http://ra.cfm.ohio-state.edu/grad/zhao
/algorithms/linesimp.html.
Complexidade computacional. Verifica-se que o processo de reavaliao do setor limite
a cada passo confere a este algoritmo um comportamento claramente linear. O nico
lao presente , conforme descrito, aquele em que o setor limite especfico para o vrtice
corrente calculado, e obtida sua interseo com o resultado da interseo do setor
corrente inicial com todos os subseqentes.
1.1.4.9 Visvalingam-Whyatt [ViWh93]

Este algoritmo prope uma inverso da lgica utilizada pela maioria dos demais vistos
at agora, que tratam de selecionar os vrtices da poligonal que so necessrios para
atingir o critrio de proximidade. Ou seja, os vrtices considerados crticos para a
manuteno das caractersticas da linha so selecionados e mantidos. No algoritmo de
Visvalingam-Whyatt, ao contrrio, os pontos menos significativos so progressivamente
eliminados [ViWh93].

vi

v i+1
v i-1

Figura 1.27 - rea efetiva do vrtice vi


Tambm no critrio de proximidade este algoritmo se distingue dos demais, uma vez
que utiliza o conceito de rea efetiva, em vez de distncias ou ngulos. A rea efetiva
correspondente a um vrtice vi a rea do tringulo formado pelos vrtices vi-1, vi e vi+1
(Figura 1.27). A cada passo, o vrtice com menor rea efetiva eliminado, e a rea
efetiva dos dois vrtices adjacentes a ele recalculada, desconsiderando o vrtice
eliminado (Programa 1.16).
Procedimento Visvalingam-Whyatt(linha, numvert, tol_area)
incio
para i = 1 at numvert - 2 faa
calcular a rea efetiva do vrtice i;
repita
min = vrtice com menor rea efetiva correspondente ;
se area_efetiva(min) < tol_area
eliminar o vrtice min;
recalcular as reas efetivas dos vizinhos do ponto eliminado ;
at que (area_efetiva(min) >= tol_area) ou
(todos os vrtices intermedirios foram eliminados );
fim.

Programa 1.16 - Algoritmo Visvalingam-Whyatt


O critrio de eliminao baseado na rea efetiva se inspira precisamente nas medidas
propostas por McMaster [McMa86] (vide seo 1.1.4.1); no entanto, a medida proposta
global (linha simplificada versus linha original), enquanto no algoritmo a avaliao
feita a cada passo, ou seja, entre a verso anterior da linha e a verso atual. possvel
armazenar uma lista contendo os pontos eliminados em ordem, juntamente com a rea
efetiva correspondente, para que seja possvel hierarquizar o resultado e repetir a
simplificao dinamicamente. No entanto, Visvalingam e Whyatt [ViWh90] alertam
para o problema de que no possvel obter um ranqueamento dos vrtices
simplificados que seja universalmente aceitvel, e demonstram este fato utilizando
comparaes entre linhas simplificadas manualmente e usando o algoritmo DouglasPeucker. Como o Douglas-Peucker hierrquico e trabalha recursivamente, em
ocasionalmente so selecionados vrtices em situaes particulares (por exemplo, no

meio de curvas abertas) em estgios preliminares do algoritmo, impedindo que outros


vrtices, perceptivelmente mais crticos (por exemplo, nas extremidades dessas curvas
abertas) sejam selecionados, distorcendo portanto o resultado final.
Um problema o algoritmo Visvalingam-Whyatt, destacado pelos prprios autores, a
escolha do valor de parada: a partir de que rea efetiva o procedimento deve ser
interrompido? Uma correlao direta da rea efetiva com a distncia perpendicular,
como utilizada no Douglas-Peucker, no pode ser feita, pois a distncia entre os vrtices
extremos pode variar. No entanto, os experimentos realizados pelos autores indicam que
o algoritmo oferece oportunidades para simplificao mnima (apenas filtragem de
vrtices desnecessrios), utilizando tolerncias pequenas, e tambm para generalizao.
Isto provavelmente deriva do fato de se utilizar uma medida local a rea efetiva
considerada globalmente a cada passo (eliminando o ponto com menor rea efetiva entre
todos os remanescentes na linha).
Geometricamente, o algoritmo se comporta de maneira diferente do algoritmo DouglasPeucker, uma vez que apresenta uma tendncia a cortar cantos, e a eliminar
progressivamente as caractersticas inerentes ao tamanho da feio (Figura 1.28). O
resultado visual mais interessante em simplificaes mais radicais, pois produz uma
caricatura livre das distores grosseiras que caracterizam os resultados da aplicao
do algoritmo Douglas-Peucker com tolerncias grandes (na Figura 1.28b foi utilizada
tolerncia de 100 metros, equivalente a 2mm em escala 1:50.000), como a gerao de
picos (Figura 1.28b). Por outro lado, a eliminao de uma quantidade menor de
vrtices produz uma simplificao mnima razovel, semelhante produzida pelo
algoritmo Douglas-Peucker.

(a)

(b)

(c)

Figura 1.28 - Lago digitalizado com 204 vrtices (a), e simplificado pelos
algoritmos de Douglas-Peucker (b) e Visvalingam-Whyatt (c),
mantendo 10% dos vrtices originais.
A escala de digitalizao do lago da Figura 1.28 foi 1:50.000. A Figura 1.29 compara as
trs representaes da Figura 1.28, desta vez plotadas em escalas aproximadas de
1:100.000 e 1:200.000. Observe-se como o detalhamento obtido na digitalizao
original torna a poligonal muito complexa, com detalhes praticamente irreconhecveis,
nas duas escalas menores (Figura 1.29a), produzindo um aspecto excessivamente
poludo. A simplificao por Douglas-Peucker (Figura 1.29b) efetivamente diminui a
quantidade de detalhes, mas apresenta vrios picos com aspecto pouco natural. A

simplificao por Visvalingam-Whyatt (Figura 1.29c) consegue eliminar as feies


menos significativas do lago, como os diversos pequenos esturios que ocorrem ao seu
redor.

(a)

(b)

(c)

(d)

Figura 1.29 - Lago da Figura 1.28, original (a) e simplificaes por


Douglas-Peucker (b) e Visvalingam-Whyatt (c e d), plotado
em escalas 1:100.000 e 1:200.000
Um aspecto ainda melhor poderia ser alcanado caso se permitisse a utilizao do
Visvalingam-Whyatt com mais vrtices do que os retidos pelo Douglas-Peucker. Na
Figura 1.29d, por exemplo, a representao utilizou o dobro dos vrtices que foram
mantidos na Figura 1.29b e Figura 1.29c, obtendo uma aparncia mais natural, mas
ainda razoavelmente simples.
Complexidade computacional. A implementao deste algoritmo necessita de alguma
estrutura de dados que facilite a seleo, a cada passo, do vrtice cuja rea efetiva seja
mnima. A escolha natural uma fila de prioridades, sob a forma de um heap binrio.
Nessa estrutura de dados, a raiz contm sempre o menor elemento, e elementos de um
determinado nvel so sempre menores que os elementos do nvel hierarquicamente
inferior. Assim, a insero inicial (criao do heap) feita em tempo O(n log n),
enquanto a retirada feita em tempo constante [Zivi96] [Sedg90].
Alm disso, esta estrutura de dados precisa ser modificada em cada iterao do
algoritmo, uma vez que a eliminao de um vrtice causa o reclculo das reas efetivas
dos dois vizinhos imediatos, o que por sua vez demanda um rearranjo no heap para
preservar sua propriedade. No caso do algoritmo, pode ocorrer que uma rea efetiva j
presente no heap seja modificada para menos ou para mais. No primeiro caso, o item
correspondente rea modificada precisa subir no heap, enquanto no segundo caso o
item precisa descer. Qualquer rearranjo desta natureza em heaps feito em tempo O(log
n). Como o rearranjo feito a cada retirada de elementos, o pior caso a execuo deste
passo n vezes, e portanto temos novamente tempo O(n log n), que a complexidade
final do algoritmo.
1.1.4.10 Chan-Chin [ChCh96]

Este algoritmo prope uma formulao diferente para o problema de simplificao,


baseada na constatao de que a maioria dos algoritmos usualmente encontrados na
literatura no oferece qualquer garantia de otimalidade na soluo [ChCh96]. A idia
obter, por meio de tcnicas de otimizao bastante conhecidas, a soluo para um dos
seguintes problemas:
mnimo nmero de segmentos: dada uma poligonal P e uma tolerncia , construir
uma nova poligonal P com distncia perpendicular inferior a , de modo que esta
poligonal tenha o menor nmero possvel de segmentos;

mnimo erro: dada uma poligonal P e um nmero mximo de segmentos (m),


construir uma poligonal aproximada P com m ou menos segmentos de modo que o
erro total seja mnimo.
O problema de mnimo erro no tem aplicao imediata na rea de interesse deste
trabalho, uma vez que desejamos construir poligonais mais compactas dado um erro
mximo tolervel. J o problema de nmero mnimo de segmentos se assemelha
bastante em termos de formulao a alguns dos algoritmos j analisados, introduzindo o
requisito de garantia de otimalidade, ou seja, de que o resultado tenha um nmero
mnimo de segmentos e portanto um nmero mnimo de vrtices.
Para a soluo do problema do mnimo nmero de segmentos, o primeiro passo
construir um grafo G = (V , E ) , onde cada vrtice v V representa um vrtice vi da
poligonal original P. O conjunto de arestas E formado por todos os pares (r, s) tais que
o erro correspondente ao segmento vrvs inferior a , ou seja, E = {(r, s) | r < s
e erro(r, s) }. A funo erro exatamente a que determina a distncia perpendicular,
conforme utilizada em diversos outros algoritmos, como o Douglas-Peucker. O grafo G
chamado de -grafo de P.
A soluo do problema consiste em encontrar o menor caminho em G de v0 at vn-1,
considerando custo unitrio para cada aresta de E. Os vrtices encontrados nesse
caminho mnimo sero exatamente os vrtices da poligonal aproximada P, e o
comprimento do caminho mnimo informa quantos segmentos existiro em P. Esta fase
pode ser executada em tempo O(n log n), que o melhor tempo para o algoritmo
clssico de Dijkstra [Baas88] [Tarj83].
O principal problema consiste em montar o grafo G, checando cada par de vrtices para
verificar o atendimento condio de distncia mxima. Isto pode ser feito na base da
fora bruta, combinando todos os vrtices da poligonal entre si, mas levaria tempo
O(n3), uma vez que existem O(n2) pares de vrtices e para cada par seria necessrio
verificar o erro avaliando a distncia dos vrtices intermedirios, o que pode consumir
tempo O(n). Outros autores apresentaram propostas semelhantes, obtendo tempo O(n2
log n) [Melk88] [ImIr86], mas Chan e Chin demonstraram a viabilidade de obter o
mesmo resultado em tempo O(n2). De qualquer maneira, este tempo dominante sobre
o tempo de processamento do caminho mnimo, e superior aos apresentados pelos
algoritmos anteriores, que no garantem resultados timos.
Um outro problema a considerar determinar se a escolha de vrtices que minimizam o
nmero de segmentos da poligonal resultante capaz de produzir resultados aceitveis
do ponto de vista da esttica e funcionalidade cartogrficas. Alm disso, existe o
problema do tempo de processamento e o fato de o algoritmo no produzir uma
hierarquia de vrtices na sada, sendo portanto de aplicao pouco indicada para
generalizao dinmica. No entanto, como os resultados produzidos so garantidamente
timos quanto ao nmero de vrtices e segmentos, torna-se possvel utilizar o resultado
deste algoritmo para verificar e comparar a eficincia dos demais quanto compactao
da poligonal.

1.1.4.11 Li-Openshaw [LiOp92]

Li e Openshaw [LiOp92] formularam uma srie de algoritmos para simplificao de


linhas a partir de um chamado princpio natural da generalizao. Este princpio parte
da constatao de que existem limites para a capacidade humana de perceber detalhes, e
tambm limites quanto resoluo dos dispositivos utilizados para visualizao, como
os monitores de vdeo dos computadores atuais. Por exemplo, considere-se se um
determinado objeto poligonal, desenhado na tela do computador utilizando sua mxima
resoluo. medida em que se diminui a escala de apresentao, o objeto diminui de
tamanho na tela, utilizando uma quantidade menor de pixels para sua representao.
Eventualmente, a escala diminui tanto que o objeto se transforma em um nico pixel, e
depois menos do que isso, sendo ento impossvel represent-lo na tela em suas
dimenses aproximadas.
Desta forma, a concepo dos algoritmos parte da deduo do tamanho do menor objeto
visvel (smallest visible object, ou SVO). Naturalmente, o tamanho do SVO expresso
nas unidades de medida da tela ou do mapa, e portanto pode ser traduzido em medidas
reais atravs da aplicao do fator de escala. Li e Openshaw utilizam um resultado
anterior, obtido por Mller [Mull87], que indica o valor de 0,4mm como sendo o
mnimo necessrio para assegurar a separabilidade visual dos objetos, com base na
espessura das linhas plotadas e na resoluo do olho humano. Qualquer detalhe de
tamanho menor desnecessrio: virtualmente toda a informao adicional que exista
perdida, pois os humanos no so capazes de perceb-la. Outro estudo do mesmo autor
[Mull90a] usa o mesmo conceito na deteco de conflitos entre elementos
generalizados.
Li e Openshaw propuseram trs algoritmos diferentes: vetorial, raster, e um terceiro que
combina ambos. No primeiro, gerado um crculo cujo dimetro o dobro tamanho do
SVO sobre o primeiro vrtice. Todo detalhamento interior ao crculo desprezado, e
substitudo por um centride, que o ponto mdio do segmento unindo o vrtice
inicial (centro do crculo) e o ponto onde o crculo intercepta a poligonal. Nesse ltimo
ponto, o algoritmo reiniciado, repetindo a mesma operao at que o vrtice final seja
inserido em um crculo. O resultado interessante, pois fora a eliminao de detalhes
de tamanho inferior ao do SVO, produzindo representaes bastante suavizadas e de
aspecto real. No entanto, este algoritmo no seleciona vrtices da poligonal original, e
portanto no-hierrquico. Outro problema que no forada a utilizao do primeiro
e do ltimo vrtices, o que pode gerar inconsistncias topolgicas na visualizao.
Na verso raster do algoritmo utilizado, em lugar do crculo, um pixel de tamanho
equivalente ao do SVO. O processamento essencialmente o mesmo da verso vetorial,
com a diferena de estarem sendo escolhidos pixels especficos, dentro de uma matriz,
que ficaro ligados para representar a poligonal.
A verso raster-vector combina os pontos positivos das duas alternativas anteriores.
utilizado um quadrado, como na verso raster, mas que pode estar posicionado
arbitrariamente, como o centride da verso vetorial. Os resultados da aplicao deste
algoritmo apresentam boa consistncia geomtrica, especialmente quando comparados
com resultados do algoritmo Douglas-Peucker em simplificaes radicais [LiOp92]. No
entanto, os autores apontam problemas na simplificao de corredores estreitos, que
podem ser fundidos em uma s linha, gerando uma aparncia indesejvel. Outro

problema apontado corresponde aos critrios de escolha do tamanho do SVO para


gerao de representaes em outras escalas. Testes e experincias realizados pelos
autores indicam como adequado valores da ordem de 0,5 a 0,6 mm.
1.1.4.12 Comparao entre os algoritmos

Como foi visto nesta seo, existem muitos algoritmos para simplificao de poligonais,
com boa eficincia computacional e comportamento geomtrico aceitvel dentro de
limites. Dentre os algoritmos apresentados, o Douglas-Peucker se destaca por ser o mais
utilizado nos sistemas comerciais, e por viabilizar a construo de uma rvore binria
para estruturar o resultado do processamento. tambm um algoritmo que apresenta
bons resultados na simplificao com tolerncias baixas, com a manuteno de uma
parcela significativa dos vrtices. No entanto, seu comportamento geomtrico deixa a
desejar em situaes de simplificao mais radical, com mudanas de escala
relativamente grandes. O algoritmo Visvalingam-Whyatt parece oferecer uma soluo
mais interessante para a simplificao radical, mantendo a possibilidade de estruturar os
resultados para armazenamento. No entanto, a fixao do parmetro de tolerncia pode
ser problemtica. O algoritmo Zhao-Saalfeld uma alternativa interessante e rpida para
a filtragem de vrtices desnecessrios ao longo do processo de digitalizao. Seu
funcionamento incremental, no entanto, dificulta sua utilizao para generalizao
dinmica, pois no existe maneira bvia de estruturar e armazenar seus resultados.
1.1.5 Geometria de polgonos
Uma parcela importante do trabalho de geometria computacional realizada sobre
polgonos. Estes constituem uma maneira conveniente de representar, em um
computador, entidades do mundo real cuja abstrao transmite a noo de rea. Estes
tipos de objetos so muito comuns em SIG, sendo muitas vezes denominados objetos
de rea, e so usados para representar graficamente entidades bidimensionais, tais
como o contorno de edificaes, propriedades, regies de uso do solo e, genericamente,
todo tipo de diviso territorial, tais como estados, municpios, bairros e setores
censitrios. A maioria dos polgonos encontrados em bancos de dados geogrficos so
muito simples, mas podem existir objetos poligonais muito complicados. Por exemplo,
muito provvel que o formato de uma edificao seja muito mais simples que a
fronteira entre dois municpios, uma vez que o primeiro criado pelo homem, enquanto
o segundo tipicamente definido por elementos naturais, tais como rios ou divisores de
guas.
Dado o uso intensivo de polgonos em SIG, e a natureza das aplicaes usuais, os
algoritmos empregados para trabalhar com polgonos precisam ser escolhidos
cuidadosamente. Neste sentido, a eficincia pode ser uma decorrncia da diviso do
polgono em partes mais simples, como tringulos. Nesta seo, sero apresentados
algoritmos que exigem a diviso do polgono em tringulos, como o clculo de rea e
centro de gravidade, alm do algoritmo para triangulao propriamente dito. Alm
disso, sero apresentados elementos de aritmtica de polgonos, incluindo unio,
interseo e criao de buffers.

1.1.5.1 Propriedades bsicas e triangulao

Definies. Um polgono a regio do plano limitada por uma coleo finita de


segmentos, formando uma curva fechada simples. Um segmento o subconjunto
fechado dos pontos de uma reta compreendidos entre dois pontos extremos.
Mais formalmente, um polgono pode ser definido como se segue:
Definio

1.4

Sejam

v 0 , v1 ,


, v n 1

pontos

do

plano.

Sejam

a 0 = v 0 v1 , a1 = v1v 2 , , a n 1 = v n 1v 0 n segmentos, conectando os pontos. Estes


segmentos limitam um polgono P se, e somente se, (1) a interseo de
segmentos adjacentes unicamente o ponto extremo compartilhado por eles (ou
seja, ai a i +1 = vi +1 ), e (2) segmentos no adjacentes no se interceptam (ou
seja, ai a j = para todo i, j tais que j i + 1).


Os pontos vi e os segmentos ai so chamados respectivamente os vrtices e as arestas do


polgono. As arestas formam uma curva porque so conectados seqencialmente, pelos
pontos extremos. A curva fechada porque o ltimo segmento conecta o ltimo vrtice
ao primeiro. A curva fechada denominada simples porque no existem intersees de
arestas no adjacentes. Se a condio (2) no for observada, ainda assim o objeto
chamado, em muitas situaes, de polgono, mas ser um polgono no-simples (Figura
1.30). Em geral, todos os polgonos mencionados de agora em diante sero considerados
simples, a menos que explicitamente se afirme o contrrio. A definio acima poderia
ser baseada na definio de linha poligonal, uma vez que o polgono exatamente uma
poligonal fechada. O fato de ser fechada, no entanto, acrescenta propriedades
importantes, como veremos a seguir.

(a)

(b)

Figura 1.30 - Polgonos no-simples (a) e simples (b)


Outro conceito importante envolvendo polgonos o de convexidade. Um conjunto S de
pontos dito convexo se, para quaisquer dois pontos p1 e p2 em S o segmento p1p2 est
inteiramente contido em S. Um polgono simples ento dito convexo se seu interior
forma um conjunto convexo.
Note-se que o polgono, sendo a regio do plano limitada pelas arestas, contm todos os
pontos internos. Em muitas aplicaes e algoritmos, no entanto, existe a necessidade de
distinguir entre a fronteira e a regio limitada pelo polgono. Assim, ser usada aqui a
notao P para representar a fronteira, enquanto P representar a regio. Isto significa
que P P . O smbolo de derivada parcial usado porque, no sentido topolgico, a
fronteira a derivada parcial da regio. A partir desta definio, conclumos que o
polgono, entendido como sendo a regio, divide o plano em duas partes: o interior

(limitado) e o exterior (ilimitado). Este conceito fundamental para aplicaes de SIG


envolvendo polgonos.
Observe-se tambm que a definio acima no considera a possibilidade da existncia
de ilhas ou buracos no polgono, uma vez que o polgono deve conter todos os
pontos do plano no interior da fronteira. Em algumas definies de polgonos
encontradas na literatura, tal possibilidade explicitamente descartada pelo uso de uma
regra que afirma que nenhum subconjunto das arestas do polgono compartilha a
propriedade do polgono, ou seja, nenhum subconjunto de arestas forma uma curva
fechada simples. Tais objetos, no entanto, freqentemente aparecem em problemas
prticos, como o contorno de edificao apresentado na Figura 1.31. O edifcio tem um
buraco em seu contorno, que funciona como coluna de ventilao. A rea ocupada
pelo edifcio pode ser aproximada por um polgono no qual o que era um buraco passa a
ser conectado com o exterior. Naturalmente, a largura do corredor entre o buraco e o
exterior determina a qualidade da aproximao, tanto visualmente (esteticamente)
quanto numericamente. Esta tcnica amplamente utilizada em SIG, para preservar a
correo de mapas temticos e a possibilidade de gerar clculos de rea mais
aproximados.

(a) polgono com buraco

(b) buraco aproximado

Figura 1.31 - Aproximao de buraco em polgono


Em geometria computacional a seqncia dos vrtices de um polgono dada em
sentido anti-horrio, por conveno. Este no o caso da maioria dos produtos de SIG,
que no exigem qualquer ordenao especial dos vrtices de um polgono para aceit-lo
no banco de dados geogrfico. Alguns nem mesmo verificam se o polgono ou no
simples, antes de aceitar sua incluso. Isto pode levar a problemas, como veremos
posteriormente.
Alguns problemas e aplicaes de geometria computacional usam a noo de polgonos
estrelados [FiCa91]. So polgonos para os quais existe um ponto z, no-externo, tal que
para todos os pontos p contidos no polgono o segmento zp est inteiramente contido no
polgono. O conjunto Z de pontos que compartilham esta propriedade denominado
ncleo do polgono. Naturalmente, todos os polgonos convexos so em formato de
estrela, e o seu ncleo coincide com o prprio polgono. Outros exemplos de polgonos
estrelados esto apresentados na Figura 1.32.

Figura 1.32 - Polgonos estrelados e pontos pertencentes


ao ncleo (z)
O Problema da Galeria de Arte. O Problema da Galeria de Arte um clssico da
geometria cuja soluo conduz naturalmente ao problema de triangulao de polgonos,
importante em geoprocessamento. Neste problema, a planta poligonal de uma galeria de
arte deve ser coberta (vigiada) por um determinado nmero de guardas estacionrios.
Cada guarda pode enxergar tudo ao seu redor mas, naturalmente, no consegue enxergar
atravs das paredes (arestas do polgono). Isso significa que cada guarda tem uma faixa
de 2 radianos de visibilidade. O problema consiste em determinar quantos guardas so
necessrios, no mnimo, para vigiar a galeria.
Definio 1.5 - Um ponto B visvel por um ponto A em um polgono P se, e
somente se, o segmento fechado AB no contm nenhum ponto exterior a P
( AB P ). B dito claramente visvel por A se AB no contm nenhum ponto
da fronteira de P ( P ) que no A e B ( AB P = { A, B} ).
Observe-se que esta definio permite que os vrtices estejam no caminho da
visibilidade, sem bloquear a viso do guarda. Definies alternativas poderiam excluir
esta possibilidade.
Definio 1.6 - Um conjunto de guardas cobre um polgono P se todo ponto em
P visvel por algum guarda.
Portanto, um guarda um ponto contido no polgono. Assume-se que os guardas no
impedem a viso uns dos outros. A Figura 1.33 apresenta um polgono de 6 lados que
pode ser coberto por um nico guarda. Como veremos adiante, um guarda no
suficiente para cobrir qualquer polgono de 6 lados.

X
G

Figura 1.33 - O guarda G cobre todo o polgono; o ponto X visvel a partir de G

O Problema da Galeria de Arte procura determinar o mximo, dentre todos os polgonos


de n lados, do menor nmero de guardas necessrio para cobrir o polgono. Em outras
palavras, qual o menor nmero de guardas necessrio no pior caso para um polgono
de n vrtices. Por exemplo, na Figura 1.33 apenas um guarda foi suficiente para cobrir o
polgono de 6 lados. A Figura 1.34 mostra dois casos de polgonos de 6 lados que
exigem dois guardas. Portanto, a resposta para o Problema da Galeria de Arte pelo
menos dois guardas. A esta altura, diz-se pelo menos porque a prova desta
necessidade ainda no foi apresentada.

Figura 1.34 - Dois polgonos de seis lados que exigem dois guardas
Para um dado polgono de n vrtices, existe sempre um nmero necessrio (mnimo) de
guardas. necessrio mostrar que este nmero suficiente para todos os polgonos de n
vrtices. Formalmente, o problema determinar os valores de uma funo G(n),
definida como G( n ) = max Pn g( Pn ) , onde Pn um polgono genrico de n vrtices, e a
funo g(P) determina o mnimo nmero de guardas para um polgono especfico P.
Obviamente, G(3) = 1, uma vez que qualquer tringulo convexo, e portanto pode ser
coberto por um nico guarda. Pode-se mostrar facilmente que tambm G(4) = 1 e G(5) =
1. No entanto, G(6) = 2, como se pode perceber pela Figura 1.34, confirmando por
experimentao. Isto leva a uma conjetura inicial, de que G( n ) = n / 3 . Essa conjetura
foi provada por Fisk, em 1978, usando triangulao de polgonos.
A tcnica de triangulao de polgonos empregada por Fisk usa a noo de diagonais.
Definio 1.7 - Uma diagonal de um polgono P um segmento cujos pontos
extremos so dois de seus vrtices vi e vj tais que vi e vj so claramente visveis
um pelo outro.
Portanto, pela definio de claramente visvel, a diagonal no pode interceptar a
fronteira do polgono. Duas diagonais so ditas no-interceptantes se sua interseo
ocorre apenas na fronteira, ou seja, em um dos vrtices. Adicionando diagonais nointerceptantes a um polgono, em qualquer ordem, e terminando o processo quando no
for mais possvel inserir novas diagonais, o polgono particionado em tringulos. Isto
denominado uma triangulao do polgono, e sempre possvel (vide demonstrao em
[ORou94]). Em geral, existem muitas maneiras de triangular um polgono, dependendo
da seqncia de lanamento das diagonais. Foi provado que qualquer polgono pode ser
triangulado usando este processo.
A prova de Fisk inicialmente executa a triangulao de um polgono, formando um
grafo no qual os ns so os vrtices, e os arcos so as diagonais e os segmentos da
fronteira. Fisk mostra que este grafo pode sempre ser colorido com trs cores. Uma vez
que o processo de colorao seja iniciado pelos vrtices de um tringulo arbitrrio, os

vrtices subseqentes so sempre forados a assumir cores, com base no


compartilhamento de diagonais e na adjacncia de tringulos (a Figura 1.35 contm um
exemplo). J que cada tringulo compartilha pelo menos um de seus lados com outro
tringulo (em qualquer polgono com n 4), o vrtice oposto tem sua colorao forada
pelas escolhas anteriores de cores. Assim, se cada um dos n vrtices recebeu uma de trs
cores, pode-se concluir que pelo menos uma das cores pode ser encontrada em, no
mximo, n / 3 vrtices. Ou seja, G( n ) = n / 3 , porque com um guarda em cada um
dos vrtices correspondentes cor menos usada possvel cobrir todo o polgono.

Figura 1.35 - Para este polgono com 14 vrtices, 4 guardas so suficientes (nos
vrtices pretos)
Triangulao de polgonos. Na soluo do Problema da Galeria de Arte foi utilizada a
triangulao de polgonos, e afirmou-se que a triangulao sempre possvel. Para
provar esta afirmao, necessrio estabelecer algumas condies iniciais, relativas
convexidade de vrtices e existncia de diagonais.
Definio 1.8 - Um vrtice estritamente convexo de um polgono P um vrtice
no qual, quando se caminha em sentido anti-horrio pela fronteira do polgono,
faz-se uma curva esquerda. Analogamente, um vrtice reflexo aquele no qual
se faz uma curva direita. Observe-se que, quando se caminha pela fronteira de
um polgono em sentido anti-horrio, o interior est sempre esquerda.
Lema 1.1 - Existe sempre pelo menos um vrtice estritamente convexo em um
polgono P.
Prova - Selecionar, dentre os vrtices de P, aquele com a menor coordenada y.
Se existir mais de um vrtice com a mesma ordenada, escolher aquele com a
maior abscissa. Seja vi este vrtice. Nesta situao, tem-se y(vi-1) y(vi) e
y(vi+1) > y(vi), e o interior est totalmente acima de vi. Portanto, necessrio
fazer uma curva esquerda em vi quando se caminha em sentido anti-horrio, de
vi-1 para vi+1 , e portanto vi um vrtice estritamente convexo (vide Figura 1.36
para uma visualizao da prova).

v i-1

v i+1

v i-1

v i+1

v i+1
vi

v i-1

vi

(a)

(b)

vi

(c)

Figura 1.36 - Curva esquerda no vrtice inferior mais direita,


que tem de ser estritamente convexo
Lema 1.2 - Todo polgono P com mais de 3 vrtices tem uma diagonal.
Prova - Seja vi um vrtice estritamente convexo, cuja existncia foi garantida
pelo Lema 1.1 . Sejam vi-1 e vi+1 os vrtices imediatamente adjacentes a vi. Se o
segmento vi-1vi+1 no for uma diagonal, ento ele (i) intercepta P , ou (ii) ele
exterior a P (Figura 1.37). Em ambos os casos, o tringulo vi-1vivi+1 contm pelo
menos um outro vrtice de P, uma vez que n 4. Um dos vrtices includos no
tringulo vi-1vivi+1 ir formar uma diagonal com vi. Este vrtice pode ser
encontrado pesquisando em uma linha paralela ao segmento vi-1vi+1 , comeando
em vi e deslocando-a em direo a vi-1vi+1 at que um vrtice x seja encontrado.
J que o tringulo vi-1vivi+1 foi varrido desde vi, sem que qualquer outro vrtice
tivesse sido encontrado, o segmento vix no intercepta P num ponto da
fronteira diferente de vi ou x, e portanto constitui uma diagonal.

v i-1

v i+1

v i-1

v i+1

v i-1

v i+1
x

vi

vi

vi

(a)

(b)

(c)

Figura 1.37 - Trs situaes possveis no Lema 1.2 : (a) vi-1vi+1 uma diagonal,
(b) vi-1vi+1 intercepta a fronteira e (c) vi-1vi+1 exterior a P
Este lema demonstrou que qualquer polgono com mais de 3 vrtices deve ter pelo
menos uma diagonal. Observe-se, no entanto, que qualquer diagonal encontrada dividir

o polgono em duas partes. Se uma parte ficar com apenas trs vrtices, tem-se
obviamente um tringulo. Se ficar com mais de trs vrtices, formar tambm um
polgono, que tambm tem pelo menos uma diagonal. Recursivamente, chega-se a uma
triangulao completa. O teorema abaixo formaliza esta concluso.
Teorema 1.2 - Todo polgono de n vrtices pode ser triangulado
Prova - Se n = 3, o polgono j um tringulo. Se n 4, o polgono pode ser
dividido pela adio de uma diagonal, usando o processo descrito no Lema 1.2 .
Uma diagonal, quando encontrada, divide o polgono em dois sem adicionar
novos vrtices. Cada uma das partes um polgono, compartilhando uma aresta,
que a diagonal, e cada uma das partes tem menos de n vrtices. Prosseguindo,
cada parte pode ser dividida recursivamente at que se chegue a uma
triangulao completa.
A triangulao de um polgono tem diversas propriedades, que so teis para as
aplicaes.
Lema 1.3 - Toda triangulao de um polgono P com n vrtices usa n - 3
diagonais e gera n - 2 tringulos.
Prova - A prova por induo sobre o nmero de vrtices.
Base: Se n = 3, ento existem 3 - 3 = 0 diagonais e 3 - 2 = 1 tringulo.
Hiptese indutiva: Se n 4, ento existem n - 3 diagonais e n - 2 tringulos.
Passo indutivo: Sejam n1 e n2 o n mero de vrtices dos polgonos P1 e P2,
obtidos pela diviso de P por uma diagonal d. Naturalmente, n = n1 + n2 + 2,
uma vez que os pontos extremos da diagonal d so contados duas vezes. Se a
hiptese indutiva for verdadeira, ento P1 ter n1 - 3 diagonais e gerar n1 - 2
tringulos, e P2 ter n2 - 3 diagonais e gerar n2 - 2 tringulos. No total, existiro
(n1 -3) + (n2 - 3) + 1 = n - 3 diagonais (incluindo d), e (n1 - 2) + (n2 - 2) = n - 2
tringulos, o que confirma a hiptese indutiva.
Um corolrio ao Lema 1.3 que a soma dos ngulos internos de um polgono com n
vrtices (n - 2), correspondendo soma da contribuio de cada um dos
(n - 2) tringulos, cada qual tendo somatrio de ngulos internos igual a .
Em seguida, uma srie de resultados que correlacionam triangulaes a grafos sero
apresentados. Estas propriedades so teis em diversas situaes prticas, como ser
apresentado at o fim deste captulo.
Definio 1.9 - O dual da triangulao de um polgono um grafo, formado por
ns que correspondem a cada tringulo, e arcos ligando ns cujos tringulos
correspondentes compartilham uma diagonal (Figura 1.38).
No grafo dual, cada n claramente ter grau mximo igual a 3, uma vez que cada
tringulo tem no mximo trs lados para compartilhar.
Lema 1.4 - O dual de uma triangulao no tem ciclos.

Prova - vide [ORou94].


Se o dual de uma triangulao no tem ciclos, ento trata-se de uma rvore. Como cada
n tem grau mximo de 3, ento a rvore binria, quando se escolhe uma raiz com
grau 1 ou 2. Esta correspondncia entre triangulao de polgonos e rvores binrias
muito til na implementao de algoritmos de geometria computacional.

Figura 1.38 - Uma triangulao e sua rvore dual


1.1.5.2 rea de um polgono

A rea de um polgono pode ser calculada em tempo linear com relao ao nmero de
vrtices, usando um somatrio simples, baseado na soma de reas de tringulos.
O clculo pode ser feito como se segue. Sejam xi e yi as coordenadas do vrtice vi do
polgono P, com n vrtices. A rea do polgono dada por
1 n 1
A( P) = ( xi yi +1 yi xi +1 )
2 i =0

(1.14)

Observe-se que, na expresso acima, quando se tem i = n 1, necessrio ter x n = x 0 e


y n = y 0 , de acordo com a definio de polgono, caracterizando o seu fechamento.
O sinal da rea calculada indica o sentido da seqncia de vrtices. A rea ser negativa
se os vrtices estiverem em sentido horrio, ou positiva se em sentido anti-horrio,
exatamente como no caso da rea do tringulo (Equao 1.1). Como j foi dito, a base
do raciocnio para o desenvolvimento do somatrio o mesmo do clculo da rea de um
tringulo. O somatrio da Equao 1.14 corresponde soma da rea de n tringulos,
formados entre um ponto arbitrrio (no caso, a origem do sistema de coordenadas) e
cada par seqencial de vrtices (vi, vi+1). A demonstrao pode ser encontrada em
[FiCa91].
Caso se deseje simplesmente determinar a orientao dos vrtices, existe ainda um
mtodo mais rpido. Basta determinar o vrtice inferior e mais direita do polgono, e
ento calcular o produto vetorial das duas arestas que se conectam naquele vrtice. Isso
funciona porque, como j apresentado anteriormente, este vrtice necessariamente
convexo, e portanto o ngulo interno baseado nele menor que 180o. Ento, a
orientao global do polgono pode ser deduzida a partir da orientao do tringulo

formado entre este vrtice e seus vizinhos imediatos. Este mtodo tambm O(n), mas
evita todas as multiplicaes e somas necessrias para o clculo da rea.
1.1.5.3 Determinao do centride de um polgono

Em muitas situaes prticas, necessrio determinar, dado um polgono qualquer, seu


centro de gravidade ou centro de massa, mais conhecido em SIG como centride. Em
SIG, o centride muitas vezes criado e relacionado ao polgono para viabilizar o
armazenamento de dados alfanumricos associados no banco de dados geogrfico.
tambm usado como ponto de lanamento automtico de textos grficos, para
identificao de elementos em tela e plotados.
O centride de um polgono pode ser obtido a partir da sua diviso em tringulos,
calculando em seguida a mdia ponderada dos centros de gravidade dos tringulos
usando suas reas como peso10. O centro de gravidade de cada tringulo simplesmente
a mdia das coordenadas de seus vrtices, ou seja, as coordenadas do centro de
gravidade de um tringulo ABC seriam:
xG =

x A + x B + xC
y + y B + yC
e yG = A
3
3

Embora este processo seja relativamente simples, pressupe-se a implementao de um


algoritmo de triangulao de polgonos. Os centrides dos tringulos so combinados
usando um processo de mdia ponderada pela rea. Assim, o centride de um polgono
formado por dois tringulos T1 e T2, cujos centrides so, respectivamente, (xG1, yG1) e
(xG2, yG2) o ponto (xG, yG), onde
x G1 S (T1 ) + x G 2 S (T2 )
S (T1 ) + S (T2 )
y 1 S (T1 ) + y G 2 S (T2 )
yG = G
S (T1 ) + S (T2 )

xG =

e o centride do polgono pode ser determinado de maneira incremental, adicionando


um tringulo e seu centride por vez e calculando as coordenadas do centride do
conjunto.
No entanto, existe uma soluo mais simples e independente da triangulao, e que leva
em conta tringulos com reas positivas e negativas, como no clculo da rea do
polgono. O mesmo processo de mdia ponderada pela rea pode ser usado,
considerando todos os tringulos formados entre um ponto fixo, por exemplo (0, 0), e
cada par de vrtices sucessivos, (vi, vi+1).
Assim, temos que

10

Este resultado pode ser demonstrado usando as coordenadas baricntricas, conforme apresentado na
seo 1.1.2.1, atribuindo valores iguais a 1/3 para os parmetros 1, 2 e 3 (Equao 1.3).

A( P) =

1 n 1
( x y y i x i +1 )
2 i = 0 i i +1
n 1

xC =

(x
i =0

i +1

3 A( P)
n 1

yC =

+ x i ) ( x i y i +1 y i x i +1 )

(y
i =0

i +1

(1.15)

+ y i ) ( x i y i +1 y i x i +1 )
3 A( P)

O resultado pode ser facilmente implementado em um algoritmo com complexidade


O(n), que naturalmente pode fornecer ao mesmo tempo a rea do polgono (Programa
1.17).
funo centridePolgono(Poligono P): Ponto
incio
real parcela, xc = 0, yc = 0;
inteiro i, i1;
Ponto pt;
para i = 0 at i < P.numVrtices faa
incio
i1 = ((i + 1) mod P.numVrtices);
parcela = ((P.fronteira[i].x * P.fronteira[i1].y) (P.fronteira[i].y * P.fronteira[i1].x));
S = S + parcela;
xc = xc + (P.fronteira[i].x +P.fronteira[i1]. x) * parcela;
yc = yc + (P.fronteira[i].y +P.fronteira[i1].y) * parcela;
fim;
se (S != 0) ento incio
xc = xc / (3 * S);
yc = yc / (3 * S);
fim seno incio
xc = 0;
yc = 0;
sinalizar erro e retornar;
fim;
S = S / 2;
pt.x = xc;
pt.y = yc;
retorne (pt);
fim.

Programa 1.17 - Funo centridePolgono


Mas apesar da simplicidade do processo, no existe garantia de que o centride ser um
ponto pertencente ao polgono. Caso seja necessrio encontrar um ponto interno a um
polgono simples dado, pode-se utilizar o seguinte processo, que busca precisamente
identificar rapidamente uma diagonal do polgono [ORou94]:
identificar um vrtice convexo vi (por exemplo, o vrtice inferior mais
direita, conforme demonstrado na seo 1.1.5.1)
para cada outro vrtice vj do polgono verificar:

se vj estiver dentro do tringulo vi-1vivi+1, ento calcular a distncia vivj


armazenar vj em q se esta distncia for um novo mnimo
ao final do processo, se algum ponto interior a vi-1vivi+1 for encontrado, ento
o ponto mdio do segmento qvi interior ao polgono; se nenhum ponto
interior for encontrado, ento o ponto mdio do segmento vi-1vi+1 (ou mesmo
o centride do tringulo vi-1vivi+1) interior ao polgono.
Curiosamente, parte da literatura de SIG e mesmo a nomenclatura adotada por alguns
sistemas considera uma definio alternativa de centride, em que mesmo se situa
aproximadamente no centro do polgono [LaTh92]. Assim, o centride pode ser
determinado por diversos processos, como o centro do retngulo envolvente mnimo, o
centro de um crculo inscrito ou circunscrito ao polgono, ou mesmo definido
intuitivamente pelo usurio. Uma forma freqentemente usada para determinar um
centride consiste em simplesmente obter a mdia aritmtica das coordenadas x e y dos
vrtices. Embora menos computacionalmente intensivo do que o mtodo apresentado
nesta seo, o processo da mdia tem seus resultados afetados por caractersticas dos
objetos, ou mesmo pelo processo de digitalizao dos polgonos. Como se pode
perceber na Figura 1.39, a existncia, por alguma razo, de uma concentrao de
vrtices em uma regio do polgono causa um deslocamento indesejvel do centride. O
deslocamento ocorre justamente em direo regio com maior densidade de vrtices, o
que pode prejudicar aplicaes simples, como o posicionamento de textos grficos.

G
M

Figura 1.39 - Centrides calculados pela mdia (M) e como centro de gravidade (G)
1.1.5.4 Ponto em polgono

Um dos problemas mais importantes em SIG consiste em determinar se um dado ponto


est dentro ou fora de um polgono. resolvido, por exemplo, vrias vezes cada vez que
se usa o boto do mouse para selecionar um objeto na tela. Embora a soluo seja
relativamente simples, necessrio tomar muito cuidado com casos especiais e
problemas numricos, fazendo com que uma implementao realmente robusta seja
relativamente difcil de alcanar.
O princpio fundamental para determinar se um ponto Q est ou no dentro de um
polgono P consiste em traar, a partir de Q, uma semi-reta em uma direo qualquer.
Quando esta semi-reta intercepta o polgono um nmero mpar de vezes, ento o ponto

est dentro do polgono; caso contrrio, ou seja, caso exista um nmero par de
intersees, o ponto est fora (Figura 1.40).

Figura 1.40 - Ponto em polgono


Por convenincia, adota-se em geral uma semi-reta paralela ao eixo dos x passando por
Q e se estendendo para a direita. A contagem do nmero de intersees pode ser feita
com facilidade, verificando quantos segmentos tm um ponto extremo acima e outro
abaixo de yQ. Destes, preciso verificar em quantos a interseo com a semi-reta ocorre
em um ponto de abscissa maior que xQ. A maior dificuldade est no tratamento de casos
degenerados, como:
a semi-reta passa por uma aresta do polgono (Figura 1.41a);
a semi-reta passa por um vrtice do polgono (Figura 1.41b);
o ponto Q est sobre a fronteira do polgono (Figura 1.41c);
o ponto Q coincide com um vrtice do polgono (Figura 1.41d).

P
Q

(a)

(b)

(c)

(d)

Figura 1.41 - Ponto em polgono - casos degenerados


Para estes casos, a soluo est em adotar um critrio para a contagem de intersees de
modo que:
se a reta passa por um vrtice, a interseo deve ser considerada apenas se for o
vrtice com maior ordenada do segmento, e ignorada caso contrrio;
se a reta passa por um segmento do contorno do polgono, nenhuma interseo deve
ser considerada;
se o ponto Q pertence a um segmento do contorno (exceto pontos extremos),
considerar como uma interseo.
O caso em que Q coincide com um vrtice pode ser tratado pelo primeiro critrio. O
terceiro critrio faz com que todos os pontos da fronteira sejam considerados como
pertencentes ao polgono.

funo pontoEmRetngulo(Ponto Q, Ponto A, Ponto B): booleano


/* testa se Q est contido no retngulo definido por A e B */
incio
Ponto C, D;
C.x
C.y
D.x
D.y

=
=
=
=

min(A.x,
min(A.y,
max(A.x,
max(A.y,

B.x);
B.y);
B.x);
B.y);

retorne ((Q.x >= C.x) e (Q.x <= D.x) e


(Q.y >= C.y) e (Q.y <= D.y));
fim.

Programa 1.18 - Funo pontoEmRetngulo


Assim, pode-se construir um algoritmo (Programa 1.19), que claramente tem
complexidade O(n), sendo n o nmero de vrtices do polgono. Observe-se que foi
includo um teste de rejeio rpida (Programa 1.18), comparando o ponto com o
retngulo envolvente mnimo do polgono, considerando que este tenha sido
previamente determinado e armazenado. Este teste, que tem complexidade O(1), pode
representar um ganho de desempenho importante para SIG, onde pontoEmPolgono
freqentemente usada.
funo pontoEmPolgono(Ponto Q, Poligono P): booleano
incio
inteiro i, numIntersees = 0;
Ponto C, D;
se (no (pontoEmRetngulo(Q, P.REMp1, P.REMp2))
ento retorne falso;
para i = 0 at i < P.numVrtices faa
incio
C = P.fronteira[i];
D = P.fronteira[i + 1];
se (C.y != D.y)
ento incio
calcular interseo;
se (interseo for direita de Q)
ento numIntersees = numIntersees + 1;
fim ento;
fim;
retorne ((numIntersees mod 2) != 0);
fim.

Programa 1.19 - Funo pontoEmPolgono


ORourke [ORou94] prope uma variao em que a interseo considerada apenas se
um dos pontos extremos do segmento da fronteira estiver estritamente acima ou abaixo
da semi-reta, enquanto o outro pode estar do lado oposto ou sobre a semi-reta (Programa
1.2011). Desta forma, intencionalmente forada uma situao em que pontos

11

O Programa 1.20, embora use os mesmos critrios de soluo de casos degenerados, difere do
apresentado em [ORou94], pois no realiza a mudana de eixos proposta (que pode ser inconveniente), e
procura tirar partido das funes desenvolvidas na seo anterior.

pertencentes a determinados segmentos da fronteira so considerados como pertencentes


ao polgono, enquanto outros so considerados como no pertencentes. Como exemplo,
considere-se um retngulo com lados paralelos aos eixos. Pelo algoritmo do Programa
1.20, pontos nas laterais esquerda e inferior so considerados dentro, e pontos nas
laterais direita e superior so considerados fora do polgono. Este critrio o mais
recomendvel em situaes de particionamento do plano, em que se deseja que qualquer
ponto pertena a exatamente um polgono. Pelo critrio anterior, pontos sobre a fronteira
comum entre dois polgonos pertenceriam a ambos.
funo pontoEmPolgono1(Ponto Q, Poligono P): booleano
incio
inteiro i, i1, numIntersees = 0;
se (no (pontoEmRetngulo(Q, P.REMp1, P.REMp2))
ento retorne falso;
para i = 0 at i < P.numVrtices faa
incio
i1 = i + n - 1;
se (((P.fronteira[i].y > Q.y) e
(P.fronteira[i1].y <= Q.y)) ou
((P.fronteira[i1].y > Q.y) e
(P.fronteira[i].y <= Q.y)))
ento incio
calcular interseo;
se (interseo for direita de Q)
ento numIntersees = numIntersees + 1;
fim ento;
fim;
retorne ((numIntersees mod 2) != 0);
fim.

Programa 1.20 - Funo pontoEmPolgono1 (variao de pontoEmPolgono)


A aplicao do teste de ponto em polgono em SIG depende tambm do modelo adotado
para representar entidades de rea. Caso apenas sejam permitidos polgonos simples, o
teste conforme apresentado poder ser usado. No entanto, caso o modelo do SIG permita
a existncia de regies formadas por vrios polgonos simples isolados, e formando
ilhas e buracos, o teste precisar ser aperfeioado. Uma possibilidade testar a incluso
do ponto em todos os polgonos simples que compem a regio, verificando os
seguintes casos:
Ponto contido em apenas um polgono: neste caso, o polgono s poder ser uma ilha,
e portanto o ponto est dentro da regio. Caso o polgono seja um buraco, existe erro
topolgico.
Ponto contido em mais de um polgono: se o nmero de ilhas for igual ao nmero de
buracos, o ponto est fora da regio (Figura 1.42b); se o nmero de ilhas for maior
que o nmero de buracos, o ponto est dentro da regio (Figura 1.42a). O caso de se
ter o nmero de buracos superior ao nmero de ilhas indica um erro topolgico.

(a)

(b)

Figura 1.42 - Ponto em regio


Para o teste em regies, conforme descrito acima, recomenda-se usar o Programa 1.20,
para evitar conflitos em situaes em que o ponto fique na fronteira entre dois ou mais
polgonos, o que pode mascarar o resultado. Em qualquer caso, considera-se que no
existe superposio entre os polgonos que compem a regio.
1.1.5.5 Interseo, unio e diferena de polgonos

Operaes sobre polgonos so de fundamental importncia em SIG. Atravs da


deteco e processamento da unio, interseo e diferena de polgonos, diversos tipos
de operaes, conhecidas como em conjunto como polygon overlay, so viabilizadas.
So operaes fundamentais para anlise espacial, usadas em situaes em que
necessrio combinar ou comparar dados colocados em camadas distintas. Por exemplo,
considere-se uma consulta como identificar fazendas em que mais de 30% da rea de
latossolo roxo. Para executar esta anlise, necessrio combinar uma camada de
objetos poligonais (os limites de propriedades rurais) com outra (o mapa de tipos de
solo), para obter uma nova camada, de cujo contedo podem ser selecionados
diretamente os objetos que atendem ao critrio de anlise colocado.
Algumas vezes, o polygon overlay definido como uma operao topolgica, ou seja,
que executada sobre dados organizados em uma estrutura de dados topolgica. Estas
estruturas e operaes sobre elas sero apresentadas na seo 1.2. As funes de
processamento de polgonos que sero descritas a seguir so utilizadas em sistemas no
topolgicos, ou em situaes em que o processamento feito de maneira isolada, como
na criao e uso de buffers (vide seo 1.1.5.6).
Este problema tambm estudado com bastante intensidade em computao grfica,
onde denominado recorte de polgonos. O caso mais simples o recorte de um
polgono por um retngulo, correspondendo situao corriqueira de apresentao em
tela. O caso geral o recorte de um polgono por outro, ambos genricos (no
convexos), que ocorre no processamento de remoo de superfcies escondidas, em
sntese de imagens 3D. Outro uso para o recorte de polgonos a quebra de objetos em

uma cena para processamento de ray tracing em computadores paralelos. Em


computao grfica, o problema pode ainda incluir os casos de polgonos no simples e
polgonos com buracos [Vatt92].
Para realizar operaes sobre polgonos, interessante aplicar um passo preliminar de
deteco rpida da possibilidade interseo entre os polgonos. Assim, se no for
possvel que dois polgonos P e Q tenham interseo, ento podemos concluir
diretamente que P Q = { P, Q} , P Q = , P Q = P e Q P = Q . Uma maneira
simples de testar se dois polgonos tm ou no interseo usar inicialmente o teste de
interseo dos retngulos envolventes mnimos (seo 1.1.2.2).
No caso geral, operaes de unio, interseo ou diferena entre dois polgonos simples
podem gerar diversos polgonos como resultado. Mais ainda, os polgonos resultantes
podero conter buracos. A Figura 1.43 contm exemplos de produo de mltiplos
polgonos e de polgonos com buracos em operaes de interseo, unio e diferena.

P
Q
S

(a) P U Q

(c) P Q

(b) Q - S

(d) P - R

Figura 1.43 - Operaes sobre polgonos produzindo buracos e mltiplos polgonos


Existe uma proposta de realizar a anlise de interseo e de unio entre polgonos
usando a tcnica de varredura do plano, de maneira semelhante interseo de n

segmentos. Esta tcnica consiste em dividir os polgonos em fatias horizontais, usando


linhas que passam pelos vrtices e pelos pontos de interseo entre arestas, ordenando
os pontos segundo o eixo das abscissas e fazendo a varredura do plano [NiPr82]. Cada
fatia composta de um ou mais trapezides, provenientes de um ou de ambos os
polgonos, sendo relativamente simples detectar sua interseo em cada fatia [LaTh92].
No entanto, um mtodo mais interessante foi apresentado por Margalit e Knott
[MaKn89], e permite realizar operaes de interseo, unio e diferena em tempo
O(n log n), e partindo de polgonos que podem ter ilhas ou buracos. O algoritmo
sensvel orientao dos polgonos, e exige que os vrtices de ilhas sejam codificados
em um sentido (por exemplo, anti-horrio) e os vrtices de buracos sejam dispostos no
sentido inverso (horrio). Isto coincide com a conveno usada para calcular a rea de
polgonos, conforme apresentado na seo 1.1.5.2.
Tabela 1.5 - Orientao dos polgonos de entrada de acordo com a operao
Polgonos

Operaes

PQ

PQ

PQ

Q P

ilha

ilha

manter

manter

inverter

inverter

ilha

buraco

inverter

inverter

manter

manter

buraco

ilha

inverter

inverter

manter

manter

buraco

buraco

manter

manter

inverter

inverter

O algoritmo tem seis passos, que sero descritos a seguir.


1. Normalizar a orientao dos polgonos de entrada P e Q, e inverter a orientao de
Q dependendo do tipo de operao e da natureza (ilha ou buraco) dos dois polgonos
de entrada, de acordo com a Tabela 1.5.
2. Classificar os vrtices, verificando se cada um est dentro, fora ou na fronteira do
outro polgono, usando o teste de ponto em polgono (seo 1.1.5.4). Inserir os
vrtices assim classificados em duas listas circulares, PL e QL, onde aparecero em
seqncia, de modo a definir as arestas por adjacncia.
3. Encontrar as intersees entre arestas dos dois polgonos, usando o teste de
interseo de n segmentos (seo 1.1.3). Inserir os pontos de interseo na posio
apropriada em PL e QL, classificando-os como na fronteira. A partir deste ponto,
teremos um conjunto de fragmentos de arestas em lugar das arestas originais.
necessrio cuidar do caso especial de interseo ao longo de uma aresta comum, ou
parte dela. Neste caso, ambos os pontos extremos da aresta devem ser classificados
como na fronteira e inseridos nas listas.
4. Classificar os fragmentos de arestas (definidos pelos pares de vrtices) formados
em PL e QL com relao ao outro polgono, entre interior, exterior ou na fronteira.

No necessrio realizar novamente o teste de ponto em polgono. Uma aresta pode


ser considerada interior ao outro polgono caso pelo menos um de seus vrtices esteja
classificado como dentro. Da mesma forma, uma aresta pode ser classificada como
exterior ao outro polgono caso pelo menos um de seus vrtices esteja classificado
como fora. Se ambos os vrtices estiverem classificados como na fronteira, ento
necessrio verificar a situao de um ponto interno ao segmento (por exemplo, seu
ponto mdio). Se este ponto estiver fora do outro polgono, ento a aresta
classificada como exterior. Se o ponto estiver dentro do outro polgono, ento a
aresta classificada como interior. Se o ponto estiver na fronteira, a aresta
classificada como fronteira.
Arestas na fronteira constituem um caso degenerado, que requer tratamento especial.
Se existe um fragmento de aresta na fronteira de P, ento necessariamente existe
tambm um na fronteira de Q. Estes fragmentos podem estar orientados na mesma
direo ou em direes opostas. A implementao pode decidir o que fazer nestes
casos, ou seja, se intersees com dimenso de segmento ou de ponto sero ou no
retornadas. Se as intersees como segmento forem retornadas, sero formadas por
um ciclo de duas arestas sobrepostas, cada uma em uma direo. Interseo em um
ponto ser retornada como um ciclo de duas arestas, cada uma em uma direo,
ligando dois vrtices sobrepostos. Desta forma preserva-se a topologia do resultado
(sempre cadeia fechada de segmentos), mas em SIG mais interessante detectar estes
casos e retornar objetos da dimenso adequada (no caso, ponto)12.
5. Selecionar e organizar as arestas para formar os polgonos de resultado. Este
processo de seleo baseado na combinao das duas listas em uma, denominada
RL, usando apenas as arestas que interessam para a operao, conforme definido na
Tabela 1.6.
6. Construir os polgonos de resultado, selecionando uma aresta e, com base em seu
ponto final, procurar em RL sua continuao, at fechar o polgono. Repetir o
processo, eliminando de RL a cada passo as arestas utilizadas, at que RL fique vazia.

12

Para uma anlise mais completa, inclusive com as combinaes de hipteses nos casos de ilhas e
buracos, vide [MaKn89].

Tabela 1.6 - Tipos de arestas para seleo de acordo com o tipo de operao e os
tipos de polgonos de entrada
Polgonos

Operaes
PQ

PQ

PQ

Q P

ilha

buraco

interior

interior

exterior

exterior

exterior

interior

interior

exterior

ilha

buraco

exterior

interior

interior

exterior

interior

interior

exterior

exterior

buraco

ilha

interior

exterior

exterior

interior

exterior

exterior

interior

interior

buraco

buraco

exterior

exterior

interior

interior

interior

exterior

exterior

interior

Os polgonos resultantes mantero a orientao adotada para ilhas e buracos, o que


bastante conveniente.
O exemplo a seguir mostra o funcionamento do algoritmo para realizar operaes sobre
os polgonos P e Q, apresentados na Figura 1.44. Ambos os polgonos so ilhas, e
portanto os vrtices esto dispostos em sentido anti-horrio. Como se pode perceber
visualmente, a interseo destes polgonos formada por dois polgonos isolados, e a
unio um polgono com um buraco. Os vrtices de cada polgono esto numerados da
maneira usual, e os pontos de interseo so identificados como i1, i2, i3 e i4.
p1
p 0= p 9

p2
p5
p3

q3

p6

i2

i1

q2

i3

p4
p7
q 0= q 4

i4

p8
q1

Figura 1.44 - Interseo de polgonos


De acordo com a Tabela 1.5, para realizar operaes de unio e interseo sobre dois
polgonos ilha, no necessrio inverter a orientao dos polgonos P e Q dados. O
passo seguinte consiste em classificar os vrtices e formar as listas PL e QL, que ficam:

p0

p1

p2

p3

p4

p5

p6

p7

p8

p9

q0

q1

q2

q3

q4

PL

QL

Em seguida, os pontos de interseo i1, i2, i3 e i4 so determinados e inseridos em PL e


QL, que ficam agora:

PL

QL

p0

p1

p2

p3

i1

p4

i2

p5

p6

i3

p7

i4

p8

p9

nf

nf

nf

nf

q0

q1

i4

q2

i3

i2

q3

i1

q4

nf

nf

nf

nf

O passo de classificao das arestas vem a seguir, analisando os pares de vrtices na


seqncia encontrada nas listas PL e QL, definindo arestas interiores, exteriores ou de
fronteira, a partir da classificao dos vrtices. O resultado organizado na lista RL, que
fica:
p0 p1 p2 p3 i1 p4 i2 p5 p6 i3 p7 i4 p8 q0 q1 i4 q2 i3 i2 q3 i1
p1 p2 p3 i1 p4 i2 p5 p6 i3 p7 i4 p8 p9 q1 i4 q2 i3 i2 q3 i1 q4
RL

Observe-se a classificao da aresta i3i2, que somente pde ser feita analisando a posio
do seu ponto mdio em relao ao polgono P.
A partir de RL possvel construir os polgonos resultantes da interseo de P e Q. De
acordo com a Tabela 1.6, para a unio selecionamos as arestas exteriores:
p0 p1 p2 p3 i2 p5 p6 i4 p8 q0 q1 i3 i1
p1 p2 p3 i1 p5 p6 i3 p8 p9 q1 i4 i2 q4
PQ

Para a interseo, ainda de acordo com a Tabela 1.6, selecionamos as arestas interiores:

i1 p4 i3 p7 i4 q2 i2 q3
p4 i2 p7 i4 q2 i3 q3 i1
PQ

Para compor o resultado da unio selecionamos por exemplo a primeira aresta, p0p1, e a
partir da buscamos continuaes at voltar a p0. O resultado inicial , portanto, o
polgono cujos vrtices so p0, p1, p2, p3, i1, q0 (q4), q1, i4, p8, p0 (p9). No entanto, resta
ainda na lista outro polgono, com vrtices i2, p5, p6, i3, i2. Os vrtices do primeiro
polgono esto em sentido anti-horrio, formando portanto uma ilha. O segundo
polgono est em sentido horrio, e portanto um buraco. Analogamente, na interseo
obtemos os polgonos i1, p4, i2, q3, i1 e i3, p7, i4, q2, i3. Neste caso, ambos os polgonos
obtidos esto em sentido anti-horrio, e portanto so ambos ilhas.
Analisando a complexidade do algoritmo, sendo nP e nQ o nmero de vrtices ds
polgonos originais, e ni o nmero mximo de intersees, verifica-se que:
1. Encontrar e, se necessrio, inverter a orientao de cada polgono custa O(nP + nQ).
2. Classificar os vrtices custa O(nQ) em P e O(nP) em Q. Inserir nas listas PL e QL
custa O(1), e portanto o custo total do passo O(nP + nQ).
3. Encontrar todas as intersees entre as arestas de P e Q custa, conforme verificado na
seo 1.1.3, O((nP + nQ + ni) log(nP + nQ))13. Inserir cada uma destas intersees em
ordem nas listas PL e QL custa O(ni), gerando um custo total de O(ni2). Portanto, a
complexidade total deste passo O((nP + nQ + ni) log(nP + nQ) + ni2).
4. Classificar cada aresta pode ser feito em tempo constante, se um dos pontos extremos
for um vrtice original de P ou de Q. Se ambos os pontos extremos esto na fronteira,
necessrio executar o procedimento de ponto em polgono, ao custo de O(nP) para
fragmentos de aresta provenientes de P, ou O(nQ) no caso inverso. O custo total ,
portanto, de O(nP + nQ + ni . max(nP, nQ))
5. Selecionar as arestas que interessam tem custo proporcional ao nmero de
fragmentos de aresta produzidos, ou seja, O(nP + nQ + ni). Estas arestas podem ser
organizadas de forma conveniente, de modo a facilitar a execuo do ltimo passo,
segundo uma lista ordenada pelo vrtice inicial. A ordenao custa O((nP + nQ + ni)
log(nP + nQ + ni)), que o custo total deste passo.
6. Construir os polgonos resultantes depende da eficincia das pesquisas na estrutura
de dados gerada no passo anterior. No caso de lista ordenada, o custo de localizao
do sucessor O(log(nP + nQ + ni)), utilizando pesquisa binria. O custo total ,
portanto, O((nP + nQ + ni) log(nP + nQ + ni)).

13

Neste ponto da anlise, [MaKn89] considera um algoritmo fora-bruta para encontrar as intersees,
consumindo tempo O(nP.nQ). Naturalmente, o algoritmo apresentado na seo 1.1.3 mais eficiente,
baixando a complexidade total deste passo.

Compondo os custos de cada passo, chega-se complexidade deste algoritmo no pior


caso, que dominada pelo passo 3, de insero dos pontos de interseo em uma lista.
Como, no pior caso, tem-se ni = nP . nQ, chega-se complexidade O((nP . nQ)2). Nos
casos mais usuais em SIG, no entanto, o nmero de intersees em geral fica muito
abaixo de nP . nQ, e portanto espera-se um desempenho prtico bastante superior ao de
pior caso. Para uma anlise mais detalhada desta complexidade, bem como
consideraes a respeito do consumo de espao, vide [MaKn89].
1.1.5.6 Criao de buffers

Um dos recursos mais teis em SIG a capacidade de gerar polgonos que contornam
um objeto a uma determinada distncia. Sua principal funo materializar os conceitos
de perto e longe, embora sem o componente fuzzy que caracteriza o raciocnio
humano nestes termos. Um exemplo de consulta que demanda a utilizao de buffers:
localizar todos os postos de gasolina ao longo de uma rodovia. Considerando que os
postos estejam representados por um ponto, e a rodovia esteja representada pela linha de
seu eixo, preciso encontrar uma distncia que materialize o conceito de ao longo,
por exemplo 100 metros. O processamento feito construindo um polgono que
contenha todos os pontos do plano localizados a 100 metros do eixo da rodovia ou
menos. Em seguida, determina-se quais postos de gasolina esto contidos neste
polgono.
Buffers podem ser construdos ao redor de qualquer tipo de objeto geogrfico vetorial:
pontos, linhas ou polgonos. No caso de pontos, o buffer simplesmente um crculo
cujo raio a distncia desejada. Em linhas e polgonos, o buffer construdo a partir da
unio de buffers elementares, que so construdos ao redor de cada segmento e cada
vrtice. Estes buffers elementares so simplesmente crculos, ao redor dos vrtices, e
retngulos ao redor dos segmentos, com lados paralelos a estes (Figura 1.45).

(a)

(b)

Figura 1.45 - Buffers elementares ao redor de ponto (a) e segmento (b)


O buffer final exatamente a unio dos buffers elementares que foram construdos
(Figura 1.46). No caso de polgonos, a unio deve ser feita tambm com o prprio
polgono, para que todos os pontos interiores a ele sejam considerados (Figura 1.47).

Figura 1.46 - Buffer ao redor de linha

Figura 1.47 - Buffer ao redor de polgono


Ocorre tambm com freqncia a necessidade de se ter buffers com distncia negativa,
ou seja, reas que so construdas no interior de polgonos a uma dada distncia da
fronteira. Este tipo de buffer conhecido como skeleton, ou como setback. O
processamento diferente apenas em um ponto: constri-se a unio dos buffers
elementares ao longo da fronteira, considerando o valor absoluto da distncia fornecida,
e em seguida determina-se a diferena entre o polgono inicial e a unio dos buffers
(Figura 1.48).

Figura 1.48 - Buffer negativo de polgono


Observe-se que, conforme foi alertado na seo 1.1.5.5, o resultado de uma operao de
criao de buffers pode ser formado por vrios polgonos separados, ou por polgonos
com buracos (Figura 1.49).

(a)

(b)

Figura 1.49 - Buffers com buracos (a) e formados por polgonos isolados (b)
1.1.6 Fecho convexo
O fecho convexo uma das estruturas mais usadas em geometria computacional. Tem
utilidade em diversas situaes, na gerao de outras estruturas e como apoio a
algoritmos mais complexos. Exemplos do uso de fechos convexos podem ser
encontrados em robtica, reconhecimento de padres, processamento de imagens, e at
mesmo em otimizao.
Em SIG, o fecho convexo pode ser til para delimitar regies definidas por um conjunto
de pontos, como por exemplo a rea afetada por alguma doena, cujos casos so
individualmente lanados como pontos no mapa. Tambm til na construo de
limites para triangulaes, do tipo encontrado em modelagem digital de terrenos (vide
seo 1.1.7.4).

O conceito de fecho convexo de um conjunto S de pontos bastante simples. Uma


imagem freqentemente invocada nos livros de geometria computacional a de um
elstico (a fronteira do fecho) colocado ao redor de todos os pregos (pontos) dispostos
sobre uma tbua (o plano). Este conceito pode ser naturalmente estendido para trs ou
mais dimenses, mas estaremos interessados particularmente em fechos convexos no
plano, por se tratar da variao mais til em SIG.
Numa definio mais formal, o fecho convexo de um conjunto S de pontos o menor
conjunto convexo que contm S. Um conjunto convexo C aquele em que
P1 , P2 C
P1 P2 C. Geometricamente, o fecho convexo um polgono convexo
cujos vrtices so um subconjunto de S, e que contm todos os pontos de S.
ORourke [ORou94] lista uma srie de definies alternativas e equivalentes do fecho
convexo, as mais interessantes das quais esto relacionadas a seguir:
O fecho convexo de um conjunto S de pontos do plano o menor polgono convexo
P que contm S, sendo menor entendido no sentido de que no existe outro
polgono P tal que P P ' S .
O fecho convexo de um conjunto S de pontos a interseo de todos os conjuntos
convexos que contm S.
O fecho convexo de um conjunto S de pontos do plano o polgono convexo
envolvente P que tem a menor rea.
O fecho convexo de um conjunto S de pontos do plano a unio de todos os
tringulos determinados por pontos pertencentes a S.
O problema de encontrar o fecho convexo pode ser colocado de duas maneiras: (1)
construir a fronteira do polgono FC(S) (fecho convexo de S), ou (2) identificar os
pontos de S que so vrtices de FC(S). Foi demonstrado que ambas as variaes tm a
mesma complexidade, apesar de parecer, instintivamente, que a segunda alternativa
seria mais fcil, uma vez que no exige a construo das ligaes entre os vrtices (ou
seja, no exige a determinao da seqncia de vrtices) para formar o polgono.
Foi demonstrado tambm que o problema clssico de ordenao pode ser transformado,
em tempo linear, no problema de encontrar o fecho convexo [PrSh88]. A conseqncia
disso que um algoritmo timo para determinar o fecho convexo tem complexidade
computacional (n log n) sobre o nmero de pontos em S.
1.1.6.1 Pontos interiores e arestas extremas

Um algoritmo imediato para determinar quais seriam os vrtices do fecho convexo pode
ser construdo da seguinte maneira [ORou94]:
1. para cada combinao de trs pontos (pi, pj, pk) de S, construir um tringulo;
2. testar cada um dos outros n - 3 pontos contra este tringulo, usando o procedimento
pontoEmTringulo (seo 1.1.2.1);

3. marcar como interior todo ponto que estiver dentro do tringulo;


4. ao final do processamento, os pontos no marcados sero os vrtices do fecho
convexo.
Este algoritmo claramente O(n4), uma vez que depende da combinao dos pontos trs
a trs, posteriormente testando cada um dos n - 3 pontos contra o tringulo.
Uma alternativa um pouco menos custosa consiste em procurar determinar as arestas do
fecho convexo, da seguinte maneira [ORou94]:
1. para cada par ordenado (pi, pj) de pontos de S, definir uma reta;
2. verificar o posicionamento de todos os demais pontos de S em relao a esta reta;
3. se algum ponto no estiver esquerda ou sobre a reta pipj (usar o procedimento
lado, seo 1.1.2.2), ento o segmento pipj no uma aresta do fecho convexo.
4. se todos os demais pontos estiverem sua esquerda, o segmento pipj uma aresta do
fecho convexo.
Observe-se que o teste tem que ser feito com cada par ordenado (pi, pj), para que se
possa sempre testar se os demais pontos esto especificamente esquerda. Observe-se
tambm que existe a necessidade de um teste adicional, para eliminar a situao em que
trs vrtices alinhados definem duas arestas superpostas para o fecho convexo. Este
algoritmo consome tempo O(n3), um vez que necessrio formar os pares de pontos
(O(n2)) e depois test-los contra os n - 2 pontos restantes. Este algoritmo foi
aperfeioado por Jarvis, que observou que, uma vez que se tenha uma aresta pipj do
contorno convexo, uma aresta subseqente necessariamente parte de pj. Com isso,
possvel reduzir a complexidade para O(n2) [PrSh88]. Este algoritmo conhecido na
literatura como Jarvis march.
1.1.6.2 Quickhull

Um aperfeioamento da estratgia de pontos interiores foi proposto independentemente


por diversos pesquisadores, e denominado posteriormente quickhull por Preparata e
Shamos [PrSh88], devido sua semelhana com o quicksort.
O quickhull inicialmente determina os pontos extremos de S esquerda, direita, acima
e abaixo, ou seja, os pontos com as mximas e mnimas ordenadas e abscissas,
definindo tambm um retngulo envolvente mnimo para o conjunto de pontos. Isto
pode ser feito em tempo linear. Em seguida, estes quatro pontos so conectados,
formando um quadriltero. Todos os pontos interiores a este quadriltero podem ser
imediatamente descartados, pois so pontos interiores. O problema fica, ento, reduzido
a encontrar os pontos extremos nos quatro tringulos definidos entre o quadriltero
inicial e o retngulo envolvente mnimo do conjunto de pontos (Figura 1.50).

A
B

Figura 1.50 - Quickhull - passo inicial


Em cada tringulo, conhece-se dois pontos pertencentes ao fecho convexo. O problema
, ento, encontrar qual o ponto contido no tringulo que est mais distante do segmento
formado por estes pontos extremos, formando um novo tringulo. Por exemplo, na
Figura 1.51, a regio triangular D definida pelo passo inicial contm quatro pontos. Um
tringulo formado entre os extremos j conhecidos e o mais distante deles, que
naturalmente pertencente ao fecho convexo. Os pontos interiores ao tringulo D so
descartados, e as novas arestas do tringulo servem de base para a construo de novos
tringulos, recursivamente, at que no seja mais encontrado qualquer ponto interior ou
exterior.

Figura 1.51 - Quickhull - passo recursivo


A anlise da complexidade do procedimento recursivo feita de maneira semelhante
do quicksort, admitindo que, a cada passo, o conjunto de pontos dividido ao meio. A
equao de recorrncia resultante indica que o algoritmo quickhull , no pior caso,
O(n2), e portanto melhor que os algoritmos anteriores, mas pior que o timo esperado,
que O(n log n) [ORou94].
1.1.6.3 Algoritmo de Graham

Este algoritmo data de 1972, e considerado um dos pioneiros no campo da geometria


computacional. A idia bsica do algoritmo de Graham bastante simples. Parte-se do

pressuposto que dado um ponto p0, interior ao fecho convexo14, e assume-se que no
existam trs pontos colineares, incluindo o ponto dado. Em seguida, calcula-se o ngulo
com a horizontal, no sentido anti-horrio, formado pelo segmento entre o ponto p0 e
todos os demais15. Os pontos so ordenados segundo este critrio. Os pontos so ento
examinados um a um segundo essa ordem crescente, em uma varredura (da a
denominao usual deste algoritmo, Grahams scan, ou varredura de Graham), e o fecho
convexo construdo de maneira incremental ao redor de p0.
A cada passo, o fecho j determinado correto, considerando apenas o conjunto de
pontos examinado at o momento. A avaliao de cada ponto adicional, no entanto,
pode fazer com que pontos sejam retirados do fecho, na ordem inversa em que foram
inseridos. Por isso, costuma-se armazenar os pontos do fecho convexo em uma pilha.
A Figura 1.52 mostra um exemplo. Inicialmente, o fecho constitudo dos pontos p0, p1
e p2, sendo p1 e p2 colocados na pilha nesta ordem. Em seguida, o ponto p3 inserido no
fecho, pois p2p3 constitui uma curva esquerda em relao a p1p2. Analisando o ponto
p4, o prximo na seqncia ao redor de p0, verifica-se que p3p4 forma uma curva
direita. Assim, elimina-se p3 do alto da pilha, e testa-se p2p4, como agora tem-se uma
curva esquerda, empilha-se p4 e o algoritmo prossegue de forma incremental. O
fechamento se d quando analisado o ponto p10, que ligado ao ponto inicial p1,
fechando a cadeia. O exemplo contm o caso mais simples, em que o primeiro ponto
analisado pertence ao fecho convexo. Se ocorresse o contrrio, cdigo adicional teria
que ser adicionado para retirar o ponto p1, e possivelmente outros, que esto no fundo da
pilha ao final do processamento. Outro problema ocorre quando o p2 no pertence ao
fecho convexo. O teste em p3 detectaria uma curva direita a partir de p1p2, e portanto,
pela lgica apresentada, p2 teria que ser eliminado da pilha. Ocorre que, nesta situao, a
pilha ficaria com apenas um ponto, tornando impossvel a anlise das curvas direita e
esquerda.

14

No necessrio que o ponto p0 pertena a S. Pode-se tomar um ponto interior qualquer, por exemplo o
1
baricentro do conjunto de pontos, ou seja pi [FiCa91]. Em seu artigo inicial, Graham inclui um
n
mtodo detalhado, de complexidade linear, para escolher tal ponto, analisando trios de pontos at
encontrar um no-colinear, e ento adotando o baricentro do tringulo como origem [ORou94].
15

Vide funo lado, seo 1.1.2.2.

p4

p2
p3
p5

p6

p1

p0
p9

p7

p 10
p8

Figura 1.52 - Algoritmo de Graham, origem em ponto interior


Estes problemas podem ser resolvidos com uma escolha mais conveniente da origem,
em particular se a origem for um ponto do fecho convexo. O ponto ideal para servir de
origem o ponto inferior do conjunto, necessariamente pertencente ao fecho. Se
existirem diversos pontos com a mesma ordenada mnima, toma-se o mais direita
deles. Com isso, o ngulo formado entre pn-1, p0 e p1 necessariamente convexo, e
demonstra-se que nesta situao pelo menos os dois primeiros pontos pertencem ao
fecho. A pilha inicializada com pn-1 e p0, e estes pontos nunca sero desempilhados,
resolvendo o problema de inicializao descrito anteriormente. Alm disso, como p0
pertence ao fecho, no ocorrer tambm o problema de trmino ao final da varredura
dos pontos.
p7

p4
p5

p8
p9

p6

p 10

p2
p3
p1

p0

Figura 1.53 - Algoritmo de Graham, origem no ponto inferior mais direita


Na Figura 1.53, os pontos esto numerados segundo a ordem crescente do ngulo ao
redor de p0. importante lembrar que a concepo apresentada at o momento se baseia
na hiptese de que no se tem trs pontos colineares no conjunto, o que no se pode
garantir em situaes prticas. Portanto, a implementao do algoritmo deve prever
recursos para resolver estes casos. Especificamente, necessrio acrescentar um critrio

ao algoritmo de ordenao dos pontos ao redor de p0, dando prioridade em caso de


colinearidade para os pontos mais prximos de p0. Ou seja, considera-se pa < pb se os
ngulos forem iguais mas pa p0 < pb p0 . Com esta regra, o ponto mais prximo
ser eliminado quando o mais distante for analisado. Esta regra tambm resolve o caso
em que existe uma colinearidade nos ltimos pontos, fazendo com que o mais prximo
seja o penltimo e o mais distante o ltimo, e portanto pertencente ao fecho convexo
conforme desejado.
Um exemplo destas situaes degeneradas est apresentado na Figura 1.54. No caso, o
ponto p1 tem que ficar antes de p2 na ordenao para que seja possvel elimin-lo sem
problemas, o que no ocorreria se a situao fosse invertida. Tambm o ponto p8 deve
vir antes do ponto p9, pois p9 que pertence ao fecho convexo, e que ser colocado
definitivamente no fundo da pilha dos vrtices do fecho.
p6

p3

p4

p7

p2
p5
p1

p9
p8
p0

Figura 1.54 - Algoritmo de Graham, situaes degeneradas


O Programa 1.21 apresenta o pseudocdigo para a implementao do algoritmo de
Graham, utilizando uma pilha conforme descrito, e tambm usando a funo lado para
fazer o teste da curva esquerda. Uma caracterstica da implementao usando este
recurso que apenas pontos que so cantos do contorno convexo so retornados.
Quaisquer pontos pertencentes ao fecho, mas contidos em alguma aresta, so
abandonados. Caso seja interessante ou importante preservar estes pontos, basta alterar a
comparao do resultado da funo lado para permitir a igualdade com zero.

funo graham(inteiro n, Ponto Q[n]): Pilha;


incio
inteiro i;
Ponto P[n];
Pilha S;
P[0] = ponto de Q inferior e mais direita;
ordenar todos os pontos de Q ao redor de P[0] pelo ngulo ;
em caso de empate no ngulo, favorecer o mais prximo de P[0] ;
acrescentar os demais pontos de Q a P, como P[1]...P[n-1] ;
push(S, (n - 1));
push(S, 0);
i = 1;
enquanto (i < n) faa
incio
se lado(P[topo(S)], P[topo(topo(S))], P[i]) > 0 ento
incio
push(S, i);
i = i + 1;
fim se
seno
pop(S);
fim;
retorne(S);
fim.

Programa 1.21 - Algoritmo de Graham para fecho convexo


A complexidade do algoritmo de Graham pode ser facilmente determinada, observando
que o processo de varredura claramente O(n). O tempo total portanto dominado pelo
passo de ordenao dos pontos ao redor de p0, que O(n log n), correspondendo ao
timo terico.
Diversos algoritmos surgiram aps o de Graham, utilizando processos diversos para
atingir resultados tambm O(n log n), mas apresentando caractersticas que facilitam a
extenso para dimenses mais altas. Existe tambm um algoritmo que usa a tcnica de
dividir para conquistar [PrSh88], usando um enfoque parecido com o do algoritmo
merge sort (Merge Hull), e que pode ser paralelizado com maior facilidade.
1.1.7 Diagrama de Voronoi, triangulao de Delaunay e problemas de
proximidade
Esta seo vai analisar uma srie de problemas correlacionados e que envolvem o
conceito de proximidade no plano. O principal recurso de que se dispe para resolver
este tipo de problema o diagrama de Voronoi, uma estrutura geomtrica proposta no
incio do sculo e que capaz de responder uma grande variedade de perguntas a
respeito de proximidade em um conjunto de pontos: qual ponto est mais prximo, qual
o mais distante, entre outras. Diversos trabalhos buscaram destacar a importncia desta
estrutura para SIG [Gold91][Gold92b][OBS92], mas at o momento os pacotes
comerciais no a incorporam explicitamente, para prejuzo de aplicaes que demandam
com freqncia a soluo de problemas de proximidade.

1.1.7.1 Diagramas de Voronoi

Seja P = p1, p2 ,


, pn um conjunto de pontos no plano, usualmente denominados

locais (ou sites). O plano pode ser particionado de modo que cada ponto esteja
associado ao elemento de P mais prximo de si. O conjunto dos pontos associados ao
local pi constituem o polgono de Voronoi16 de pi, denotada V(pi). Este polgono ,
portanto, o lugar geomtrico dos pontos do plano mais prximos de pi do que de
qualquer outro elemento de P, ou seja

V ( pi ) = x

dist ( pi x ) dist ( p j x ), j i

Existe a possibilidade de se ter pontos que so igualmente prximos a dois ou mais


locais. O conjunto destes pontos constitui o diagrama de Voronoi para o conjunto de
locais, denotado Vor(P).
A construo do diagrama pode ser melhor compreendida observando o que ocorre
quando o nmero de locais vai sendo aumentado gradativamente. Inicialmente,
considere-se apenas dois locais, p1 e p2. O diagrama de Voronoi consiste na reta que
secciona ao meio o segmento p1p2 e perpendicular a este, a mediatriz do segmento
(Figura 1.55). Todos os pontos da reta so igualmente prximos a p1 e a p2. Pontos no
semiplano que contm p1 constituem o polgono de Voronoi correspondente a p1, e
analogamente o outro semiplano corresponde a V(p2).

p2

p1

Figura 1.55 - Diagrama de Voronoi com dois locais


Expandindo para trs locais, fcil perceber que o diagrama de Voronoi ser formado
pelas semi-retas que cortam as arestas de p1p2p3 ao meio e segundo uma perpendicular,
portanto as mediatrizes das arestas, partindo do circuncentro do tringulo (Figura 1.56).
O circuncentro o centro do crculo definido pelos vrtices do tringulo, e possvel
que ele no pertena ao tringulo.

16

Estes polgonos recebem diversos nomes alternativos na literatura: regies de Dirichlet, polgonos de
Thiessen, clulas de Wigner-Seitz, ou regies proximais [PrSh88]

p2

M 12

M 23

p1

p3

M 13

Figura 1.56 - Diagrama de Voronoi com trs locais


Generalizando para um nmero maior de locais, fica claro que o processo de construo
deve levar em conta as mediatrizes dos segmentos definidos entre cada par de locais. A
mediatriz entre os locais pi e pj ser denotada como Mij. Seja Sij o semiplano definido
por Mij e que contm pi. Ento Sij contm todos os pontos do plano que esto mais
prximos de pi do que de pj. Para obter o polgono de Voronoi de pi, necessrio
combinar todos os semiplanos Sij com i j , e portanto
V ( pi ) =


i j

Sij

Como semiplanos so, por definio, convexos (no existe nenhum segmento definido
entre dois pontos do semiplano e que contm pontos que no pertenam a ele). A
interseo de conjuntos convexos tambm um conjunto convexo [PrSh88]. Portanto,
pode-se concluir que qualquer polgono de Voronoi convexo tambm.
A Figura 1.57 mostra um exemplo de diagrama de Voronoi com 12 locais. Observe-se
que existem 12 polgonos, um para cada local. Os vrtices dos polgonos esto ligados,
em geral, a trs arestas, exceto quando se tem quatro ou mais locais co-circulares em P
(Figura 1.58a) Esta situao considerada degenerada, mas pode ser eliminada com a
introduo de perturbaes infinitesimais nos pontos co-circulares (Figura 1.58b).

Figura 1.57 - Diagrama de Voronoi com 12 locais

(a)

(b)

Figura 1.58 - Quatro pontos co-circulares e perturbao


1.1.7.2 Triangulao de Delaunay

Assim, considerando que o mximo grau de um vrtice seja igual a trs, define-se o dual
de um diagrama de Voronoi atravs de um grafo G, cujos ns correspondem aos locais e
cujos arcos conectam locais cujos polgonos de Voronoi compartilham uma aresta do
diagrama. Demonstra-se que este grafo planar, e portanto vale a frmula de Euler: em
um grafo planar com n vrtices, existem 3n 6 arcos e 2n 4 faces [ORou94].
Traando G com linhas retas entre os vrtices (locais), assumindo que no existam
quatro vrtices co-circulares, produzida uma triangulao de P, que denominada

triangulao de Delaunay e denotada D(P). A Figura 1.59 mostra a triangulao de


Delaunay sobre o diagrama de Voronoi da Figura 1.57.

Figura 1.59 - Diagrama de Voronoi (linhas cheias) e triangulao de Delaunay


(linhas pontilhadas)
[ORou94] e [PrSh88] listam as propriedades da triangulao de Delaunay e dos
diagramas de Voronoi. As mais interessantes so as seguintes:
A cada tringulo de D(P) corresponde um vrtice de Vor(P);
A cada n de D(P) corresponde um polgono de Vor(P);
A fronteira de D(P) coincide com o fecho convexo dos locais de P;
O interior de cada tringulo de D(P) no contm nenhum local;
V(pi) ilimitado se e somente se pi pertence ao fecho convexo de P;
Se v um vrtice do diagrama de Voronoi, na juno de V(p1), V(p2) e V(p3), ento v
o centro do crculo definido por p1, p2 e p3;
Se pj o vizinho mais prximo de pi, ento pipj uma aresta de D(P).
1.1.7.3 Implementao

Devido extenso do cdigo fonte, este captulo no ir detalhar a implementao de


algoritmos para obter o diagrama de Voronoi e a triangulao de Delaunay. As

principais idias e alternativas apresentadas na literatura de geometria computacional,


no entanto, sero delineadas, deixando a cargo do leitor um aprofundamento maior17.
A construo do diagrama de Voronoi pode ser implementada usando a tcnica de
dividir para conquistar, gerando um algoritmo timo O(n log n) [PrSh88]. Em linhas
gerais, o algoritmo consiste em:
particionar o conjunto inicial de pontos P em dois subconjuntos, P1 e P2, de tamanho
aproximadamente igual;
construir Vor(P1) e Vor (P2) recursivamente;
combinar Vor(P1) e Vor(P2) para obter Vor(P).
A maior dificuldade desta alternativa est em conseguir implementar a etapa de
combinao de dois diagramas em tempo O(n) para que o custo total no exceda
O(n log n). [PrSh88] apresenta uma descrio detalhada deste procedimento, que
relativamente complexo e de implementao difcil.
Uma alternativa a esta forma de implementao foi desenvolvida por Fortune ([Fort87]
apud [ORou94]), usando a tcnica de varredura do plano. Foi necessrio conceber uma
variao da varredura tradicional, pois na construo do diagrama a linha de varredura
vai certamente interceptar o polgono de Voronoi bem antes de encontrar o local
correspondente. Assim, Fortune props a construo de cones invertidos, com pice
colocado sobre cada local e com lados cuja inclinao de 45 graus. A projeo da
interseo entre os cones sobre o plano XY exatamente o diagrama de Voronoi. Para
recuperar o diagrama, o algoritmo faz a varredura do conjunto de cones utilizando um
plano inclinado tambm a 45 graus em relao ao plano XY. A interseo do plano com
cada cone configura uma parbola, e o algoritmo usa uma composio destas parbolas
(denominada frente parablica) no lugar da linha de varredura tradicional. A frente
parablica consegue, portanto, detectar arestas do diagrama antes de passar pelos locais
propriamente ditos. O algoritmo final tem tambm complexidade O(n log n).
Outra linha de raciocnio defende a construo da triangulao de Delaunay como passo
intermedirio para a obteno do diagrama de Voronoi, j que foi demonstrado [FiCa91]
que a triangulao de Delaunay pode ser transformada no diagrama de Voronoi em
tempo linear, e vice-versa. Um algoritmo usando a tcnica de dividir para conquistar,
muito semelhante ao apresentado para o diagrama de Voronoi, foi proposto por Lee e
Schachter ([LeSc80] apud [FiCa91]). Tambm neste algoritmo o desafio maior a etapa
de combinao de triangulaes parciais em tempo linear. Para facilitar a construo da
triangulao utilizada uma estrutura topolgica winged-edge (vide seo 1.2.2). Esta

17

Existem diversos programas para a construo do diagrama de Voronoi e da triangulao de Delaunay


disponveis na Internet. O URL http://www.geog.umn.edu/software/cglist contm links
para diversas pginas que oferecem freeware na rea de geometria computacional. O programa original de
http://netlib.bellFortune,
por
exemplo,
pode
ser
encontrado
em
labs.com/netlib/voronoi/index/html, incluindo o cdigo fonte. O mesmo programa capaz
de produzir o diagrama de Voronoi, a triangulao de Delaunay e ainda o fecho convexo de um conjunto
de pontos.

proposta foi posteriormente refinada por Guibas e Stolfi [GuSt85], utilizando uma nova
estrutura topolgica denominada quad-edge (vide seo 1.2.3) Um aperfeioamento
deste algoritmo foi proposto posteriormente, obtendo significativos ganhos de
desempenho e tambm uma maior facilidade de implementao [Leac92].
1.1.7.4 Aplicaes

O diagrama de Voronoi tem muitas aplicaes em SIG. Como estrutura de dados bsica
para resolver problemas de proximidade, pode ser empregada sempre que o nmero de
consultas justificar o custo de sua criao e manuteno. Apesar das vantagens que se
tem em usar esta estrutura na soluo de problemas como os relacionados a seguir, a
maioria das aplicaes baseadas em SIG comerciais prefere adotar estratgias mais
genricas, usando os recursos bsicos de localizao individual de objetos disponveis
no SIG subjacente. No entanto, a grande utilidade do diagrama de Voronoi no contexto
de SIG tem conduzido a propostas no sentido de incrementar seu uso, incorporando
estratgias de manuteno dinmica e a possibilidade de trabalhar com objetos mveis
em tempo real [Gold92b][OBS92].
O mesmo ocorre com a triangulao de Delaunay, usada sempre que se tem a
necessidade de particionar o plano com base em um conjunto de pontos. So freqentes
as situaes em que os pontos representam locais onde se consegue amostrar alguma
varivel fsica, como altitude, temperatura ou ndice de chuvas, sendo necessrio
produzir um mapeamento contnuo da varivel para toda uma regio de interesse. Nestas
situaes, a triangulao de Delaunay imbatvel, pois gera um resultado em que
maximizado o menor ngulo interno de cada tringulo [Edel87], o que confere malha
triangular uma aparncia mais regular.
A seguir, so apresentadas algumas aplicaes do diagrama de Voronoi e da
triangulao de Delaunay que so significativas no contexto de SIG, sem a pretenso de
esgotar o assunto.
Ponto mais prximo. Dado um conjunto P de locais, deseja-se saber qual o mais
prximo de um ponto q dado. Trata-se de uma consulta tradicional em
geoprocessamento, e tem diversas aplicaes em anlise espacial. Quando se dispe do
diagrama de Voronoi, a soluo do problema consiste simplesmente em determinar o
local correspondente ao polgono de Voronoi que contm q. Naturalmente, existem
maneiras de resolver este problema sem utilizar o diagrama de Voronoi (por exemplo,
analisar seqencialmente a distncia entre q e todos os pontos pi P ), mas quando se
pretende realizar um nmero razovel de consultas, sobre um conjunto de pontos
relativamente estvel, construir antecipadamente o diagrama de Voronoi pode ser muito
vantajoso. Um exemplo prtico: informar aos usurios do sistema de transporte coletivo
qual o ponto de parada de nibus mais prximo de sua residncia ou local de trabalho.
Outro exemplo: localizar o hidrante mais prximo de um determinado prdio.
Foi demonstrado que, contando com alguma estrutura de indexao espacial, problemas
como este (denominados genericamente de point location problems: determinar em qual
partio do plano est um determinado ponto) podem ser resolvidos em tempo O(log n).
Uma variao deste problema consiste em localizar os k pontos de P mais prximos de
q. Isto possvel usando o chamado diagrama de Voronoi de ordem k. Conforme foi

apresentado, o diagrama de Voronoi tradicional o diagrama de ordem 1, ou seja, cada


polgono o lugar geomtrico dos pontos do plano mais prximos do local pi do que de
qualquer outro. Analogamente, um diagrama de Voronoi de ordem k formado por
polgonos que constituem o lugar geomtrico dos pontos do plano cujos k vizinhos mais
prximos so os locais pi1, pi2, pi3,...pik, em qualquer ordem. Algoritmos para obter tais
diagramas tm complexidade O(n3), e no sero discutidos aqui (para maior
aprofundamento, vide [PrSh88], [Edel87] e [ORou94]).
Vizinhos mais prximos. Este problema consiste em, dado um conjunto P de locais,
encontrar o local pj mais prximo de cada local pi (o vizinho mais prximo de pi)
pertencente a P. Um exemplo prtico est na gerao de indicaes de quiosque mais
prximo para caixas automticos, de modo a informar os clientes sobre alternativas em
caso de falha de algum deles. Outro exemplo , dado um conjunto de aeroportos
satisfazendo a certas condies (comprimento da pista, instrumentao de pouso,
equipamentos de emergncia), determinar qual o aeroporto mais indicado para
redirecionamento dos pousos em caso de fechamento por mau tempo de qualquer um
dos aeroportos.
O resultado do problema um grafo de proximidade (Figura 1.60), definido como sendo
um grafo em que os ns so os locais e as arestas so direcionadas entre cada local e seu
vizinho mais prximo. Este grafo pode ser usado para responder com facilidade a
questes como qual o local mais prximo deste e que locais so mais prximos
deste do que de qualquer outro. No segundo exemplo, estas questes seriam traduzidas
como qual o aeroporto mais prximo do Aeroporto de Confins e que aeroportos
redirecionaro seus pousos para Confins em caso de fechamento. Observe que este
grafo no necessariamente conexo, e tambm que as ligaes entre os ns no so
sempre reflexas.

Figura 1.60 - Grafo de proximidade sobre a triangulao de Delaunay


da Figura 1.59
Este problema pode ser resolvido em tempo linear a partir da disponibilidade do
diagrama de Voronoi. Basta analisar cada aresta definida no diagrama, calcular a
distncia entre os locais separados por aquela aresta, e manter os menores valores em
associao com cada local. Como o nmero de arestas do diagrama , no mximo, igual
a 3n 6 (vide seo 1.1.7.2), o tempo necessrio para esta anlise O(n). Naturalmente,

esta tarefa ser facilitada pela construo de uma estrutura de dados adequada ao
problema, como a winged-edge (vide seo 1.2.2). Uma alternativa a esta soluo
utilizar a triangulao de Delaunay, verificando para cada vrtice de tringulo
(correspondente a um local) qual a aresta de menor comprimento que incide sobre ele.
O local na outra extremidade desta aresta o vizinho mais prximo. A validade desta
estratgia decorre do fato de que o grafo de proximidade est contido em D(P)
[ORou94].
Maior crculo vazio. Consiste em determinar o maior crculo cujo centro pertence ao
fecho convexo dos locais de P e que no contm nenhum local. Foi demonstrado que,
caso o centro do crculo seja interior ao fecho convexo, ento deve coincidir com um
vrtice de Voronoi. O centro do maior crculo vazio pode tambm estar sobre alguma
aresta do fecho convexo, e neste caso estar situado no ponto mdio da aresta,
eqidistante a dois vrtices [ORou94]. Um algoritmo para resolver este problema a
partir do diagrama de Voronoi consiste, portanto, em verificar o raio do crculo definido
sobre cada vrtice, que corresponde distncia do vrtice a um dos trs locais
eqidistantes a ele. Tambm deve ser verificado o raio de cada crculo definido com
centro no ponto mdio de cada aresta do fecho convexo. Ao final, o resultado o crculo
de maior raio dentre os verificados (Figura 1.61).

Figura 1.61 - Maior crculo vazio


Esta tcnica pode ser usada para escolher o ponto de implantao de um novo
empreendimento, desde que se faa algumas hipteses simplificadoras: (1) a
distribuio da clientela pelo territrio uniforme, e (2) possvel encontrar espao para
a implantao do empreendimento no centro aproximado do crculo vazio. Caso estas
simplificaes no sejam aceitveis, torna-se necessrio utilizar tcnicas mais avanadas
para escolher o local do empreendimento, tais como a determinao da superfcie de
potencial de vendas, ou semelhante.

Outra situao em que este problema se aplica est na escolha de uma rea para a
localizao de uma atividade potencialmente poluidora, em um lugar que seja to
distante quanto possvel de centros populacionais.
Modelagem Digital de Terrenos. A triangulao de Delaunay muito usada na criao
de modelos digitais do terreno (MDT). Na criao de MDT, parte-se em geral de um
conjunto de amostras (pontos cotados) distribudos de maneira irregular pelo terreno. As
fontes de informao so a restituio de fotos areas por processo estereoscpico ou
levantamentos topogrficos de campo. A partir destas amostras deseja-se construir uma
superfcie que represente o relevo do local. Para isso, criada uma triangulao contida
no fecho convexo dos pontos amostrais, e a superfcie ento aproximada pelos
tringulos tridimensionais formados. Como os trs vrtices de um tringulo definem um
plano, esta estratgia eqivale a imaginar que o relevo varia linearmente entre dois
pontos cotados conhecidos, o que suficiente para a maioria das aplicaes. Se o grau
de aproximao obtido no for satisfatrio, pode-se densificar a malha de tringulos,
introduzindo novos pontos.
A partir da triangulao (denominada por alguns SIG de TIN - Triangulated Irregular
Network) pode-se produzir mapas de curvas de nvel, usando um algoritmo simples.
Basta determinar a interseo de cada tringulo com o plano correspondente cota da
curva de nvel que se pretende traar . Esta interseo pode ser nula (Figura 1.62a), pode
ser um ponto (Figura 1.62b), um segmento de reta (Figura 1.62c) ou mesmo todo o
tringulo (Figura 1.62d) [Bour87]. Nos casos em que a interseo um segmento, este
determinado e armazenado para compor a curva de nvel. Os outros casos podem ser
ignorados para efeito de traado das curvas. A continuidade de cada curva est garantida
pelo fato de que os pontos extremos do segmento de interseo entre plano e tringulo
so os mesmos nos tringulos adjacentes.

(a) sem interseo

2. todos os vrtices abaixo do plano

3. um dos vrtices no plano, os outros


dois acima ou abaixo

4. dois vrtices acima e um


abaixo do plano

5. dois vrtices abaixo e um


acima do plano

6. um vrtice no plano, um acima e


um abaixo

7. dois vrtices no plano, o terceiro


acima ou abaixo

(d) insero total

(c) interseo em um segmento

(b) interseo em um
ponto

1. todos os vrtices acima do plano

8. todos os vrtices no plano

Figura 1.62 - Interseo entre tringulo e plano

Naturalmente, a qualidade do resultado depende da densidade de tringulos quanto


mais tringulos, mais refinado ser o aspecto da curva gerada, especialmente nas regies
onde o relevo muda mais bruscamente. Mesmo assim, curvas de nvel traadas por este
processo tendem a adquirir um aspecto anguloso, pouco natural. Assim, executada
uma etapa de ps-processamento, em que a curva suavizada por uma spline ou outro
processo qualquer. Observe-se que necessrio que a suavizao no altere as
caractersticas topolgicas das curvas de nvel, ou seja, as curvas suavizadas, assim
como as originais, no podem se interceptar.
Um tipo de consulta freqentemente associado com o MDT a determinao da cota do
terreno em um ponto q dado. Isto pode ser feito determinando qual tringulo contm q, e
fazendo uma interpolao linear entre os vrtices do tringulo para obter a cota
procurada. Existem tambm processos de interpolao que utilizam as curvas de nvel
para obter a cota de pontos intermedirios quaisquer.
O mesmo processo descrito para MDT pode ser usado para tratar outras variveis de
distribuio contnua e que so medidas em pontos discretos, tais como temperatura,
ndice pluviomtrico ou rudo ambiental.

1.2 Topologia
1.2.1 Conceitos bsicos (captulo da apostila)

1.2.2 A estrutura Winged-Edge

1.2.3 Outras estruturas topolgicas - Quad-edge?

1.2.4 Topologia de redes

1.2.5 Aplicaes
Pesquisas de proximidade em diagramas de Voronoi codificados segundo uma wingededge!
OBS: Incluir discusso sobre o uso de estruturas topolgicas em SIG: custo de
manuteno x custo de gerao, considerando a freqncia de uso
1.3 Indexao Espacial
Estruturas reativas - Oosterom

1.4 Referncias
[Baas88]

Baase, S. Computer Algorithms: Introduction to Design and Analysis,


2nd Edition, Addison-Wesley, 1988.

[BCA95]

Barber, C., Cromley, R., and Andrle, R. Evaluating Alternative Line


Simplification Strategies for Multiple Representations of Cartographic
Lines. Cartography and Geographic Information Systems 22(4): 276290, 1995.

[Bear91]

Beard, K. Theory of the Cartographic Line Revisited: Implications for


Automated Generalization. Cartographica 28(4): 32-58, 1991.

[Bour87]

Bourke, P. D. A Contouring Subroutine. BYTE June 1987, 143-150.

[Butt85]

Buttenfield, B. P. Treatment of the Cartographic Line. Cartographica


22(2): 1-26, 1985.

[Butt89]

Buttenfield, B. P. Scale Dependence and Self-Similarity in Cartographic


Lines. Cartographica 26(1): 79-100, 1989.

[ChCh96]

Chan, W. S. and Chin, F. Approximation of Polygonal Curves with


Minimum Number of Line Segments or Minimum Error. International
Journal of Computational Geometry and Applications 6(1): 59-77, 1996.

[CLR90]

Cormen, T. H., Leiserson, C. E., and Rivest, R. L. Introduction to


Algorithms. McGraw-Hill and MIT Press, 1990.

[CrCa91]

Cromley, R. G., and Campbell, G. M. Noninferior Bandwidth Line


Simplification: Algorithm and Structural Analysis. Geographical
Analysis 23 (1): 25-38, 1991.

[CrCa92]

Cromley, R. G. and Campbell, G. M. Integrating Quantitative and


Qualitative Aspects of Digital Line Simplification. The Cartographic
Journal 29(1): 25-30, 1992.

[Crom88]

Cromley, R. G. A Vertex Substitution Approach to Numerical Line


Simplification. In Proceedings of the Third International Symposium on
Spatial Data Handling, 57-64, 1988.

[Crom91]

Cromley, R. G. Hierarchical Methods of Line Simplification.


Cartography and Geographic Information Systems 18(2): 125-131,
1991.

[Davi97]

Davis Jr., C. A. Uso de Vetores em GIS. Fator GIS 4(21): 22-23, 1997.

[Deve85]

Deveau, T. J. Reducing the number of points in a plane curve


representation. In Proceedings of AutoCarto 7, 152-160, 1985.

[DGHS88]

Dobkin, D., Guibas, L., Hershberger, J., and Snoeyink, J. An Efficient


Algorithm for Finding the CSG Representation of a Simple Polygon.

Computer Graphics 22(4):31-40, 1988.


[DoPe73]

Douglas, D. H. and Peucker, T. K. Algorithms for the Reduction of the


Number of Points Required to Represent a Line or its Caricature. The
Canadian Cartographer 10(2): 112-122, 1973.

[DuHa73]

Duda, R. and Hart, P. Pattern Classification and Scene Analysis. John


Wiley & Sons, New York, 1973.

[Edel87]

Edelsbrunner, H. Algorithms in Combinatorial Geometry, SpringerVerlag, 1987.

[FiCa91]

Figueiredo, L. H., Carvalho, P. C. P. Introduo Geometria


Computacional, Instituto de Matemtica Pura e Aplicada, 1991.

[Fort87]

Fortune, S. A Sweepline Algorithm for Voronoi Diagrams. Algorithms


2:153-174, 1987.

[GHMS93]

Guibas, L. J., Hershberger, J. E., Mitchell, J. S. B., and Snoeyink, J. S.


Approximating Polygons and Subdivisions with Minimum Link Paths.
International Journal of Computational Geometry and Applications
3(4): 383-415, 1993.

[Gold91]

Gold, C. M. Problems with Handling Spatial Data - The Voronoi


Approach. CISM Journal 45: 65-80, 1991.

[Gold92b]

Gold, C. M. Dynamic Spatial Data Structures - The Voronoi Approach.


In Proceedings of, the Canadian Conference on GIS, 245-255, 1992.

[GuSt85]

Guibas, L. and Stolfi, J. Primitives for the Manipulation of General


Subdivisions and the Computation of Voronoi Diagrams. ACM
Transactions on Graphics 4(2): 74-123, 1985.

[HeSn92]

Hershberger, J. and Snoeyink, J. Speeding Up the Douglas-Peucker


Line-Simplification Algorithm. In Proceedings of the Fifth International
Symposium on Spatial Data Handling, 1: 134-143, 1992.

[Horn85]

van Horn, E. K. Generalizing Cartographic Databases. In Proceedings of


AutoCarto 7, 532-540, 1985.

[ImIr86]

Imai, H. and Iri, M. Polygonal Approximations of a Curve


Formulations and Algorithms. In Toussaint, G. T. (editor)
Computational Morphology, North Holland, 1988.

[Jain89]

Jain, A. K. Fundamentals of Digital Image Processing. Prentice-Hall,


1989.

[Jenk81]

Jenks, G. F. Lines, Computers and Human Frailties. In Annals of the


Association of American Geographers 71(1): 1-10, 1981.

[Jenk89]

Jenks, G. F. Geographic Logic in Line Generalization. Cartographica

26(1): 27-42, 1989.


[Joha74]

Johannsen, T. M. A Program for Editing and for Some Generalizing


Operations (For Derivation of a Small Scale Map from Digitized Data in
1:50,000). In Csati, E. (editor) Automation: The New Trend in
Cartography, The Geocartotechnical Research Department (Budapest,
Hungary), 131-138, 1974.

[Knut73]

Knuth, D. E. The Art of Computer Programming, Volume 3: Sorting and


Searching, 2nd Edition. Addison-Wesley, 1973.

[Knut73a]

Knuth, D. E. The Art of Computer Programming, Volume 1:


Fundamental Algorithms, 2nd Edition, Addison-Wesley, 1973.

[Lang69]

Lang, T. Rules for Robot Draughtsmen. Geographical Magazine 22: 5051, 1969.

[LaTh92]

Laurini, R. and Thompson, D. Fundamentals of Spatial Information


Systems. Academic Press, 1992.

[Leac92]

Leach, G. Improving Worst-Case Optimal Delaunay Triangulation


Algorithms. In Proceedings of the Fourth Canadian Conference on
Computational Geometry, 1992.

[LeSc80]

Lee, D. T., Schachter, B. J. Two Algorithms for Constructing the


Delaunay Triangulation. International Journal of Computer and
Information Science 9(3):219-242, 1980.

[LiOp92]

Li, Z. and Openshaw, S. Algorithms for Automated Line Generalization


Based on a Natural Principle of Objective Generalization. International
Journal of Geographic Information Systems 6(5): 373-389, 1992.

[MaKn89]

Margalit, A., Knott, G. D. An Algorithm for Computing the Union,


Intersection or Difference of Two Polygons. Computers & Graphics
13(2): 167-183, 1989.

[Mari79]

Marino, J. S. Identification of Characteristic Points Along Naturally


Occurring Lines: An Empirical Study. The Canadian Cartographer
16:70-80, 1979.

[McMa86]

McMaster, R. B. A Statistical Analysis of Mathematical Measures for


Linear Simplification. American Cartographer 13:103-116, 1986.

[McMa87a] McMaster, R. B. Automated Line Generalization. Cartographica


24(2):74-111, 1987.
[McMa87b] McMaster, R. B. The Geometric Properties of Numerical Generalization.
Geographical Analysis 19(4): 330-346, 1987.
[McMa89]

McMaster, R. B. The Integration of Simplification and Smoothing


Algorithms in Line Generalization. Cartographica 26(1): 101-121,

1989.
[McSh92]

McMaster, R. B. and Shea, K. S. Generalization in Digital Cartography.


Association of American Geographers, 1992.

[Melk87]

Melkman, A. A. On-line Construction of the Convex Hull of a Simple


Polyline. Information Processing Letters 25:11-12, 1987.

[Melk88]

Melkman, A. A. and ORourke, J. On Polygonal Chain Approximation.


In Toussaint, G. T. (editor) Computational Morphology, North Holland,
1988.

[Mowe96]

Mower, J. Developing Parallel Procedures for Line Simplification.


International Journal of Geographical Information Science 10 (6): 699712, 1996.

[Mull87]

Muller, J. C. Optimum Point Density and Compaction Rates for the


Representation of Geographic Lines. In Proceedings of AutoCarto 8,
221-230, 1987.

[Mull90a]

Muller, J. C. The Removal of Spatial Conflicts in Line Generalization.


Cartography and Geographic Information Systems 17 (2): 141-149,
1990.

[Mulm94]

Mulmuley, K. Computational Geometry: An Introduction Through


Randomized Algorithms, Prentice-Hall, 1994.

[Nick88]

Nickerson, B. G. Automated Cartographic Generalization for Linear


Features. Cartographica 25 (3): 15-66, 1988.

[NiPr82]

Nievergelt, J., Preparata, F. P. Plane-Sweep Algorithms for Intersecting


Geometric Figures. Communications of the ACM 25(10): 739-747, 1982.

[OBS92]

Okabe, A., Boots, B., Sugihara, K. Spatial Tesselations: Concepts and


Applications of Voronoi Diagrams, John Wiley, 1992.

[OoSc95]

van Oosterom, P. and Schenkelaars, V. The Development of an


Interactive Multi-Scale GIS. International Journal of Geographical
Information Systems 9(5), 489-507, 1995.

[Oost93]

van Oosterom, P. Reactive Data Structures for Geographic Information


Systems, Oxford University Press, 1993.

[Ophe81]

Opheim, H. Smoothing a Digitized Curve by Data Reduction Methods.


In Encarnao, J. L. (editor) Proceedings of Eurographics 81, 127-135,
North-Holland, 1981.

[ORou94]

ORourke, J. Computational Geometry in C, Cambridge University


Press, 1994.

[PAF95]

Plazanet, C., Affholder, J.-G., and Fritsch, E. The Importance of


Geometric Modeling in Linear Feature Generalization. Cartography and
Geographic Information Systems 22(4): 291-305, 1995.

[Perk66]

Perkal, J. An Attempt at Objective Generalization. Michigan InterUniversity Community of Mathematical Geographers, Discussion Paper
No. 10, 1966.

[Peuc75]

Peucker, T. K. A Theory of the Cartographic Line. International


Yearbook of Cartography 16: 134-143, 1975.

[Plaz95]

Plazanet, C. Measurements, Characterization and Classification for


Automated Line Feature Generalization. In Proceedings of AutoCarto
12, 59-68, 1995.

[PrSh88]

Preparata, F. P., Shamos, M. I. Computational Geometry: an


Introduction, Springer-Verlag, 1988.

[Rame72]

Ramer, U. An Iterative Procedure for the Polygonal Approximation of


Plane Curves. Computer Vision, Graphics, and Image Processing 1:244256, 1972.

[ReWi74]

Reumann, K. and Witkam, A. P. M. Optimizing Curve Segmentation in


Computer Graphics. In Proceedings of the International Computing
Symposium 1973, 467-472, North-Holland, 1974.

[Robe85]

Roberge, J. A Data Reduction Algorithm for Planar Curves. Computer


Vision, Graphics, and Image Processing 1(3): 244-256, 1985.

[RSM78]

Robinson, A. H., Sale, R. D. and Morrison, J. L. Elements of


Cartography, 4th Edition, John Wiley & Sons, 1978.

[Schn97]

Schneider, M. Spatial Data Types for Database Systems: Finite


Resolution Geometry for Geographic Information Systems, Lecture
Notes in Computer Science 1288. Springer-Verlag, 1997.

[Sedg90]

Sedgewick, R. Algorithms in C, Addison-Wesley, 1990.

[Tarj83]

Tarjan, R. E. Data Structures and Network Algorithms, Regional


Conference Series in Applied Mathematics 44, SIAM, 1983.

[Thap88]

Thapa, K. Automatic Line Generalization using Zero Crossings.


Photogrammetric Engineering and Remote Sensing 54(4), 511-517,
1988.

[Tobl64]

Tobler, W. R. An Experiment in the Computer Generalization of Maps.


Technical Report No. 1, Office of Naval Research Task No. 389-137,
Contract No. 1224 (48), Office of Naval Research, Geography Branch,
1964.

[ToPi66]

Topfer, F. and Pillewizer, W. The Principles of Selection. Cartographic


Journal 3 (10-16), 1966.

[Tous83]

Toussaint, G. T. Computing Largest Empty Circles with Location


Constraints. International Journal of Computer and Information Science
12(5): 347-358, 1983.

[Vatt92]

Vatti, B. R. A Generic Solution to Polygon Clipping. Communications


of the ACM 35(7): 57-63, 1992.

[ViWh90]

Visvalingam, M. and Whyatt, J. The Douglas-Peucker Algorithm for


Line Simplification: Re-evaluation through Visualization. Computer
Graphics Forum 9 (213-228), 1990.

[ViWh93]

Visvalingam, M. and Whyatt, J. D. Line Generalisation by Repeated


Elimination of Points. Cartographic Journal 30 (1): 46-51, 1993.

[ViWi95]

Visvalingam, M. and Williamson, P. J. Simplification and


Generalization of Large Scale Data for Roads: A Comparison of Two
Filtering Algorithms. Cartography and Geographic Information Systems
22 (4), 264-275, 1995.

[Weib95]

Weibel, R. Map Generalization in the Context of Digital Systems.


Cartography and Geographic Information Systems, Guest Editorial to
Special Issue on Automated Map Generalization, 22(4): 3-10, 1995.

[Whit85]

White, E. R. Assessment of Line-Generalization Algorithms Using


Characteristic Points. The American Cartographer 12(1): 17-28, 1985.

[Will78]

Williams, C. M. An Efficient Algorithm for the Piecewise Linear


Approximation of a Polygonal Curve in the Plane. Computer Vision,
Graphics, and Image Processing 8:286-293, 1978.

[Wolb90]

Wolberg, G. Digital Image Warping. IEEE Computer Society Press,


1990.

[ZhSa97]

Zhao, Z. and Saalfeld, A. Linear-Time Sleeve-Fitting Polyline


Simplification Algorithms. In Proceedings of AutoCarto 13, 1997.

[Zivi96]

Ziviani, N. Projeto de Algoritmos com Implementaes em Pascal e em


C, 3a. Edio, Editora Pioneira, 1996.

Você também pode gostar