Download as pdf or txt
Download as pdf or txt
You are on page 1of 9

ALFA BK UNIVERZITET U BEOGRADU

FAKULTET ZA MATEMATIKU I RAČUNARSKE NAUKE

GRAHAMOV ALGORITAM ZA
ODREĐIVANJE KONVEKSNOG OMOTAČA
KONAČNOG SKUPA TAČAKA U RAVNI

Student: Predmetni nastavnik:


Branko Gligorević Milan Milovanović

Jul 2022. g.
Sadržaj

Uvod ................................................................................................................. 3
1. Konveksni omotač, prost mnogougao, kolinearnost tačaka –
pojam........................................................................................................... 5
2. Grahamov algoritam – pojam i karakteristike............................................. 5
3. Grahamov algoritam – postupak identifikovanja krajnjih temena
konveksnog omotača................................................................................... 5
4. Grahamov algoritam – primeri primene...................................................... 5
5. Grahamov algoritam – primer zadatog skupa tačaka.................................. 5
Zaključak ....................................................................................................... 6
Literatura ....................................................................................................... 6
I. UVOD
2D-konveksni omotač skupa tačaka definišemo kao najmanji konveksni poligon koji obuhvata sve tačke.
"Najmanji" se odnosi kako na površinu, tako i na obim poligona.
Algoritam za konveksni omotač korisiti se u robotici, obradi digitalnih slika i prepoznavanju oblika, ali je
značajanu primenu našao kao neophodni deo drugih algoritama, kao što su:
 određivanje da li tačka leži "između" skupa drugih tačaka,
 određivanje da li se dva skupa tačaka "preklapaju",
 nalaženje najmanjeg pravougaonika koji obuhvata skup tačaka i
 određivanje "grubog" oblika definisanog skupom tačaka.
Postoji 5 algoritama za nalaženje konveksnog omotača od kojih posmatramo Grahamov
algoritam optimalne kompleksnosti.
Graham je 1972. godine objavio rad u kome je predstavio relativno jednostavan algoritam za računanje
konveksnog omotača konačnog skupa tačaka u ravni sa vremenskom složenošću O(n log n).

II. KONVEKSNI OMOTAČ, PROST MNOGOUGAO, KOLINEARNOST TAČAKA - POJAM


Konveksni omotač konačnog skupa tačaka definiše se kao
najmanji konveksni mnogougao koji sadrži sve tačke skupa kao
što je prikazano na slici 1. Konveksni omotač se predstavlja na
isti način kao običan mnogougao, redosledom svojih temena u
cikličkom poretku.
Obrada konveksnih mnogouglova jednostavnija je od obrade
proizvoljnih mnogouglova. Na primer, postoji algoritam
složenosti O(log n) za proveru pripadnosti tačke konveksnom n-
touglu, dok je provera pripadnosti proizvoljnom prostom
mnogouglu složenosti O(n).

Sl. 1. Konveksni omotač datog skupa tačaka

Za tri ili više tačaka kažemo da su kolinearne ako leže na jednoj pravoj. Dve tačke su uvek kolinearne jer
određuju pravu. Tačke koje nisu kolinearne nazivamo nekolinearne. Tri tačke xi   xi , yi , zi  za i=1,2,3 su
kolinearne ako koeficijenti rastojanja zadovoljava uslov:
x2  x1 : y2  y1 : z2  z1  x3  x1 : y3  y1 : z3  z1
x1 y1 1
Površina trougla kojeg određuju tri kolinearne tačke je nula: P  x2 y2 1
x3 y3 1

Tri tačke su kolinearne ako je udaljenost jedne od tih tačaka i linije koju određuju druge dve nula:

( x2  x1 )  ( x3  x1 )
d  0  ( x2  x1 )  ( x1  x3 )  0
x2  x1

Mnogougao je prost ako nema samopreseka. Na slici 2, prvi


