konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/old/2006-2007-racgeom/material/... ·...

117
Konveksna lupina v ravnini Lekcija 1 Sergio Cabello [email protected] FMF Univerza v Ljubljani Sergio Cabello RC – Konveksnost - 2d

Upload: phungdung

Post on 06-Apr-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Konveksna lupina v ravniniLekcija 1

Sergio [email protected]

FMFUniverza v Ljubljani

Sergio Cabello RC – Konveksnost - 2d

Page 2: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Vsebina

1. Konveksnost in konveksna lupina.

2. Racunanje konveksne lupine tock v ravnini.

3. Algoritme:• Zavijanje darila (Gift wrapping).• Grahamov algoritem.• Prirastni algoritem (Incremental algorithm).

4. Spodnja meja za casovno zahtevnost.

5. Normal diagram.

Sergio Cabello RC – Konveksnost - 2d

Page 3: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Konveksnost

Definicija

Mnozica C ⊂ Rd je konveksna, ce je za poljubni (p, q) ∈ C 2 tudi celadaljica pq v C .

pp

qq

Kaksen je opis daljice pq po kordinatah, kot mnozica?

r ∈ Rd | r = λp + (1− λ)q, 0 ≤ λ ≤ 1.

Sergio Cabello RC – Konveksnost - 2d

Page 4: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Konveksna lupina

Definicija

Naj bo S ⊂ Rd . Konveksna lupina (Convex hull) CH(S) je presekkonveksnih mnozic, ki vsebujejo S . To je

CH(S) =⋂

T ⊆ Rd

T konveksnaS ⊆ T

T .

I Ali je konveksna lupina vedno konveksna?Ja, ker je presek konveksnih mnozic vedno konveksen. (VAJA)

I Konveksna lupina je najmanjsa konveksna mnozica, ki vsebuje S .

Sergio Cabello RC – Konveksnost - 2d

Page 5: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Primer konveksne lupine

Sergio Cabello RC – Konveksnost - 2d

Page 6: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Druga mozna definicija

Definicija

Naj bo S ⊂ Rd .Konveksna lupina CH(S) je mnozica tock, ki so konveksna vsota tockod S . To je

CH(S) = r ∈ Rd | x =n∑

i=1

λi si ,n∑

i=1

λi = 1, si ∈ S , λi ≥ 0.

IzrekObe definiciji sta ekivalentni.

Izreka ne bomo dokazili ampak ga mora znate.

Sergio Cabello RC – Konveksnost - 2d

Page 7: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Caratheodoryjev izrek

Izrek (Caratheodory)

Naj bo S ⊂ Rd .Konveksna lupina CH(S) je

CH(S) = r ∈ Rd | x =d+1∑i=1

λi si ,d+1∑i=1

λi = 1, si ∈ S , λi ≥ 0.

To je, v Rd samo moramo gledati konveksne vsote od d elementov.

V ravnini je CH(P) unija trikotnikov 4abc , kjer a, b, c ∈ P. Izreka ne

bomo dokazili ampak ga mora znate.

Sergio Cabello RC – Konveksnost - 2d

Page 8: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Racunanje konveksne lupine tock

Osnovni problem:

Vhod: mnozica tock P = p1, p2, . . . , pn v Rd .Izhod: konveksna lupina CH(P).

I Danes samo d = 2, to je konveksna lupina v ravnini.

I Bomo govorili o d = 3 cez nekaj tednov.

I O d > 3 bomo videli skoraj nic.

Sergio Cabello RC – Konveksnost - 2d

Page 9: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Karakterizacija konveksne lupine tock v ravnini

I Naj bo P = p1, p2, . . . , pn ⊂ R2.

I CH(P) je edinstven konveksen mnogokotnik, ki ima oglisca od Pin vsebuje P. (Dokaz: vaja.)

I CH(P) je najkrajse mnogokotnik, ki vsebuje P. (Dokaz: vaja.)Lahko razmislimo o tem kot fizikalni eksperiment

Sergio Cabello RC – Konveksnost - 2d

Page 10: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Problem racunanja konveksne lupine v ravnini

I Vhod P = p1, p2, . . . , pn ⊂ R2.

I Izhod: CH(P).

p1

p3

p5

p4

p6

p2

p7

p8

Primer problema.Vhod: p1, p2, . . . , p7.Iskamo: seznam p1, p4, p6, p8, p7.

I Kaksno strukturo zelimo za izhod?Seznam oglisc mnogokotnika CH(P) v smeri urnega kazalca.

(clockwise/counterclockwise).Boljse kot mnozica tock brez urejanja. Zakaj?

Sergio Cabello RC – Konveksnost - 2d

Page 11: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Skrajne tocke

Kaj delamo, ko so veliko tock od P na povezavi od CH(P)?

CH(P )P

Tocka p ∈ P je skrajna, ce CH(P) 6= CH(P \ p).Boljse vrniti samo skrajne tocke.

Sergio Cabello RC – Konveksnost - 2d

Page 12: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Osnovna orodja: Biti na desni

Kako vemo, ce je tock r na desni usmerjene premice −→pq?To je isto kot reci, da se niz p, q, r obrne na desno.

pr

q

D(p, q, r) =

∣∣∣∣∣∣∣∣∣1 px py

1 qx qy

