You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Platformă de e-learning și curriculă e-content<br />
pentru învățământul superior tehnic<br />
Geometrie computationala<br />
7. <strong>Poligoane</strong> <strong>monotone</strong>
<strong>Poligoane</strong> <strong>monotone</strong>: definitie<br />
• Un lant poligonal este strict monoton in<br />
raport cu o dreapta L daca orice dreapta L’<br />
perpendiculara pe L intersecteaza lantul<br />
in cel mult un punct.<br />
▫ non-strict intersectia poate fi si un<br />
segment<br />
▫ Parcurgerea varfurilor lantului proiectata<br />
pe L este un sir monoton<br />
• Poligon este monoton in raport cu o<br />
dreapta L daca poate fi descompus in<br />
doua lanturi <strong>monotone</strong> in raport cu L care<br />
au un varf comun in capete.<br />
• Un poligon monoton in raport cu axa Ox<br />
sau Oy se numeste x/y-monoton.<br />
L<br />
L’
Proprietatile poligoanelor <strong>monotone</strong><br />
Definitie: un varf v este un punct de intoarcere interior<br />
daca si numai daca este un varf concav ale carui varfuri<br />
adiacente sunt deasupra, dedesubt, sau pe dreapta L.<br />
v<br />
Teorema: Daca un poligon P nu are puncte de intoarcere<br />
interioare in raport cu dreapta L, atunci este monoton in<br />
raport cu L.<br />
Demonstratie: se partitioneaza P in doua lanturi ce leaga<br />
varfurile superioare si inferioare. Se presupune ca unul<br />
din ele nu este monoton in raport cu L. Atunci P trebuie<br />
sa contina un punct de intoarcere interior deasupra sau<br />
dedesubt.<br />
L
Triangularea unui poligon y-monoton (1)<br />
• Se foloseste o linie de cautare orizontala care<br />
baleiaza pe axa verticala<br />
• Se efectueaza o triangulare de tip greedy a<br />
tuturor punctelor deasupra liniei de cautare, si<br />
apoi se elimina acea regiune.<br />
▫ Intr-un anumit varf v, regiunea superioara neexplorata<br />
are intotdeauna o structura simpla: doua lanturi y<strong>monotone</strong><br />
(la stanga si la dreapta), fiecare continand<br />
cel putin o muchie. Daca un lant contine doua sau mai<br />
multe muchii, acesta este concav, iar celalalt lant<br />
contine o singura muchie a carui punct final inferior<br />
nu a fost inca explorat.<br />
• Fiecare diagonala este adaugata in O(1).
Triangularea unui poligon y-monoton (2)<br />
• Se continua cautarea atat<br />
timp cat un lant contine o<br />
singura muchie, iar cealalta<br />
muchie este concava.<br />
• La aparitia unei muchii<br />
convexe in lantul concav (sau<br />
o a doua muchie apare in<br />
celalalt lant), se trianguleaza<br />
cat mai mult posibil folosind<br />
un model de evantai.<br />
• Complexitate in timp: O(k)<br />
▫ k = nr varfuri poligon.<br />
lantul stang lantul drept<br />
varf inferior<br />
varf superior
Triangularea unui poligon y-monoton (3)<br />
• Exemplu
Triangularea unui poligon y-monoton (4)<br />
• Operatii pe stivele cu lanturi
Clasificarea varfurilor unui<br />
poligon monoton<br />
• start (respectiv final/end): un varf<br />
al carui unghi interior este mai mic<br />
decat , iar cele doua varfuri<br />
invecinate se afla dedesubt<br />
(respectiv deasupra) sa.<br />
• despartire/split (respectiv<br />
unire/merge): un varf al carui<br />
unghi interior este mai mare decat ,<br />
iar cele doua varfuri invecinate si<br />
afla dedesubt (respectiv deasupra)<br />
sa.<br />
• Toate celelalte varfuri sunt<br />
normale/regular.<br />
split<br />
start<br />
merge<br />
end<br />
regular
Proprietati ale poligoanelor y-<strong>monotone</strong><br />
Teorema: Un poligon ce nu contine<br />
varfuri de despartire sau de unire<br />
este y-monoton.<br />
Demonstratie: Daca exista doar<br />
varfuri de start, final sau normale,<br />
poligonul este format din doua<br />
lanturi y-<strong>monotone</strong>.<br />
• Pentru a partitiona un poligon in<br />
componente <strong>monotone</strong> se elimina<br />
varfurile de despartire/unire si se<br />
adauga diagonale verticale din<br />
respectivul varf.<br />
• Aceste diagonale nu trebuie sa se<br />
intersecteze!<br />
split<br />
start<br />
merge<br />
end<br />
regular