You are on page 1of 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 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.

j yU

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

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 )

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

= 3 0

1 >0 2 <0 3 >0

p1

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

p3

2 = 0

1 <0 2 <0 3 >0

p2
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): 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. booleano

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.

P A
B

emExtremo(P, AB)

Ponto coincide com um ponto extremo do segmento

P A

Tabela 1.2 - Posicionamento relativo entre dois segmentos


D B C A

iguais(AB, CD)

Ambos os pontos extremos coincidem

seEncontram(AB, CD)
C

Compartilham exatamente um ponto extremo

D C A

superpostos(AB, CD)

So colineares e compartilham um trecho comum

D C B

alinhados(AB, CD)

So colineares e no tm ponto em comum

D B C A

paralelos(AB, CD)

Tm a mesma inclinao e no so iguais nem superpostos

B C D A

seTocam(AB, CD)

No so superpostos e um dos pontos extremos de um segmento pertence ao outro segmento

B C D A

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

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 B B

C S>0 S<0 C A A A 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 C

U V
B

V
B A

V
C

(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, 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. 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));

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 C P B D D B

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
onde

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

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.

B B

D D C

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

A (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 fim. = = = = lado(A, lado(A, lado(C, lado(C, B, B, D, D, C); D); A); B);

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

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 . 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 (1.6)

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 (1.7)

Resolvendo o sistema formado pelas equaes 1.6 e 1.7, temos

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
A C

(x (y t=
onde

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

(1.9)

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 2 2 3 4

4 distncia mxima 1 1 ngulo mnimo

(a)
3 2 4

(b)

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 Algoritmos de pontos independentes Descrio No consideram as relaes geomtricas entre vrtices vizinhos; operam de forma independente da topologia Exemplos k-simo ponto [Tobl64] seleo aleatria de pontos [RSM78] Jenks [Jenk81] Visvalingam-Whyatt [ViWh93] Lang [Lang69] Opheim [Ophe81]

Algoritmos de processamento local

Usam as caractersticas dos vrtices vizinhos imediatos para determinar seleo/rejeio do ponto

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 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 Consideram a poligonal inteira no processamento. Selecionam pontos crticos iterativamente.

Algoritmos de processamento local estendido irrestrito

Reumann-Witkam [ReWi74] Zhao-Saalfeld [ZhSa97]

Algoritmos globais

Douglas-Peucker [DoPe73]

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 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)

C. Dados sobre ngulos

D. Dados sobre curvilinearidade

II. Medidas de deslocamento linear

E. Dados de diferenas vetoriais

F. Dados de diferenas 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 =0 n3 i =0 i i

i +1

, vi + 2 ) , vi +2 )