1 rx ry

∣∣∣∣∣∣∣∣∣

Vaja: D(p, q, r) < 0 ce in samo ce se p, q, r obrne na desno.D(p, q, r) = 0 ce in samo ce p, q, r lezijo na premici.

V O(1) casu lahko dolocimo, ali se p, q, r obrne na desno ali na levo.

Sergio Cabello RC – Konveksnost - 2d

Page 13: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Osnovna orodja: Biti na desni

Kaj je dobro in kaj je slabo o enacbi za dolocanje.

D(p, q, r) =

∣∣∣∣∣∣1 px py

1 qx qy

1 rx ry

∣∣∣∣∣∣I Hitro, ker samo vsote in mnozenja, brez deljenj ali kotov.

I ’Overflow’, ker rabimo vecje stevile kot stevile vhoda. Lahkogibamo problem (p → (0, 0)) in dobimo manjse stevile.

I ’Tocnost racunaja’ ne drzi ce uporabljamo ’floats’ ali ’doubles’.Vcasih, (3.0/3.0 == 1.0/1.0) =FALSE.

I Moramo paziti, ko gremo od algoritma do implementacije(Tezko).

I Ko razmislimo o algoritmi, predpostavimo, da imamo tocnoracunstvo. Ko delamo na implementaciji, pazimo.

Sergio Cabello RC – Konveksnost - 2d

Page 14: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Kdaj je daljica v CH(P)?

Naj bo P ⊂ R2 in p, q ∈ P.Kdaj je usmerjena povezava −→pq v mnogokotniku CH(P)?

p

q

p

q

Natancno, ko so tocke P \ p, q na desni od usmerjene premice −→pq.

Kaj se dogaja, ce je kaksen r na premica pq?Odvisno od polozajov p, q, r .

Sergio Cabello RC – Konveksnost - 2d

Page 15: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Splosni polozaj – Brez degeneracije

I Ko so p, q, r ∈ P, ki lezijo na premici, recemo da je degeneracija.

I Ko niso degeneracij, imamo splosni polozaj.

I Ponavadi degeneracije niso problem in samo moramo paziti vec.I Metoda za delo:

1. Predpostavimo, da je P v splosnem polozaju.2. Najdemo algoritem.3. Mislimo, kaj moramo spremeniti za degeneracije.

Pomen beseda ’degeneracija’ je odvisno od problemov.Se o tem kmalu...

Sergio Cabello RC – Konveksnost - 2d

Page 16: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Pred zacetkom algoritmov

I Predpostavimo splosni polozaj in tocno racunstvo.

I Iskamo algoritem.

I Razmislimo, kaj delamo za odstranje predpostavo splosnegapolozaja.

I S tocnostjo racunanja se ukvarjamo, ko implementiramo.

VPRASANJA?

Sergio Cabello RC – Konveksnost - 2d

Page 17: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Zavijanje darila (Gift wrapping – Jarvis’ march)

I Zacnemo s iskanjem skrajne tocke q0 ∈ P.I Najnizja tocka (najmanjsi y -kordinat) je skrajna tocka.

I Od skrajne tocke qi dobimo naslednjo tocko qi+1: P mora biti nadesni od −−−→qiqi+1.

I Iscemo naslednjo oglisce s uporabljo kotov od qi .I Koncamo, ko je naslednja tocka ta, s cim smo zacneli.

q0

Sergio Cabello RC – Konveksnost - 2d

Page 18: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Zavijanje darila (Gift wrapping – Jarvis’ march)

I Zacnemo s iskanjem skrajne tocke q0 ∈ P.I Najnizja tocka (najmanjsi y -kordinat) je skrajna tocka.I Od skrajne tocke qi dobimo naslednjo tocko qi+1: P mora biti na

desni od −−−→qiqi+1.I Iscemo naslednjo oglisce s uporabljo kotov od qi .

I Koncamo, ko je naslednja tocka ta, s cim smo zacneli.

q0

q1

Sergio Cabello RC – Konveksnost - 2d

Page 19: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Zavijanje darila (Gift wrapping – Jarvis’ march)

I Zacnemo s iskanjem skrajne tocke q0 ∈ P.I Najnizja tocka (najmanjsi y -kordinat) je skrajna tocka.I Od skrajne tocke qi dobimo naslednjo tocko qi+1: P mora biti na

desni od −−−→qiqi+1.I Iscemo naslednjo oglisce s uporabljo kotov od qi .

I Koncamo, ko je naslednja tocka ta, s cim smo zacneli.

q0

q1

Sergio Cabello RC – Konveksnost - 2d

Page 20: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Zavijanje darila (Gift wrapping – Jarvis’ march)

I Zacnemo s iskanjem skrajne tocke q0 ∈ P.I Najnizja tocka (najmanjsi y -kordinat) je skrajna tocka.I Od skrajne tocke qi dobimo naslednjo tocko qi+1: P mora biti na

desni od −−−→qiqi+1.I Iscemo naslednjo oglisce s uporabljo kotov od qi .

I Koncamo, ko je naslednja tocka ta, s cim smo zacneli.

q2

q0

q1

Sergio Cabello RC – Konveksnost - 2d

Page 21: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Zavijanje darila (Gift wrapping – Jarvis’ march)

