Vous êtes sur la page 1sur 6

Teorema da galeria de arte e triangularizao de polgonos

Lucas Piva Rocha Corra1 e Carlos Eduardo Ferreira (orientador)2


1 Universidade de So Paulo (USP), Brazil

piva@linux.ime.usp.br cef@ime.usp.br

2 Universidade de So Paulo (USP), Brazil

1.

Introduo

Geometria Computacional o estudo de algoritmos para resoluo de problemas de natureza geomtrica no computador, ou seja, em que os dados envolvem pontos (no plano ou no espao), retas, segmentos de retas, polgonos, poliedros, etc... Um desses problemas o problema conhecido como
Figura 1. Uma galeria de arte modelada como um po-

lgono no plano.
que motivou o

A regio sombreada representa a vi-

Teorema da Galeria de Arte,

sibilidade da cmera (Fonte: Computational Geometry: Algorithms and Applications [1])

projeto de Iniciao Cientca, por nos levar necessidade do estudo de estruturas de dados e algoritmos interessantes para sua resoluo. Na primeira seo, apresentamos o problema estudado, denies bsicas e alguns resultados e provas que precisaremos para o desenvolvimento da teoria de triangularizao. Na segunda seo, exploramos melhor a teoria da triangularizao e algumas de suas propriedades. Por m, apresentamos e analisamos algoritmos de triangularizao de polgonos. queremos encontrar o mximo sobre todos os polgonos de n vrtices, do mnimo nmero de cmeras necessrias para cobrir o polgno, ou seja, queremos como uma funo de n, o menor nmero de cmeras sucientes para cobrir qualquer polgono de n vrtices. Vamos denir formalmente o problema:

2.

O problema

O problema da Galeria de Arte foi proposto por Victor Klee em 1973[2] e pode ser formulado da seguinte maneira: Imagine uma galeria de arte, que pode ser modelada como um polgono simples toda a galeria seja monitorada? e somente se o segmento

g(P ) o menor nmero necessrio para cobrir P : g(P ) = minS |{S : S cobre P }|, onde S um conjunto de pontos e |S| a cardinalidade2 de S . Seja Pn um polgono com n vrtices. G(n) o mximo de g(Pn ) sobre todos os polgonos de n vrtices: G(n) = maxPn g(Pn ). Queremos calcular G(n). Dizemos que esse nmero necessrio e suSeja o polgono ciente: Necessrio no sentido de que precisamos de pelo menos esse nmero de cmeras para pelo menos um polgono e suciente no sentido de que esse nmero suciente para qualquer polgono de tices. Vamos mostrar, atravs de um exemplo, que

1 de n vrtices

no plano. Quantas cmeras so necessrias para que Dizemos que uma cmera xada no ponto x monitora um ponto y se

n vrn/3

xy

no passa por nenhum

ponto exterior ao polgno. Veja Figura

1.

cmeras sempre so necessrias para um tipo de polgono especial. O polgono em forma de pente da gura

Uma cmera um ponto. Um conjunto de cmeras cobre o polgono se todo ponto do polgono monitorado por alguma cmera. Uma variante interessante do problema seria exigir que apenas a fronteira do polgono seja coberta, onde geralmente cam as obras de arte. Denido o que uma cobertura, precisamos agora denir precisamente o que queremos. No problema,

possui

pontas.

Cada ponta possui duas

arestas e duas pontas consecutivas so separadas por uma aresta. Se associarmos cada ponta com a aresta separadora da direita, e a ltima ponta com a aresta de baixo, vemos que o polgono possui tas e, conseqentemente, vrtices.

n = 3k

ares-

Tambm pode-

mos observar que uma cmera consegue enxergar no mximo uma dessas pontas, ento para esse polgono

do plano determinada por uma cadeia poligonal fechada que no se intersecta. Polgonos com buracos no so permitidos.

1 Regio

2 A cardinalidade de um conjunto o seu nmero de elementos

89

especial,

inferior para

n/3 G(n), G(n).

e assim achamos um limitante

Figura 2. Pente de Chvtal. Precisamos de um guarda

para cada ponta.


