|
Aplikacija koristi niz algoritama za postizanje funkcionalnosti. Neki od tih algoritama
su vezani za ponašanje sučelja aplikacije, dok su drugi mnogo zanimljiviji jer rješavaju
probleme vezane uz teme ovoga rada. Svaki algoritam je rješenje nekog konkretnog
problema, a neki su modifikacije već postojećih opće-prihvaćenih algoritama.
Koordinatni sustav točaka
Sve točke u aplikaciji određene su svojim koordinatama. Koordinate točaka
zapisane su u zemljopisnoj širini i dužini po WGS 84 (World Geodetic System 1984)
sustavu. Ovaj sustav koristi elipsoid za aproksimaciju zemljine površine, te mnoge
druge podatke pomoću kojih vrši korekciju greške koju unosi aproksimacija.
Zemljopisna
širina je kut koji određuje poziciju na elipsoidu relativno prema ekvatoru, tako
da je ekvator na nultoj zemljopisnoj širina, a polovi su na 90 stupnjeva dužine.
Zemljopisna širina može biti južna ili sjeverna.
Zemljopisna dužina je kut koji
određuje poziciju relativno prema nultom meridijanu. Nulti meridijan je otprilike
100m udaljen od observatorija u Grinwich-u. Zemljopisna širina može biti od 0 do
180 stupnjeva u smjeru istoka ili zapada.
|
| |
Slika 5: Zemljopisna širina |
Slika 6: Zemljopisna dužina |
Unutar aplikacije X koordinata svake točke određuje zemljopisnu širinu (engl. longitude),
a Y koordinata zemljopisnu širinu (engl. latitude).
Primjer:
Grad Zagreb nalazi
se na 16°00“(E) zemljopisne dužine i 45°47“(N) zemljopisne širine.
Udaljenost između
pojedinih stupnjeva zemljopisne dužine i širine nije konstantna, i potrebno ju je
proračunavati.
Aplikacija za prikaz udaljenosti koristi kilometre(km) i nautičke
milje.
Jednadžba 1: Pretvorba kilometara u nautičke milje:
Proračunavanje udaljenosti iz WGS 84 u kilometre
Za male udaljenosti i rad algoritama koriste se standardne metode koje
parametre primaju u WGS 84 long/lat formatu. Ove metode također rezultate daju u
istom formatu. Kao udaljenost se računa euklidska udaljenost, no ona vrijedi samo
na kratkim udaljenostima ili kada se udaljenost koristi samo kao kriterij za određivanje
kraja algoritama. Stvarna udaljenost na Zemlji se razlikuje od one korištene u algoritmima
jer je Zemlja zaobljena.
Jednadžba 2: Točniju udaljenost daje proračun udaljenosti na sferi.:
Slika 7: Put između dvije točke na sferi
Sa Slike 7 se vidi da put od točke T1 do T2 nije
ravna linija. Prethodna formula vraća rezultat u nautičkim miljama te je vrijednost
d potrebno pomnožiti s 1.852 da bi se dobila vrijednost u kilometrima.
Jednadžba 3: Pretvorba udaljenosti u kilometre:
Ova metoda daje bolju vrijednost od euklidske udaljenosti, no nije najbolja moguća.
Još točniju vrijednost dao bi proračun temeljen na elipsoidu, korigiran promjenama
u visini referentnih nultih nivoa. Ovaj algoritam zahtjeva mapu korekcija elipsoidnog
sustava, te nije implementiran.
Pretraga točaka
Većina kasnije opisanih algoritama traži najbližu točku u odnosu na neku
lokaciju. Pošto je broj točaka s kojima se radi relativno velik (reda 50 000), učestale
akcije pretraživanja moraju raditi što je brže moguće. Točke su postavljene u 2D
prostoru, te nije moguća izrada velikog indeksa iznad njih jer je memorijski prostor
ograničen. Bilo bi moguće spremiti indeks na skladišni memorijski prostor, no taj
indeks se ne bi mogao koristiti za sve točke jer su neke od njih nusprodukti korištenih
algoritama, te nisu unaprijed poznate. Svaka točka može unutar svoje strukture spremiti
najbliži poligon, najbližu točku, te referentnu vrijednost za pretragu. Referentna
vrijednost za pretragu računa se pri učitavanju točke, i računa se prema formuli
koja u obzir uzima udaljenost od točke (0,0) i kut prema pozitivnoj x-osi koordinatnog
sustava.
Jednadžba 4: Proračun referentne vrijednosti za pozicioniranje u polju:
Točke se nakon učitavanja spremaju u dinamičko polje koje se sortira po referentnoj
vrijednosti. Sortiranje se vrši implementacijom QuickSort algoritma. Na ovaj način
može se doći do najbliže točke u vrlo kratkom vremenu jer su one točke koje su bliže
u polje također bliže i u prostoru.
Pretraživanje polja se izvršava algoritmom binarnog
pretraživanja s korakom pogreške. Nakon što se pronađe (po referentnoj vrijednosti)
najbliža točka, algoritam pretražuje unaprijed zadani broj točaka ispred i iza u
polju ne bi li našao točku koja se bolje podudara. Pošto se informacija o točki
pamti samo u jednoj varijabli ograničene točnosti (2D u 1D), pretraživanjem u okolini
točke smanjuje se vjerojatnost pronalaska krive točke na zanemarivu vrijednost.
|
|
|
Slika 8: Točke u prostoru |
Slika 9: Točke u sortiranom polju |
Također radi ubrzanja algoritama koji koriste točke, svaka točka unutar svoje strukture
pamti i svoju poziciju u polju, najbližu točku ako je ona prethodno već proračunata
te najbliži poligon.
Za proračunavanje udaljenosti između dvije točke koriste se
dvije metode, euklidska udaljenost i city block udaljenost, ovisno o algoritmu.
Jednadžba 5: Euklidska udaljenost
Jednadžba 6: City block udaljenost
Bitno je napomenuti da je udaljenost korištena u algoritmima samo aproksimacija
udaljenosti. Točna udaljenost na sferi proračunava se drugačijim algoritmom koji
je složeniji.
Zapis poligona unutar aplikacije
Svaki poligon unutar aplikacije zapisan je pomoću neodređenog broja točaka,
granica i proširenog poligona.
Prošireni poligon proračunava se pri pokretanju aplikacije,
no pošto se radi o vremenski zahtjevnom procesu, on se obavlja paralelno s ostalim
operacijama na posebnoj dretvi. Također je izvršena sinkronizacija mehanizama pomoću
zajedničkih varijabli.
Svaka točka koja se učita u poligon, također se dodaje na
poseban indeks koji služi za brzo pronalaženje točaka na poligonu. Točka kao struktura
također sadrži izvornu referencu na svoj poligon što eliminira potrebu za pretragom
između ovih struktura.
Granice poligona su spremljene unutar učitane datoteke, te
se jednostavno učitavaju, dok se granice proširenog poligona preračunavaju. Točke
proširenih poligona se ne dodaju na indeks polja za pretraživanje jer to nije potrebno.
Određivanje položaja točke u odnosu na pravac
U algoritmima se često koristi pozicija točke relativno s obzirom na neki
pravac. Točka može biti iznad ili ispod pravca, te njena pozicija također ovisi
o orijentaciji pravca. Poziciju točke u odnosu na pravac određuje predznak skalarnog
produkta pravca i točke.
Pravac se zapisuje svojom jednadžbom u vektorskom obliku.
Ako je pravac zapisan pomoću varijabli x,y i z, točka pomoću xt i yt, tada je udaljenost
točke od pravca po apsolutnoj vrijednosti jednaka skalarnom produktu točke i pravca
pri čemu je homogena koordinata točke (z) jednaka 1. Udaljenost će se dobiti samo
ako je jednadžba pravca normirana, inače je moguće odrediti samo stranu poluravnine
na kojoj se nalazi točka.
Slika 10: Odnos točke i poligona
Jednadžba 7: Određivanje odnosa točke i pravca
Određuje udaljenost točke i pravca, a predznak vrijednosti D označava na kojoj strani
pravca se točka nalazi.
Određivanje položaja točke u odnosu na poligon
U korisničkoj interakciji u mnogo slučajeva ispituje se da li se je klik dogodio
unutar poligona ili izvan njega. Točka koja zadaje oznaku točke traženog puta ne
može biti zadana na kopnu.
Da li je pojedina točka unutar poligona ili izvan njega
može se odrediti na više načina.
1) Prvi algoritam
a. Izvesti MinMax provjeru za svaki poligon i odrediti unutar kojeg područja se
nalazi zadana točka. Ovaj korak može dati više poligona kao rezultat.
b. Za svaki poligon iz prethodnog koraka povući pravac u smjeru jedne od osi (najjednostavnije,
iako smjer nije bitan).
c. Ako pravac siječe poligon u neparnom broju točaka, tada je točka unutar poligona,
inače je izvan njega.
2) Drugi algoritam
a. Pronaći najbližu točku zadanoj točki, i odrediti kojem poligonu ona pripada.
Ovaj postupak može se izvesti vrlo brzo.
b. Povući pravac u smjeru pronađene točke ili koordinatne osi
c. Izvesti korak c prvog algoritma
3) Treći algoritam, samo za poligone koji su trenutno nacrtani a.
Pročitati s ekrana boju točke i prema njoj odrediti da li je točka unutar poligona.
Slika 11: Određivanje položaja točke u odnosu na poligon
Iako je treći algoritam neprecizan, radi najbrže te ne zahtjeva analitičke postupke,
i predstavlja jedan pametan trik za postizanje brze funkcionalnosti.
Ispitivanje relativnog položaja dva pravca ograničenih početnim i završnim točkama.
Pravac je zapisan u obliku vektora i dobiva se kao vektorski produkt dvije
točke.
Jednadžba 8: Proračun pravca pomoću dvije točke
Gdje su t1 i t2 točke.
Jednadžba 9: Proračun pravca pomoću dvije točke po komponentama
Ako su zadana dva pravca pomoću četiri točke, moguće je odrediti da li se oni sijeku
idućom metodom.
Zadane su točke:
S1 – početna točka prvog pravca
E1 – završna točka prvog pravca
S2 – početna točka drugog pravca
E2 – završna točka drugog pravca
Izračunavaju se pravci pomoću točaka.
Jednadžba 10: Proračun pravaca za provjeru sjecišta:
Slika 12: Određivanje odnosa dva ograničena pravca
Osim određivanja da li se pravci sijeku potrebno je odrediti da li se sijeku upravo
na intervalu između svoje početne i završne točke. Ovo se može postići izračunavanjem
odnosa točaka i pravaca, te provjerom.
Jednadžba 11: Izračun odnosa točaka i pravaca za određivanje sjecišta:
|
A=signum(Line1 * S2)
|
|
B=signum(Line1 * E2)
|
|
C=signum(Line2 * S1)
|
|
D=signum(Line2 * E1)
|
Vrijednosti A, B, C i D pokazuju s koje strane pravca se nalaze točke drugoga pravca.
Ako vrijedi da su toče S2 i E2 sa suprotnih strana pravca Line1 i ako su točke S1
i E1 sa suprotnih strana Line2 pravca, tada se ti pravci sijeku na zadanim intervalima.
Dakle vrijediti će A!=B i B!=C.
Jednadžba 12: Pravci se sijeku ako vrijedi:
A!=B and B!=C
MinMax provjera
MinMax algoritam je metoda provjere da li se dva pravokutnika u 2D prostoru
sijeku. Ova metoda koristi se učestalo u aplikaciji, za određivanje odnosa pravca
i poligona, provjeru da li su poligoni blizu i sl. Algoritam kao ulaz najčešće prima
četiri točke koje određuju dva pravokutnika.
Zadane su četiri točke a, b, c i d.
Točke a i b određuju prvi pravokutnik, a točke c i d drugi. Zadane točke su lijeva
gornja točka i desna donja točka.
Slika 13: Ilustracija točaka za MinMax provjeru
Jednadžba 13: MinMax provjera
MAX(a.x,b.x) < MIN(c.x,d.x) ili
MAX(c.x,d.x) < MIN(a.x,b.x) ili
MAX(a.y,b.y) < MIN(c.y,dy) ili
MAX(c.y,d.y) < MIN(a.y,b.y))
Tada se dva pravokutnika preklapaju.
Također se koristi modifikacija ovog postupka pri čemu se ispituje minimalna zadana
udaljenost između dva kvadrata. U tom slučaju početne točke se proširuju za zadanu
vrijednost.
Određivanje odnosa pravca i poligona
Ovaj algoritam je jedan od procesorski zahtjevnijih u projektu jer zahtjeva
prolazak kroz svaki rub poligona i određivanje presjecišta na intervalu sa zadanim
pravcem.
Iako operacije kao što je proširivanje poligona dodatno opterećuju cijeli
sustav, pri proračunu presjecišta pomažu u postizanju boljih performansi jer su
prošireni poligoni jednostavniji i redovito imaju manje točaka od originalnih poligona.
Algoritam za traženje puta koristi proširene poligone.
Traženje presjecišta je iterativni postupak prethodno navedenog algoritma određivanja
odnosa dva pravca.
Algoritam:
• Izvršiti minMax provjeru za brzu provjeru
• Ako je minMax dao pozitivan rezultat ispitati da li se siječe bilo koji rub poligona
sa zadanim pravcem na zadanim intervalima. Algoritam prolazi kroz sve točke poligona.
• Spremi presjecišta na listu.
Slika 14: Određivanje presjecišta pravca i poligona
Nekada se na listu spremaju točke poligona koje pripadaju rubovima koji se sijeku
(plave točke na Slika 15) jer omogućavaju pristup rubu poligona koji sječe pravac,
te nije potrebno kreirati nove točke u memoriji uređaja.
Slika 15: Alternativni odabir točaka presjecišta
Pojednostavljivanje poligona i linija
Linije i poligoni mogu biti vrlo komplicirani i mogu sadržavati po nekoliko
tisuća točaka. Kada god je to moguće, potrebno je smanjiti broj točaka i to do granice
zahtijevane točnosti za neku operaciju. Pojednostavljivanje poligona i linija obavlja
se tako da se definira rezolucija prikaza u obliku minimalne udaljenosti između
dvije točke koja je relevantna za postupak. Svaka točka koja je od iduće točke udaljena
manje od granične vrijednosti biti će uklonjena jer ne unosi bitan podatak u algoritam.
Slika 16: Pojednostavljivanje linija
Ovakav postupak „zaboravlja“ određeni broj točaka, i za velike iznose granične udaljenosti
može uzrokovati nedovoljno kvalitetne rezultate. Mnogo bolji rezultat u tom slučaju
daje iterativno ponavljanje algoritma s manjim vrijednostima granične udaljenosti
kao što je na primjer jedna četvrtina potrebne udaljenosti. Rezultat dobiven primjenom
takvog algoritma 4 puta biti će kvalitetniji od jedne primjene algoritma na
punoj graničnoj udaljenosti.
Rezolucija prikaza i LOD
Potrebno je razviti algoritam za prikaz različitih veličina područja, te
svesti na minimalni skup podataka koji se prikazuju za zadanu razinu složenosti.
Također je potrebno prikazati mjerilo u metrima ili kilometrima.
Za kontrolu razine
složenosti unutar programske implementacije koristi se mehanizam pojednostavljivanja
poligona i linija na taj način da se ne crtaju podaci koji na prikazu nisu vidljivi.
Kao faktor minimalne udaljenosti između točaka uzima se jedna točka na ekranu (veličina
jednog pixela). Ovakvim pojednostavljenjem eliminiraju se sve točke koje u prikazu
uzrokuju promjenu manju od jedne točke na uređaju za prikaz.
U memoriji uređaja
spremaju se cijeli poligoni, no za crtanje se koristi skup točaka koji se izgrađuje
dinamički. Ovaj princip omogućava primjenu algoritma pojednostavljivanja neposredno
prije crtanja poligona. Ovisno o razini prikaza (zoom faktoru) skup točaka za prikaz
će biti veći ili manji. Automatski se iznosom zoom faktora podešava preciznost algoritma
pojednostavljivanja.
Uvjet koji određuje pripadnost točke skupu za crtanje jednostavno
ispituje da li je udaljenost do prethodne točke veća ili jednaka od veličine jedne
točke na ekranu.
Jednadžba 14: Uvjet za prikaz točke u LOD mehanizmu:
UDALJENOST(trenutnaTočka,prethodna
točka) * zoomFaktor >= 1
Postupak se ponavlja za svaku točku poligona, te iako mora proći kroz sve točke
poligona, znatno rasterećuje procesor jer mehanizam crtanja poligona implementiran
unutar MFC knjižnica znatno ovisi o složenosti poligona
Slika 17: Jednostavni LOD mehanizam
Proširivanje poligona
Svaki poligon na mapi predstavlja jedan otok. Hrvatska obala je vrlo razvedena
i pruža jedinstven set podataka za testiranje algoritama. Otoci su postavljeni nepravilno,
imaju vrlo različit broj točaka, i u pravilu su konkavnog oblika. Pri crtanju i
traženju puta između otoka potrebno je voditi računa o minimalnoj udaljenosti od
obale za trenutnu poziciju. U tu svrhu koriste se prošireni poligoni koji su za
zadani iznos veći od originalnih otoka. Mehanizama za proračun proširenih poligona
ima više, i potrebno je odabrati odgovarajući. Jedan od najboljih algoritama za
proširivanje konkavnih poligona je algoritam razdvajanja konkavnog poligona (dekompozicija
konkavnog poligona) u niz konveksnih poligona, no ovaj algoritam je zahtjevan i
na velikom broju točaka ne bi dao rezultate u zadanom vremenu. Također je bitna
činjenica da prošireni poligoni ne moraju biti savršene strukture, tj. smije se
dogoditi da se pojedini rubovi sijeku. Algoritam traženja puta je otporan na nepravilnosti
izrade mapa i neke od problema koji se mogu javiti pri izradi proširenih poligona
što smanjuje zahtjeve potrebne za samu izradu proširenih poligona.
Iako se radi
o konkavnim poligonima, na njih je primijenjen algoritam proširivanja za konveksne
poligone.
Svaka točka poligona se proširuje prema van u smjeru okomitom na smjer
pravca povučenom kroz prethodnu i točku poslije točke koja se trenutno obrađuje.
Algoritam određuje u kojem smjeru je potrebno proširiti poligon.
Slika 18: Proširivanje poligona
Pri primjeni algoritma potrebno je voditi računa o orijentaciji poligona.
Određivanje proširene točke:
Zadane su točke:
T1 – točka koja prethodi proširivanoj točki
T2 – točka koja se nalazi iza proširivane točke
T – Proširivana točka
Zadana je minimalna udaljenost od obale:
minDist
Traži se:
T' – Proširena točka
Jednadžba 15: Koeficijent smjera pravca kroz T1 i T2
Jednadžba 16: Pomak na osi pravca kroz T1 i T2
Jednadžba 17: Koeficijent pravca okomitog na pravac kroz T1 i T2
Jednadžba 18: Određuje se smjer u kojem će se proširivati zadana točka
Jednadžba 19: Pomak po x koordinati na pravcu okomitom na pravac kroz T1 i T2
Jednadžba 20: Pomak po y koordinati na pravcu okomitom na pravac kroz T1 i T2
Jednadžba 21: Tražena točka je:
Ovaj algoritam daje loše rezultate, no glavni problem je u zatvorenim krivuljama
koje se pojavljuju na proširenim poligonima.
Slika 19: Nepovoljan rezulat proširenja poligona
U svrhu rješavanja ovog problema, izveden je algoritam za uklanjanje presjecišta
na zatvorenim krivuljama. Ovaj algoritam jednostavno uklanja sve segmente zatvorene
krivulje koji sami sebe sijeku. Ovako popravljen poligon je zadovoljavajući za primjenu
algoritma za traženje puta.
Slika 20: Ispravni rezultat proširenja poligona
Dodatno se može utjecati na kvalitetu algoritma ponavljanom primjenom navedenog
algoritma jer daje mnogo bolje rezultate za kraće vrijednosti.
Nakon proširivanja
nad poligonom se provodi pojednostavljivanje proširenog poligona, a njegova kvaliteta
također ovisi o zadanoj minimalnoj udaljenosti između dvije točke.
Podešavanjem
faktora prethodnih algoritama može se upravljati brzinom i kvalitetom dobivenih
rješenja.
Prikaz proširenih poligona moguće je u aplikaciji uključiti ili isključiti.
Slika 21: Prikaz proširenih poligona iz programa
Algoritam traženja puta
Algoritam traženja puta na ravnini s velikim brojem poligona uz minimalnu
udaljenost od pojedinog poligona je najzahtjevniji segment aplikacije. Ovaj algoritam
mora u zadanom vremenu dati prihvatljive rezultate bez obzira o kompleksnosti učitane
karte ili zadanoj udaljenosti od obale. Gotovo svi prethodno navedeni algoritmi
izvedeni su upravo kao podsustavi ovog algoritma. Algoritam je također odredio i
strukturu podataka unutar aplikacije.
U literaturi i na Internetu moguće je pronaći
veliki broj algoritama za traženje puta za različite svrhe. Tako na primjer aplikacije
koje koriste rasterski prikaz nekih objekata najčešće koriste A* algoritam ili njegove
varijacije. Aplikacije koje koriste vektorski prikaz koriste razne algoritme traženja
presjecišta linija ili traže put na već zadanoj mreži linija. Srodni algoritmi su
traženje cestovnog puta između dvije lokacije, no oni imaju već zadanu mrežu linija
na koji se primjenjuju modificirane verzije rasterskih ili sličnih mehanizama za
pretraživanje. Implementacija odgovarajućeg postupka u cijelosti nije pronađena
niti u literaturi niti na Internetu, jer se ovakvi algoritmi često drže kao tajna
pojedinih proizvođača programske podrške.
Problem traženja puta u zadanoj okolini
je prvo potrebno točno definirati, te pronaći algoritam ili kombinaciju istih koji
bi na prihvatljiv način riješili zadani problem.
Popis problema koje algoritam mora riješiti
Lista navedenih problema je ujedno i lista zahtjeva za algoritam traženja
puta.
1. Algoritam mora raditi s poljima do 100.000 točaka bez problema
2. Algoritam mora uvijek konvergirati prema rješenju
3. Proračunati put mora biti optimalan ili približno optimalan
4. Mora se uzimati u obzir minimalna udaljenost od obale
5. Mora raditi s konkavnim poligonima
6. Algoritam mora biti otporan na pogreške
7. Izračunato rješenje mora biti nezavisno o rezoluciji mape
8. Brzina računanja mora biti prihvatljiva
Uvjet da rješenje mora biti nezavisno o rezoluciji mape eliminira mogućnost izrade
rasterskih mapa koje bi pronalazile put. Također je ograničeno korištenje velike
količine prethodno proračunatih podataka radi promjenjivih parametara i ograničenog
memorijskog prostora PPC uređaja.
Rješenje
Rješenje problema je kombinacija
metode traženja presjecišta i pretraživanja stabla putova. Primjena algoritma traženja
na originalni skup podataka je nemoguć jer bi broj potrebnih operacija u jednom
momentu postao prevelik za izvođenje na PPC platformi, pa čak i na stolnim računalima.
Radi toga je potrebno izvesti dodatni korak filtriranja točaka tako da se algoritam
pretraživanja primjenjuje samo na mali set točaka. Odabir točaka za algoritam je
iterativni postupak i isto kao i pretraživanje stabla točaka obavlja se rekurzivno.
Algoritam:
• Zadaju se početna i završna točka između kojih je potrebno izračunati
put.
• Povlači se pravac kroz početnu i završnu točku, te se traže poligoni koje
taj pravac siječe.
• Traže se točke koje su najudaljenije na poligonu koji siječe
pravac, i to točku s lijeve i desne strane. Ovaj korak treba uzeti u obzir i poligone
koji su međusobno udaljeni manje od minimalne udaljenosti od obale. U tom slučaju
ti poligoni se obrađuju kao jedan poligon. Ovaj postupak se nastavlja sve dok se
ne naiđe do poligona oko kojeg se može izračunati sigurna ruta. Rezultat je parni
broj točaka, po dvije za svaki poligon koji je presječen.
• Putovi dobiveni primjenom
prethodnog koraka dodaju se na stablo pretraživanja. Za idući korak algoritma odabire
se onaj put koji je najkraći. Za idući korak moguće je odabrati samo listove stabla
pretraživanja.
• Algoritam završava ako je pronađeni put ispravan, tj. ne siječe
niti jedan poligon, i svaka točka puta je udaljena više od minimalne udaljenosti.
Slika 22: Ilustracija odabira točaka za nastavak algoritma
Slika 23: Odabir točaka između dva poligona koja su udaljena manje od minimalne udaljenosti od obale
Iduće slike prikazuju grafički postupak traženja puta. Pri svakom koraku obavlja se pretraga najkraćeg puta, ali na vrlo malom broju točaka. Algoritam se izvodi na već proširenim poligonima.
Slika 24: Početni korak algoritma
|
|
|
Slika 25: Algoritam odabire najkraći put između 4 točke i dodaje 4 nove točke |
Slika 26: Odabire se najbolji put, te se dodaju dodatne točke (dvije) za prvi neispravni segment |
|
|
|
Slika 27: Algoritam se ponavlja sve dok se svi segmenti ne poprave |
Slika 28: Prva tri segmenta su ispravna i u ovom koraku se biraju točke za 4. segment |
|
|
|
Slika 29: Još je jedino zadnji segment neispravan |
Slika 30: Algoritam je završio |
Iz rezultata odabira točaka može se zaključiti da za konveksne ili jednostavne konkavne
poligone, te jednostavan razmještaj poligona, samo traženje maksimalno udaljenih
točaka i odabir kraćeg puta daje optimalan put.
Za složenije skupove poligona ovo
više nije slučaj i potrebno je izgraditi stablo svih prethodno dobivenih putova.
Stablo pretraživanja sastoji se od čvorova koji su među-rezultati putova od početne
do završne točke. Rješenje nije postignuto sve dok postoji segment na putu koji
sječe neki poligon.
Slika 31: Stablo pretraživanja za prethodni slučaj
U ovom koraku algoritma moguće su dodatne optimizacije kao što su računanje tablice
ispravnosti među-rezultata. Tablica ispravnosti među-rezultata sadrži indikaciju
ispravnosti puta između dvije točke, te eliminira potrebu za višestrukim računanjem
ispravnosti za iste segmente u različitim koracima algoritma.
Prethodno opisani
mehanizam može obraditi vrlo veliki broj točaka i poligona, te uspješno pronalazi
put. Potrebno je svejedno uvesti provjeru koja osigurava da se jedna te ista točka
ne dodaje na neki put dva puta jer na taj način algoritam može završiti u beskonačnoj
petlji.
| |