Presentation is loading. Please wait.

Presentation is loading. Please wait.

Computational Geometry: Methods and Applications, Jianer Chen

Similar presentations


Presentation on theme: "Computational Geometry: Methods and Applications, Jianer Chen"— Presentation transcript:

1 Computational Geometry: Methods and Applications, Jianer Chen
Presek gomile linija Matematički fakultet, Beograd 2011 Autori: Ognjen Kocić, Aleksandra Simić, Sanja Mijalković, Tamara Savović Literatura: Computational Geometry: Methods and Applications, Jianer Chen

2 Za pronalaženje preseka gomile linija predstavićemo dva algoritma:
Za pronalaženje preseka gomile linija predstavićemo dva algoritma: *algoritam složenosti O(n²) *algoritam složenosti O(nlogn)

3 -Prvi algoritam je jednostavan za implementaciju, poredi svaku duž sa svakom i određuje da li postoje tačke preseka. -Pošto govorimo u kontekstu ravni, dve proizvoljne duzi u ravni se mogu nalaziti u tacno jednom od tri medjusobna polozaja: 1. Da nemaju dodirnih tacaka (ne seku se) 2. Imaju jednu tacku preseka 3. Da se preklapaju (delom ili u celini)

4 -Ukoliko postoji presečna tačka, nas program će izbaciti njene koordinate i obeležiti je crvenom bojom:

5 -Drugi algoritam je složeniji, koristi binarno stablo pretrage tzv
-Drugi algoritam je složeniji, koristi binarno stablo pretrage tzv. crveno-crno drvo koje je balansirano. Koristi tehniku poznatu kao “plane- sweeping” (čišćenje ravni).

6 Plane sweeping algoritam
-Ideja je da koristimo imaginarnu vertikalnu pravu L kojom ćemo “prevući” ravan gde se duži nalaze i tako naći preseke. -Tačke koje su bitne su početak i kraj duži, kao i presečne tačke. Kada prava L dođe do “leve” (manja x koordinata) krajnje tačke duži tek od tada postoji presek prave sa ovom duži i tek od tada postoji šansa da se ona seče sa ostalim dužima koje seče prava L u tom trenutku. Kada stigne do presečne nju detektuje, dok kada stigne do “desne” krajnje tačke svi preseci te duži su nadjeni i nema smisla tražiti dalje preseke za tu duž.

7 Recimo sada da u cilju ilustracije prava L seče samo neke dve duži a i b. Tačka sa najmanjom y koordinatom, na primer, prave a je jedna od njenih krajnjih tacaka i neka je baš to “desni” kraj. Ukoliko tačka prave b sa najvećom y koordinatom ima manju y koordinatu od “desnog” kraja prave a onda ne može da dodje do preseka. Sada pogledajmo aplet:

8 Algoritam je sledeci: 1)Inicijalizuj Event (dodaj sve krajnje tacke duzi) 2)Inicijalizuj Status da bude prazan 3)Dok Event nije prazan vrsi obradu minimalne tacke iz eventa, neka je to p: - Ako je p leva tacka duzi S dodaj S u Status. Neka su Si i Sj susedne duzi duzi S u Statusu. Ako p pripada Si ili Sj vrati p. Ako se seku Si i S u tacki p1, pri cemu je p1.x >= p.x ubaci p1 u Event. Ako se Sj I S seku u tacki p2 pri cemu je p2.x >= p.x ubaci p2 u Event. - Ako je p desna tacka duzi S, proveri da li p pripada duzima Si ili SJ (susedne duzi S u Statusu). Ako pripada vrati p. Obrisi S iz statusa. Ako se Si I Sj seku u tacki p1 tako da je p1.x > p.x ubaci p1 u Event. - Ako nije ni leva ni desna p je presecna tacka duzi. Neka se u p seku Si I Sj. Ako je y koordinata desnog kraja duzi Si manja od y koordinate desnog kraja duzi Sj, zameni mesta duzima Si i Sj u Statusu. Neka je Sh prethodnik od Sj i Sk sledbenik od Si u Statusu. Ako se Sh i Sj seku u p1 i p1.x > p.x ubaci p1 u Event. Ako se Sk i Si seku u p2 i p2.x > p.x ubaci p2 u Event.

9 Primetimo za Event da se vrši sortiranje početnih tačaka po x koordinati neopadajuće, kao I da se vrše ubacivanje u i brisanje minimuma iz Event-a. Mogu se koristiti strukture podataka koje omogućavaju da se ove operacije izvršavaju efikasno- hip ili balansirano binarno stablo pretrage. Što se tiče Statusa, potrebno nam je efikasno brisanje, dodavanje i nalaženje duži u njemu, te je samo balansirano binarno drvo pogodna struktura podataka (nalaženje isključuje hip).

10 Za implementaciju mi smo i za Event I za Status koristili crno-crveno drvo. Balansiranje kod ovog drveta se postiže bojenjem čvorova u crnu ili crvenu boju. Koren stabla je uvek crn. Novi cvor koji se dodaje inicijalno uvek ima crvenu boju. Invarijanta je da je broj crnih cvorova od listova do korena jednak kao i da crveni otac ne moze imati crvenog sina.

11 Primetimo takođe da balans nije idealan, jer se između dva crna cvora u jednom podstablu može nalaziti crveni cvor a u drugom ne. Međutim, dokazano je da je visina stabla logaritamska, te su operacije umetanja, brisanja i traženja elemenata stabla O(logn). Kako se izvršavaju ove operacije pogledajmo slikovito na: edblack.html Cvor Event-a treba da sadrži informaciju da li je tačka “leva”, “desna” ili presečna tačka duži. Cvor Status-a treba da sadži duži sotirane po y koordinati presečne tačke sa pravom L koju možemo da menjamo u O(1). Da ne bismo pravili dve različite strukture čvora mi smo koristili sledeću:

12 typedef struct cvor_rb {
Tacka kljuc; Duz *key, *presek1, *presek2; struct cvor_rb *l, *d, *g; int boja; } cvor;

13 Razmotrimo na kraju slozenost algoritma:
Na početku 2n krajnjih tačaka stavljamo u Event, a tokom izvršavanja programa stavićemo I k presečnih tačaka u event, pa je složenost:(2n+k)*log(2n+k)= O((n+k)*log(n+k)) Tokom izvršavanja programa n duži će doći u Status I biti obrisano odatle, što daje složenost: n*logn = O(nlogn). Uzima se da je složenost algoritma O(nlogn) Napomena:Ukoliko je k reda n2, tada složenost algoritma ocigledno složenost algoritma postaje O(n2logn).


Download ppt "Computational Geometry: Methods and Applications, Jianer Chen"

Similar presentations


Ads by Google