Vamos apresentar agora a Prova de Sucincia de Fisk de 1978[4]. A prova depende em quebrar um polgono em tringulos pela adio de diagonais. Podemos decompor um polgono em tringulos pela adio de (zero ou mais)

Figura 4. Um polgono e uma 3-colorao do grafo as-

socido uma triangularizao (Fonte: Computational Geometry: Algorithms and Applications [1])

contrrio, estaramos violando a propriedade da colorao. Notamos que colocar uma cmera em um dos vrtices de um tringulo suciente para que ele seja coberto. Portanto, podemos arbitrariamente escolher a cor de cor com

diagonais.

Uma

diagonal

um segmento

aberto que liga dois vrtices de um polgono e est no interior desse polgono. A decomposio de um polgono em tringulos pela adio de um conjunto maximal de diagonais que no se intersectam chamada de

1 e colocar uma cmera em todos os ns 1. Dessa forma, conseguimos cobrir o polgono n/3 cmeras.

triangularizao

do polgono. Um polgono pode

Para concluir a prova, usamos o Princpio da casa dos pombos (Pigeonhole Principle em ingls). O princpio diz que se colocarmos

admitir diferentes triangularizaes. Vamos assumir que uma triangularizao sempre existe (deixamos a prova para a seo

pombos em

ca-

3).

sas de pombo, nenhuma casa pode conter mais que

n/k

pombos.

Aqui, os ns do grafo fazem o papel

dos pombos, e as cores das casas. Pelo princpio, nenhuma cor pode ser usada mais que mais que

n/3 vezes.

Como

n um inteiro, umas das cores no pode ser usada

n/3

vezes.

Podemos portanto escolher

essa cor para posicionar as cmeras. Assim, com o limite inferior estabelecido pelo uso do Pente de Chvtal e pela prova de Sucincia de Fisk, conclumos nossa anlise do problema da Galeria de Arte, com o resultado que

G(n) = n/3

Mas, como podemos triangularizar um polgono para


Figura 3. Um polgono simples, e uma possvel triangu-

posicionar as cmeras? Com esse interesse em vista, mudamos o foco, pelo resto do documento, para o assunto de triangularizao de polgonos, apresentando, na seo

larizao, representada pelas diagonais tracejadas.


Agora, seja

G = (V, E)

o grafo associado uma

algoritmos para resolver o pro-

triangularizao, onde os ns do grafo so precisamente os vrtices do polgono, e os arcos de das na triangularizao. Denimos uma

blema de forma eciente.

so

as arestas do polgono, mais as diagonais adicionado grafo como uma atribuio de 3 cores aos ns do grafo, de forma que nenhum n adjacente receba uma mesma cor. Veja a Figura sumimos que uma prova para a seo Seja

3-colorao

3.

Triangularizao: teoria

Antes de olhar para os algoritmos, precisamos estudar um pouco o campo da triangularizao de polgonos. Vamos comear a seo provando que todo polgono admite uma triangularizao. Um dos pontos chave da prova mostrar que todo polgono possui uma diagonal. Para essa prova, precisamos que todo polgono possua pelo menos um vrtice estritamente convexo.

3-colorao
3.

4.

Novamente, as-

sempre existe para o

grafo associado a uma triangularizao e deixamos a

K = 1, 2, 3

as cores atribudas. Cada trin-

gulo possui um n com cada uma das cores, caso

90

Lema

3.1

Todo polgono possue pelo menos um vr-

tice estritamente convexo.

Prova.
y

Seja

o vrtice com menor coordenada

do polgono.

Se houverem vrios desses vrtices,

escolhemos o que possuir maior coordenada tamente acima de esquerda de

x.

As-

suma que nenhum dos vrtices adjacentes est estri-

v.

Ento, os dois vrtices esto

v,

pelo jeito que escolhemos

v,

e pos-

suem mesma coordenada

y.

Isso contraria a hiptese

do polgono ser simples pois teramos duas arestas sobrepostas. Assim, pelo menos um dos vrtices adjacentes que

est estritamente acima dele e portanto

Figura 5. O grafo dual associado a uma triangularizao

o ngulo interior do vrtice

estritamente menor

de

(Fonte: Computational Geometry: Algorithms and

.
3.2

Applications [1])