I Zacnemo s iskanjem skrajne tocke q0 ∈ P.I Najnizja tocka (najmanjsi y -kordinat) je skrajna tocka.I Od skrajne tocke qi dobimo naslednjo tocko qi+1: P mora biti na

desni od −−−→qiqi+1.I Iscemo naslednjo oglisce s uporabljo kotov od qi .

I Koncamo, ko je naslednja tocka ta, s cim smo zacneli.

q2

q0

q1

Sergio Cabello RC – Konveksnost - 2d

Page 22: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Zavijanje darila (Gift wrapping – Jarvis’ march)

I Zacnemo s iskanjem skrajne tocke q0 ∈ P.I Najnizja tocka (najmanjsi y -kordinat) je skrajna tocka.I Od skrajne tocke qi dobimo naslednjo tocko qi+1: P mora biti na

desni od −−−→qiqi+1.I Iscemo naslednjo oglisce s uporabljo kotov od qi .

I Koncamo, ko je naslednja tocka ta, s cim smo zacneli.

q3

q2

q0

q1

Sergio Cabello RC – Konveksnost - 2d

Page 23: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Zavijanje darila (Gift wrapping – Jarvis’ march)

I Zacnemo s iskanjem skrajne tocke q0 ∈ P.I Najnizja tocka (najmanjsi y -kordinat) je skrajna tocka.I Od skrajne tocke qi dobimo naslednjo tocko qi+1: P mora biti na

desni od −−−→qiqi+1.I Iscemo naslednjo oglisce s uporabljo kotov od qi .I Koncamo, ko je naslednja tocka ta, s cim smo zacneli.

q4

q3

q2

q0 = q5

q1

Sergio Cabello RC – Konveksnost - 2d

Page 24: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Zavijanje darila

Algorithm Gift-wrappingInput: Mnozica tock POutput: Seznam ogliscza CH(P)1. Najdemo najnizjo tocko q0 od P;2. i ← 0;3. repeat4. i ← i + 1;5. qi je tock nacin, da obrni qi−1, qi , q na desno za vsak q ∈ P;6. until qi = q0

7. return q0, q1, . . . , qi−1;

Sergio Cabello RC – Konveksnost - 2d

Page 25: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Zavijanje darila – Applet

http://www.cs.princeton.edu/~ah/alg_anim/version1/JarvisMarch.htmlTocke lahko gibamo.

Tudi http://quercus.iit.cnr.it/~javacg/CGApplet.html

Sergio Cabello RC – Konveksnost - 2d

Page 26: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Zavijanje darila

I Koliko casa uporablja algoritem zavijanja darila?

I Za vsako oglisce od CH(P) uporabljamo O(n) cas.

I Casovno zahtevnost je O(n · h), kjer je h stevila tock v CH(P).

I Algoritem je primer ’output-sensitive’ algoritma.

I Algoritem je ’output-sensitive’, ko ima casovno zahtevnostodvisno od tega, kakor je izhod.

I Primer vhoda, s cim bo uporabil algoritem Θ(n2) cas?

Sergio Cabello RC – Konveksnost - 2d

Page 27: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Zavijanje darila – Splosni polozaj

Kje lahko imamo probleme?Veliko tock lahko je kandidatinje ali na premici.

Algorithm Gift-wrapping1. Najdemo najnizjo tocko q0 od P;2. i ← 0;3. repeat4. i ← i + 1;5. qi je tock nacin, da se qi−1, qi , q obrne na desno za vsak

q ∈ P;6. until qi = q0

7. return q0, q1, . . . , qi−1;

Sergio Cabello RC – Konveksnost - 2d

Page 28: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Zavijanje darila – S degeneracijami

Ce so veliko najnjzje tock,zacnemo s tem, ki je boljna levo.

Za vsak korak uporabljamonajoddaljenejse tocko.

Sergio Cabello RC – Konveksnost - 2d

Page 29: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Zavijanje darila – Implementacija

I Kako najdemo, kateri tock je naslednji?

I Racunanje kotnikov je slaba opcija: dolgi cas in ni tocne.

I Lahko uporabljamo orodjo ’Biti na desni’ (Najboljsa opcija.)

Sergio Cabello RC – Konveksnost - 2d

Page 30: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Zavijanje darila – Implementacija

I Ce ’biti na desni’ pravilno dela, algoritem dela v redo.I Ce ne dela tocno (floats), ali bo q0 = qi zaenkrat? Mogoce ne.I Lahko dobimo neskoncen loop!!!I Algoritem ni krepak.

q4

q3

q2

q0

q1 q5

Ce uporabljamo ’floats’, lahkodobimo, da obrni q1, q5, q0 nalevo ali da so na premici.

Sergio Cabello RC – Konveksnost - 2d

Page 31: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Zdaj bomo videli drugi algoritem.

Kaksna vprasanja do tukaj?

Sergio Cabello RC – Konveksnost - 2d

Page 32: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Grahamov algoritem - Graham’s scan

I Iscemo skrajno tocko p∗ ∈ P.I Urejamo P \ p∗ po kotu od p∗ in jih povezamo v smeri urnega

kazalca, da bi dobili mnogokotnik M.I Hodimo po M, in ko imamo levi zasuk p, q, r , brisemo srednjo