mnogougao je prost (iako je nekonveksan), a drugi nije prost.
Prost mnogougao je onaj kod koga odgovarajući put nema
preseka sa samim sobom, tj. jedine ivice koje imaju zajedničke
tačke su susedne ivice sa njihovim zajedničkim temenom.

Sl. 2. Prost mnogougao (levo)

1
II. GRAHAMOV ALGORITAM – POJAM I KARAKTERISTIKE
Grahamov algoritam skeniranja je efikasan algoritam za pronalaženje konveksnog omotača konačnog skupa
tačaka u ravni sa vremenskom složenošću O(n log n). Algoritam pronalazi sve vrhove konveksnog omotača
poređane duž njegove granice. Koristi stek za efikasno otkrivanje i uklanjanje udubljenja na ivici.
Za dati skup tačaka na ravni, potrebno je pronaći tačku sa najnižom vrednošću Y koordinate. Ako ih ima više,
izabrati onu sa nižom vrednošću X koordinata. Ovu tačku nazivamo ,,tačkom sidrenja”, kao što je prikazano na
slici 3.

Sl. 3. Tačka sidrenja


Zatim sortiramo sve tačke na osnovu polarnog ugla koji čine sa tačkom sidrenja. Ako dve tačke čine isti ugao
sa tačkom sidrenja P, sortirati je po udaljenosti od P.
Inicijalizovati konveksni niz omotača sa tačkom sidrenja i prvim elementom u sortiranom nizu.
Iterirati preko svake tačke u sortiranom nizu i videti da li prelazak do tačke iz prethodne dve tačke čini smer
kazaljke na satu ili suprotno. Ako je u smeru kazaljke na satu, onda odbaciti tačku i preći na sledeću tačku.
Nastaviti navedeno sve do kraja sortiranog niza.

III. GRAHAMOV ALGORITAM – POSTUPAK IDENTIFIKOVANJA KRAJNJIH TEMENA


KONVEKSNOG OMOTAČA
U ovom delu rada prikazaćemo primer Grahamovog skeniranja kao metode za pronalaženje konveksnog
omotača koji obuhvata sve tačke na ravni.

Grahamovo skeniranje započinje Imamo skup tačaka. Jasno je koja Odatle se tačke poređaju u rastućem
pronalaženjem tačke sa najnižom y tačka ima najnižu vrednost y- uglu.
koordinatom. Ako postoji više tačaka koordinate.
na x-koordinati, bira se tačka sa
najmanjom x-vrednošću. Tačke su
sortirane po polarnim uglovima u
rotaciji suprotno od kazaljke na satu.
Grahamovo skeniranje koristi stek.
Primer:

2
Sada možemo pratiti Grahamovo Tačka 1 se gura na stek odmah Sledeća tačka koja se dodaje u stek je
skeniranje da bismo saznali koje tačke nakon toga. 2. Od tačke 1 do tačke 2 se pravi linija.
stvaraju konveksni omotač. Tačka 0 se
gura na stek.

Kad god se napravi levo skretanje, Skrećemo desno do tačke 4. Kad god se napravi desno skretanje,
pretpostavlja se da je tačka deo Povući ćemo liniju do tačke 4, ali Grahamov algoritam skeniranja
konveksnog omotača. Jasno vidimo da je nećemo gurnuti na stek. izbacuje prethodnu vrednost iz steka i
se pravi skretanje ulevo da bi se došlo ponovo upoređuje novu vrednost sa
do tačke 2 od tačke 1. Da bi se došlo vrhom steka. U ovom slučaju,
do tačke 3, napravi se još jedno izbacićemo 3 sa vrha snopa i videćemo
skretanje levo. Trenutno je tačka 3 da li prelazak od tačke 2 do tačke 4
deo konveksnog omotača. Segment stvara levi zavoj. U ovom slučaju jeste,
linije se povlači od tačke 2 do 3 i 3 se tako da ćemo nacrtati segment od 2 do
gura na stek. 4 i gurnuti 4 na snop.