Lema

. (Meisters)
Seja

Todo polgono de

n4

vrti-

ces possue uma diagonal.

Prova.
e

um vrtice estritamente convexo,

cuja existncia garantida pelo Lema

os vrtice adjacentes a

v.

Se

ab

3.1

e sejam

triangularizao admite uma o

3-colorao denimos grafo dual G(Tp ) como sendo um grafo onde temos

Para provarmos que todo grafo associado a uma

for um segmento

um n para cada tringulo e, para cada dois ns cujo tringulo associado divide uma diagonal, colocamos uma aresta.

interno ao polgono, achamos uma diagonal. Se no, existe um ou mais vrtices dentro do tringulo Chame de mento

avb.

o vrtice mais distante de

ab.

O seg-

vv

no pode intersectar nenhuma aresta do

Lema

3.5

O dual

polgono, pois isso implicaria na existncia de um vrtice dentro do tringulo

uma rvore .

G(Tp )

de uma triangularizao

avb,

mais distante de desse vrtice.

Prova.

Os arcos do grafo dual so justamente as

ab

do que

Portanto,

v , contrariando a escolha vv uma diagonal.

diagonais adicionadas na triangularizao. Como o polgono simples, uma diagonal de

divide o po-

Teorema
de

3.3

. (Triangularizao)

Todo polgono

lgono em dois componentes, portanto a remoo de um arco divide o grafo dual em dois componentes. Assim,

vrtices pode ser particionado em tringulos

pela adio de (zero ou mais) diagonais.

G(Tp )

uma rvore.

Prova.
mente.

Com esse arsenal de resultados disposio, podeSe

A prova feita por induo.

n = 3,

mos facilmente provar o Teorema das Duas Orelhas de Meisters de 1975[5] e concluir a seo com a prova da

o polgono um tringulo, e o teorema vale trivial-

d = ab uma diagonal de P , que existe, segundo o Lema 3.2. A diagonal divide o polgono em dois subpolgonos P1 e P2 no
Seja Seja

n 4.

3-colorao.

Dizemos que trs vrtices consecutiuma

vos

a, b, c formam

Alm disso, chamamos

vazios. Como o nmero de vrtices de cada um dos subpolgonos menor que o nmero de vrtices de que

orelha se ac uma diagonal. b de ponta da orelha. Duas

orelhas so disjuntas se a interseco do interior de seus tringulos for vazia.

P,

aplicamos a induo nos dois subpolgonos e temos

admite uma triangularizao. 3.4

Lema
de

Toda triangularizao de um polgono

vrtices usa

n3

diagonais e consiste de

P n2

Teorema 3.6. (Teorema das duas orelhas de Meisters) Todo polgono com n 4 vrtices possui pelo
menos duas orelhas disjuntas.

tringulos.

Prova.

Uma folha no grafo dual corresponde a Pelo resultado do Lema

Prova.

uma orelha.

3.4

a rvore

Faremos a prova por induo. Para

as duas armaes valem trivialmente. Seja Toda diagonal

n=3 n 4.

possui pelo menos dois ns, e toda rvore de dois ou mais ns possui pelo menos duas folhas.

d divide o polgono em dois subpolgonos P1 e P2 . Seja n1 e n2 o nmero de vrtices de P1 e P2 , respectivamente. Temos que n1 + n2 = n + 2
pois os vrtices da diagonal so contados duas vezes, pois pertencem aos dois subpolgonos. temos (n1 3) + (n2 3) + 1 = n 3 (n1 2) + (n2 2) = n 2 tringulos. Aplicando a hiptese de induo para os subpolgonos, diagonais e

Teorema Prova.
tices.

3.7

. (3-colorao)

O grafo da triangulari-

zao de um polgono possui uma

3-colorao

Provamos por induo no nmero de vr-

Um tringulo pode ser trivialmente colorido

3 Grafo

conexo acclico

91

com 3 cores. Seja sui uma orelha remova vrtice

n 4. Pelo Teorema 3.6, P abc. Remova a orelha de P , ou

posseja,

removermos uma orelha mudar so os vrtices

E2 = (v1 , v2 , v3 )
e