tocko q iz M in se nadaljujemo od novega kota pri p.I Koncamo, ko pridemo nazaj v p∗.

p∗

Sergio Cabello RC – Konveksnost - 2d

Page 33: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Grahamov algoritem - Graham’s scan

I Iscemo skrajno tocko p∗ ∈ P.I Urejamo P \ p∗ po kotu od p∗ in jih povezamo v smeri urnega

kazalca, da bi dobili mnogokotnik M.I Hodimo po M, in ko imamo levi zasuk p, q, r , brisemo srednjo

tocko q iz M in se nadaljujemo od novega kota pri p.I Koncamo, ko pridemo nazaj v p∗.

p∗

Sergio Cabello RC – Konveksnost - 2d

Page 34: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Grahamov algoritem - Graham’s scan

I Iscemo skrajno tocko p∗ ∈ P.I Urejamo P \ p∗ po kotu od p∗ in jih povezamo v smeri urnega

kazalca, da bi dobili mnogokotnik M.I Hodimo po M, in ko imamo levi zasuk p, q, r , brisemo srednjo

tocko q iz M in se nadaljujemo od novega kota pri p.I Koncamo, ko pridemo nazaj v p∗.

p∗

Sergio Cabello RC – Konveksnost - 2d

Page 35: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Grahamov algoritem - Graham’s scan

I Iscemo skrajno tocko p∗ ∈ P.I Urejamo P \ p∗ po kotu od p∗ in jih povezamo v smeri urnega

kazalca, da bi dobili mnogokotnik M.I Hodimo po M, in ko imamo levi zasuk p, q, r , brisemo srednjo

tocko q iz M in se nadaljujemo od novega kota pri p.I Koncamo, ko pridemo nazaj v p∗.

p∗

M

Sergio Cabello RC – Konveksnost - 2d

Page 36: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Grahamov algoritem - Graham’s scan

I Iscemo skrajno tocko p∗ ∈ P.I Urejamo P \ p∗ po kotu od p∗ in jih povezamo v smeri urnega

kazalca, da bi dobili mnogokotnik M.I Hodimo po M, in ko imamo levi zasuk p, q, r , brisemo srednjo

tocko q iz M in se nadaljujemo od novega kota pri p.I Koncamo, ko pridemo nazaj v p∗.

p∗

M

Sergio Cabello RC – Konveksnost - 2d

Page 37: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Grahamov algoritem - Graham’s scan

I Iscemo skrajno tocko p∗ ∈ P.I Urejamo P \ p∗ po kotu od p∗ in jih povezamo v smeri urnega

kazalca, da bi dobili mnogokotnik M.I Hodimo po M, in ko imamo levi zasuk p, q, r , brisemo srednjo

tocko q iz M in se nadaljujemo od novega kota pri p.I Koncamo, ko pridemo nazaj v p∗.

p∗

M

Sergio Cabello RC – Konveksnost - 2d

Page 38: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Grahamov algoritem - Graham’s scan

I Iscemo skrajno tocko p∗ ∈ P.I Urejamo P \ p∗ po kotu od p∗ in jih povezamo v smeri urnega

kazalca, da bi dobili mnogokotnik M.I Hodimo po M, in ko imamo levi zasuk p, q, r , brisemo srednjo

tocko q iz M in se nadaljujemo od novega kota pri p.I Koncamo, ko pridemo nazaj v p∗.

p∗

M

Sergio Cabello RC – Konveksnost - 2d

Page 39: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Grahamov algoritem - Graham’s scan

I Iscemo skrajno tocko p∗ ∈ P.I Urejamo P \ p∗ po kotu od p∗ in jih povezamo v smeri urnega

kazalca, da bi dobili mnogokotnik M.I Hodimo po M, in ko imamo levi zasuk p, q, r , brisemo srednjo

tocko q iz M in se nadaljujemo od novega kota pri p.I Koncamo, ko pridemo nazaj v p∗.

p∗

M

Sergio Cabello RC – Konveksnost - 2d

Page 40: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Grahamov algoritem - Graham’s scan

I Iscemo skrajno tocko p∗ ∈ P.I Urejamo P \ p∗ po kotu od p∗ in jih povezamo v smeri urnega

kazalca, da bi dobili mnogokotnik M.I Hodimo po M, in ko imamo levi zasuk p, q, r , brisemo srednjo

tocko q iz M in se nadaljujemo od novega kota pri p.I Koncamo, ko pridemo nazaj v p∗.

p∗

M

Sergio Cabello RC – Konveksnost - 2d

Page 41: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Grahamov algoritem - Graham’s scan

I Iscemo skrajno tocko p∗ ∈ P.I Urejamo P \ p∗ po kotu od p∗ in jih povezamo v smeri urnega

kazalca, da bi dobili mnogokotnik M.I Hodimo po M, in ko imamo levi zasuk p, q, r , brisemo srednjo

tocko q iz M in se nadaljujemo od novega kota pri p.I Koncamo, ko pridemo nazaj v p∗.

p∗

M

Sergio Cabello RC – Konveksnost - 2d

Page 42: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Grahamov algoritem - Graham’s scan

I Iscemo skrajno tocko p∗ ∈ P.I Urejamo P \ p∗ po kotu od p∗ in jih povezamo v smeri urnega