Pošto prelazak sa 4 na 5 stvara Pomeranje od tačke 5 do 6 stvara Da bismo došli do tačke 7, moramo
skretanje ulevo, gurnućemo 5 na stek. skretanje ulevo, tako da ćemo skrenuti desno na 6.
Tačka 5 je trenutno deo konveksnog gurnuti 6 na stek. Tačka 6 je
omotača. trenutno deo konveksnog
omotača.

3
Tačka 6 se iskače iz gomile i preokret Pokušavamo da gurnemo tačku 8 Za odlazak do tačke 9 potrebno je
se ispituje od tačke 5 do tačke 7. Pošto na stek. Da bismo došli do tačke skretanje udesno u tački 8.
napravimo zaokret levom rukom od 8, pravimo levo u tački 7, pa se
tačke 5 do tačke 7, guramo tačku 7 na tačka 8 dodaje u stek. Tačka 8 je
stek. trenutno deo konveksnog
omotača.

Pošto postoji skretanje udesno, tačka 8 Da bismo došli do tačke 9 od Zatim skrećemo levo da bismo došli do
iskače iz steka i tačka 9 se upoređuje tačke 7, potrebno je još jedno tačke 10. Tačka 10 je trenutno deo
sa tačkom 7. skretanje udesno, tako da konveksnog omotača.
izbacujemo i tačku 7 iz steak
i uporedimo tačku 9 sa tačkom 5.
Napravimo skretanje ulevo u
tački 5 da bismo došli do tačke 9,
tako da je 9 gurnut na stek.

Da bi od tačke 10 došli do tačke 11, Pošto se u tački 10 skreće udesno, U tački 11 se pravi skretanje ulevo da
potrebno je skrenuti desno. tačka 10 se izbacuje iz gomile i bi se došlo do tačke 12. Tačka 12 se
ispituje se put do tačke 10 od stoga gura na stek i trenutno se smatra
tačke 9. Pošto je u tački 9 delom konveksnog omotača.
napravljeno skretanje levo da bi
se došlo do tačke 11, tačka 11 se
gura na gomilu.

4
Od tačke 12 do tačke 13 potrebno je Tačka 12 se iskače iz steka i U tački 13 se napravi skretanje levo da
skrenuti desno. ispituje se put do tačke 13 od bi se došlo do tačke 14, tako da se
tačke 11. Pošto je u tački 11 tačka 14 gurne na stek.
napravljeno skretanje ulevo, tačka
13 se gura na stek.

Od tačke 14 do tačke 15 potrebno je Pošto je u tački 14 napravljeno Prelazak od tačke 15 do početne tačke
skrenuti desno. desno skretanje, tačka 14 je 0 zahteva skretanje levo. Pošto je
iskočila iz steka. Sledeće se početna tačka bila tačka do koje smo
ispituje put do tačke 15 od tačke morali da dostignemo da bismo završili
13. U tački 13 se pravi skretanje konveksni omotač, algoritam se
ulevo da se dođe do tačke 15, završava.
tako da se tačka 15 gura na stek.

Tačke koje su potrebne za stvaranje konveksnog omotača su: 0–1–2–4–5–9–11–13–15.

IV. GRAHAMOV ALGORITAM – PRIMERI PRIMENE


Izbegavanje sudara: Ako konveksni omotač
automobila izbegava sudar sa preprekama, onda to čini
i automobil. Pošto je izračunavanje putanja koje
izbegavaju sudar mnogo lakše sa konveksnim
automobilom, onda se često koristi za planiranje
putanja.

Sl. 4. Izbegavanje sudara

Najmanja kutija: Pravougaonik najmanje površine koji obuhvata poligon ima najmanje jednu stranu u ravni sa
konveksnom trupom poligona, pa se trup izračunava u prvom koraku algoritama minimalnog pravougaonika.
Slično tome, pronalaženje najmanje trodimenzionalne kutije koja okružuje objekat zavisi od 3D-konveksnog
trupa.
Analiza oblika: Oblici se mogu klasifikovati u svrhu poklapanja prema njihovim ,,konveksnim stablima
nedostataka", strukturama koje zavise za njihovo izračunavanje na konveksnim omotačima.