ang(v , v

100

i +1

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 =0 i

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 14 16 15 14 16

13

17

13

17

12 18

12 18

11 3 4 2 9 1 5 6 7 8 10 20 22 23 24 25 21

19 29 3 4 2 28 1 27 26 5 6 7 8 9 10

11

19 29 20 22 23 24 25 26 21 28

27

(a)
15 14 16

(b)
15 14 16

13

17

13

17

12 18

12 18

11 3 4 2 9 1 5 6 7 8 10 20 22 23 24 25 21

19 29 3 4 2 28 1 27 26 5 6 7 8 9 10

11

19 29 20 22 23 24 25 26 21 28

27

(c)

(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 4
in dm

2
dmax

10 9

1
rea de eliminao de vrtices

22 23

5 6 7 8

(a)

(b)

11 3 4 2 9 1 5 6 7 8 10 2 22 1 23 5 6 7 8 9 3 4 10

11

22 23 24

21

(c) Figura 1.13 - Algoritmo Opheim

(d)

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)
3 4 1 1

(b)

8
tolerncia tolerncia

(c) Figura 1.14 - Algoritmo Lang

(d)

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 14 16

13

17

12 18

11 3 4 2 9 1 5 6 7 8 10 20 22 23 24 25 21

19 29

28

27 26

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

3 4

29

9 1

22

6
tolerncia

24

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

9
1.614

24
2.705

3
0.750

11
0.213

17
1.094

27
0.514

2
0.177

6
0.894

10
0.070

13
0.267

16
0.354

22
0.256

25
0.247

28
0.078

4
0.371

8
0.224

12
0.224

14
0.100

18
0.238

23
0.108

26
0.054

5
0.250

7
0.094

19
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 Como geralmente n >> 2 , pode-se simplificar a Equao 1.11 para obter: n T ( n) = n + 2 T 2 T ( 2) = 0

(1.11)

(1.12)

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 vi v i-1 vi

(a)

(b)

(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 x

v i+1

v i-1 x

v i+1

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 xG = 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 )

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

xC =

(x
i =0 n 1 i =0

n 1

i +1

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

yC =

(y

i +1

+ 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

(b) Q - S

(c) P Q

(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 P ilha ilha buraco buraco Q ilha buraco ilha buraco
PQ

Operaes
PQ PQ Q P

manter inverter inverter manter

manter inverter inverter manter

inverter manter manter inverter

inverter manter manter 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
PQ PQ

Operaes
PQ Q P

P ilha ilha buraco buraco

Q buraco buraco ilha buraco

P
interior exterior interior exterior

Q
interior interior exterior exterior

P
exterior interior exterior interior

Q
exterior exterior interior interior

P
exterior interior exterior interior

Q
interior interior exterior exterior

P
interior exterior interior exterior

Q
exterior exterior interior 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 i2 i3 p7 q 0= q 4 p6 q2

i1 p4

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 PL f

p1 f

p2 f

p3 f

p4 d

p5 f

p6 f

p7 d

p8 f

p9 f

q0 QL f

q1 f

q2 d

q3 d

q4 f

Em seguida, os pontos de interseo i1, i2, i3 e i4 so determinados e inseridos em PL e QL, que ficam agora: p0 PL f p1 f p2 f p3 f i1 nf p4 d i2 nf p5 f p6 f i3 nf p7 d i4 nf p8 f p9 f

q0 QL f

q1 f

i4 nf

q2 d

i3 nf

i2 nf

q3 d

i1 nf

q4 f

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 e e e e i i e e e i i e e e e i i e i i e

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 p3 p5 p6 p0 p7 p8 p9 p 10 p1

p2

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 p5 p8 p9 p6 p2 p3 p1 p0

p4

p 10

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 p4

p3

p7 p5 p9 p8 p0 p1

p2

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

M 13

p3

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

1. todos os vrtices acima do plano

2. todos os vrtices abaixo do plano

(b) interseo em um ponto

3. um dos vrtices no plano, os outros dois acima ou abaixo

(c) interseo em um segmento

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

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] [BCA95] Baase, S. Computer Algorithms: Introduction to Design and Analysis, 2nd Edition, Addison-Wesley, 1988. 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. Beard, K. Theory of the Cartographic Line Revisited: Implications for Automated Generalization. Cartographica 28(4): 32-58, 1991. Bourke, P. D. A Contouring Subroutine. BYTE June 1987, 143-150. Buttenfield, B. P. Treatment of the Cartographic Line. Cartographica 22(2): 1-26, 1985. Buttenfield, B. P. Scale Dependence and Self-Similarity in Cartographic Lines. Cartographica 26(1): 79-100, 1989. 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. Cormen, T. H., Leiserson, C. E., and Rivest, R. L. Introduction to Algorithms. McGraw-Hill and MIT Press, 1990. Cromley, R. G., and Campbell, G. M. Noninferior Bandwidth Line Simplification: Algorithm and Structural Analysis. Geographical Analysis 23 (1): 25-38, 1991. Cromley, R. G. and Campbell, G. M. Integrating Quantitative and Qualitative Aspects of Digital Line Simplification. The Cartographic Journal 29(1): 25-30, 1992. 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. Cromley, R. G. Hierarchical Methods of Line Simplification. Cartography and Geographic Information Systems 18(2): 125-131, 1991. Davis Jr., C. A. Uso de Vetores em GIS. Fator GIS 4(21): 22-23, 1997. Deveau, T. J. Reducing the number of points in a plane curve representation. In Proceedings of AutoCarto 7, 152-160, 1985. Dobkin, D., Guibas, L., Hershberger, J., and Snoeyink, J. An Efficient Algorithm for Finding the CSG Representation of a Simple Polygon.

[Bear91] [Bour87] [Butt85] [Butt89] [ChCh96]

[CLR90] [CrCa91]

[CrCa92]

[Crom88]

[Crom91]

[Davi97] [Deve85] [DGHS88]

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. Duda, R. and Hart, P. Pattern Classification and Scene Analysis. John Wiley & Sons, New York, 1973. Edelsbrunner, H. Algorithms in Combinatorial Geometry, SpringerVerlag, 1987. Figueiredo, L. H., Carvalho, P. C. P. Introduo Geometria Computacional, Instituto de Matemtica Pura e Aplicada, 1991. Fortune, S. A Sweepline Algorithm for Voronoi Diagrams. Algorithms 2:153-174, 1987. 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. Gold, C. M. Problems with Handling Spatial Data - The Voronoi Approach. CISM Journal 45: 65-80, 1991. Gold, C. M. Dynamic Spatial Data Structures - The Voronoi Approach. In Proceedings of, the Canadian Conference on GIS, 245-255, 1992. 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. 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. van Horn, E. K. Generalizing Cartographic Databases. In Proceedings of AutoCarto 7, 532-540, 1985. Imai, H. and Iri, M. Polygonal Approximations of a Curve Formulations and Algorithms. In Toussaint, G. T. (editor) Computational Morphology, North Holland, 1988. Jain, A. K. Fundamentals of Digital Image Processing. Prentice-Hall, 1989. Jenks, G. F. Lines, Computers and Human Frailties. In Annals of the Association of American Geographers 71(1): 1-10, 1981. Jenks, G. F. Geographic Logic in Line Generalization. Cartographica

[DuHa73] [Edel87] [FiCa91] [Fort87] [GHMS93]

[Gold91] [Gold92b] [GuSt85]

[HeSn92]

[Horn85] [ImIr86]

[Jain89] [Jenk81] [Jenk89]

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. Knuth, D. E. The Art of Computer Programming, Volume 3: Sorting and Searching, 2nd Edition. Addison-Wesley, 1973. Knuth, D. E. The Art of Computer Programming, Volume 1: Fundamental Algorithms, 2nd Edition, Addison-Wesley, 1973. Lang, T. Rules for Robot Draughtsmen. Geographical Magazine 22: 5051, 1969. Laurini, R. and Thompson, D. Fundamentals of Spatial Information Systems. Academic Press, 1992. Leach, G. Improving Worst-Case Optimal Delaunay Triangulation Algorithms. In Proceedings of the Fourth Canadian Conference on Computational Geometry, 1992. 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. 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. Margalit, A., Knott, G. D. An Algorithm for Computing the Union, Intersection or Difference of Two Polygons. Computers & Graphics 13(2): 167-183, 1989. Marino, J. S. Identification of Characteristic Points Along Naturally Occurring Lines: An Empirical Study. The Canadian Cartographer 16:70-80, 1979. McMaster, R. B. A Statistical Analysis of Mathematical Measures for Linear Simplification. American Cartographer 13:103-116, 1986.

[Knut73] [Knut73a] [Lang69] [LaTh92] [Leac92]

[LeSc80]

[LiOp92]

[MaKn89]

[Mari79]

[McMa86]

[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] [Melk87] [Melk88] McMaster, R. B. and Shea, K. S. Generalization in Digital Cartography. Association of American Geographers, 1992. Melkman, A. A. On-line Construction of the Convex Hull of a Simple Polyline. Information Processing Letters 25:11-12, 1987. Melkman, A. A. and ORourke, J. On Polygonal Chain Approximation. In Toussaint, G. T. (editor) Computational Morphology, North Holland, 1988. Mower, J. Developing Parallel Procedures for Line Simplification. International Journal of Geographical Information Science 10 (6): 699712, 1996. Muller, J. C. Optimum Point Density and Compaction Rates for the Representation of Geographic Lines. In Proceedings of AutoCarto 8, 221-230, 1987. Muller, J. C. The Removal of Spatial Conflicts in Line Generalization. Cartography and Geographic Information Systems 17 (2): 141-149, 1990. Mulmuley, K. Computational Geometry: An Introduction Through Randomized Algorithms, Prentice-Hall, 1994. Nickerson, B. G. Automated Cartographic Generalization for Linear Features. Cartographica 25 (3): 15-66, 1988. Nievergelt, J., Preparata, F. P. Plane-Sweep Algorithms for Intersecting Geometric Figures. Communications of the ACM 25(10): 739-747, 1982. Okabe, A., Boots, B., Sugihara, K. Spatial Tesselations: Concepts and Applications of Voronoi Diagrams, John Wiley, 1992. 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. van Oosterom, P. Reactive Data Structures for Geographic Information Systems, Oxford University Press, 1993. Opheim, H. Smoothing a Digitized Curve by Data Reduction Methods. In Encarnao, J. L. (editor) Proceedings of Eurographics 81, 127-135, North-Holland, 1981. ORourke, J. Computational Geometry in C, Cambridge University Press, 1994.

[Mowe96]

[Mull87]

[Mull90a]

[Mulm94] [Nick88] [NiPr82] [OBS92] [OoSc95]

[Oost93] [Ophe81]

[ORou94]

[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. Perkal, J. An Attempt at Objective Generalization. Michigan InterUniversity Community of Mathematical Geographers, Discussion Paper No. 10, 1966. Peucker, T. K. A Theory of the Cartographic Line. International Yearbook of Cartography 16: 134-143, 1975. Plazanet, C. Measurements, Characterization and Classification for Automated Line Feature Generalization. In Proceedings of AutoCarto 12, 59-68, 1995. Preparata, F. P., Shamos, M. I. Computational Geometry: an Introduction, Springer-Verlag, 1988. Ramer, U. An Iterative Procedure for the Polygonal Approximation of Plane Curves. Computer Vision, Graphics, and Image Processing 1:244256, 1972. 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. Roberge, J. A Data Reduction Algorithm for Planar Curves. Computer Vision, Graphics, and Image Processing 1(3): 244-256, 1985. Robinson, A. H., Sale, R. D. and Morrison, J. L. Elements of Cartography, 4th Edition, John Wiley & Sons, 1978. Schneider, M. Spatial Data Types for Database Systems: Finite Resolution Geometry for Geographic Information Systems, Lecture Notes in Computer Science 1288. Springer-Verlag, 1997. Sedgewick, R. Algorithms in C, Addison-Wesley, 1990. Tarjan, R. E. Data Structures and Network Algorithms, Regional Conference Series in Applied Mathematics 44, SIAM, 1983. Thapa, K. Automatic Line Generalization using Zero Crossings. Photogrammetric Engineering and Remote Sensing 54(4), 511-517, 1988. 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. Topfer, F. and Pillewizer, W. The Principles of Selection. Cartographic Journal 3 (10-16), 1966.

[Perk66]

[Peuc75] [Plaz95]

[PrSh88] [Rame72]

[ReWi74]

[Robe85] [RSM78] [Schn97]

[Sedg90] [Tarj83] [Thap88]

[Tobl64]

[ToPi66]

[Tous83]

Toussaint, G. T. Computing Largest Empty Circles with Location Constraints. International Journal of Computer and Information Science 12(5): 347-358, 1983. Vatti, B. R. A Generic Solution to Polygon Clipping. Communications of the ACM 35(7): 57-63, 1992. Visvalingam, M. and Whyatt, J. The Douglas-Peucker Algorithm for Line Simplification: Re-evaluation through Visualization. Computer Graphics Forum 9 (213-228), 1990. Visvalingam, M. and Whyatt, J. D. Line Generalisation by Repeated Elimination of Points. Cartographic Journal 30 (1): 46-51, 1993. 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. 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. White, E. R. Assessment of Line-Generalization Algorithms Using Characteristic Points. The American Cartographer 12(1): 17-28, 1985. 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. Wolberg, G. Digital Image Warping. IEEE Computer Society Press, 1990. Zhao, Z. and Saalfeld, A. Linear-Time Sleeve-Fitting Polyline Simplification Algorithms. In Proceedings of AutoCarto 13, 1997. Ziviani, N. Projeto de Algoritmos com Implementaes em Pascal e em C, 3a. Edio, Editora Pioneira, 1996.

[Vatt92] [ViWh90]

[ViWh93] [ViWi95]

[Weib95]

[Whit85] [Will78]

[Wolb90] [ZhSa97] [Zivi96]

You might also like