kazalca, da bi dobili mnogokotnik M.I Hodimo po M, in ko imamo levi zasuk p, q, r , brisemo srednjo

tocko q iz M in se nadaljujemo od novega kota pri p.I Koncamo, ko pridemo nazaj v p∗.

p∗

M

Sergio Cabello RC – Konveksnost - 2d

Page 43: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Grahamov algoritem - Graham’s scan

I Iscemo skrajno tocko p∗ ∈ P.I Urejamo P \ p∗ po kotu od p∗ in jih povezamo v smeri urnega

kazalca, da bi dobili mnogokotnik M.I Hodimo po M, in ko imamo levi zasuk p, q, r , brisemo srednjo

tocko q iz M in se nadaljujemo od novega kota pri p.I Koncamo, ko pridemo nazaj v p∗.

p∗

M

Sergio Cabello RC – Konveksnost - 2d

Page 44: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Grahamov algoritem - Graham’s scan

I Iscemo skrajno tocko p∗ ∈ P.I Urejamo P \ p∗ po kotu od p∗ in jih povezamo v smeri urnega

kazalca, da bi dobili mnogokotnik M.I Hodimo po M, in ko imamo levi zasuk p, q, r , brisemo srednjo

tocko q iz M in se nadaljujemo od novega kota pri p.I Koncamo, ko pridemo nazaj v p∗.

p∗

M

Sergio Cabello RC – Konveksnost - 2d

Page 45: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Grahamov algoritem - Graham’s scan

I Iscemo skrajno tocko p∗ ∈ P.I Urejamo P \ p∗ po kotu od p∗ in jih povezamo v smeri urnega

kazalca, da bi dobili mnogokotnik M.I Hodimo po M, in ko imamo levi zasuk p, q, r , brisemo srednjo

tocko q iz M in se nadaljujemo od novega kota pri p.I Koncamo, ko pridemo nazaj v p∗.

p∗

M

Sergio Cabello RC – Konveksnost - 2d

Page 46: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Grahamov algoritem - Graham’s scan

I Iscemo skrajno tocko p∗ ∈ P.I Urejamo P \ p∗ po kotu od p∗ in jih povezamo v smeri urnega

kazalca, da bi dobili mnogokotnik M.I Hodimo po M, in ko imamo levi zasuk p, q, r , brisemo srednjo

tocko q iz M in se nadaljujemo od novega kota pri p.I Koncamo, ko pridemo nazaj v p∗.

p∗

M

Sergio Cabello RC – Konveksnost - 2d

Page 47: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Grahamov algoritem - Graham’s scan

I Iscemo skrajno tocko p∗ ∈ P.I Urejamo P \ p∗ po kotu od p∗ in jih povezamo v smeri urnega

kazalca, da bi dobili mnogokotnik M.I Hodimo po M, in ko imamo levi zasuk p, q, r , brisemo srednjo

tocko q iz M in se nadaljujemo od novega kota pri p.I Koncamo, ko pridemo nazaj v p∗.

p∗

M

Sergio Cabello RC – Konveksnost - 2d

Page 48: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Grahamov algoritem - Graham’s scan

I Iscemo skrajno tocko p∗ ∈ P.I Urejamo P \ p∗ po kotu od p∗ in jih povezamo v smeri urnega

kazalca, da bi dobili mnogokotnik M.I Hodimo po M, in ko imamo levi zasuk p, q, r , brisemo srednjo

tocko q iz M in se nadaljujemo od novega kota pri p.I Koncamo, ko pridemo nazaj v p∗.

p∗

M

Sergio Cabello RC – Konveksnost - 2d

Page 49: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Grahamov algoritem - Graham’s scan

I Iscemo skrajno tocko p∗ ∈ P.I Urejamo P \ p∗ po kotu od p∗ in jih povezamo v smeri urnega

kazalca, da bi dobili mnogokotnik M.I Hodimo po M, in ko imamo levi zasuk p, q, r , brisemo srednjo

tocko q iz M in se nadaljujemo od novega kota pri p.I Koncamo, ko pridemo nazaj v p∗.

p∗

M

Sergio Cabello RC – Konveksnost - 2d

Page 50: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Grahamov algoritem - Graham’s scan

I Iscemo skrajno tocko p∗ ∈ P.I Urejamo P \ p∗ po kotu od p∗ in jih povezamo v smeri urnega

kazalca, da bi dobili mnogokotnik M.I Hodimo po M, in ko imamo levi zasuk p, q, r , brisemo srednjo

tocko q iz M in se nadaljujemo od novega kota pri p.I Koncamo, ko pridemo nazaj v p∗.

p∗

M

Sergio Cabello RC – Konveksnost - 2d

Page 51: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Grahamov algoritem - Graham’s scan

I Iscemo skrajno tocko p∗ ∈ P.I Urejamo P \ p∗ po kotu od p∗ in jih povezamo v smeri urnega

kazalca, da bi dobili mnogokotnik M.I Hodimo po M, in ko imamo levi zasuk p, q, r , brisemo srednjo

tocko q iz M in se nadaljujemo od novega kota pri p.I Koncamo, ko pridemo nazaj v p∗.

p∗

M

Sergio Cabello RC – Konveksnost - 2d

Page 52: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Grahamov algoritem - Graham’s scan

