Escolar Documentos
Profissional Documentos
Cultura Documentos
Algoritmos Geometricos
Algoritmos Geometricos
Algoritmos Geomtricos
em SIG
poligonal:
Sejam
v 0 , v1 ,
, v n 1
pontos
no
plano.
Sejam
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
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;
Esta opo tambm feita neste trabalho, considerando principalmente que a alternativa mais usada
pelos SIG comerciais.
paralelogramo, o dobro da rea do tringulo que interessa. Outro mtodo calcula a rea
diretamente, por meio de um determinante 3x3.
C
U
B
i
xU
j
yU
k
zU = ( yU zV zU yV )i + ( zU xV xU zV ) j + ( xU yV yU xV ) k
xV
yV
zV
( xU yV yU xV )
2
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 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.
(1.3)
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.
1 =
S ( pp2 p3 )
S ( p1 pp3 )
S ( p1 p2 p)
, 2 =
e 3 =
S ( p1 p2 p3 )
S ( p1 p2 p3 )
S ( p1 p2 p3 )
1 >0
2 <0
3 <0
=
3 0
1 >0
2 <0
3 >0
p1
1= 0
1 >0
2 >0
3 >0
1 >0
2 >0
3 <0
p2
p3
2 = 0
1 <0
2 <0
3 >0
1 <0
2 >0
3 >0
1 <0
2 >0
3 <0
booleano
incio
real lambda1, lambda2, lambda3, S;
S = reaOrientadaTringulo(P1, P2, P3);
lambda1 = reaOrientadaTringulo(P, P2, P3) / S;
lambda2 = reaOrientadaTringulo(P1, P, P3) / S;
lambda3 = reaOrientadaTringulo(P1, P2, P) / S;
retorne ((lambda1 > 0) e (lambda2 > 0) e (lambda3 > 0))
fim.
em(P, AB)
emExtremo(P, AB)
P
A
P
A
seEncontram(AB, CD)
superpostos(AB, CD)
alinhados(AB, CD)
paralelos(AB, CD)
seTocam(AB, CD)
seInterceptam(AB, CD)
disjuntos(AB, CD)
D
B
C
A
C
A
D
C
A
D
C
B
D
B
C
A
C
D
A
C
D
A
C
C
S>0
S<0
S=0
C
(a)
(b)
(c)
A
C
U
V
B
A
(a) U x V > 0
(b) U x V < 0
(c) U x V = 0
C)
D)
C)
D)
e
e
e
e
no
no
no
no
em(D,
em(C,
em(D,
em(C,
A,
A,
A,
A,
B)
B)
B)
B)
e
e
e
e
no
no
no
no
em(B,
em(B,
em(A,
em(A,
C,
C,
C,
C,
D)) ou
D)) ou
D)) ou
D));
fim.
funo superpostos(Ponto A, Ponto B, Ponto C, Ponto D): booleano
/* testa se AB e CD so alinhados e tm um trecho em comum */
incio
se ((lado(A, B, C) = 0) e (lado(A, B, D) = 0))
ento retorne (em(C, A, B) ou em(D, A, B) ou
em(A, C, D) ou em(B, C, D));
fim.
funo alinhados(Ponto A, Ponto B, Ponto C, Ponto D): booleano
/* testa se AB e CD so alinhados e no tm um trecho em comum */
incio
se ((lado(A, B, C) = 0) e (lado(A, B, D) = 0))
ento retorne (no em(C, A, B) e no em(D, A, B) e
no em(A, C, D) e no em(B, C, D));
fim.
funo seTocam(Ponto A, Ponto B, Ponto C, Ponto D): booleano
/* testa se AB e CD se tocam */
incio
se (alinhados(A, B, C, D) ou superpostos(A, B, C, D))
ento retorne falso
seno retorne (em(C, A, B) ou em(D, A, B) ou
em(A, C, D) ou em(B, C, D));
fim.
e portanto
(y
y A ) (x D xC ) ( y D yC ) (x B x A ) = 0
(1.4)
(1.5)
D
A
P
B
C
B
C
P
B
D
A
C
(a)
(b)
(x
x 3 ) ( x 4 x1 ) ( y 2 y 3 ) ( y 4 y1 )
onde
x1 = min( x A , x B )
x 2 = max ( x A , x B )
y1 = min( y A , y B )
y 2 = max ( y A , y B )
x3
x4
y3
y4
= min( x C , x D )
= max ( x C , x D )
= min( y C , y D )
= max ( y C , y D )
Q'
Q
Q'
P
P'
P'
(a)
(b)
D
B
D
D
A
(a)
(B-A) x (D-A) < 0
(B-A) x (C-A) > 0
A
(b)
(B-A) x (D-A) = 0
(B-A) x (C-A) > 0
(c)
(B-A) x (D-A) = 0
(B-A) x (C-A) = 0
=
=
=
=
lado(A,
lado(A,
lado(C,
lado(C,
B,
B,
D,
D,
C);
D);
A);
B);
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));
(1.6)
yB y A
e b1 = y A a1 x A .
xB x A
y D yC
e b2 = y C a 2 x C .
x D xC
(1.7)
x=
b2 b1
b2 a1 b1a 2
ey=
a1 a 2
a1 a 2
(1.8)
A soluo para o sistema indica o ponto de interseo entre as retas AB e CD, que no
necessariamente pertence aos segmentos AB e CD. Assim, um teste adicional
necessrio para verificar se a interseo ou no prpria. Isto pode ser feito verificando
se ambas as coordenadas do ponto de interseo P esto dentro do intervalo formado
pelas coordenadas dos pontos extremos de ambos os segmentos, ou seja:
min( x A , x B ) x P max ( x A , x B ) e min( y A , y B ) y P max ( y A , y B )
e tambm
min( x C , x D ) x P max ( x C , x D ) e min( y C , y D ) y P max ( y C , y D ) .
necessrio permitir a condio de igualdade, nos testes acima, de modo a considerar o
caso de retas verticais ou horizontais. Portanto, para garantir que a interseo seja
prpria, ser ainda necessrio comparar diretamente o ponto de interseo com os
pontos extremos dos segmentos.
Embora a formulao acima parea ser uma boa maneira de resolver o problema, alguns
obstculos e inconvenincias persistem. Em primeiro lugar, um programa que
implemente esta formulao precisa lidar com a possibilidade de se obter zero em um
dos denominadores. Isto pode acontecer em trs situaes: (1) a reta AB vertical
(xA = xB), (2) a reta CD vertical (xC = xD), ou (3) as retas AB e CD so paralelas
(a1 = a2). Nos casos (1) e (2), o ponto de interseo pode ser calculado de forma trivial,
aplicando a abscissa da reta vertical equao da outra reta. No caso (3) fica claro que
as retas no tm ponto de interseo, e portanto o problema no tem soluo, i.e., no
existe ponto de interseo, prprio ou imprprio. Em todos os casos, no entanto, mas
problemas numricos ainda podem surgir quando o denominador quase zero. Lidar
com estas excees no cdigo pode ser problemtico, levando ao desenvolvimento de
programas menos robustos.
Uma soluo um pouco mais conveniente para o problema usa tambm a geometria
analtica, mas aplica uma representao paramtrica para os segmentos que evitar as
inconvenincias listadas acima. Esta formulao a seguinte: seja AB um segmento de
reta qualquer no plano. Seja U = B A um vetor correspondente ao segmento.
Qualquer ponto P ao longo da reta que passa por A e B pode ser obtido a partir da soma
vetorial P( s) = A + sU , onde s denominado o parmetro da equao. Mas temos que
P(0) = A , e P(1) = A + U = B , e possvel chegar a qualquer ponto do segmento AB
variando s entre 0 e 1.
x A ( y D yC ) + xC ( y A y D ) + x D ( yC y A )
denom
(x (y
t=
A
y B ) + x B ( y A yC ) + xC ( y B y A )
(1.9)
denom
onde
denom = x A ( y D y C ) + x B ( y C y D ) + x C ( y A y B ) + x D ( y B y A )
As coordenadas do ponto de interseo I sero:
x I = x A + s( x B x A )
y I = y A + s( y B y A )
(1.10)
C.y) +
D.y) +
A.y)) / denom;
- B.y) +
- C.y) +
- A.y) / denom;
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)
s4
s1
s2
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.
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
Para auxiliar na manuteno do aspecto natural da poligonal, existem enfoques que integram algoritmos
de simplificao com algoritmos de suavizao [McMa89].
mais rara a rea entre as poligonais (Figura 1.11c), onde se estabelece um limite para
ao deslocamento de rea.
3
3
2
4
ngulo mnimo
distncia mxima
1
(a)
(b)
3
2
deslocamento de
rea mximo
1
(c)
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
Descrio
Exemplos
Algoritmos de pontos
independentes
Jenks [Jenk81]
Algoritmos de
processamento local
restrito estendidos
Lang [Lang69]
Algoritmos de
processamento local
estendido irrestrito
Reumann-Witkam
[ReWi74]
Douglas-Peucker
[DoPe73]
Algoritmos de
processamento local
Algoritmos globais
seleo aleatria de
pontos [RSM78]
Visvalingam-Whyatt
[ViWh93]
Opheim [Ophe81]
Zhao-Saalfeld [ZhSa97]
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
D. Dados sobre
curvilinearidade
II. Medidas de
deslocamento
linear
E. Dados de diferenas
vetoriais
F. Dados de diferenas
poligonais
G. Dados de permetro
n
100
n
(n ) l
100
( n) l
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].
MPCA =
ang (v , v
i +1
, vi + 2 )
ang(v , v
i +1
, vi +2 )
i =0
n3
i =0
100
onde ang uma funo que calcula o ngulo definido por trs pontos (Figura 1.11b),
que no caso utilizada em segmentos consecutivos na poligonal simplificada e na
poligonal original.
Deslocamento vetorial total por unidade de comprimento: indica o deslocamento
geomtrico total da linha com relao original. Ou seja,
n 1
DVT =
d (v , P)
i
i =0
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
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
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
Observe-se que este comportamento o inverso do apresentado pelo algoritmo DouglasPeucker, que ser apresentado adiante, no sentido de que seu pior caso ocorre quando
elimina todos os vrtices, e o melhor ocorre quando todos os vrtices so mantidos.
Sendo assim, este algoritmo poder ser mais eficiente que o Douglas-Peucker em
situaes de simplificao mnima, e est recomendado para situaes em que o
interesse seja simplesmente a eliminao de vrtices alinhados, com tolerncia
baixssima.
1.1.4.5 Reumann-Witkam [ReWi74]
Este algoritmo [ReWi74] utiliza, em cada iterao, duas linhas paralelas a cada
segmento da poligonal para determinar uma regio de eliminao de vrtices.
Naturalmente, a tolerncia precisamente a metade da distncia entre as paralelas. A
poligonal analisada seqencialmente, sendo buscado o primeiro segmento que
intercepta uma das duas paralelas. Sendo vi vi+1 o segmento localizado, o vrtice vi
mantido e todos os intermedirios, entre o vrtice inicial e vi, so descartados.
15
15
16
14
13
16
14
17
13
17
12
12
18
11
18
19
11
29
4
20
22
1
5
7
10
21
20
28
22
23
6
29
4
10
19
27
24
26
21
28
23
6
27
24
26
25
25
(a)
(b)
15
15
16
14
13
16
14
17
13
12
17
12
18
11
18
19
11
29
4
2
9
1
5
20
22
28
9
1
27
24
26
25
(c)
10
21
23
6
29
4
10
19
20
22
21
28
23
6
27
24
26
25
(d)
partir do vrtice v23 (Figura 1.12b), desta vez eliminando o vrtice v24. Reiniciando de
v25, elimina-se v26 (Figura 1.12c). O processamento termina em seguida, eliminando v28
e terminando no ltimo vrtice, v29 (Figura 1.12d). No total, doze vrtices foram
eliminados.
O algoritmo Reumann-Witkam , segundo a classificao proposta por McMaster
[McMa87a], do tipo processamento local estendido irrestrito, pois a verificao
iniciada em um determinado vrtice, e prossegue at que algum segmento tenha
interceptado uma das paralelas, ou at que a linha termine. Opheim [Ophe81] props
uma variao deste enfoque em que so impostos limites quanto seo da linha que
analisada, produzindo assim um algoritmo com processamento local estendido restrito.
So definidos uma distncia mnima (dmin) e uma distncia mxima (dmax), que
funcionam limitando, juntamente com as paralelas, uma regio que contm todos os
vrtices que sero eliminados. Como no Reumann-Witkam, o processamento recomea
no primeiro vrtice do primeiro segmento que sai da regio limitada. Esta variao
apresenta a tendncia a preservar melhor a aparncia das curvas, pois evita que vrtices
muito prximos e vrtices muito distantes do vrtice de partida sejam eliminados.
Conseqentemente, o grau de compactao ainda menor do que o que se pode alcanar
com o algoritmo Reumann-Witkam.
Na Figura 1.13a apresentada a regio de eliminao de vrtices do algoritmo Opheim.
Qualquer vrtice que fique dentro da rea marcada ser eliminado, a menos que seja o
primeiro vrtice de um segmento que intercepta as linhas paralelas. o caso do vrtice
v7 na Figura 1.13b, que no ser eliminado, e servir de ponto de partida para a prxima
iterao. O vrtice v6, tambm na Figura 1.13b, no ser eliminado pois est a uma
distncia inferior a dmin com relao ao vrtice de partida, v5. A mesma situao se
repete a partir de v7, pois v8 precisa ser mantido e v9 se torna o novo vrtice de partida
(Figura 1.13c). Partindo de v9, finalmente temos a eliminao de v10.
11
3
dm
in
10
2
dmax
9
1
rea de eliminao
de vrtices
(a)
22
23
(b)
11
11
3
4
10
10
2
9
22
1
23
6
22
21
23
6
(c)
24
(d)
Figura 1.13 - Algoritmo Opheim
Este algoritmo, proposto por Lang [Lang69], requer dois parmetros de entrada: uma
distncia de tolerncia, semelhante do algoritmo de Jenks, e um parmetro (p) de lookahead, ou seja, uma quantidade de vrtices que devem ser considerados a cada etapa do
processo. Por exemplo, se p for igual a 5, sero analisados os vrtices v1 a v6. Nesse
caso, ser calculada a distncia entre os vrtices v2, v3, v4 e v5 reta que passa por v1 e
v6. Se a alguma distncia obtida for maior que a tolerncia, o algoritmo retrocede um
ponto (no caso, at v5) e recomea, se necessrio fazendo o mesmo enquanto existirem
vrtices intermedirios. Se todas as distncias intermedirias forem menores que a
tolerncia, os vrtices intermedirios so eliminados, e o prximo passo ser iniciado no
ltimo vrtice extremo encontrado, considerando novamente p pontos frente. No
exemplo da Figura 1.14, foi necessrio recuar de v5 (Figura 1.14a) at v3, eliminando
apenas v2 (Figura 1.14d), uma vez que existiam em cada uma das etapas intermedirias
(Figura 1.14b e c) vrtices fora da faixa de tolerncia. O algoritmo recomea a partir de
v3, o ltimo vrtice mantido, e vai analisar em seguida o trecho entre v3 e v8.
1
5
6
tolerncia
tolerncia
(a)
(b)
3
4
1
1
8
tolerncia
tolerncia
(c)
(d)
Figura 1.14 - Algoritmo Lang
Este algoritmo se comporta bem do ponto de vista geomtrico [McMa87a], sendo capaz
de preservar razoavelmente as caractersticas da linha original. No entanto, sofre a
influncia do parmetro de look-ahead: valores diferentes levaro a resultados
diferentes. Apesar disso, sua implementao interessante por fixar a quantidade
mxima de pontos que sero analisados a cada etapa, possibilitando um
dimensionamento esttico de memria em tempo de compilao, caso se limite o valor
de p.
Com relao ao grau de compactao, observe-se que este algoritmo s ser capaz de
eliminar n n p vrtices, uma vez que, em cada intervalo so preservados, no mnimo,
os dois vrtices extremos. A manuteno dos vrtices extremos de cada intervalo
prejudica a aparncia final da poligonal, pois sua seleo to arbitrria quanto a
realizada pelo algoritmo do k-simo vrtice.
Complexidade computacional. O pior caso ocorre quando nenhum ponto eliminado, e
portanto o algoritmo precisa fazer o look-ahead n / p vezes e retroceder, em cada passo,
- a) == 1) ento retorne;
0;
0;
= a+1 at f-1 faa
16
14
13
17
12
18
11
19
29
4
10
2
9
1
5
20
22
21
28
23
6
27
24
26
25
uma vez que poder haver pouco equilbrio entre as tarefas atribudas a cada
processador [HeSn92].
15
29
tolerncia
29
9
1
tolerncia
15
3
29
9
1
tolerncia
3
2
29
9
1
tolerncia
16
17
29
4
22
24
tolerncia
15
17
29
9
1
24
tolerncia
15
2.632
24
1.614
2.705
11
17
27
0.750
0.213
1.094
0.514
10
13
16
22
25
28
0.177
0.894
0.070
0.267
0.354
0.256
0.247
0.078
12
14
18
23
26
0.371
0.224
0.224
0.100
0.238
0.108
0.054
19
0.250
0.094
0.062
21
0.044
20
0.028
Esta situao pode ocorrer, por exemplo, quando os vrtices da poligonal esto dispostos ao longo de
um semicrculo [Nick88].
n
n
T (n) = (n 2) + T 2 + T 2
2
2
T ( 2) = 0
(1.11)
(1.12)
T ( 2) = 0
Resolvendo a Equao 1.12, resulta O(n log n), que indica o melhor desempenho do
algoritmo quando todos os vrtices so mantidos. No entanto, o pior caso ocorre, de
forma tambm anloga ao quicksort, quando a diviso feita no segundo vrtice ou no
penltimo, fazendo com que a recorrncia assuma a seguinte forma:
T (n) = (n 2) + T ( n 1)
T ( 2) = 0
(1.13)
fecho convexo9 aplicado a uma linha [DGHS88], buscando maior eficincia na etapa de
seleo do vrtice mais distante.
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]
2
1
p
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
vk
vj
2
vi
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
(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
(a)
(b)
(c)
(d)
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.4
Sejam
v 0 , v1 ,
, v n 1
pontos
do
plano.
Sejam
(a)
(b)
X
G
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
Figura 1.35 - Para este polgono com 14 vrtices, 4 guardas so suficientes (nos
vrtices pretos)
Triangulao de polgonos. Na soluo do Problema da Galeria de Arte foi utilizada a
triangulao de polgonos, e afirmou-se que a triangulao sempre possvel. Para
provar esta afirmao, necessrio estabelecer algumas condies iniciais, relativas
convexidade de vrtices e existncia de diagonais.
Definio 1.8 - Um vrtice estritamente convexo de um polgono P um vrtice
no qual, quando se caminha em sentido anti-horrio pela fronteira do polgono,
faz-se uma curva esquerda. Analogamente, um vrtice reflexo aquele no qual
se faz uma curva direita. Observe-se que, quando se caminha pela fronteira de
um polgono em sentido anti-horrio, o interior est sempre esquerda.
Lema 1.1 - Existe sempre pelo menos um vrtice estritamente convexo em um
polgono P.
Prova - Selecionar, dentre os vrtices de P, aquele com a menor coordenada y.
Se existir mais de um vrtice com a mesma ordenada, escolher aquele com a
maior abscissa. Seja vi este vrtice. Nesta situao, tem-se y(vi-1) y(vi) e
y(vi+1) > y(vi), e o interior est totalmente acima de vi. Portanto, necessrio
fazer uma curva esquerda em vi quando se caminha em sentido anti-horrio, de
vi-1 para vi+1 , e portanto vi um vrtice estritamente convexo (vide Figura 1.36
para uma visualizao da prova).
v i-1
v i+1
v i-1
v i+1
v i+1
vi
v i-1
vi
(a)
(b)
vi
(c)
v i-1
v i+1
v i-1
v i+1
v i-1
v i+1
x
vi
vi
vi
(a)
(b)
(c)
Figura 1.37 - Trs situaes possveis no Lema 1.2 : (a) vi-1vi+1 uma diagonal,
(b) vi-1vi+1 intercepta a fronteira e (c) vi-1vi+1 exterior a P
Este lema demonstrou que qualquer polgono com mais de 3 vrtices deve ter pelo
menos uma diagonal. Observe-se, no entanto, que qualquer diagonal encontrada dividir
o polgono em duas partes. Se uma parte ficar com apenas trs vrtices, tem-se
obviamente um tringulo. Se ficar com mais de trs vrtices, formar tambm um
polgono, que tambm tem pelo menos uma diagonal. Recursivamente, chega-se a uma
triangulao completa. O teorema abaixo formaliza esta concluso.
Teorema 1.2 - Todo polgono de n vrtices pode ser triangulado
Prova - Se n = 3, o polgono j um tringulo. Se n 4, o polgono pode ser
dividido pela adio de uma diagonal, usando o processo descrito no Lema 1.2 .
Uma diagonal, quando encontrada, divide o polgono em dois sem adicionar
novos vrtices. Cada uma das partes um polgono, compartilhando uma aresta,
que a diagonal, e cada uma das partes tem menos de n vrtices. Prosseguindo,
cada parte pode ser dividida recursivamente at que se chegue a uma
triangulao completa.
A triangulao de um polgono tem diversas propriedades, que so teis para as
aplicaes.
Lema 1.3 - Toda triangulao de um polgono P com n vrtices usa n - 3
diagonais e gera n - 2 tringulos.
Prova - A prova por induo sobre o nmero de vrtices.
Base: Se n = 3, ento existem 3 - 3 = 0 diagonais e 3 - 2 = 1 tringulo.
Hiptese indutiva: Se n 4, ento existem n - 3 diagonais e n - 2 tringulos.
Passo indutivo: Sejam n1 e n2 o n mero de vrtices dos polgonos P1 e P2,
obtidos pela diviso de P por uma diagonal d. Naturalmente, n = n1 + n2 + 2,
uma vez que os pontos extremos da diagonal d so contados duas vezes. Se a
hiptese indutiva for verdadeira, ento P1 ter n1 - 3 diagonais e gerar n1 - 2
tringulos, e P2 ter n2 - 3 diagonais e gerar n2 - 2 tringulos. No total, existiro
(n1 -3) + (n2 - 3) + 1 = n - 3 diagonais (incluindo d), e (n1 - 2) + (n2 - 2) = n - 2
tringulos, o que confirma a hiptese indutiva.
Um corolrio ao Lema 1.3 que a soma dos ngulos internos de um polgono com n
vrtices (n - 2), correspondendo soma da contribuio de cada um dos
(n - 2) tringulos, cada qual tendo somatrio de ngulos internos igual a .
Em seguida, uma srie de resultados que correlacionam triangulaes a grafos sero
apresentados. Estas propriedades so teis em diversas situaes prticas, como ser
apresentado at o fim deste captulo.
Definio 1.9 - O dual da triangulao de um polgono um grafo, formado por
ns que correspondem a cada tringulo, e arcos ligando ns cujos tringulos
correspondentes compartilham uma diagonal (Figura 1.38).
No grafo dual, cada n claramente ter grau mximo igual a 3, uma vez que cada
tringulo tem no mximo trs lados para compartilhar.
Lema 1.4 - O dual de uma triangulao no tem ciclos.
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)
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
x A + x B + xC
y + y B + yC
e yG = A
3
3
xG =
10
Este resultado pode ser demonstrado usando as coordenadas baricntricas, conforme apresentado na
seo 1.1.2.1, atribuindo valores iguais a 1/3 para os parmetros 1, 2 e 3 (Equao 1.3).
A( P) =
1 n 1
( x y y i x i +1 )
2 i = 0 i i +1
n 1
xC =
(x
i =0
i +1
3 A( P)
n 1
yC =
+ x i ) ( x i y i +1 y i x i +1 )
(y
i =0
i +1
(1.15)
+ y i ) ( x i y i +1 y i x i +1 )
3 A( P)
G
M
Figura 1.39 - Centrides calculados pela mdia (M) e como centro de gravidade (G)
1.1.5.4 Ponto em polgono
est dentro do polgono; caso contrrio, ou seja, caso exista um nmero par de
intersees, o ponto est fora (Figura 1.40).
P
Q
(a)
(b)
(c)
(d)
=
=
=
=
min(A.x,
min(A.y,
max(A.x,
max(A.y,
B.x);
B.y);
B.x);
B.y);
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.
(a)
(b)
P
Q
S
(a) P U Q
(c) P Q
(b) Q - S
(d) P - R
Operaes
PQ
PQ
PQ
Q P
ilha
ilha
manter
manter
inverter
inverter
ilha
buraco
inverter
inverter
manter
manter
buraco
ilha
inverter
inverter
manter
manter
buraco
buraco
manter
manter
inverter
inverter
12
Para uma anlise mais completa, inclusive com as combinaes de hipteses nos casos de ilhas e
buracos, vide [MaKn89].
Tabela 1.6 - Tipos de arestas para seleo de acordo com o tipo de operao e os
tipos de polgonos de entrada
Polgonos
Operaes
PQ
PQ
PQ
Q P
ilha
buraco
interior
interior
exterior
exterior
exterior
interior
interior
exterior
ilha
buraco
exterior
interior
interior
exterior
interior
interior
exterior
exterior
buraco
ilha
interior
exterior
exterior
interior
exterior
exterior
interior
interior
buraco
buraco
exterior
exterior
interior
interior
interior
exterior
exterior
interior
p2
p5
p3
q3
p6
i2
i1
q2
i3
p4
p7
q 0= q 4
i4
p8
q1
p0
p1
p2
p3
p4
p5
p6
p7
p8
p9
q0
q1
q2
q3
q4
PL
QL
PL
QL
p0
p1
p2
p3
i1
p4
i2
p5
p6
i3
p7
i4
p8
p9
nf
nf
nf
nf
q0
q1
i4
q2
i3
i2
q3
i1
q4
nf
nf
nf
nf
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.
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)
(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).
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);
A
B
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
p4
p2
p3
p5
p6
p1
p0
p9
p7
p 10
p8
p4
p5
p8
p9
p6
p 10
p2
p3
p1
p0
p3
p4
p7
p2
p5
p1
p9
p8
p0
Seja P = p1, p2 ,
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
p2
p1
16
Estes polgonos recebem diversos nomes alternativos na literatura: regies de Dirichlet, polgonos de
Thiessen, clulas de Wigner-Seitz, ou regies proximais [PrSh88]
p2
M 12
M 23
p1
p3
M 13
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).
(a)
(b)
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
17
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
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).
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.
(b) interseo em um
ponto
1.2 Topologia
1.2.1 Conceitos bsicos (captulo da apostila)
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]
[Bear91]
[Bour87]
[Butt85]
[Butt89]
[ChCh96]
[CLR90]
[CrCa91]
[CrCa92]
[Crom88]
[Crom91]
[Davi97]
Davis Jr., C. A. Uso de Vetores em GIS. Fator GIS 4(21): 22-23, 1997.
[Deve85]
[DGHS88]
[DuHa73]
[Edel87]
[FiCa91]
[Fort87]
[GHMS93]
[Gold91]
[Gold92b]
[GuSt85]
[HeSn92]
[Horn85]
[ImIr86]
[Jain89]
[Jenk81]
[Jenk89]
[Knut73]
[Knut73a]
[Lang69]
Lang, T. Rules for Robot Draughtsmen. Geographical Magazine 22: 5051, 1969.
[LaTh92]
[Leac92]
[LeSc80]
[LiOp92]
[MaKn89]
[Mari79]
[McMa86]
1989.
[McSh92]
[Melk87]
[Melk88]
[Mowe96]
[Mull87]
[Mull90a]
[Mulm94]
[Nick88]
[NiPr82]
[OBS92]
[OoSc95]
[Oost93]
[Ophe81]
[ORou94]
[PAF95]
[Perk66]
Perkal, J. An Attempt at Objective Generalization. Michigan InterUniversity Community of Mathematical Geographers, Discussion Paper
No. 10, 1966.
[Peuc75]
[Plaz95]
[PrSh88]
[Rame72]
[ReWi74]
[Robe85]
[RSM78]
[Schn97]
[Sedg90]
[Tarj83]
[Thap88]
[Tobl64]
[ToPi66]
[Tous83]
[Vatt92]
[ViWh90]
[ViWh93]
[ViWi95]
[Weib95]
[Whit85]
[Will78]
[Wolb90]
[ZhSa97]
[Zivi96]