cos vrtices cujo estado de

ponta da orelha

os nipodem

b,

e aplique a hiptese de induo para o

v1
v1

v3 .

Vamos analisar cui-

polgono de

n 1 vrtices resultante. Colocamos o b de volta e atribumos a ele a cor que no foi atribuda nem para a nem para c.
4. Algoritmos

dadosamente essa situao a seguir.

E2
v0

A seguir, apresentamos algoritmos para triangularizao de polgonos. roda em O primeiro, e mais intuitivo,

v2

O(n4 ).

Podemos facilmente usar o Teo-

rema das duas orelhas de Meister's para reduzir a complexidade da triangularizao para teriormente para

O(n3 ), e posv3

O(n ).

Por ltimo, iremos estudar

o conceito de monotonicidade e apresentar um algoritmo para dividir um polgono em subpolgonos montonos em

O(n log n),

resultado fundamental para Analisaremos mais a

v4

obteno de um algoritmo de triangularizao de polgonos em tempo

O(n log n).

v5

fundo apenas os dois ltimos.

Figura 6.

Removendo a orelha

E2 = (v1 , v2 , v3 ).

vrtice

v1

deixa de ser uma ponta da orelha

4.1

Triangularizao por adio de diagonais


Veja a gura vrtice

6.

O status de ponta da orelha do no altera os vrtices

v4

depende apenas da diagonal

O primeiro algoritmo segue a prova da existncia de uma triangularizao (Teorema

moo da orelha so os vrtices

E2
e

v3 v5 . v3

A reou

v5 .

3.3):

Achamos uma

Assim, os nicos vrtices cujo status pode mudar,

diagonal qualquer, dividimos o polgono em duas partes, e resolvemos recursivamente para cada uma das partes.

v1

v3 .

Portanto, ao removermos

uma orelha, basta atualizarmos o status de dois vrtices, com um nmero constante de operaes. Assim, temos o seguinte algoritmo para triangularizao de um polgono:

n 2 Temos 2 = O(n ) candidatos a diagonais, e para cada uma delas, gastamos O(n) para vericarmos
se uma diagonal vlida. Faremos isso, segundo o Teorema

3.4,

para

n3

diagonais, o que nos leva a

concluir que o algoritmo roda em

O(n4 ).

Triangularizao(P )
1 2

D {}

Conjunto de diagonais adicionadas

Inicialize o status de ponta de orelha

4.2

Triangularizao por remoo de orelhas

3 4 5 6 7 8 9 10

enquanto n > 3 faa

para cada vrtice em

Podemos, sem diculdade, melhorar a complexidade do algoritmo da seo anterior usando o Teorema das Duas Orelhas de Meisters (Teorema Temos exatamente tais diagonais:

Localize uma ponta de uma orelha

v2

3.6).

Sabeserem Alm

mos que existe uma diagonal que separa uma orelha.

v1 v3 ao diagonais D Remova v2 de P
Adicione vrtices

conjunto de

n = O(n) candidatas para (vi , vi+2 ) para i = 0, ..., n 1.

Atualize o status de orelha dos

v1

v3

disso, sempre dividimos o polgono em um tringulo (a orelha) e um polgono de mos uma complexidade de de orelhas.

n1 vrtices, precisando O(n3 ).

devolva D
Monotonizao

chamar a recurso apenas para o ltimo. Assim, tePodemos explorar ainda mais a idia da remoo Toda vez que adicionamos uma diagonal e removemos uma orelha do polgono, podemos notar que o polgono no muda muito. De fato, ao

4.3

Nessa seo, vamos precisar de algumas denies. O conceito de monotonicidade foi introduzido por Lee e Preparata, 1977 [2].

92

Eixo Y

seguir: 1. Vrtice de Incio - Os dois vrtices adjacentes esto abaixo de menor que
L

e o ngulo interno no vrtice

. v
e o ngulo interno no vrtice

2. Vrtice de Quebra - Os dois vrtices adjacentes esto abaixo de maior que

. v
e o ngulo interno no vrtice

3. Vrtice de Trmino - Os dois vrtices adjacentes esto acima de menor que

. v
e o ngulo interno no vrtice