I Iscemo skrajno tocko p∗ ∈ P.I Urejamo P \ p∗ po kotu od p∗ in jih povezamo v smeri urnega

kazalca, da bi dobili mnogokotnik M.I Hodimo po M, in ko imamo levi zasuk p, q, r , brisemo srednjo

tocko q iz M in se nadaljujemo od novega kota pri p.I Koncamo, ko pridemo nazaj v p∗.

p∗

M

Sergio Cabello RC – Konveksnost - 2d

Page 53: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Gramahov algoritem – Applet

http://www.cs.princeton.edu/~ah/alg_anim/version1/GrahamScan.htmlTocke lahko gibamo. Tudi

http://quercus.iit.cnr.it/~javacg/CGApplet.html

Sergio Cabello RC – Konveksnost - 2d

Page 54: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Gramahov algoritem - Prva opcija

Gradimo M in ga spremenjimo. Kazalce rabimo.

Algorithm Grahamov algoritem1. Najdemo najnizjo tocko p0;2. (p1, · · · pn−1)← urejamo tocke P \ p∗ po kotniki od p∗;3. Delamo seznam L = (p0, p1, . . . , pn, p0)4. p ← p0; q ← p1; r = p2;5. while r 6= p0

6. if p, q, r obrni na desno7. p ← q; q ← r ; r ← r .next;8. else brisemo element q od L;9. q ← p; p ← p.prev ;10. return seznam L;

Sergio Cabello RC – Konveksnost - 2d

Page 55: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Gramahov algoritem - Druga opcija

Ne gradimo M na zacetku in uporabljamo sklad za delo M po hodi. Spoljami lahko ga delamo.

Algorithm Grahamov algoritem1. Najdemo najnizjo tocko p∗;2. (p1, · · · pn)← urejamo tocke P \ p∗ po kotniki od p∗;3. S prazen sklad; damo p∗ in p1 v sklad;4. i ← 2, while i < n5. q←vrh S ; p←element pod vrhom S ;6. if p, q, pi obrni na desno7. damo pi na sklad Q;8. i ← i + 1;9. else brisemo element q od sklada S ;10. return elemente od sklada S

Sergio Cabello RC – Konveksnost - 2d

Page 56: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Grahamov algoritem – S degeneracijami

Ce so veliko najnjzje tock,potem je p∗ ta, ki je bolj nalevo.

Ce so tocke, ki imajo istokotnik od p∗, samouporabljamonajoddaljenejse tocko.(Lahko brisemo ostali.)

Jih brisemop∗

Ce so p, q, r na premici,brisamo q. (Ze vemo, da jeq med p, r .)

p q r

Sergio Cabello RC – Konveksnost - 2d

Page 57: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Grahamov algoritem – Pravilnost

TrditevGrahamov algoritem pravilno racuna CH(P).

Dokaz

I M vedno je mnogokotnik (brez krize), ker svoje tocke so urejenopo kotniki od p∗.

I Mnogokotnik M vedno vsebuje P, ker samo se povecaja.

I Na koncu M obrni vedno na desno in potem je konveksen.

I Na koncu je M mnogokotnik, ki ima tocke od P in vsebuje P.→ M = CH(P).

Sergio Cabello RC – Konveksnost - 2d

Page 58: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Grahamov algoritem - Cas

TrditevGrahamov algoritem uporablja O(n log n) cas.

Dokaz

I Iskanje najnizje tocko → O(n) cas.

I Urejanje po kotniki → O(n log n) cas.

I Hod. Vsak korak, ali hodimo v novo tocko, kjer nismo bili prej,ali brisamo tocko od M.→ O(n) cas. Primer amortiziran casa.

I Skupaj, O(n log n) cas.

Opomba: Ce lahko urejamo po kotu od p∗ v linearnem casu, potemGrahamov algoritem traja O(n) cas!!

Sergio Cabello RC – Konveksnost - 2d

Page 59: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Zdaj bomo videli drugi algoritem.

Kaksna vprasanja do tukaj?

Sergio Cabello RC – Konveksnost - 2d

Page 60: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Incremental algorithm

I Neodvisno bomo racunali zgornjo lupino in spodnjo lupino.

I Tocke zgornje lupine so tisti, ki videjo (0,+∞). To je, tisti, kiimajo vertikalen gor zarek locen CH(P).

I Tocke spodnje lupine so tisti, ki videjo (0,−∞).

zgornja lupina

spodnja lupina

I CH(P) je zdruzenje zgornje in spodnje lupine, ce nimajo par tockiste x-koordinate.

I Splosni polozaj → Vsaka tocka ima svojo x-koordinato.

Sergio Cabello RC – Konveksnost - 2d

Page 61: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Ideja

I Racunanje zgornje lupine.

I Uredimo tock po x-koordinatih.

I Prirastni algoritem: na vsakem koraku dodamo tocko inposodobimo strukturo.

I Tukaj: dodamo tocke nacin, da imamo vedno vecje x-koordinat,in posodobimo zgornjo lupino.

I Za posodobanje: test ’biti na desno’ in brisanje elementov.

I Racunamo spodnjo lupino s podobno metodo: Prirastno od desnina levo.

Sergio Cabello RC – Konveksnost - 2d

Page 62: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Primer