5
Površinska detekcija i simulacija površinskog napona u pojavama kapljica: Za detekciju površine kapljice
koristi se kombinacija algoritma konveksnog trupa (Grahamovo skeniranje) i konkavnog algoritma.
Minimizacija površine se koristi da se dobije površinski napon za fluid. Sila površinskog napona tada zavisi od
lokalne zakrivljenosti prve derivacije površine kapljice.
Druge praktične primene su prepoznavanje obrazaca, obrada slika, statistika, geografski informacioni sistem,
teorija igara, konstrukcija faznih dijagrama i statička analiza koda apstraktnom interpretacijom.
Takođe služi kao alat, gradivni blok za druge računsko-geometrijske algoritame, kao što je metoda rotirajućih
merača za izračunavanje širine i prečnika skupa tačaka.

V. GRAHAMOV ALGORITAM – PRIMER ZADATOG SKUPA TAČAKA


Upotrebom Graham-ovog algoritma nađite konveksni omotač za skup (6,3), (4,3), (4,1), (5,5), (7,7), (7,4)
(2,5),(8,2).

Rešenje:
1. Najpre nađimo tačku p0 sa najmanjom y-koordinatom. To je C=(4,1).
2. Sledeći zadatak je sortiranje svih tačaka prema uglu koji zaklapaju sa početnom tačkom, merenom u smeru
suprotnom od kretanja kazaljke na satu u odnosu na x-osu. Sortirajmo tačke prema algoritmu Prost mnogougao,
tj. prema uglu između p0 i x koordinatne ose u smeru obrnuto od kazaljke na satu. Uočimo da tačke A=(6,3) i
F=(7,4) grade isti traženi polarni ugao. Ali, tačka F(7,4) je udaljenija od p0, i uklanjamo A(6,3). Poredak ostalih
tačaka je p1 = H(8,2), p2 = F(7,4), p3 = E(7,7), p4 = D(5,5), p5 = B(4,3), p6 = G(2,5).
3. Najpre se na stek postave tačke p0, p1, p2, tj. tačke C, H, F
4. Redosled p1, p2, p3 (gledamo tacke H, F, E) skreće udesno, što možemo detektovati i računanjem (p3-
p1)×(p2-p1)=(-1,5) × (-1,2)=(-1)(2)-5(-1)=-2+5=3>0 gde p3-p1=(x3-x1,y3-y1)=(7-8,7-2)=(-1,5) (Negativni
rezultat bi bio usmeren ulevo.)
5. Stoga, uklanjamo p2 (tacku F) sa steka; nakon toga, je redosled p0, p1, p3 (tačke C, H, E) skreće ulevo.
6. Tačka p3 (tačka E) se postavlja na stek koji sad sadrži p0, p1, p3 (tačke C, H, E).
7. Redosled p1, p3, p4 skreće ulevo: p4 se postavlja na stek (tačke H, E, D).
8. Putanja p3, p4, p5 (tačke E, D, B) opet skreće ulevo t: postavlja se p5 (tačka B) na stek koji sad sadrži p0,
p1, p3, p4, p5 (tačke C,H,E,D,B).
9. Na kraju, ispitajmo tačku p6 (tačku G). Redosled p4, p5, p6 (tačke D, B, G) je usmeren udesno: p5 (tačka
B) se skida sa steka i razmatramo redosled p3, p4, p6 (tačke E, D, G) koji je pak desno usmeren. Stoga moramo
ukloniti p4 (tačku D) sa steka koji sad sadrži p0, p1, p3 (tačke C, H, E).
10. Na kraju, putanja p1, p3, p6 (tačke H, E, G) je usmerena ulevo i postavljamo p6 (tačku G) na stek.
11. Algoritam terminira rad i stek sadrži p0, p1, p3, p6.
12. Stoga konveksni omotač sadrži ivice sa temenima: (4,1), (8,2), (7,7) , (2,5).