4. Vrtice de Juno - Os dois vrtices adjacentes esto acima de


Figura 7. Um polgono y-montono

maior que

5. Vrtice Regular - Vrtice que no um vrtice

Denio ( Monotonicidade):
toda linha com

Um polgono

de incio, quebra, trmino ou juno. Os vrtices de quebra e juno so fontes de nomonotonicidade local. Vamos enunciar isso formalmente em um lema:

dito montono em relao a uma linha

se, para

perpendicular a

l,

a interseco de

conexa, ou seja, um ponto, um segmento interessados em polgonos monto-

de reta, ou vazio. Estaremos nos em relao ao eixo

Lema

4.1

Um polgono

y-montono

se no pos-

montonos.

y,

que chamaremos de

y-

sui nenhum vrtice de quebra, e nenhum vrtice de juno. O Lema

Uma propriedade interessante desses

polgonos que se andarmos do vrtice mais alto (com maior coordenada (menor coordenada

4.1 implica que para monotonizarmos um

y)

para o vrtice mais baixo

polgono, basta nos livrarmos dos vrtices de quebra e de juno. Para nos livrarmos dos vrtices de quebra e de juno, vamos utilizar um move um linha horizontal (

y ),

pela fronteira esquerda (ou

direita), sempre estaremos andando para baixo, ou horizontalmente, mas nunca para cima. Nossa estratgia para triangularizar um polgono ser primeiro divid-lo em polgonos menores,

y-montonos

plane sweep. sweep line )

O algoritmo que vai var-

e de-

rendo o plano, de cima para baixo, parando em eventos importantes. No nosso caso, esses eventos ocorrem quando a varredura encontrar um vrtice novo. Podemos pr-processar o nosso polgono e construir uma la ordenada

pois triangularizar cada um desses polgonos. Vamos analisar e classicar os tipos de vrtices de um polgono qualquer em 5 categorias, como visto na Figura

8.

Q onde os pontos sejam ordenados pela coy . O ponto de maior coordenada y ser o y
ser o ltimo evento.

primeiro evento, e, analogamente, o ponto de menor coordenada vrtice Seja Vamos ver o que fazer quando encontramos um

vi

de quebra. Evidentemente, queremos adi-

cionar uma diagonal ligando

vi

um vrtice acima.

ej

a aresta imediatamente esquerda de

ek

line.

a aresta imediatamente direita de

vi
e

na

sweep

vi

Podemos conectar o vrtice de quebra com o

vrtice mais prximo, que est entre houver tal vrtice, podemos ligar extremidade de

ej

ek .

Se no

vi

com o ponto da

ej

ou

ek .

Denimos o

ajudante(ej )
ej

como sendo o vrtice mais abaixo acima da sweep line, tal que o segmento horizontal do vrtice
Figura 8. Tipos de vrtices de um polgono (Fonte: Com-

est dentro do polgono. Agora, temos uma intuio de como lidar com os vrtices de juno, anal, eles so bem parecidos com os vrtices de quebra, mas ao contrrio. Quando

putational Geometry: Algorithms and Applications [1])


Um vrtice

pertence a um dos tipos denidos a

93

chegamos em um vrtice momento,

vi

de juno, ainda no sa-

Removemos

ei1

de

pois a aresta para de inter-

bemos com qual vrtice devemos lig-lo, mas, nesse

sectar a sweep line, e procuramos em aresta diretamente esquerda de de

por

ej ,

vi

se torna o ajudante de

ej .

Queremos

vi .

Se o ajudante

ento achar o vrtice mais alto abaixo de teja entre as arestas direita de de

ej

vi , que esek , as arestas esquerda e vi como ajudante

ej

for novamente um vrtice de juno, adicionapara

mos outra diagonal entre eles. Por m, trocamos o

vi ,

respectivamente. Esse vrtice ser jus-

ajudante(ej )

vi . vi
ser um vr-

tamente o vrtice que vai substituir

Agora falta apenas tratar o caso de o polgono camos se letamos

ej .

Ento, sempre que substituirmos o ajudante

tice regular. Diferenciamos dois casos. No primeiro,