Sergio Cabello RC – Konveksnost - 2d

Page 63: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Primer

1

2

3

4

5

6

7

8

9

10

11

Sergio Cabello RC – Konveksnost - 2d

Page 64: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Primer

Sergio Cabello RC – Konveksnost - 2d

Page 65: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Primer

Sergio Cabello RC – Konveksnost - 2d

Page 66: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Primer

Sergio Cabello RC – Konveksnost - 2d

Page 67: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Primer

Sergio Cabello RC – Konveksnost - 2d

Page 68: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Primer

Sergio Cabello RC – Konveksnost - 2d

Page 69: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Primer

Sergio Cabello RC – Konveksnost - 2d

Page 70: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Primer

Sergio Cabello RC – Konveksnost - 2d

Page 71: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Primer

Sergio Cabello RC – Konveksnost - 2d

Page 72: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Primer

Sergio Cabello RC – Konveksnost - 2d

Page 73: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Primer

Sergio Cabello RC – Konveksnost - 2d

Page 74: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Primer

Sergio Cabello RC – Konveksnost - 2d

Page 75: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Primer

Sergio Cabello RC – Konveksnost - 2d

Page 76: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Primer

Sergio Cabello RC – Konveksnost - 2d

Page 77: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Primer

Sergio Cabello RC – Konveksnost - 2d

Page 78: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Primer

Sergio Cabello RC – Konveksnost - 2d

Page 79: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Primer

Sergio Cabello RC – Konveksnost - 2d

Page 80: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Primer

Sergio Cabello RC – Konveksnost - 2d

Page 81: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Primer

Sergio Cabello RC – Konveksnost - 2d

Page 82: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Primer

Sergio Cabello RC – Konveksnost - 2d

Page 83: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Primer

Sergio Cabello RC – Konveksnost - 2d

Page 84: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Primer

Sergio Cabello RC – Konveksnost - 2d

Page 85: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Primer

Sergio Cabello RC – Konveksnost - 2d

Page 86: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Primer

Sergio Cabello RC – Konveksnost - 2d

Page 87: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Primer

Sergio Cabello RC – Konveksnost - 2d

Page 88: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Primer

Sergio Cabello RC – Konveksnost - 2d

Page 89: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Primer

Sergio Cabello RC – Konveksnost - 2d

Page 90: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Primer

Sergio Cabello RC – Konveksnost - 2d

Page 91: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Primer

Sergio Cabello RC – Konveksnost - 2d

Page 92: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Primer

Sergio Cabello RC – Konveksnost - 2d

Page 93: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Primer

Sergio Cabello RC – Konveksnost - 2d

Page 94: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Primer

Sergio Cabello RC – Konveksnost - 2d

Page 95: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Primer

Sergio Cabello RC – Konveksnost - 2d

Page 96: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Applet

Applet za prirastni algoritem:http://web.mit.edu/drdaniel/www/6.838/ConvexHull/CH.html

Sergio Cabello RC – Konveksnost - 2d

Page 97: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem

Algorithm IncrementalCH1. p1, . . . pn←uredimo P po x-koordinatah;2. Seznam (ali sklad) Z ←p1, p2;3. for i = 3 to n4. Damo qi na konec seznama Z ;5. while Z ima ≥ 3 elementov and zadnje elemente p, q, r

od Z ni zasuk na desno6. brisemo q iz Z ;7. Seznam (ali sklad) S ←pn, pn−1;8. for i = n − 2 downto 19. Dodamo qi na konec seznama S ;10. while S ima ≥ 3 elementov and zadnje elemente p, q, r

od S ni zasuk na desno11. brisemo q iz S ;12. return Z ,S (moramo brisati p1, pn, ker so dvakrat).

Sergio Cabello RC – Konveksnost - 2d

Page 98: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Pravilnost

TrditevPrirastni algoritem pravilno racuna CH(P).

Dokaz

I Naj bo Pi = p1, . . . , pi. Torej Pn = P.

I Samo gledamo zgornjo lupino, ker je spodnjo lupino podobno.I Invariant: Na zacetku koraka i ima Z zgornjo lupino Pi−1.

• Indukcija. Jasno za i = 3.• i ⇒ i + 1

pi−1

Pi−1

pi

Sergio Cabello RC – Konveksnost - 2d

Page 99: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Cas

TrditevPrirastni algoritem uporablja O(n log n) cas.

Dokaz

I Urejanje traja O(n log n) cas.

I Vsako tocko damo enkrat v Z .

I Vsako tocko lahko brisamo od Z samo enkrat.

I Po urejanje uporabljamo O(n) cas.

Opomba: Ce so tocke P ze urejane, lahko racunamo CH(P) vlinearnem casu.

Sergio Cabello RC – Konveksnost - 2d

Page 100: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Degeneracije

I Kaj ce 2 tocki imata isto x-kordinato?

I Uporabljamo majhen, majhen, majhen zasuk.

I Pravzaprav, samo mislimo nacin, ampak zasuka ne naredimo.

Sergio Cabello RC – Konveksnost - 2d

Page 101: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Degeneracije

I Kaj ce 2 tocki imata isto x-kordinato?

I Uporabljamo majhen, majhen, majhen zasuk.

I Pravzaprav, samo mislimo nacin, ampak zasuka ne naredimo.

