Diplomski rad br. 1689

Postupci prikaza za navigacijski sustav na ugrađenom sustavu


Izvedbe algoritama

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.

T1
T5
T2
T4
T6
T3
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.
Miroslav Lakotić