de uma aresta e o ajudante anterior for um vrtice de juno, adicionamos uma diagonal. possvel que o ajudante no seja substtuido e nesse caso, ligamos

P est direita de vi . Nesse caso, veriajudante(ei1 ) um vrtice de juno e


de

adicionamos uma diagonal caso ele seja. Depois de-

vi

com a extremidade inferior de

ej .
Assim, pode-

ei1

T,

e inserimos

ei

com

vi

como seu

Para o algoritmo, precisamos achar rapidamente a aresta esquerda de um vrtice. mos construir uma rvore de busca binria dinmica que guarda, a cada evento, as arestas que cruzam a

ajudante. Se o polgono est esquerda de curamos em de

vi ,

pro-

pela aresta diretamente esquerda

vi .

Como esperado, vericamos se

ajudante(ej )
para

sweep line,

um vrtice de juno e adicionamos uma diagonal se for. Por ltimo, mudamos

ordenadamente (nas folhas, da esquerda

ajudante(ej )

vi .

para direita, por exemplo). Com cada aresta, guardamos tambm seu ajudante. A estrutura da rvore, assim como os ajudantes, mudam conforme a sweep line se desloca verticalmente no plano, novas arestas comeam a intersectar a linha, e arestas deixam de intersectar essa linha. Podemos esboar um algoritmo que ser explicado com um pouco mais de detalhe.

Assim, sempre adicionamos uma diagonal quando encontramos um vrtice de quebra, e sempre que atualizamos o ajudante de uma aresta cujo ajudante anterior era um vrtice de juno. O algoritmo descrito adiciona um conjunto de diagonais que no se intersectam e particionam o polgono montonos.

em subpolgonos

Monotonizao(P )
1 2 3 4 5 6 Construa uma la de prioridade Q com os vrtices de

5.

Concluso

P,

Nesses primeiros meses da Iniciao Cientca, o estudo foi bastante focado na construo de uma base terica slida no campo de Geometria Computacional. Aps estudar o problema da Galeria de Arte, Depois de concluir comeamos a estudar e implementar algoritmos de

usando sua coordenada y.

enquanto Q no est vazia faa


Remova o vrtice prioridade de

T {}

rvore de Busca comea vazia

vi

de maior

triangularizao de polgonos.

esse tpico, pretendemos extender o conceito de triangularizao de polgonos e estudar o problema de triangularizao de pontos no plano, ou seja, queremos encontrar uma subdiviso do interior do fecho convexo do conjunto de pontos por segmentos que no se interceptam de forma que todas as regies formadas sejam triangulares.

Use o procedimento adequado, dependendo do seu tipo. Vamos ver em detalhe o que fazer para cada tipo

de vrtice. Se

vi

for um vrtice de incio, basta adicionar

ei

e atribuir

vi

ao ajudante de

ei .

Se

vi vi

for um era um

vrtice de trmino precisamos vericar se o ajudante da aresta

ei1

com extremidade inferior

Referncias

vrtice de juno, e adicionar uma diagonal ligando

vi

ao vrtice de juno, se for o caso. Por m, remo-

vemos a aresta de Se

T. vi . Inserimos ajudante(ej ). Depois, diej agora vi , inserimos ei

vi

for um vrtice de quebra, precisamos achar

a aresta

ej

diretamente esquerda de

a diagonal ligando em

vi

ao

zemos que o ajudante de

sendo

vi

seu ajudante.

Se cente

vi

for um vrtice de juno, primeiro precisaera um vrtice de juno. Nesse caso, adi-

mos vericar se o ajudante anterior da aresta adja-

ei1

cionamos uma diagonal de

vi

para

ajudante(ei1 ).

[1] M. de Berg, M. van Kreveld, M. Overmars, and O. Schwarzkopf, Computational Geometry: Algorithms and Applications, Springer, New York, 2005. [2] Joseph O'Rourke, Computational Geometry in C, Cambridge University Press, 1998. [3] Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Cliord Stein, Introduction to Algorithms, MIT Press, 2001. [4] S. Fisk, A short proof of Chvtal's watchmen theorem, Journal of Combinatorial Theory B (1978). [5] G. H. Meisters, Polygons have ears, American Mathematical Monthly (1975).

94