Sergio Cabello RC – Konveksnost - 2d

Page 102: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Degeneracije

I Kaj ce 2 tocki imata isto x-kordinato?

I Uporabljamo majhen, majhen, majhen zasuk.

I Pravzaprav, samo mislimo nacin, ampak zasuka ne naredimo.

Sergio Cabello RC – Konveksnost - 2d

Page 103: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Prirastni algoritem – Degeneracije

I Urejanje tock leksikografski.

I Leksikografski urejenost je: p ≺ q, ce px < qx ali px = qx inpy < qy .

I Dodamo tocke po to urejanje.

I Drugace, vse gre enako.

Splosna metoda proti degeneracijam: simulacija majhne rotacije.

Sergio Cabello RC – Konveksnost - 2d

Page 104: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Vprasanja?

Sergio Cabello RC – Konveksnost - 2d

Page 105: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Spodnja meja

I Bomo videli, da ima problem racunanja konkevsne lupine casovnozahtevnost Θ(n log n).

I Ze smo videli zgornjo mejo O(n log n).

I Kako dokazimo Ω(n log n)?

Vhodurejanja

VhodCH

IzhodCH

Izhodurejanja

O(n) O(n)

Ω(n log n)

Sergio Cabello RC – Konveksnost - 2d

Page 106: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Spodnja meja

I Bomo videli, da ima problem racunanja konkevsne lupine casovnozahtevnost Θ(n log n).

I Ze smo videli zgornjo mejo O(n log n).

I Kako dokazimo Ω(n log n)?

Vhodurejanja

VhodCH

IzhodCH

Izhodurejanja

O(n) O(n)

Ω(n log n)

Ω(n log n)

Sergio Cabello RC – Konveksnost - 2d

Page 107: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Spodnja meja

IzrekRacunaje konveksne lupine rabi Ω(n log n) cas.

Dokaz

I Naj bo X = x1, . . . xn ⊂ R vhod za problem urejanja.

I Gradimo vhod P = (x1, x21 ), (x2, x

22 ), . . . , (xn, x

2n ) za problem

racunanja konveksne lupine.

I Ker je P v konveksnem polozaju, spodnja lupina od CH(P) imaP urejen po x-kordinatah.

I Ko je P urejen po x-kordinatah, lahko dobimo X urejen.

I Algoritem traja O(n) plus cas za racunanje CH(P).

Sergio Cabello RC – Konveksnost - 2d

Page 108: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Spodnja meja – Primer

y = x2/4

Primer: urejanje 3, 2,−6,−1, 5

Sergio Cabello RC – Konveksnost - 2d

Page 109: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Spodnja meja – Primer

y = x2/4(−6, 9)

(3, 9/4)

Primer: urejanje 3, 2,−6,−1, 5

Sergio Cabello RC – Konveksnost - 2d

Page 110: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Spodnja meja – Primer

y = x2/4

Primer: urejanje 3, 2,−6,−1, 5

Sergio Cabello RC – Konveksnost - 2d

Page 111: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Vprasanja?

Sergio Cabello RC – Konveksnost - 2d

Page 112: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Normal diagram

I P set of vertices of convex polygon.

I For each direction ~u ∈ S1, let ext(~u) be a point of P that isextreme in the direction ~u.

I For some ~u there are two candidates for ext(~u). When?

I We have a mapping ext : S1 → P.

I Normal diagram of P is the decomposition of S1 into maximalconnected intervals that have the same ext(·).

I For each interval we store the corresponding ext(·).

Sergio Cabello RC – Konveksnost - 2d

Page 113: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Normal diagram – Example

p1

p2p3

p4p5

p1

p2 p3

p4

p5

Sergio Cabello RC – Konveksnost - 2d

Page 114: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Normal diagram – Example

p1

p2p3

p4p5

p1

p2 p3

p4

p5

~n(−−→p1p2)

Sergio Cabello RC – Konveksnost - 2d

Page 115: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Normal diagram – Computation

I Assume p1, . . . , pn set of vertices of convex polygon clockwise.

I Change of interval happens when ~u is orthogonal (normal) tosome −−−→pipi+1.

I Notation: ~n(−−−→pipi+1) for vector normal to −−−→pipi+1 and to its left.

I Normal diagram has O(n) intervals.

I The vectors ~n(−−→p1p2),~n(−−→p2p3) . . . are radially sorted.

I It takes linear time to construct normal diagram from convexpolygon.

I Normal diagrams are good for optimization problems.

Sergio Cabello RC – Konveksnost - 2d

Page 116: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Vprasanja?

Sergio Cabello RC – Konveksnost - 2d

Page 117: Konveksna lupina v ravnini - fmf.uni-lj.sicabello/courses/OLD/2006-2007-racgeom/material/... · Tudi javacg/CGApplet.html Sergio Cabello RC – Konveksnost - 2d. Zavijanje darila

Kaj nismo videli?

I Algoritmi so, ki uporabljajo O(n log h) cas.To je optimalno, ko imamo n, h kot parametra, ker je Ω(n log h)spodnja meja.Chan’s algoritem je preprosten primer. (Predstavitev?)

I Konveksno lupino od poligonalne poti v linearnem casu.(Predstavitev?)

Sergio Cabello RC – Konveksnost - 2d