ZAKLJUČAK
U ovom radu razmatran je problem pronalaženja konveksnog omotača (mnogougla) pomoću Grahamovog
algoritma. Sa pojmom konveksnog mnogougla susrećemo se još u osnovnoj školi, učeći ih kao osnovne
geometrijske oblike koje dalje kroz vreme i sticanje novih znanja shvatamo njihovu kompleksnost i prisustvo u
skoro svim sferama naših interesovanja. Bilo da se bavimo arhitekturom, dizajnom, grafikom, računarstvom ili
nečim drugim mnogouglovi su prisutni. Zbog toga javlja se i potreba da se oni opišu i primrne na odgovarajući
način. Kroz rad je prezentovan jedan od jednostavnijih algoritama pomoću kojeg od konačnog skupa tačaka
možemo možemo kreirati konveksan omotač.
Grahamov algoritam ima široku primenu, a neki primeri su navedeni u radu.

LITERATURA
Reference treba otkucati tekstom veličine 8 pt. Brojevi referenci treba da izlaze ispred samog naziva reference (Hanging Indent), kao u
primeru dole (Stil “References”). Brojevi referenci treba da budu na istom nivou kao i tekst reference, unutar četvrtaste zagrade. U svim
referencama samo se prezime daje puno, a ime se skraćuje na inicijal i stavlja pre prezimena. Molimo navedite imena svih autora; ne
koristite “et al”. Ne kombinujte reference: pod jednim brojem može biti samo jedna referenca. Ukoliko postoji URL, možete ga uneti na
kraju reference. Uvek pišite pune naslove. Skratite imena časopisa. Primeri različitih tipova referenci (članci u časopisima, knjige, poglavlja
u knjigama, patenti itd.) dati su dole.

[1] J. K. Author, “Title of chapter in the book,” in Book Title, ch. x, sec. x, pp. xxx–xxx , City of Publisher, Country: Abbrev. of Publisher,
year
[2] J. K. Author, Title of Book, xth ed. City of Publisher, Country: Abbrev. of Publisher, year.

6
[3] J. K. Author, “Name of paper,” Abbrev. Title of Periodical, vol. x, no. x, pp. xxx-xxx, Abbrev. Month, year.
[4] J. K. Author, “Title of report,” Abbrev. Name of Co., City of Co., Abbrev. State, Rep. xxx, year.
[5] Author, “Title of conference presentation,” Proc. Conference title, City, Country, vol. s, pp. xxx-xxx, Date, year.
[6] J. K. Author, “Title of patent,” U.S. Patent x xxx xxx, Abbrev. Month, day, year.
[7] J. K. Author, “Title of dissertation,” Ph.D. dissertation, Abbrev. Dept., Abbrev. Univ., City of Univ., Abbrev. State, year.
[8] Title of Standard, Standard number, date.

http://poincare.matf.bg.ac.rs/~vesnap/kaa/12_kaa2021-geometrija-omotac-preseci.pdf
https://matematika.fandom.com/bs/wiki/Kolinearnost
https://petljamediastorage.blob.core.windows.net/root/Media/Default/Lecture/Lekcija%201%20-%20Geometrija.pdf
http://poincare.matf.bg.ac.rs/~tijana/geometrija/konveksni%20omotac/convex_hull.html
https://iq.opengenus.org/graham-scan-convex-hull/
https://muthu.co/understanding-graham-scan-algorithm-for-finding-the-convex-hull-of-a-set-of-points/
https://blog.devgenius.io/grahams-scan-visually-explained-be54b712e2ba
https://www.researchgate.net/publication/267530075_An_Application_of_Graham_Scan_Algorithm_for_Surface_Detection_in_Droplet_Su
rface_with_SPH_Method/link/54523e0c0cf24884d887a385/download

You might also like