Computational Geometry: Methods and Applications, Jianer Chen

Slides:



Advertisements
Similar presentations
Bog nas voli i ima povjerenja u nas. Kako je divno, Bože, što nas voliš unatoč svih naših grijeha i propusta. Doista, ne znamo čime smo zaslužili toliku.
Advertisements

1 Predlozi tema za master radove – 2010/11. Cvetana Krstev.
Prof: doc.dr. Samir Lemeš student: Samir Hrnjić. System restore je komponenta Microsoftovih operativnih sistema Windows Serveri ne podržavaju opciju System.
TENSES: PAST SIMPLE and PAST CONTINUOUS Prošla vremena: forma i upotreba Past simple ili obično prošlo vreme gradi se tako što se na infinitiv glagola.
Being in Bamberg allowed us to meet incredible people from Europe and the world. Studying with them opened our eyes to the many.
KAKO IZRADITI IGRU: Izrežite tabele, sličice, kartice, žetone. Ostavite 1mm bijelog ruba oko okvira. Nalijepite ih na karton u boji (hamer), jako lijepo.
Zadatak 2. a) Kreirajmo tabelu TRANSAKCIJE koja će pamtiti sve transakcije obavljene na računima korisnika CREATE TABLE `test`.`transakcije` ( `id` INTEGER.
ASPECT RATIO PAŠIĆ ANELA.
Uvod u programiranje - matematika – VI predavanje
Petlje WHILE – WEND.
RP3/predavanje08 Ugniježdeni tipovi Iznimke 10/11/2018
Java Hello world !.
Algoritamske/programske strukture
Algoritmi raspoređivanja
B+ stablo Ramakrishnan Raghu, Gehrke Johannes - Database Management Systems (2000)(2nd ed.)
KONTROLE.
Grafičke kartice.
Programiranje - Blokovi naredbi i logički tipovi –
Present Continuous Tense
CheckBox RadioButton RadioGroup
Naredbe ciklusa.
IF NAREDBA – naredba grananja
Petlje FOR - NEXT.
Konveksni omotač (red O(n log (n)))
Komponente izbora i kontejnerske komponente
KREIRANJE OBJEKATA.
Video zapis.
Uvod u programiranje - matematika – X predavanje
RAZGRANATA STRUKTURA Zadaci i rešenja
Reference ćelije i opsega
LABORATORIJSKA VEŽBA VEŽBA 4
14 UNUTRAŠNJE I ANONIMNE KLASE
Podešavanje osobina stranica
Hyper Text Markup Language
Klasa grafik.
Struktura MAC adrese i Ethernet okvira
Regional Center for Talented Youth Belgrade II
M-datoteke.
Element form Milena Kostadinović.
InputBox i naredba IF.
DISKRETNI DINAMIČKI SUSTAVI –LOGISTIČKI MODEL -KAOS-
Fizičke strukture podataka i pristupne metode: indeksiranje
Organizacija invertovano-indeksnih datoteka
Internet FTP usluga.
PROGRAMSKI JEZIK PASCAL
Articles.
MATEMATIČKI FAKULTET, UNIVERZITET U BEOGRADU
ELEKTRONIČKA POŠTA ( ) OTVARANJE RAČUNA.
Lazarus okruženje TIPOVI UNIT-a
6. Apstraktne tipovi podatka
Osnovni simboli jezika Pascal
Sistemi zasnovani na skaniranju teksta
Do While ... Loop struktura
Home - Bullets & Numbering -
Klasifikacija i stablo odlučivanja uz r
Strukture podataka i algoritmi 5. VRIJEME IZVRŠAVANJA ALGORITMA
Skup instrukcija procesora
Fakultet elektrotehnike i računarstva
Naredbe u php-u.
Programiranje - Naredbe za kontrolu toka programa – 1. dio
Programiranje - Naredbe za kontrolu toka programa – 3. dio
Programski jezik C++ - Vježbe - 1. dio
LimeSurvey Uvjetni prikaz pitanja Internetska istraživanja
10th International Conference on Live Maintenance
Ponavljanje Pisana provjera
INTERPOLACIJA PO DIJELOVIMA POLINOMIMA
Vježbenica 2: struktura grananja – 2.dio
Zadaci U memoriji oblikovati linearnu listu (pomoću pokazivača). U pojedini čvor liste upisati: - matični broj studenta (int) - ime i prezime (30+1 znakova)
Programski jezik C++ - Vježbe - 2. dio
Iracionalni brojevi
Presentation transcript:

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: http://www.cs.uc.edu/~franco/C321/html/RedBlack/redblack.html, Computational Geometry: Methods and Applications, Jianer Chen

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)

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

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

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

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ž.

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: http://www.lems.brown.edu/~wq/projects/cs252.html

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.

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

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.

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: http://www.cs.uc.edu/~franco/C321/html/RedBlack/r 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:

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

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