Fakulteta za elektrotehniko,

Podobni dokumenti
ANALITIČNA GEOMETRIJA V RAVNINI

1. izbirni test za MMO 2018 Ljubljana, 16. december Naj bo n naravno število. Na mizi imamo n 2 okraskov n različnih barv in ni nujno, da imam

7. VAJA A. ENAČBA ZBIRALNE LEČE

5 SIMPLICIALNI KOMPLEKSI Definicija 5.1 Vektorji r 0,..., r k v R n so afino neodvisni, če so vektorji r 1 r 0, r 2 r 0,..., r k r 0 linearno neodvisn

Osnove matematicne analize 2018/19

Vektorji - naloge za test Naloga 1 Ali so točke A(1, 2, 3), B(0, 3, 7), C(3, 5, 11) b) A(0, 3, 5), B(1, 2, 2), C(3, 0, 4) kolinearne? Naloga 2 Ali toč

M

PowerPointova predstavitev

MATEMATIKA 2. LETNIK GIMNAZIJE G2A,G2B Sestavil: Matej Mlakar, prof. Ravnatelj: Ernest Simončič, prof. Šolsko leto 2011/2012 Število ur: 140

2. izbirni test za MMO 2017 Ljubljana, 17. februar Naj bosta k 1 in k 2 dve krožnici s središčema O 1 in O 2, ki se sekata v dveh točkah, ter

Microsoft PowerPoint - IPPU-V2.ppt

FGG13

Ravninski grafi Tina Malec 6. februar 2007 Predstavili bomo nekaj osnovnih dejstev o ravninskih grafih, pojem dualnega grafa (k danemu grafu) ter kako

Predtest iz za 1. kontrolno nalogo- 2K Teme za kontrolno nalogo: Podobni trikotniki. Izreki v pravokotnem trikotniku. Kotne funkcije poljubnega kota.

Slide 1

Poslovilno predavanje

RAČUNALNIŠKA ORODJA V MATEMATIKI

Učinkovita izvedba algoritma Goldberg-Tarjan Teja Peklaj 26. februar Definicije Definicija 1 Naj bo (G, u, s, t) omrežje, f : E(G) R, za katero v

Turingov stroj in programiranje Barbara Strniša Opis in definicija Definirajmo nekaj oznak: Σ abeceda... končna neprazna množica simbolo

EKVITABILNE PARTICIJE IN TOEPLITZOVE MATRIKE Aleksandar Jurišić Politehnika Nova Gorica in IMFM Vipavska 13, p.p. 301, Nova Gorica Slovenija Štefko Mi

Microsoft Word - Astronomija-Projekt19fin

NAVODILA AVTORJEM PRISPEVKOV

Mladi za napredek Maribora srečanje DOLŽINA»SPIRALE«Matematika Raziskovalna naloga Februar 2015

Vrste

RAM stroj Nataša Naglič 4. junij RAM RAM - random access machine Bralno pisalni, eno akumulatorski računalnik. Sestavljajo ga bralni in pisalni

C:/Users/Matevž Èrepnjak/Dropbox/FKKT/TESTI-IZPITI-REZULTATI/ /Izpiti/FKKT-avgust-17.dvi

Geometrija v nacionalnih preverjanjih znanja

PREDMETNI KURIKULUM ZA RAZVOJ METEMATIČNIH KOMPETENC

resitve.dvi

3. Metode, ki temeljijo na minimalnem ostanku Denimo, da smo z Arnoldijevim algoritmom zgenerirali ON bazo podprostora Krilova K k (A, r 0 ) in velja

Strokovni izobraževalni center Ljubljana, Srednja poklicna in strokovna šola Bežigrad PRIPRAVE NA PISNI DEL IZPITA IZ MATEMATIKE 2. letnik nižjega pok

FGG14

Domače vaje iz LINEARNE ALGEBRE Marjeta Kramar Fijavž Fakulteta za gradbeništvo in geodezijo Univerze v Ljubljani 2007/08 Kazalo 1 Vektorji 2 2 Analit

'Kombinatoricna optimizacija / Lokalna optimizacija'

Ime in priimek: Vpisna št: FAKULTETA ZA MATEMATIKO IN FIZIKO Oddelek za matematiko Verjetnost Pisni izpit 5. februar 2018 Navodila Pazljivo preberite

Osnove statistike v fizični geografiji 2

Univerza v Novi Gorici Fakulteta za aplikativno naravoslovje Fizika (I. stopnja) Mehanika 2014/2015 VAJE Gravitacija - ohranitveni zakoni

FAKULTETA ZA STROJNIŠTVO Matematika 2 Pisni izpit 9. junij 2005 Ime in priimek: Vpisna št: Zaporedna številka izpita: Navodila Pazljivo preberite bese

CpE & ME 519

Kazalo 1 DVOMESTNE RELACIJE Operacije z dvomestnimi relacijami Predstavitev relacij

Univerza v Mariboru Fakulteta za naravoslovje in matematiko Oddelek za matematiko in računalništvo Enopredmetna matematika IZPIT IZ VERJETNOSTI IN STA

Ime in priimek

MERJENJE GORIŠČNE RAZDALJE LEČE

Microsoft PowerPoint _12_15-11_predavanje(1_00)-IR-pdf

Srednja šola za oblikovanje

LABORATORIJSKE VAJE IZ FIZIKE

Funkcije in grafi

Podatkovni model ER

Urejevalna razdalja Avtorji: Nino Cajnkar, Gregor Kikelj Mentorica: Anja Petković 1 Motivacija Tajnica v posadki MARS - a je pridna delavka, ampak se

resitve.dvi

Rešene naloge iz Linearne Algebre

Vaje: Matrike 1. Ugani rezultat, nato pa dokaži z indukcijo: (a) (b) [ ] n 1 1 ; n N 0 1 n ; n N Pokaži, da je množica x 0 y 0 x

Matematika Diferencialne enačbe prvega reda (1) Reši diferencialne enačbe z ločljivimi spremenljivkami: (a) y = 2xy, (b) y tg x = y, (c) y = 2x(1 + y

Poglavje 3 Reševanje nelinearnih enačb Na iskanje rešitve enačbe oblike f(x) = 0 (3.1) zelo pogosto naletimo pri reševanju tehničnih problemov. Pri te

SESTAVA VSEBINE MATEMATIKE V 6

OSNOVE LOGIKE 1. Kaj je izjava? Kaj je negacija izjave? Kaj je konjunkcija in kaj disjunkcija izjav? Povejte, kako je s pravilnostjo negacije, konjunk

Matematika 2

C:/Users/Matevž Èrepnjak/Dropbox/FKKT/testi in izpiti/ /IZPITI/FKKT-februar-14.dvi

Microsoft Word - A-3-Dezelak-SLO.doc

predstavitev fakultete za matematiko 2017 A

Ime in priimek: Vpisna št: FAKULTETA ZA MATEMATIKO IN FIZIKO Oddelek za matematiko Statistika Pisni izpit 31. avgust 2018 Navodila Pazljivo preberite

P182C10111

Osnove verjetnosti in statistika

Microsoft Word - CNC obdelava kazalo vsebine.doc

7. tekmovanje v znanju astronomije 8. razred OŠ Državno tekmovanje, 9. januar 2016 REŠITVE NALOG IN TOČKOVNIK SKLOP A V sklopu A je pravilen odgovor o

Diapozitiv 1

FGG02

ELEKTRIČNI NIHAJNI KROG TEORIJA Električni nihajni krog je električno vezje, ki služi za generacijo visokofrekvenče izmenične napetosti. V osnovi je "

Ime in priimek: Vpisna št: FAKULTETA ZA MATEMATIKO IN FIZIKO Oddelek za matematiko Statistika Pisni izpit 6. julij 2018 Navodila Pazljivo preberite be

MATLAB programiranje MATLAB... programski jezik in programersko okolje Zakaj Matlab? tipičen proceduralni jezik enostaven za uporabo hitro učenje prir

Albert Einstein in teorija relativnosti

glava.dvi

6.1 Uvod 6 Igra Chomp Marko Repše, Chomp je nepristranska igra dveh igralcev s popolno informacijo na dvo (ali vec) dimenzionalnem prostoru

STAVKI _5_

rm.dvi

Optimizacija z roji delcev - Seminarska naloga pri predmetu Izbrana poglavja iz optimizacije

(Microsoft PowerPoint - vorsic ET 9.2 OES matri\350ne metode 2011.ppt [Compatibility Mode])

1 Tekmovanje gradbenih tehnikov v izdelavi mostu iz špagetov 1.1 Ekipa Ekipa sestoji iz treh članov, ki jih mentor po predhodni izbiri prijavi na tekm

UČNI NAČRT. Gimnazija, 2. letnik, 2016/2017 Ime in Priimek: MATEJ MLAKAR , Pregledal-a: 1: Splošni cilji / kompetence predmeta: S splošnimi ci

Datum in kraj

VAJE

Strojna oprema

Microsoft Word - Pravila - AJKTM 2016.docx

DN5(Kor).dvi

Arial 26 pt, bold

Univerza v Ljubljani FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Tržaška c. 25, 1000 Ljubljana Realizacija n-bitnega polnega seštevalnika z uporabo kvan

Matematika II (UN) 1. kolokvij (13. april 2012) RE ITVE Naloga 1 (25 to k) Dana je linearna preslikava s predpisom τ( x) = A x A 1 x, kjer je A

INDIVIDUALNI PROGRAM PREDMET: MATEMATIKA ŠOL. LETO 2015/2016 UČITELJ: ANDREJ PRAH Učenec: Razred: 7. Leto šolanja: Ugotovitev stanja: Učenec je lani n

Microsoft Word - Analiza rezultatov NPZ matematika 2018.docx

Identifikacija TIMSS 2011 Vprašalnik za učiteljice in učitelje Matematika 8. razred Pedagoški inštitut Center za uporabno epistemologijo Gerbičeva 62

GeomInterp.dvi

Delavnica Načrtovanje digitalnih vezij

Teorija kodiranja in kriptografija 2013/ AES

C:/Users/Matevz/Dropbox/FKKT/TESTI-IZPITI-REZULTATI/ /Izpiti/FKKT-januar-februar-15.dvi

4.Racionalna števila Ulomek je zapis oblike. Sestavljen je iz števila a (a ), ki ga imenujemo števec, in iz števila b (b, b 0), ki ga imenujemo imenov

Acrobat Distiller, Job 30

Priloga 1 Ljubljana 2018 MATEMATIKA Katalog znanja za osebe z mednarodno zaščito

Napotki za izbiro gibljivih verig Stegne 25, 1000 Ljubljana, tel: , fax:

Transkripcija:

INŠTITUT ZA RAČUNALNIŠTVO Doktorska disertacija APROKSIMACIJSKI ALGORITEM GRADNJE SREDNJE OSI ENOSTAVNIH MNOGOKOTNIKOV, TEMELJEČ NA OMEJENI DELA- UNAYEVI TRIANGULACIJI Maribor, maj 2014 Gregor Smogavec Mentor: red. prof. dr. Borut Žalik

Avtor: Gregor Smogavec Naslov: Aproksimacijski algoritem gradnje srednje osi enostavnih mnogokotnikov, temelječ na omejeni Delaunayjevi triangulaciji UDK: 004.925.8(043.3) Ključne besede: računalniška geometrija, algoritmi, skeleton, srednja os, omejena Delaunayjeva triangulacija, Steinerjeve točke Število izvodov: 10 Oblikovanje: Gregor Smogavec Tisk: Laboratorij za geometrijsko modeliranje in algoritme Vezava: KNJIGOVEZNICA BERTONCELJ, Irena Bertoncelj s.p., Koroška cesta 47, 2000 Maribor Lektor: doc. dr. Darinka Verdonik I

ZAHVALA Zahvaljujem se vsem, ki so mi pri nastajanju moje doktorske disertacije pomagali in me motivirali. Predvsem pa se za strokovno pomoč in usmerjanje zahvaljujem svojemu mentorju, red. prof. dr. Borutu Žaliku. II

III

Kazalo SEZNAM SLIK... VI SEZNAM TABEL... IX SEZNAM KRATIC IN POJMOV... X SEZNAM OZNAK... XI POVZETEK:... XIII ABSTRACT:...XIV IV 1 UVOD... 1 1.1 Opredelitev problema... 1 1.2 Cilji... 3 1.3 Struktura disertacije... 4 2 VORONOIJEV DIAGRAM IN DELAUNAYJEVA TRIANGULACIJA... 5 3 OMEJENA DELAUNAYJEVA TRIANGULACIJA... 9 4 PREGLED OBSTOJEČIH METOD ZA KONSTRUKCIJO SREDNJE OSI MNOGOKOTNIKOV... 12 4.1 Eksaktna metoda... 12 4.1.1 Generiranje verig... 12 4.1.2 Računanje posplošenega Voronoijevega diagrama... 13 4.1.3 Združevanje posplošenih Voronoijevih diagramov verig... 17 4.2 Aproksimacijske metode... 21 4.2.1 Algoritmi, temelječi na Voronoijevem diagramu... 21 4.2.1.1 Pristop z uporabo notranjih Voronoijevih točk... 22 4.2.1.2 Pristop z uporabo notranjih Voronoijevih elementov... 22 4.2.1.3 Pristop s presekom med Voronoijevim diagramom in mnogokotnikom... 22 4.2.1.4 Pristop z uporabo dualnosti... 23 4.2.2 Algoritem Dey, Zhao... 23 4.2.2.1 Pogoj kota... 25 4.2.2.2 Pogoj razmerja... 26 4.2.3 Algoritem Aichholzerja, Aurenhammerja, Hackla in Jüttlerja... 28 4.2.3.1 Aproksimacija meje prosto oblikovanega objekta... 28 4.2.3.2 Delitev domene na poddomene... 31 4.2.3.3 Združevanje posameznih srednjih osi... 33 4.2.3.4 Osnovni primeri... 35 4.2.4 Morfološki operator krčenje... 37

4.2.5 Algoritem srednje osi z računanjem razdalje... 38 4.2.5.1 Inicializacija... 39 4.2.5.2 Računanje razdalje... 40 4.2.5.3 Metoda FMM... 42 4.2.5.4 Metoda FSM... 45 4.2.5.5 Detekcija točk na srednji osi... 47 4.2.5.6 Redčenje Z2... 47 5 APROKSIMACIJSKI ALGORITEM ZA GRADNJO SREDNJE OSI... 49 5.1 Gradnja omejene Delaunayjeve triangulacije... 49 5.1.1 Inicializacija... 52 5.1.2 Računanje kotov med mnogokotnikom in konveksno lupino... 53 5.1.3 Triangulacija... 56 5.1.4 Robni primer... 64 5.1.5 Triangulacija mnogokotnika z luknjami... 65 5.1.6 Rezultati triangulacije... 69 5.2 Popravljanje trikotnikov triangulacije... 72 5.2.1 Popravljanje trikotnikov s topimi koti... 72 5.2.2 Popravljaje trikotnikov v konveksnih ogliščih... 73 5.3 Generiranje srednje osi... 77 5.4 Rezultati... 81 6 ANALIZA ALGORITMA... 84 6.1 Izpeljava časovne zahtevnosti... 84 6.2 Meritve... 87 6.3 Prostorska zahtevnost... 92 6.4 Metrika za določitev natančnosti naše aproksimacije... 92 6.5 Primerjava natančnosti... 94 7 ZAKLJUČEK... 96 8 ŽIVLJENJEPIS... 110 9 BIBLIOGRAFIJA... 111 V

Seznam slik SLIKA 1: DELITEV PROSTORA NA KONVEKSNA PODROČJA, KOT JO JE PREDLAGAL DESCARTES (POVZETO PO [56]).... 5 SLIKA 2: PRIMER VORONOIJEVEGA DIAGRAMA... 6 SLIKA 3: SOVPADANJE VORONOIJEVIH TOČK IN SREDIŠČ TRIKOTNIKOV DELAUNAYJEVE TRIANGULACIJE. DELAUNAYJEVA TRIANGULACIJA JE PREDSTAVLJENA S ČRTKANIMI, VORONOIJEV DIAGRAM PA S POLNIMI ČRTAMI, POLNE TOČKE PREDSTAVLJAJO OGLIŠČA DELAUNAYJEVIH TRIKOTNIKOV, PRAZNE PA VORONOIJEVE TOČKE IN SREDIŠČA DELAUNAYJEVIH TRIKOTNIKOV.... 7 SLIKA 4: POSTOPEK ZAMENJAVE ROBOV LEGALIZACIJA.... 8 SLIKA 5: VHODNA MNOŽICA TOČK IN DALJIC (A), DELAUNAYJEVA TRIANGULACIJA (B) IN OMEJENA DELAUNAYJEVA TRIANGULACIJA (C)... 9 SLIKA 6: LEGALIZACIJA IN VIDNOST.... 11 SLIKA 7: MNOGOKOTNIK (A), VERIGE OGLIŠČ MNOGOKOTNIKA (B).... 13 SLIKA 8: POSPLOŠEN VORONOIJEV DIAGRAM NAD VERIGO, KI JE SESTAVLJENA IZ ELEMENTOV (OGLIŠČE ALI ROB MNOGOKOTNIKA).... 14 SLIKA 9: POSTOPEK IZRAČUNA BISEKTORJEV.... 15 SLIKA 10: PARABOLA MED GORIŠČEM G IN PREMICO SKOZI OGLIŠČI V1 IN V2.... 16 SLIKA 11: DVOJIŠKO DREVO POSPLOŠENIH VORONOIJEVIH DIAGRAMOV VERIG.... 16 SLIKA 12: PRIKAZ DVEH POSPLOŠENIH VORONOIJEVIH DIAGRAMOV IN NJUNIH SEZNAMOV VERIG S1 IN S2.... 18 SLIKA 13: ZDRUŽENA POSPLOŠENA VORONOIJEVA DIAGRAMA.... 20 SLIKA 14: VORONOIJEV DIAGRAM VHODNEGA MNOGOKOTNIKA.... 21 SLIKA 15: RAZLIČNE PREDSTAVITVE SREDNJE OSI.... 22 SLIKA 16: PRIMER SKORAJ KOPLANARNEGA TETRAEDRA.... 24 SLIKA 17: PRIKAZ VORONOIJEVE CELICE Z VORONOIJEVO TOČKO P, UP PREDSTAVLJA TRIKOTNIKE V DEŽNIKU. SLIKA JE POVZETA IZ [17]... 25 SLIKA 18: RAČUNANJA KOTA MED DELAUNAYJEVIM ROBOM NAD TOČKAMA P IN Q TER APROKSIMACIJO TANGENTNE RAVNINE, DEFINIRANE Z DEŽNIKOM UP. SLIKA JE POVZETA IZ [17]... 26 SLIKA 19: DOLOČANJE KOTA MED TOČKO PM, KI JE NA SREDNJI OSI, IN DELAUNAYJEVIM ROBOM MED TOČKAMA P IN Q. SLIKA JE POVZETA IZ [17]... 27 SLIKA 20: RAZMERJA DOLŽIN MED DELAUNAYJEVIM ROBOM MED VHODNIMA TOČKAMA P IN Q TER POLMEROM R OČRTANE KROŽNICE TRIKOTNIKA NA TOČKAH P, PI IN PJ. SLIKA JE POVZETA IZ [17].... 27 SLIKA 21: PREDSTAVITEV LOKOV, KJER JE LOK A2 LOK S KONSTANTNO UKRIVLJENOSTJO (Α = Β2). SLIKA JE POVZETA IZ [132]. 29 SLIKA 22: RAČUNANJE SPIRALNEGA DVOJNEGA LOKA. RAČUNANJE SREDIŠČA STIČIŠČNE KROŽNICA (A) IN RAČUNANJE PARAMETROV ZA KROŽNA LOKA A0 IN A1 (B). SLIKA JE POVZETA IZ [21].... 30 SLIKA 23: RAČUNANJE MAKSIMALNE RAZDALJE MED SPIRALNIM DVOJNIM LOKOM IN VHODNO KRIVULJO. SLIKA JE POVZETA IZ [21]... 31 SLIKA 24: PRIMER DELITVE DOMENE V PODDOMENE. SLIKA JE POVZETA IZ [21]... 32 VI

SLIKA 25: PRIMER RAČUNANJA MAKSIMALNE KROŽNICE NA DVEH KROŽNIH LOKIH. PREMIK IZ TOČKE PI ZA DOLŽINO R1 V SMERI C2 (A) IN PRIMER IZRAČUNANE MAKSIMALNE KROŽNICE (B). SLIKA JE POVZETA PO [21].... 33 SLIKA 26: PRIMERI KRIVULJ DRUGEGA REDA.... 34 SLIKA 27: PRIMERI SREDNJIH OSI MED RAZLIČNIMI TIPI OSNOVNIH GRADNIKOV. ELIPTIČNI LOK (A), HIPERBOLIČNI LOK (B), PARABOLIČNI LOK (C), ELIPTIČNI LOK (D), HIPERBOLIČNI LOK (E), DALJICA (F, H) IN PARABOLIČNI LOK (G)... 35 SLIKA 28: OSNOVNI PRIMERI ZA RED ZVEZNOSTI G 1 (POVZETO IZ [21])... 36 SLIKA 29: OSNOVNI PRIMERI ZA RED ZVEZNOSTI G 0 (POVZETO IZ [21])... 36 SLIKA 30: STRUKTURNI ELEMENT ZA MORFOLOŠKO OPERACIJO KRČENJE. ŠTEVILKA 1 POMENI, DA JE PIKSEL POBARVAN, ŠTEVILKA 0 PA, DA JE PIKSEL BELE BARVE. PRAZNE CELICE LAHKO ZAVZAMEJO TAKO ČRNO KOT BELO BARVO.... 37 SLIKA 31: PRIMER PRIMERJAVE MED STRUKTURNIM ELEMENTOM IN DELOM SLIKE, KI GA TA PREKRIVA.... 38 SLIKA 32: INICIALIZACIJA ENAKOMERNE MREŽE IN DISKRETIZACIJA VHODNE KRIVULJE.... 40 SLIKA 33: PRIMER PROPAGACIJE FRONTE.... 41 SLIKA 34: GRAF RAZMERJA MED ČASOM T(X) IN POTJO X OB KONSTANTNI HITROSTI.... 41 SLIKA 35: PRIKAZ SOSEDNIH VREDNOSTI ZA ČAS PRIHODA ФI,J,K.... 42 SLIKA 36: PRIKAZ PROPAGACIJE FRONTE.... 45 SLIKA 37: RAVNINSKI PRESEK.... 47 SLIKA 38: PRIKAZ REZULTIRAJOČE RASTRSKE SREDNJE OSI.... 48 SLIKA 39: RAZLIČNI NAČINI TRIANGULACIJE KONVEKSNEGA MNOGOKOTNIKA.... 50 SLIKA 40: PRIMER VHODNEGA MNOGOKOTNIKA (OZNAČENEGA S POLNO ČRTO), KONVEKSNA LUPINA (ČRTKANA ČRTA) IN KOTI MED MNOGOKOTNIKOM IN KONVEKSNO LUPINO.... 52 SLIKA 41: PRIMERI KOTOV MED KONVEKSNO LUPINO IN MNOGOKOTNIKOM.... 53 SLIKA 42: PRIMERI KOTOV MED MNOGOKOTNIKOM IN KONVEKSNO LUPINO.... 54 SLIKA 43: PRIMER RAČUNANJA KOTOV V KONKAVNEM OGLIŠČU NA KONVEKSNI LUPINI. KARTEZIČNI KOORDINATNI SISTEM (A), PRESLIKAVA V POLARNI KOORDINATNI SISTEM, ROTACIJA TOČK IN IZRAČUN KOTOV (B)... 55 SLIKA 44: KO JE KUMULATIVNA VSOTA KOTOV Α-TRIKOTNIKOV V OGLIŠČU V1 IN KOTA VI-2VIVI-1 ENAKA KOTU Α V OGLIŠČU V1 (A), IZ SKLENJENEGA ZAPOREDJA OGLIŠČ NASTANETA DVE VERIGI, PRIKAZANI Z RAZLIČNIMA BARVAMA (B)... 58 SLIKA 45: PRIMER TRIANGULACIJE KONKAVNEGA MNOGOKOTNIKA.... 63 SLIKA 46: MNOGOKOTNIK, KJER IMAJO VSA OGLIŠČA NA KONVEKSNI LUPINI PRISOTEN KOT Γ.... 64 SLIKA 47: PRIMER DELITVE ZAPOREDJA OGLIŠČ MNOGOKOTNIKA V DVE MEDSEBOJNO NEODVISNI ZAPOREDJI OGLIŠČ.... 65 SLIKA 48: PRIMER TRIANGULACIJE MNOGOKOTNIKA Z LUKNJAMI.... 68 SLIKA 49: PRIMERI TRIANGULACIJE MNOGOKOTNIKOV Z MANJŠIM ŠTEVILOM OGLIŠČ.... 69 SLIKA 50: PRIMERI TRIANGULACIJE MNOGOKOTNIKOV Z VEČJIM ŠTEVILOM OGLIŠČ.... 70 SLIKA 51: PRIMER TRIANGULACIJE MNOGOKOTNIKOV Z LUKNJAMI.... 71 SLIKA 52: POSTOPEK POPRAVLJANJA TOPEGA TRIKOTNIKA Z VSTAVLJANJEM STEINERJEVE TOČKE.... 73 SLIKA 53: SREDNJA OS MNOGOKOTNIKA VEDNO IZVIRA IZ KONVEKSNEGA OGLIŠČA.... 73 SLIKA 54: POPRAVLJANJE TRIKOTNIKOV V KONVEKSNIH OGLIŠČIH MNOGOKOTNIKA.... 75 SLIKA 55: POPRAVLJANJE TRIANGULACIJE, KO NAJBLIŽJA TOČKA IN KONVEKSNO OGLIŠČE NISTA NA ISTEM OBROČU.... 76 SLIKA 56: REZULTAT POPRAVLJANJA TRIKOTNIKOV V VSEH KONVEKSNIH OGLIŠČIH.... 77 SLIKA 57: TRIKOTNIKE RAZDELIMO V TIPE A, B IN C.... 77 SLIKA 58: GRADNJA APROKSIMATIVNE SREDNJE OSI.... 79 VII

SLIKA 59: PRIMERI APROKSIMATIVNIH SREDNJIH OSI, DOBLJENIH Z NAŠIM ALGORITMOM, NA MNOGOKOTNIKIH Z MANJŠIM ŠTEVILOM OGLIŠČ IN BREZ LUKENJ. ŠTEVILO OGLIŠČ: 4 (A); 6 (B); 7 (C); 8 (D); 13 (E); 19 (F).... 81 SLIKA 60: PRIMERI APROKSIMATIVNE SREDNJE OSI NAD MNOGOKOTNIKI Z LUKNJAMI. ŠTEVILO OGLIŠČ: 30 (A); 12 (B); 341 (C).... 82 SLIKA 61: APROKSIMATIVNA SREDNJA OS NAD MNOGOKOTNIKI Z VEČJIM ŠTEVILOM OGLIŠČ. ŠTEVILO OGLIŠČ 997 (A); 1204 (B); 270 (C) (POVZETO PO [19, 122]).... 83 SLIKA 62: PRIMER NAJSLABŠEGA MOŽNEGA MNOGOKOTNIKA, KJER DOBIMO VGNEZDENE KONVEKSNE LUPINE NA KONKAVNIH OGLIŠČIH.... 86 SLIKA 63: PRIMERI MNOGOKOTNIKOV ZA MERITVE. KONVEKSNI MNOGOKOTNIK (A), KONKAVNI MNOGOKOTNIK (B) IN ZVEZDNI MNOGOKOTNIK (C)... 87 SLIKA 64: PRIKAZ METANJA ŽARKOV V NOTRANJOST MNOGOKOTNIKA.... 93 SLIKA 65: PRIMER EKSAKTNE SREDNJE OSI (A), APROKSIMACIJE SREDNJE OSI (B) IN PLOŠČINE MED NJIMA (C).... 94 VIII

Seznam tabel TABELA 1: PRIMERJAVA IZVAJALNIH ČASOV (MS) NAŠEGA APROKSIMACIJSKEGA ALGORITMA IN ALGORITMA ZA GENERIRANJE EKSAKTNE SREDNJE OSI.... 88 TABELA 2: MERITVE ČASA IZVAJANJA ZA REALNE PRIMERE MNOGOKOTNIKOV V MILISEKUNDAH.... 89 TABELA 3: IZVAJALNI ČASI (MS) PO KORAKIH ZA ALGORITEM VANGOGH IN PRIMERJAVA LE-TEH Z ALGORITMOM TRIANGULACIJE, KI TEMELJI NA PREBIRNI PREMICI.... 90 TABELA 4: TRIANGULACIJA REALNIH PRIMEROV MNOGOKOTNIKOV.... 91 TABELA 5: PRIMERJAVA NAŠEGA ALGORITMA Z VORONOIJEVIM DIAGRAMOM.... 95 IX

Seznam kratic in pojmov CDT - omejena Delaunayjeva triangulacija (angl. constrained Delaunay Triangulation AMA - aproksimacijska srednja os (angl. Approximative Medial Axis) EMA - eksaktna srednja os (angl. Exact Medial Axis) VDA - algoritem Voronoijevega digrama (angl. Voronoi diagram algorithm) DAG - usmerjeni aciklični graf (angl. Directed Acyclic Graph) DT - Delaunayjeva triangulacija (angl. Delaunay triangulation) GIS - geografski informacijski sistem (angl. Geographical Information System) LFS - velikost lokalne značilnosti (angl. Local Feature Size) PSLG - ravninski premočrtni graf (angl. Planar Straight-line Graph) X

Seznam oznak P E G p, p i p(p i, a, b) v i p i j v i j e i,j v i v i v c v r v s o, o i - množica točk - množica robov - ravninski graf G = {P, E} - točka - pravokotna projekcija točke p i na premico ab - oglišče - daljica med točkama p i in p j - daljica med ogliščema v i in v j - rob med ogliščema v i in v j - vektor - vektor, ki je pravokoten na vektor v i - konveksno oglišče - konkavno oglišče - Steinerjeva točka - element, ki predstavlja oglišče, točka ali rob mnogokotnika ijk T s T i,j,k - trikotnik z oglišči v i, v j in v k - trikotniški trak - triangulacija - trikotnik z oglišči i, j in k, i - trikotnik DT, DT(P) - Delaunayjeva triangulacija CDT, CDT(P, E) - omejena Delaunayjeva triangulacija σ, σ i - veriga s, s i - seznam verig k - krožnica c i K, K i B(o i, o j ) VD, VD(P) - središče krožnice - maksimalna krožnica - bisektor elementov o i in o j - Voronoijev diagram GVD, GVD(P, E) - posplošen Voronoijev diagram XI

GVD(σ i ) V(p i ) q(t) a i A p +, p t i A, B, C J Γ v p u p g p V R m D S, S a, S b, S c φ F - posplošen Voronoijev diagram verige σ i - Voronoijeva celica točke p i - krivulja - krožni lok - aproksimacija prosto oblikovanega objekta - pol - dotikališče oz. tangentna točka - tipi trikotnikov - stičišče med dvema krožnima lokoma - stičiščna krožnica - vektor pola - dežnik - gorišče parabole - teme parabole - ravnina - točka na srednji osi - površje - ploščina - gradient - hitrost XII

APROKSIMACIJSKI ALGORITEM GRADNJE SREDNJE OSI ENOSTAVNIH MNOGOKOTNIKOV, TEMELJEČ NA OMEJENI DELA- UNAYJEVI TRIANGULACIJI UDK: 004.925.8(043.3) Ključne besede: računalniška geometrija, algoritmi, skeleton, srednja os, omejena Delaunayjeva triangulacija, Steinerjeve točke Povzetek: V doktorski disertaciji uvedemo nov postopek gradnje aproksimativne srednje osi, ki je učinkovitejši od obstoječih metod. Naprej opredelimo problem, področja uporabe in podamo hipotezi. V nadaljevanju na kratko razložimo Voronoijev diagram in opozorimo na povezavo med njim in Delaunayjevo triangulacijo, ki jo razširimo še z opisom omejene Delaunayjeve triangulacije. Zatem se osredotočimo na algoritme gradnje srednje osi, ki jih delimo na eksaktne in aproksimacijske. Sledijo definicije in pregled dosedanjih rešitev. V jedru doktorske disertacije opišemo nov algoritem za konstrukcijo aproksimacije srednje osi mnogokotnika. V tem poglavju opišemo naš algoritem za triangulacijo enostavnega mnogokotnika, uporabljeno hevristiko in korak generiranja srednje osi iz središč dobljenih trikotnikov. Sledi analiza algoritma, kjer izpeljemo prostorsko in časovno zahtevnost, in primerjava našega algoritma z obstoječimi metodami. Razvijemo tudi novo metriko za oceno kakovosti aproksimacije. Doktorsko disertacijo zaključimo s pregledom opravljenega dela in opozorimo na izvirne znanstvene prispevke. XIII

APPROXIMATION ALGORITHM FOR MEDIAL AXIS COMPU- TATION ON SIMPLE POLYGONS USING CONSTRAINED DELAU- NAY TRIANGULATION UDK: 004.925.8(043.3) Keywords: computer geometry, algorithms, skeleton, medial axis, constrained Delaunay triangulation, Steiner points Abstract: In this doctoral dissertation a new method for approximating a polygon s medial axis is introduced. As shown by experiments, the new method is more efficient than the existing methods. Firstly the definition of the main problem is given. This is followed by the description of fields, where the medial axis is used, and finished with the hypotheses. In the next chapter, the connection between the Voronoi diagram and the Delaunay triangulation is mentioned, which is followed by the description of the constrained Delaunay triangulation. In the next chapter, algorithms for medial axis construction are described and classified into groups of exact and approximate algorithms. This is followed by definitions and an overview of existing methods. The core of this doctoral dissertation is composed of the description of a new algorithm for medial axis construction of a simple polygon. In this chapter, the triangulation, heuristics and the step for medial axis construction out of the triangles circumcentres are described. The next chapter is devoted to the analysis of our algorithm. Here the time and space complexity are derived and the comparison of our algorithm with the existing ones is given. This is followed by the description of a metric, which evaluates the exactness of a polygon s medial axis. The doctoral dissertation is concluded with evaluation of the hypotheses and an overview of the scientific contributions. XIV

1 Uvod 1.1 Opredelitev problema Doktorska disertacija obravnava problem gradnje srednje osi (angl. medial axis) enostavnih mnogokotnikov. Srednja os je množica vseh točk, ki so enako oddaljene do najbližjih robov mnogokotnika. Problem je leta 1969 opredelil Blum kot koncept za prepoznavanje bioloških oblik [1, 2]. Predlagal je dva načina konstrukcije srednje osi: povezovanje središč sosednjih maksimalnih krožnic mnogokotnika in pomikanje mej mnogokotnika v notranjost, dokler se le-te ne presekajo. Množica presečišč predstavlja srednjo os mnogokotnika. Srednjo os uporabljamo na veliko področjih, kot so: razpoznavanje znakov [119], razpoznavanje obrazov [5], geografski informacijski sistemi [3, 4], tridimenzionalno upodabljanje črk [98], opis znakov in simbolov [99], razpoznavanje oblik [100, 101], iskanje poti [6, 7, 8, 112], obdelava slik [9, 105], računalniški vid [10, 11], stroji CNC [14], robotika [38], medicina [39, 97, 103], klasifikacija kromosomov [120], realno-časovno zaznavanje trkov [12, 106], drenažni vzorci vodotokov [107], načrtovanje gibanja [108], ujemanje oblik [109, 110] in drugo [15, 16, 102, 104, 111]. Algoritme za gradnjo srednje osi delimo na eksaktne in približne oz. aproksimacijske. Algoritmi za eksaktno srednjo os velikokrat ne podpirajo mnogokotnikov z luknjami, so implementacijsko zahtevni in pogosto numerično nestabilni [17, 18, 19]. Nekateri algoritmi temeljijo na dekompoziciji domene [20], kjer začetni mnogokotnik delimo na enostavnejše dele, dokler ne pridemo do primera, za katerega je rešitev znana. V zadnjem koraku zlijemo posamezne srednje osi poddomen v celotno srednjo os. Drugi algoritmi rešujejo omenjeni problem na analitičen način [33]. Za vsako konveksno oglišče izračunajo razpolovišče kota in potegnejo žarek proti notranjosti mnogokotnika. Nato izračunajo presečišča med žarki in postopek ponavljajo, kjer prvotna oglišča zamenjajo presečišča žarkov. Aproksimacijske algoritme delimo na vektorske in rastrske. Vektorski algoritmi uporabljajo Voronoijev diagram [17, 23], ki ga zgradijo nad množico točk na robovih mnogokotnika. Voronoijeve točke so potem točke, ki so enako oddaljene do vsaj treh točk mnogokotnika in predstavljajo točke na srednji osi [19]. Isti pristop uporabljamo 1

tudi za prosto oblikovane oblike. Meje mnogokotnika diskretiziramo in nad tako dobljeno množico točk zgradimo Voronoijev diagram. Opisani pristop deluje dobro samo pri primerni diskretizaciji. Bolj kot je diskretizacija gosta, bolj Voronoijeve točke konvergirajo proti srednji osi [24] in obratno. Eksaktno rešitev dobimo, če razdalja med sosednjima diskretiziranima točkama teži proti nič. Ekstremno situacijo dobimo, ko diskretizacije ne opravimo. V tem primeru je lahko dobljena srednja os popolnoma nepravilna. Kljub temu da poznamo hitre algoritme za konstrukcijo Voronoijevega diagrama, velika količina diskretiziranih točk ni zaželena, saj podaljšuje izvajalne čase algoritmov. Druga vrsta aproksimacijskih algoritmov rešuje problem konstrukcije srednje osi mnogokotnika na rastrskem nivoju. Algoritmi temeljijo na morfološki operaciji»krčenje«[37, 42, 44] (angl. thinning). Operacijo lahko izvajamo na rasteriziranih objektih. Pri teh postopkih je čas izvajanja pri večjih ločljivostih dolg, pri manjših ločljivostih pa daje nenatančne rezultate [36]. Nekateri algoritmi rešujejo problem srednje osi na rastrskem nivoju z računanjem evklidske razdalje. Ti algoritmi prejmejo na vhodu seznam oglišč mnogokotnika, nato pa za vsako točko v mnogokotniku izračunajo razdaljo do robov mnogokotnika. Točka je na srednji osi, če sta najkrajši razdalji enako dolgi. Algoritmi, ki uporabljajo ta pristop, so preprosti za implementacijo in razširljivi na poljubne dimenzije. Težava pa je v določitvi ustrezne pragovne funkcije in v visokih izvajalnih časih. Za reševanje slednje slabosti si pomagamo z delitvijo prostora. V 2D večinoma uporabljamo štiriška, v 3D pa osmiška drevesa. Algoritmi, ki spadajo v to skupino, lahko dokaj natančno generirajo srednjo os, težave pa imajo pri konstrukciji same srednje osi iz dobljenih točk [39]. Točke, ki sestavljajo srednjo os, namreč izračunamo posamezno, ne glede na njene sosedne točke, ki prav tako sestavljajo srednjo os. Zaradi omenjene slabosti pristop uporabljamo pri analizi slik in vzorcev, kjer povezanost med sosednimi točkami na srednji osi pogosto ni pomembna. V naši nalogi se bomo osredotočili na aproksimacijske algoritme za generiranje srednje osi enostavnih mnogokotnikov na vektorskem nivoju. Namesto Voronoijevega diagrama bomo uporabili omejeno Delaunayjevo triangulacijo. Središča Delaunayjevih trikotnikov Delaunayjeve triangulacije namreč sovpadajo z Voronoijevimi točkami, zato pričakujemo, da bo vsaj večina trikotnikov omejene Delaunayjeve triangulacije tudi so- 2

vpadala z Voronoijevimi točkami. Dobljene trikotnike omejene Delaunayjeve triangulacije bomo analizirali in, če bo potrebno, vstavili dodatne (t. i. Steinerjeve) točke na meje mnogokotnika. V zadnjem koraku bomo s povezovanjem središč sosednjih trikotnikov zgradili aproksimacijsko srednjo os. Pričakujemo, da bo s predlaganim pristopom treba vstaviti veliko manj točk kot pri metodi z Voronoijevim diagramom ob zagotavljanju enake stopnje natančnosti. 1.2 Cilji Cilj doktorske disertacije je proučiti eksaktne in aproksimativne algoritme za gradnjo srednje osi enostavnih mnogokotnikov. Razviti želimo nov aproksimacijski algoritem, ki bo dajal sprejemljive rezultate pri občutno manjšem številu dodatnih točk kot do sedaj obstoječi algoritmi, ki temeljijo na konstrukciji Voronoijevega diagrama. Menimo, da bo zato pri isti natančnosti aproksimacije algoritem hitrejši glede na obstoječe algoritme. Algoritem bo uspešno reševal mnogokotnike brez in z luknjami. Teza doktorske disertacije temelji na dejstvu, da obstoječi aproksimacijski postopki za gradnjo srednje osi potrebujejo veliko število dodatnih kontrolnih točk (Steinerjeve točke) na robovih mnogokotnika, da dosežejo želeno natančnost. Posledica tega so daljši izvajalni časi algoritma. Zato postavimo naslednjo hipotezo: Hipoteza 1: Za generiranje aproksimacije srednje osi enostavnega mnogokotnika lahko namesto Voronoijevega diagrama uporabimo omejeno Delaunayjevo triangulacijo in Steinerjeve točke, vstavljene na robove mnogokotnika. Za pristop z Voronoijevim diagramom velja, da je natančnost rešitve zelo odvisna od števila dodatnih kontrolnih točk, postavljenih na robove mnogokotnika. Zato robove mnogokotnika diskretiziramo. Gostoto diskretizacije nadziramo z uporabniško določeno pragovno funkcijo. Menimo, da je dovolj dobro aproksimacijo srednje osi možno doseči z mnogo manj dodatnimi vstavljenimi kontrolnimi točkami ob uporabi ustreznih hevristik, s čimer se izognemo tudi pragovni funkciji. Zato bomo preverili naslednjo hipotezo: 3

Hipoteza 2: Število Steinerjevih točk, vstavljenih na robove mnogokotnika, je možno zmanjšati s hevristikami, ki zagotovijo izgradnjo ustrezne triangulacije, primerne za konstrukcijo aproksimativne srednje osi, s čimer odpravimo uporabniško nastavljivo pragovno funkcijo. Za testiranje hipotez bomo razvili in implementirali nov aproksimacijski algoritem gradnje srednje osi. Za gradnjo omejene Delaunayjeve triangulacije bomo uporabili eno izmed znanih rešitev. Algoritem bomo testirali na umetnih in realnih podatkih. Dobljene rezultate bomo primerjali glede na izvajalni čas in pravilnost rešitve z obstoječimi aproksimacijskimi in eksaktnimi algoritmi za konstrukcijo srednje osi. Opravili bomo tudi primerjavo med našim pristopom in tistim z Voronoijevim diagramom ter razvili metrike za določanje ustreznosti aproksimacije. 1.3 Struktura disertacije Doktorska disertacija sestoji iz sedmih poglavij. V drugem poglavju na kratko povzamemo lastnosti Voronoijevih diagramov in njihovega duala Delaunayjeve triangulacije. Ker bo razviti algoritem temeljil na omejeni Delaunayjevi triangulaciji, ji namenimo svoje poglavje (poglavje 3). V naslednjem poglavju opravimo pregled sorodnih del. Jedro doktorske disertacije predstavlja poglavje 5, kjer podamo nov aproksimacijski algoritem konstrukcije srednje osi. Temu sledi analiza časovne in prostorske zahtevnosti algoritma (poglavje 6). V tem poglavju algoritem primerjamo tudi z do sedaj obstoječimi rešitvami ter se opredelimo do postavljenih hipotez. Nalogo povzamemo v poglavju 7, kjer izpostavimo izvirne znanstvene prispevke. 4

2 Voronoijev diagram in Delaunayjeva triangulacija Začetki Voronoijevih diagramov in Delaunayjeve triangulacije segajo v 17. stoletje. Descartes je v svojem delu Principia Philosophiae leta 1644 in Le Monde leta 1664 vpeljal diagrame, ki po strukturi in pravilih gradnje ustrezajo današnjim Voronoijevim diagramom [22]. Descartesovi diagrami razdelijo prostor na konveksna področja, uporabil pa jih je za preučevanje relacij med nebesnimi telesi oz. analizo sončnega sistema, kar je prikazano na sliki 1. S S je označeno sonce, ε je zvezda, RQD pa pot kometa. Kljub temu da je Descartes iznašel novo delitev prostora, zanjo ni vpeljal formalne definicije. Slika 1: Delitev prostora na konveksna področja, kot jo je predlagal Descartes (povzeto po [56]). Šele leta 1907 je ruski matematik Voronoi postavil matematične temelje delitve prostora na konveksna področja [29, 57]. Definicija Voronoijevega diagrama [29] pravi naslednje: Imejmo točke p i P, 0 < i n v d-dimenzionalnem prostoru. Množico točk z lastnostjo, da so vse točke znotraj nekega območja bližje točki p i kot katerikoli drugi točki 5

iz P, imenujemo Voronoijeva celica. Unija Voronoijevih celic predstavlja Voronoijev diagram. Točkam p i pravimo Voronoijeva središča, robovom Voronoijevi robovi in stičiščem Voronoijevih robov Voronoijeve točke. Slika 2: Primer Voronoijevega diagrama. Primer Voronoijevega diagrama vidimo na sliki 2. Voronoijevi diagrami pogosto predstavljajo odskočno desko pri reševanju raznovrstnih geometrijskih problemov, kot so: določitev najbližjih sosedov dane točke, iskanje minimalnega vpetega drevesa (Evklidovo drevo), določitev konveksne lupine, tvorba Delaunayjeve triangulacije, iskanje največje krožnice. Voronoijevi diagrami so uporabni tudi na drugih področjih, kot so: antropologija in arheologija [69], astronomija [56], biologija, ekologija in gozdarstvo [72, 76], kartografija [59], kristalografija in kemija [73, 75, 77], geologija [62], trženje [63], fizika [78], metalurgija [64], metalografija [74], meteorologija in geografija [79], razpoznavanje vzorcev [67], fiziologija [66], robotika [68], zoologija [65], generiranje mrež [13, 61], vzorci širjenja [58]. 6

S pojavom računalnikov so začeli razmišljati tudi o algoritmih za konstrukcijo Voronoijevih diagramov [60]. Sprva so bili ti algoritmi počasni (delovali so v času O(n 2 )), kasneje, sredi sedemdesetih, pa so dosegli časovno zahtevnost O(n log n) [25, 28, 29, 70, 71]. Voronoi je bil tudi prvi, ki je razmišljal o povezovanju središčnih točk med področji (celicami), ki imajo skupen rob, s čimer je dobil Delaunayjevo triangulacijo (slika 3). Voronoijev diagram in Delaunayjeva triangulacija sta dualna grafa. Delaunayjevo triangulacijo je formaliziral ruski matematik Boris Nikolajevič Delone. Dokazal je tako imenovano pravilo praznega kroga, ki je preprost test, s katerim preverimo, ali je obravnavana triangulacija optimalna glede na minimalni notranji kot trikotnikov. Takšni optimalni triangulaciji pravimo Delaunayjeva triangulacija, pravilu pa Delaunayjevo pravilo. Slika 3: Sovpadanje Voronoijevih točk in središč trikotnikov Delaunayjeve triangulacije. Delaunayjeva triangulacija je predstavljena s črtkanimi, Voronoijev diagram pa s polnimi črtami, polne točke predstavljajo oglišča Delaunayjevih trikotnikov, prazne pa Voronoijeve točke in središča Delaunayjevih trikotnikov. Delaunayjevo pravilo praznega kroga je definirano kot [93]: Naj bo rob e i,j skupen trikotnikoma i,j,k in i,j,l in naj bo k krožnica skozi točke p i, p j in p k. Rob e i,j je nelegalen natanko takrat, ko točka p l leži v notranjosti krožnice 7

k. Nadalje, če točke p i, p j, p k in p l tvorijo konveksni štirikotnik in ne ležijo na skupni krožnici, je natanko eden izmed robov e i,j in e k,l nelegalen. Iz izreka sledi naslednja ugotovitev. Če vsakemu trikotniku v triangulaciji T očrtamo krožnico in se znotraj krožnice ne nahaja nobena druga točka iz P, je triangulacija legalna in jo imenujemo Delaunayjeva triangulacija. Lawson [55] je dokazal, da je možno vsako triangulacijo spremeniti v Delaunayjevo triangulacijo s postopkom legalizacije. Postopek legalizacije preveri, če je rob med dvema sosednjima trikotnikoma legalen, in če ni, trikotnikoma zamenja skupni rob (slika 4). Legalnost skupnega roba preverjamo z Delaunayjevim pravilom. Legalizacija se izvaja tako dolgo, dokler v triangulaciji ni več nelegalnih robov. Slika 4: Postopek zamenjave robov legalizacija. 8

3 Omejena Delaunayjeva triangulacija Delaunayjevo triangulacijo [30, 31, 47] je možno razširiti tako, da vhodna množica vsebuje tudi daljice. Ta problem so v računalniški geometriji poimenovali omejena Delaunayjeva triangulacija (angl. constrained Delaunay triangulation ali CDT). Z upoštevanjem robov, ki po triangulaciji postanejo robovi trikotnikov, triangulacija ni več Delaunayjeva, ampak je triangulacija, ki se samo približa Delaunayjevi triangulaciji. Če vhodna daljica predstavlja nelegalni rob, tega s prej omenjenim postopkom legalizacije ne smemo zamenjati. Tem robovom pravimo omejujoči robovi (angl. constrained edges). Omejeno Delaunayjevo triangulacijo pogosto uporabljamo na primer v GIS-u [52, 53, 54] in pri načrtovanju poti [48, 49, 50, 51]. Slika 5: Vhodna množica točk in daljic (a), Delaunayjeva triangulacija (b) in omejena Delaunayjeva triangulacija (c). Vhodno množico triangulacije predstavlja ravninski graf G = {P, E} (angl. planar straight-line graph ali PSLG), kjer je P množica točk, E pa množica robov (glej sliko 5a). 9

Če trianguliramo samo točke iz P, potem dobimo Delaunayjevo triangulacijo (slika 5b). Robovi Delaunayjevih trikotnikov Delaunayjeve triangulacije lahko sekajo vhodne omejujoče robove. Če množica omejujočih robov sovpada z robovi trikotnikov, dobimo omejeno Delaunayjevo triangulacijo (slika 5c). Ker Delaunayjevo pravilo praznega kroga ne upošteva robov iz E, uvedemo tako imenovano šibko Delaunayjevo pravilo [93], ki je kombinacija Delaunayjevega pravila in vidnosti. Vidnost definiramo kot: Točki p i in p j sta medsebojno vidni, če povezava med njima ne seka nobenega roba iz E in če točki p i in p j ne predstavljata oglišč roba iz E. Definicija omejene Delaunayjeve triangulacije [93] se potemtakem glasi: Omejena Delaunayjeva triangulacija nad ravninskim grafom G = {P, E} je takšna triangulacija, ki vsebuje vse robove iz E, in velja, da očrtan krog trikotnika v triangulaciji ne vsebuje točke iz P, ki je vidna iz vseh oglišč trikotnika. Poglejmo primer na sliki 6. Trikotnik krši Delaunayjevo pravilo prazne krožnice. Po definiciji Delaunayjeve triangulacije bi morali rob e i,j zamenjati z robom e k,l. Vendar tega ne smemo storiti, saj je rob e i,j omejujoči rob. Zagotoviti moramo še, da očrtana krožnica trikotnika ne vsebuje nobenih točk, ki so vidne iz vseh oglišč trikotnika. Taka točka na sliki 6a je točka p m. Postopek legalizacije v tem primeru zamenja robova e j,k in e i,m. Na sliki 6b vidimo omejeno Delaunayjevo triangulacijo po legalizaciji. 10

Slika 6: Legalizacija in vidnost. Delaunayjeva triangulacija je le specifičen primer omejene Delaunayjeve triangulacije. Omejena Delaunayjeva triangulacija nad grafom G = {P, E} je Delaunayjeva triangulacija, kadar je seznam robov E prazen. DT(G) = CDT(G); G = {P, E}; E = Ta trditev velja tudi takrat, kadar so vsi robovi iz seznama robov E Delaunayjevi. 11

4 Pregled obstoječih metod za konstrukcijo srednje osi mnogokotnikov 4.1 Eksaktna metoda Najbolj poznana metoda konstrukcije eksaktne srednje osi enostavnega mnogokotnika je metoda Leeja iz daljnega leta 1988 [33]. Algoritem deluje po strategiji deli in vladaj. Na vhodu prejme zaporedje oglišč mnogokotnika v 1, v 2,, v n. Mnogokotnik mora biti orientiran v nasprotni smeri urinega kazalca. V koraku deli za vhodni seznam oglišč sprva ustvarimo h verig (angl. chain) σ 1, σ 2,, σ h. Za vsako verigo σ i ; 0 i h izračunamo posplošen Voronoijev diagram (angl. generalized Voronoi diagram) [26, 27, 45, 96]. V koraku vladaj algoritem združuje posplošene Voronoijeve diagrame posameznih verig, dokler ne ostane samo eden. Opisana metoda deluje v treh korakih, in sicer: generiranje verig, računanje posplošenega Voronoijevega diagrama posameznih verig in združevanje Voronoijevih diagramov verig. 4.1.1 Generiranje verig Naj bo dan enostavni mnogokotnik, ki je sestavljen iz robov e i,i+1, i = 0, 1,..., n 1. Veriga σ mnogokotnika predstavlja zaporedje oglišč mnogokotnika v j, v j+1, v j+2,, v k 1, v k, tako da sta oglišči v j in v k konveksni, oglišča v j+1, v j+2,, v k 1 pa konkavna. Število verig, ki jih dobimo na enostavnem mnogokotniku, je n m, kjer je n število vseh oglišč, m pa število konkavnih oglišč. Za konveksni mnogokotnik potem dobimo toliko verig, kolikor je oglišč. 12

Za zgled vzemimo generiranje verig nad oglišči mnogokotnika na sliki 7a, kjer so oglišča v 4, v 5, v 6, v 7, v 9, v 10, v 12, v 13, v 14, v 15 in v 16 konveksna, oglišča v 1, v 2, v 3, v 8 in v 11 pa konkavna. Slika 7: Mnogokotnik (a), verige oglišč mnogokotnika (b). Iz primera na sliki 7b dobimo naslednje verige: σ 1 = v 16, v 1, v 2, v 3, v 4 σ 2 = v 4, v 5 σ 3 = v 5, v 6 σ 4 = v 6, v 7 σ 5 = v 7, v 8, v 9 σ 6 = v 9, v 10 σ 7 = v 10, v 11, v 12 σ 8 = v 12, v 13 σ 9 = v 13, v 14 σ 10 = v 14, v 15 σ 11 = v 15, v 16 4.1.2 Računanje posplošenega Voronoijevega diagrama V drugem koraku za vsako izmed dobljenih verig σ i, 1 i h izračunamo posplošen Voronoijev diagram [45]. Ta je za posamezno verigo sestavljen zgolj iz žarkov v konkavnih ogliščih vhodnega mnogokotnika. Žarki potekajo iz konkavnega oglišča proti notranjosti mnogokotnika in so pravokotni na robova mnogokotnika v tem oglišču (slika 8). Z računanjem presečišč med žarki oz. bisektorji nastajajo daljice in parabole. 13

Slika 8: Posplošen Voronoijev diagram nad verigo, ki je sestavljena iz elementov (oglišče ali rob mnogokotnika). Daljice dobimo z določitvijo bisektorja med: dvema robovoma mnogokotnika, ki si delita konveksno oglišče, in dvema poljubnima robovoma mnogokotnika. Bisektor med dvema robovoma mnogokotnika, ki si delita konveksno oglišče, izračunamo po naslednjem postopku: Naj bosta daljici predstavljeni s točkami p 1, p 2 in p 3, kjer je p 2 skupno konveksno oglišče. Sprva izračunamo smerna vektorja v 1 in v 2 daljic p 2 1 in p. 2 3 Nato vektorja v 1 in v 2 normaliziramo in po enačbi (1) izračunamo vektor v, ki predstavlja vektor bisektorja med dvema daljicama s skupnim ogliščem. v = v 1 + (v 2 v 1 ) 2 (1) V naslednjem koraku vektor v pretvorimo v poltrak z izhodiščem v skupnem oglišču in izračunamo pravokotno projekcijo točk p 1 in p 3 (označeni s p 1 in p 3 ) na dobljen poltrak. Rezultat je krajša daljica izmed p 2 1 in p. 2 3 Postopek vidimo na sliki 9a. 14 Bisektor med poljubnima robovoma mnogokotnika določimo na podoben način (slika 9b). Imejmo daljici p 1 2 in p. 3 4 Najprej izračunamo smerna vektorja v 1 daljice

p 2 1 in v 2 daljice p. 4 3 Nato daljici pretvorimo v premici in izračunamo presečišče med njima. Po enačbi (1) izračunamo vektor v, ki predstavlja vektor bisektorja med daljicama. S pomočjo presečišča med premicama in vektorja v izračunamo poltrak, ki razpolavlja kot med daljicama p 1 2 in p. 3 4 Nato izračunamo pravokotno projekcijo za vse točke obeh daljic na dobljen poltrak. Projicirane točke označimo s p 1, p 2, p 3 in p 4. Rezultat je daljica na notranjih točkah (daljica p 2 3 na sliki 9b). Slika 9: Postopek izračuna bisektorjev. Drugi tip gradnika, ki sestavlja posplošeni Voronoijev diagram, so parabole. Parabole nastanejo zaradi računanja bisektorja med robom mnogokotnika in konkavnim ogliščem. Parabola je predstavljena z enačbo (2), (x x 1 ) 2 = 4 d (y y 1 ), (2) kjer sta x in y spremenljivki. Točka p v = (x 1, y 1 ) predstavlja teme parabole, d pa je evklidska razdalja od temena do gorišča g parabole. Za izračun parabole potrebujemo premico (imenujemo jo vodnica ali angl. directrix) in goriščno točko (angl. focus), ki ni na premici. Sprva rob mnogokotnika pretvorimo v premico, ki predstavlja vodnico in poteka 15

skozi oglišči roba mnogokotnika v 1 in v 2. Nato izračunamo pravokotno projekcijo goriščne točke g (konkavno oglišče mnogokotnika) na premico, da dobimo točko g. Na daljici gg izračunamo središčno točko p v. Razdalja od gorišča g parabole do središčne točke p v predstavlja parameter d v enačbi (2) (glej sliko 10). Tako dobimo vse parametre za izračun parabole. Slika 10: Parabola med goriščem g in premico skozi oglišči v1 in v2. slika 11. Izračunani posplošeni Voronoijev diagram vstavimo v dvojiško drevo, kot kaže Slika 11: Dvojiško drevo posplošenih Voronoijevih diagramov verig. 16

Za dobljenih h verig bo globina drevesa log 2 h. Posplošene Voronoijeve diagrame verig shranimo v liste drevesa, v notranjih vozliščih dvojiškega drevesa pa dobimo združene posplošene Voronoijeve diagrame sinov, ki jih označimo z GVD(s i ). 4.1.3 Združevanje posplošenih Voronoijevih diagramov verig V zadnjem koraku združujemo posplošene Voronoijeve diagrame posameznih verig. Združevanje poteka na sledeč način: Sprva se rekurzivno sprehodimo po drevesu, dokler ne naletimo na prazno notranje vozlišče, ki ima za oba sinova posplošena Voronoijeva diagrama, ki ju združimo. Združen posplošeni Voronoijev diagram GVD(s i ) se zapiše v notranje vozlišče. Postopek se ponavlja, dokler ne obiščemo vseh vozlišč. Končna rešitev je posplošen Voronoijev diagram, zapisan v korenu dvojiškega drevesa. Postopek združevanja dveh posplošenih Voronoijevih diagramov seznamov verig s 1 in s 2 je realiziran na sledeč način: Naj bo s 1 predstavljen z elementi o 1, o 2, o j in s 2 naj predstavlja o j+1, o j+2, o n. o 1 je prvi element verige σ 1, o j pa zadnji element verige σ h 2. o j+1 je prvi element σ h 2 +1, o n pa zadnji element σ h. Za združitev dveh posameznih posplošenih Voronoijevih diagramov potrebujemo delilko oz. delilno lomljenko. Konstrukcija delilke se začne z določitvijo začetnega in končnega bisektorja. Začetni bisektor je definiran z elementoma o j in o j+1 (končni element zadnje verige v s 1 in začetni element prve verige v s 2 ). Ta si delita oglišče v j+1, ki je konveksno. Bisektor B(o j, o j+1 ) konveksnega oglišča predstavlja razpolovišče kota v oglišču v j+1 in ga vzamemo za začetni bisektor. Podobno je skupno oglišče med o 1 in o n (začetni element prve verige v s 1 in končni element zadnje verige v s 2 ) oglišče v 1, ki je prav tako konveksno. Bisektor tega je tudi razpolovišče kota v oglišču v 1 in predstavlja končni bisektor. Po določitvi začetnega in končnega bisektorja pričnemo z gradnjo skupnega posplošenega Voronoijevega diagrama. Združevanje pričnemo v začetnem bisektorju B(o j, o j+1 ). Od tega bisektorja se pomikamo v protiurni smeri in preverjamo, ali obstaja bisektor B(o j, o s ), ki seka začetni bisektor. Ko tega najdemo, se od začetnega bisektorja pomikamo v smeri urinega kazalca in iščemo bisektor B(o j+1, o t ), ki prav tako seka začetni bisektor. V naslednjem koraku preverimo, kateri izmed B(o j, o s ) in B(o j+1, o t ) prvi seka začetni bisektor B(o j, o j+1 ) ta ima krajšo dolžino od začetne točke bisektorja do presečišča. Če je prvi bisektor B(o j, o s ), ki seka začetni bisektor, potem nadaljujemo z 17

združevanjem, kjer postane začetni bisektor B(o s, o j+1 ). V nasprotnem primeru za začetni bisektor vzamemo bisektor B(o j, o e ). Združevanje po tem postopku se nadaljuje, dokler ne pridemo do končnega bisektorja ali dokler ne pride do primera, ko ne najdemo dveh presečišč za trenutni bisektor. Poglejmo primer združevanja dveh posplošenih Voronoijevih diagramov na sliki 12, kjer je s 1 = {σ 1 = (o 1 ), σ 2 = (o 2 ), σ 3 = (o 3, o 4, o 5, o 6, o 7, ), σ 4 = (o 8 )} in s 2 = {σ 5 = (o 9 ), σ 6 = (o 10 ), σ 7 = (o 11 ), σ 8 = (o 12, o 13 ), σ 9 = (o 14, o 15 )}. Slika 12: verig s1 in s2. Prikaz dveh posplošenih Voronoijevih diagramov in njunih seznamov Posplošen Voronoijev diagram seznama verig s 1 je na sliki 12 označen s polno črto, s 2 pa črtkano. Sprva določimo začetni in končni bisektor. V seznamu verig s 1 je zadnji element o 12, prvi element v seznamu verig s 2 pa element o 13. Tako določimo začetni bisektor B(o 12, o 13 ) (razpolovišče kota med skupnim ogliščem elementov o 12 in 18

o 13 ), skupno oglišče pa je konveksno. Končnega bisektorja ne moremo določiti, saj verigi nista sklenjeni. Če sta verigi sklenjeni, lahko končni bisektor določimo tako, da vzamemo prvo oglišče seznama verig s 1 in zadnje oglišče seznama verig s 2. Nato se prične postopek združevanja. Robove pregledujemo v protiurni smeri od elementa o 12 in v smeri urinega kazalca od elementa o 13 ter iščemo presečišča med začetnim bisektorjem B(o 12, o 13 ) in bisektorji obravnavanih elementov o. Na primeru na sliki 12 iz elementa o 12 pridemo do bisektorja B(o 11, o 12 ). Za tega ugotovimo, da se ne seka z našim začetnim bisektorjem B(o 12, o 13 ). Nadaljujemo na bisektorju B(o 10, o 12 ) in ugotovimo, da se seka z B(o 12, o 13 ). Nadaljujemo iskanje drugega bisektorja iz elementa o 12 v smeri urinega kazalca. Sprva preverimo bisektor B(o 13, o 14 ). Zanj ugotovimo, da se ne seka z B(o 12, o 13 ). Tako nadaljujemo in preverjamo bisektorje B(o 13, o 15 ), B(o 13, o 16 ) in tudi zanje ugotovimo, da ne sekajo B(o 12, o 13 ). Nato preverimo B(o 13, o 17 ) in ugotovimo, da se seka z B(o 12, o 13 ). Sedaj, ko smo na obeh straneh našli bisektor, ki se seka z začetnim bisektorjem, preverimo, katero presečišče (B(o 12, o 13 ) in B(o 10, o 12 ) ali B(o 12, o 13 ) ali B(o 13, o 17 )) je bližje oglišču, iz katerega izhaja začetni bisektor. Ugotovimo, da je to bisektor B(o 10, o 12 ), in določimo naslednji bisektor; to je B(o 10, o 13 ). Sedaj postopek ponavljamo, tako da pregledujemo bisektorje iz elementa o 10 v nasprotni smeri urinega kazalca z zadnjim pregledanim bisektorjem B(o 10, o 13 ) in iz elementa o 13 v smeri urinega kazalca z zadnjim pregledanim bisektorjem B(o 13, o 17 ), da poiščemo bisektor, ki seka B(o 10, o 13 ). Tako v nasprotni smeri urinega kazalca pregledamo bisektorje in ugotovimo, da bisektor B(o 9, o 10 ) seka B(o 10, o 13 ). Pregledujemo od elementa o 13 v smeri urinega kazalca in iščemo bisektor, ki seka B(o 10, o 13 ). Prvi preverjen bisektor zadovolji pogoj. Tako na tej strani dobimo B(o 13, o 14 ). Preverimo še, kateri izmed bisektorjev (B(o 9, o 10 ) in B(o 13, o 14 )) prvi seka bisektor B(o 10, o 13 ). Ugotovimo, da je to bisektor B(o 9, o 10 ). Tako dobimo na eni strani začetni bisektor B(o 9, o 13 ). Postopek ponavljamo, dokler ne pridemo do bisektorja B(o 6, o 20 ). Kljub temu da bisektor ne predstavlja končnega bisektorja, se po obdelavi tega postopek združevanja konča, saj je bisektor B(o 17, o 20 ) edini, ki seka bisektor B(o 6, o 20 ). Na koncu postopka zbrišemo vse robove, ki ležijo na desni strani s 1, in vse robove, ki ležijo na levi strani s 2. Rezultat vidimo na sliki 13. 19

Slika 13: Združena posplošena Voronoijeva diagrama. 20

4.2 Aproksimacijske metode V tem podpoglavju bomo predstavili aproksimacijske metode. Delimo jih na metode, ki delujejo na vektorskem in rastrskem nivoju. Vektorske metode rešujejo problem srednje osi z Voronoijevim diagramom [126]. Najdemo jih tudi v 3D [17]; eno izmed njih opišemo v drugem podpoglavju. V nadaljevanju predstavimo metodo, ki deluje s strategijo deli in vladaj [21]. Sledi opis rastrskih aproksimacijskih metod, ki rešujejo problem srednje osi z morfološkim operatorjem»krčenje«[125] in na analitičen način [35] z reševanjem diferencialnih enačb. 4.2.1 Algoritmi, temelječi na Voronoijevem diagramu V tem podpoglavju bomo predstavili štiri algoritme, ki uporabljajo Voronoijev diagram, ki ga določijo nad mnogokotniki (slika 14). V drugem koraku izluščijo podmnožico Voronoijevih elementov Voronoijevega diagrama, ki aproksimirajo srednjo os. Metode razlikujemo na podlagi izbora podmnožice Voronoijevih elementov, ki bodo aproksimirali srednjo os. Srednjo os aproksimiramo: z Voronoijevimi točkami, vsebovanimi v mnogokotniku [129], z Voronoijevimi elementi, vsebovanimi v mnogokotniku [24, 130], s presekom med notranjostjo mnogokotnika in Voronoijevim diagramom [127] in z uporabo dualnosti vhodnega mnogokotnika [128]. Slika 14: Voronoijev diagram vhodnega mnogokotnika. 21

4.2.1.1 Pristop z uporabo notranjih Voronoijevih točk Metoda, ki jo je predstavil Schmidt v [129], opisuje algoritem za konstrukcijo aproksimativne srednje osi z Voronoijevim diagramom, kjer izluščimo notranje Voronoijeve točke (slika 15a). Slika 15: Različne predstavitve srednje osi. Algoritem na izhodu vrne množico nepovezanih točk, ki slabo opisujejo vhodni mnogokotnik in ne dajejo informacij o topologiji vhodnega mnogokotnika. 4.2.1.2 Pristop z uporabo notranjih Voronoijevih elementov Da bi odpravili slabost prejšnje metode, so avtorji v [131] predlagali, da za generiranje srednje osi uporabimo vse elemente Voronoijevega diagrama, ki so v celotni vsebovani v notranjosti mnogokotnika. S tem povežemo Voronoijeve točke, ki aproksimirajo srednjo os (slika 15b). Metoda je uspešna le ob dovolj veliki gostoti oglišč mnogokotnika. 4.2.1.3 Pristop s presekom med Voronoijevim diagramom in mnogokotnikom 22 V [127] je Ogniewietz definiral srednjo os kot presek med Voronoijevim diagramom in mnogokotnikom (slika 15c). Rezultat prejšnje metode je podmnožica Voronoijevih

elementov te metode. Edino razliko predstavljajo Voronoijevi robovi, ki so delno v zunanjosti mnogokotnika. Pri rezultatu prejšnje metode te robove v celoti odstranimo, pri tej metodi pa vzamemo le njihov del, ki je vsebovan v mnogokotniku. 4.2.1.4 Pristop z uporabo dualnosti Metoda, predstavljena v [128], aproksimira srednjo os z upoštevanjem duala vhodnega mnogokotnika. Dualnost mnogokotnika je graf sosednosti notranjih Voronoijevih točk. V 2D je rezultat sestavljen iz Voronoijevih točk in njihovih povezav na Voronoijeve točke sosednjih Voronoijevih celic (slika 15d). Povezave med Voronoijevimi točkami, ki so delno v zunanjosti mnogokotnika, so tudi del rešitve. 4.2.2 Algoritem Dey, Zhao V članku [17] je predstavljena metoda za aproksimacijo srednje osi nad oblakom točk v 3D. Algoritem na vhodu prejme oblak točk s površja objekta, nad katerim zgradi Voronoijev diagram. Znano je, da v 2D Voronoijeve točke aproksimirajo srednjo os pri zadostni gostoti vhodnih točk [24], kar pa ne velja za aproksimacijo srednje osi v 3D [91]. Ne glede na gostoto vhodnih točk se pri Voronoijevem diagramu v 3D pojavijo Voronoijeve točke, ki so v bližini površja in ne predstavljajo točk na srednji osi. Take točke so definirane kot središča očrtane sfere skoraj koplanarnega tetraedra (glej sliko 16) [15]. Nasprotno ostale Voronoijeve točke, ki sovpadajo s točkami na srednji osi, imenujemo poli. Za te Voronoijeve točke velja, da z večanjem gostote vhodnih točk konvergirajo proti srednji osi [92], enako kot vse Voronoijeve točke v 2D. Poli predstavljajo najbolj oddaljene Voronoijeve točke od vhodnih točk v svoji Voronoijevi celici. 23

Slika 16: Primer skoraj koplanarnega tetraedra. Preden nadaljujemo z razlago algoritma, vpeljimo naslednje definicije: Pol p + vhodne točke p je najbolj oddaljena Voronoijeva točka v Voronoijevi celici V(p). Če je V(p) neomejena (zunanje Voronoijeve celice), potem je p + v neskončnosti. Vektor v p = p + p je vektor pola za točko p in njegova smer je definirana kot povprečje vseh smeri robov neomejene Voronoijeve celice. Vektor v p potemtakem aproksimira normalo površja v točki p. Tangentna ravnina je ravnina z normalo n p, ki jo aproksimira vektor v p, in poteka skozi točko površja. Tangentni mnogokotnik za točko površja je definiran kot presek Voronoijeve celice in tangentne ravnine (glej sliko 17a). Dežnik U p za točko površja p je definiran kot seznam Delaunayjevih trikotnikov z vrhnjim ogliščem v točki površja p. Delaunayjevi trikotniki so dualni Voronoijevim robom, ki jih seka tangentna ravnina (slika 17b). Dežnik U p aproksimira površje v točki p. 24

Slika 17: Prikaz Voronoijeve celice z Voronoijevo točko p, Up predstavlja trikotnike v dežniku. Slika je povzeta iz [17]. Metoda aproksimira srednjo os s podmnožico Voronoijevih lic, ki so dualna Delaunayjevim robovom. Ti robovi so bodisi zelo dolgi in povzročajo velike kote s površjem, bodisi so vzporedni tangentni ravnini. Iz tega razloga sta avtorja uvedla dva kriterija, ki izluščita pravilna Voronoijeva lica oz. Delaunayjeve robove za aproksimacijo srednje osi, in sicer pogoj kota in pogoj razmerja. Voronoijevo lice je del aproksimativne rešitve srednje osi, če je izpolnjen vsaj eden izmed zgoraj naštetih pogojev. 4.2.2.1 Pogoj kota V tem koraku izračunamo kot med Delaunayjevimi robovi e p,q in trikotniki v dežniku U p. Če je kot večji od določenega praga θ, Delaunayjev rob sprejmemo in postane del aproksimacije srednje osi. V nasprotnem primeru ga ne uporabimo pri aproksimaciji. Za izračun kota med Delaunayjevim robom med točkama na površju p in q in trikotniki v dežniku je potrebna aproksimacija tangentne ravnine v točki p (slika 18). Z 25

uporabo definicij izračunamo trikotnike v dežniku in jih uporabimo za aproksimacijo tangentne ravnine v točki p. Nato izluščimo vse Delaunayjeve robove e p,q, ki imajo velike kote s tangentno ravnino; to je kot med robom e p,q in trikotnikom nad točkami p, p i in p j. Delaunayjev rob e p,q sprejemno, če izpolnjuje pogoj v enačbi (3). Slika 18: Računanja kota med Delaunayjevim robom nad točkama p in q ter aproksimacijo tangentne ravnine, definirane z dežnikom Up. Slika je povzeta iz [17]. max ( npq) < π 2 θ (3) 4.2.2.2 Pogoj razmerja Samo pogoj kota ne more aproksimirati srednje osi v kontekstu neodvisnosti od gostote vhodnih točk. Z manjšanjem uporabniško nastavljivega parametra θ dobimo več lic, ki tvorijo negladko koničasto aproksimacijo, s prevelikim θ pa sprejmemo premalo lic in posledično dobimo luknje v aproksimaciji. Rešitev je uvedba pogoja razmerja. Poglejmo primer na sliki 19. Iz slike je razvidno, da velja enačba p q = 2u sin θ, kjer je u = (p m p) in predstavlja polmer maksimalne sfere ali krožnice K. Če je θ ε, kjer ε predstavlja gostoto vhodnih točk, velja p q 2u sin ε. Polmer očrtane krožnice trikotnikov v dežniku je reda uε, kar pomeni, da mora biti dolžina pq veliko večja od polmera očrtane krožnice trikotnikov v dežniku. 26

Slika 19: Določanje kota med točko pm, ki je na srednji osi, in Delaunayjevim robom med točkama p in q. Slika je povzeta iz [17]. S tem lahko aproksimiramo vse točke na srednji osi, ki imajo kot θ nekajkrat večji od ε. Ne moremo pa aproksimirati točk na srednji osi, ki imajo θ manjši od ε, a če se ε pomika proti nič, dobimo želeno konvergenco. Delaunayjev rob sprejmemo pri naslednjem pogoju: min p q r > ρ, (4) kjer vrednost ρ predstavlja vhodni parameter (glej sliko 20). Slika 20: Razmerja dolžin med Delaunayjevim robom med vhodnima točkama p in q ter polmerom r očrtane krožnice trikotnika na točkah p, pi in pj. Slika je povzeta iz [17]. 27

Z večanjem vrednosti parametra ρ dobimo manj šuma, ostanejo pa luknje. Z manjšanjem vrednosti parametra ρ dobimo sicer koničasto aproksimativno srednjo os, a brez lukenj. 4.2.3 Algoritem Aichholzerja, Aurenhammerja, Hackla in Jüttlerja Algoritem deluje s strategijo deli in vladaj. Na vhodu prejme seznam krivulj, ki predstavljajo mejo prosto oblikovanega geometrijskega objekta (angl. free-form shape) oz. domeno. Sprva algoritem rob objekta aproksimira s krožnimi loki [46], nato pa nad njimi izračuna srednjo os. V koraku deli algoritem določa maksimalne krožnice, ki razdelijo domeno na poddomene. Algoritem nadaljuje z delitvijo tako dolgo, dokler ne naleti na preprost oz. osnovni primer; to je primer, za katerega je srednja os znana. V koraku vladaj algoritem združuje srednje osi osnovnih primerov, dokler ne ostane samo ena. Ta predstavlja končno rešitev oz. eksaktno srednjo os aproksimiranega prosto oblikovanega objekta. Opisani algoritem deluje v treh korakih, in sicer: aproksimacija meje prosto oblikovanega objekta, delitev domene na poddomene in združevanje srednjih osi poddomen. 4.2.3.1 Aproksimacija meje prosto oblikovanega objekta Algoritem v prvem koraku vhodne krivulje aproksimira s spiralnimi dvojnimi loki (angl. spiral biarc) z določeno natančnostjo ε. Preden nadaljujemo z opisom postopka, vpeljimo naslednje definicije: Hermitovi podatki (angl. Hermite data [133]) predstavljajo množico točk p i = (x i, f(x i )) funkcije f in njenih odvodov v vsaki točki p i. Dvojni lok (angl. biarc [94]) spada v enoparametrično družino krivulj z zveznostjo G 1. Pridobljen je z združenjem dveh krožnih lokov a 0 in a 1 tako, da imata enak tangentni vektor v skupni točki oz. stičišču. 28

Ukrivljenost (angl. constant curvature [132]). Naj bosta p 1 in p 2 končni točki poljubnega loka. Kot β med tangento loka v točki p 2 z daljico p 1 2 ni manjši kot kot α med tangento v točki p 1 z daljico p. 1 2 Če za poljubni lok ta lastnost velja, potem je ukrivljenost monotona. Če sta α in β enaka, pravimo, da je ukrivljenost konstantna (slika 21). Spiralni dvojni lok (angl. spiral biarc [95]) je dvojni lok s konstantno ukrivljenostjo (slika 22). Slika 21: Predstavitev lokov, kjer je lok a2 lok s konstantno ukrivljenostjo (α = β2). Slika je povzeta iz [132]. Postopek aproksimacije vhodnih krivulj q(t) s spiralnimi dvojnimi loki je sledeč: Iz Hermitovih podatkov preberemo točki p 0 in p 1, skozi kateri poteka vhodna krivulja, ter prva in druga odvoda vhodne krivulje v teh točkah. Prva odvoda predstavljata tangento, druga odvoda pa ukrivljenost vhodne krivulje v danih točkah. Spiralni dvojni lok je definiran z dvema krožnima lokoma a 0 in a 1. Osnova za dvojni lok je stičišče oz. stičiščna točka p, ki jo izračunamo iz stičiščne krožnice (označene s k na sliki 22). Taka krožnica poteka skozi točki p 0 in p 1 in ima enak razpon kotov med tangentnima vektorjema v 0 in v 1. Središče c i take krožnice (stičiščne krožnice) se izračuna s presečiščem med pravokotnico na razpolovišče daljice p 0 1 in s pravokotnico na razpolovišče daljice p, 2 3 kjer je p 2 = p 0 + v 0 in p 3 = p 1 + v 1 (glej sliko 22a). Polmer take krožnice je potem r i = c i p 0. Stičišče p izračunamo kot presečišče med stičiščno 29

krožnico k in krožnico krožnega loka a 0, ki je definirana s polmerom r 0 = 1 k 0 in središčem c 0 = p 0 + r 0 v 0. Parameter k0 je dobljen iz Hermitovih podatkov in predstavlja ukrivljenost krožnega loka v točki p 0. Sedaj je treba izračunati še krožni lok a 1. Podobno izračunamo središče c 1 krož- nega loka a 1, tako da določimo presečišče med poltrakoma pc 0 in p. 1 v 0 Polmer krožnice je r 1 = c 1 p 1. Drugi krožni lok je potem definiran kot funkcija s parametri (c 1, r 1, p, p 1 ). Skupek krožnih lokov a 0 in a 1 predstavlja spiralni dvojni lok. Končni rezultat računanja spiralnih dvojnih lokov prikazuje slika 22b. Slika 22: Računanje spiralnega dvojnega loka. Računanje središča stičiščne krožnica (a) in računanje parametrov za krožna loka a0 in a1 (b). Slika je povzeta iz [21]. Preden preidemo na korak računanja srednje osi, dobljene spiralne dvojne loke ocenimo glede na to, kako dobro se prilegajo vhodnim krivuljam. Ocenitev poteka tako, da vzamemo dva krožna loka a 0 in a 1 ter med njima ustvarimo spiralni dvojni lok po prej opisanem postopku. Tega ovrednotimo glede na natančnost prilagajanja z vhodno krivuljo. Če je napaka prevelika (večja od ε), vhodno krivuljo razdelimo na polovico in postopek ponavljamo, dokler ni napaka manjša od ε. 30

Evalvacijo natančnosti prileganja spiralnega dvojnega loka z vhodno krivuljo opravimo z merjenjem maksimalne razdalje med njima. Razdalja se izračuna po naslednjem postopku (glej sliko 23): Sprva projiciramo stičišče p na vhodno krivuljo tako, da iz središča c 0 (središče krožnega loka a 0 ) v smeri p pošljemo žarek in izračunamo presečišče med tem žarkom ter vhodno krivuljo q(t). Projicirano točko označimo s p. V naslednjem koraku vhodno krivuljo q(t) oz. del vhodne krivulje enakomerno diskretiziramo in pošiljamo žarke iz središča c 0 in c 1 proti diskretiziranim točkam na vhodni krivulji. Največja razdalja med presečišči žarkov s spiralnim dvojnim lokom in presečišči žarkov z vhodno krivuljo predstavlja napako aproksimacije vhodne krivulje. Slika 23: Računanje maksimalne razdalje med spiralnim dvojnim lokom in vhodno krivuljo. Slika je povzeta iz [21]. 4.2.3.2 Delitev domene na poddomene Delitev roba prosto oblikovanega objekta (korak deli) oz. začetne domene poteka tako, da v domeno vstavljamo maksimalne krožnice. Taka krožnica razdeli domeno v toliko poddomen, kot je število dotikališč med maksimalno krožnico in spiralnimi dvojnimi loki (slika 24a). Po vstavitvi maksimalne krožnice preverimo, ali so dobljene poddomene sestavljene iz manjšega števila krožnih lokov, kot pa je sama domena. V primeru, da niso, se maksimalna krožnica ponovno izračuna nad drugim parom krožnih lokov. Vsako poddomeno zaključimo s krožnim lokom (glej sliko 24b), ki mu pravimo umetni lok, nato pa poddomeno dalje delimo z maksimalno krožnico. Delitev se izvaja, dokler poddomena ne predstavlja enega izmed osnovnih primerov. Za take primere srednjo os izračunamo neposredno. 31

Slika 24: Primer delitve domene v poddomene. Slika je povzeta iz [21]. Jedro tega koraka je računanje maksimalne krožnice in delitev domene na poddomene. Postopek računanja maksimalne krožnice je naslednji: Imejmo množico krožnih lokov a i, 1 i n, ki predstavljajo aproksimacijo prosto oblikovanega geometrijskega objekta A v smeri urinega kazalca. Najprej se kreira krožnica k, ki se dotika loka a i v točki p i in poljubnega loka a j, 1 j n j i. Temu sledi sprehod skozi krožne loke prosto oblikovanega objekta. Preverjamo, ali se krožnica k seka ali prekriva s katerim izmed njih. Če se ne seka ali prekriva z nobenim lokom, krožnica k predstavlja maksimalno krožnico K. V nasprotnem primeru (krožnica se seka ali prekriva z lokom a l, 1 j l n) pa izračunamo krožnico, ki je manjša od prejšnje in se dotika drugega poljubnega loka a l. Postopek ponavljamo, dokler ne dobimo maksimalne krožnice. Osrednji del računanja maksimalne krožnice je konstrukcija kroga, ki se dotika loka a i v točki p i in drugega poljubnega loka a j (glej sliko 25a). Točka p i se določi pred računanjem maksimalne krožnice in predstavlja središčno točko krožnega loka a i, če je le-ta sestavljen iz dveh konveksnih oglišč. V nasprotnem primeru p i predstavlja konkavno oglišče krožnega loka a i. Točka c i, ki predstavlja središče maksimalne krožnice, mora ležati na premici l. Ta poteka od središča loka a i proti dotikališču p i. Če se premaknemo iz točke p i za dolžino r 1 proti središču c 2, pridemo v točko c 1 (slika 25a). Le-ta tvori skupaj s c 1 in c i ena- 32

kokraki trikotnik. To lastnost lahko izkoristimo tako, da izračunamo pravokotnico na razpolovišče daljice c 1 1 in izračunamo presečišče med dobljeno pravokotnico in premico l. Presečišče predstavlja središče maksimalne krožnice K s polmerom c i p i (slika 25b). Slika 25: Primer računanja maksimalne krožnice na dveh krožnih lokih. Premik iz točke pi za dolžino r1 v smeri c2 (a) in primer izračunane maksimalne krožnice (b). Slika je povzeta po [21]. 4.2.3.3 Združevanje posameznih srednjih osi Srednja os je sestavljena iz lokov. Vsak lok srednje osi pripada dvema osnovnima geometrijskima gradnikoma na meji prosto oblikovanega objekta. Osnovni gradniki so lahko krožni lok, daljica ali oglišče. Različni pari osnovnih gradnikov tvorijo različne loke na srednji osi, in sicer so ti lahko hiperbolični, parabolični ali eliptični. Preden nadaljujemo z opisom koraka algoritma, uvedimo naslednje definicije. Ekscentričnost ali izsrednost (angl. eccentricity) definiramo kot razmerje med razdaljo od točke na loku do gorišča in razdaljo od točke na loku do vodnice. Razmerje je konstantno za posamezen tip lokov. 33

Stožnica (angl. conic section) je množica vseh točk, ki imajo enako razdaljo med poljubno točko, ki ji pravimo fokus, in daljico, ki ji pravimo vodnica. Tip krivulje definiramo z ekscentričnostjo, kot sledi: krožnica ali krožni lok (angl. circular arc) je krivulja z ekscentričnostjo 0, elipsa ali eliptični lok (angl. elliptic arc) je krivulja z ekscentričnostjo med 0 in 1, parabola (angl. parabolic arc) je krivulja z ekscentričnostjo 1 in hiperbola (angl. hyperbolic arc) je krivulja z ekscentričnostjo, večjo od 1. Primere različnih krivulj drugega reda vidimo na sliki 26. Slika 26: Primeri krivulj drugega reda. Različni pari osnovnih gradnikov definirajo različne loke: krožna loka lahko definirata eliptični (glej sliko 27a) ali hiperbolični (slika 27b) lok glede na položaj dveh podpornih krožnic in orientacijo lokov na mejah prosto oblikovanega objekta, krožni lok in daljica vedno definirata parabolični lok (slika 27c), 34

krožni lok in točka definirata eliptični lok (glej sliko 27d), če oglišče leži v notranjosti podporne krožnice loka, drugače pa hiperbolični lok (slika 27e), dve daljici definirata premico (slika 27f), daljica in točka definirata parabolični lok (slika 27g) in dve točki definirata daljico (slika 27h). Slika 27: Primeri srednjih osi med različnimi tipi osnovnih gradnikov. Eliptični lok (a), hiperbolični lok (b), parabolični lok (c), eliptični lok (d), hiperbolični lok (e), daljica (f, h) in parabolični lok (g). 4.2.3.4 Osnovni primeri V klasifikaciji osnovnih primerov predpostavimo, da je srednja os sestavljena iz največ treh gradnikov. V primeru, da bi vseeno nastopilo več vozlišč, lahko domeno nadalje razdelimo z maksimalno krožnico. To predstavlja slika 28, kjer lahko zgled c predstavimo s tremi različicami zgleda b. Če operiramo s krivuljami reda zveznosti G 1, se izkaže, da je število osnovnih primerov štiri (glej sliko 28). 35

Slika 28: Osnovni primeri za red zveznosti G 1 (povzeto iz [21]). V primeru, da operiramo z redom zveznosti G 0, se število osnovnih primerov dvigne na devet (slika 29). Slika 29: Osnovni primeri za red zveznosti G 0 (povzeto iz [21]). Srednjo os za posamezni osnovni primer izračunamo neposredno in je sestavljena izključno iz lokov [113]. 36

4.2.4 Morfološki operator krčenje Algoritmi, ki rešujejo problem srednje osi s pomočjo morfološkega operatorja krčenje, spadajo v družino rastrskih algoritmov. Ideja teh algoritmov je, da na vhodu sprejmejo bitno sliko, na kateri so objekti označeni s črno barvo. Algoritem postopoma črne piksle spreminja v bele tako, da je na koncu objekt širok le en piksel oziroma en voksel ali je prostor 3D. Objekt, ki se krči, se nikoli ne razdeli in vedno obdrži topologijo vhodnega objekta [125]. V koraku krčenja algoritem zaporedno obiskuje piksle slike ter jim spreminja barvo iz črne v belo. Ključnega pomena za spremembo barve je strukturni element (angl. structuring element), ki definira vrsto morfološkega operatorja. Strukturni element za operacijo krčenja je definiran z matrikama, prikazanima na sliki 30. Pikslu na poziciji (1,1) pravimo izvor. Slika 30: Strukturni element za morfološko operacijo krčenje. Številka 1 pomeni, da je piksel pobarvan, številka 0 pa, da je piksel bele barve. Prazne celice lahko zavzamejo tako črno kot belo barvo. Algoritem deluje tako, da postavlja izvor strukturnega elementa na vse piksle vhodne bitne slike in primerja vrednosti med strukturnim elementom in piksli slike, katere strukturni element prekriva. Če so vse vrednosti enake, potem algoritem pikslu slike postavi barvo na belo. V primeru, da se vrednosti razlikujejo, algoritem izvede rotacijo strukturnega elementa za 90 stopinj in ponovno primerja vrednosti pikslov med delom bitne slike in strukturnim elementom. Postopek ponavlja, dokler ne preveri vseh osem možnosti (glej sliko 31) ali ne pride do ujemanja. 37

Slika 31: ta prekriva. Primer primerjave med strukturnim elementom in delom slike, ki ga 4.2.5 Algoritem srednje osi z računanjem razdalje Metoda spada v družino aproksimacijskih metod za pridobivanje srednje osi nad objekti s prosto oblikovanimi. Problem srednje osi rešuje z računanjem razdalje (angl. distance solutions). Za to uporablja nelinearno parcialno diferencialno enačbo z imenom Eikonal. Enačba se ovrednoti z metodo FMM (Fast Marching Method) [40, 81, 82, 83, 84] ali metodo FSM (Fast Sweeping Method) [41, 85, 86, 87, 88, 89]. 38

Na vhodu algoritem prejme poljubno krivuljo q(t) ali seznam krivulj, ki so lahko sklenjene ali pa tudi ne. Nato formira enakomerno mrežo. Za vsako kontrolno točko enakomerne mreže izračunamo razdaljo do vhodnih krivulj. Z Laplaceovo determinanto [80] izluščimo točke, ki so na srednji osi. Ker se v koraku računanja razdalje uporablja pragovna funkcija, so končna srednja os oz. njeni segmenti sestavljeni iz oblaka točk. Točke se nato pretvorijo v bitno sliko in zapolnjeni piksli ali voksli se tanjšajo (angl. thinning methods). Tako je končna srednja os vedno široka en piksel ali voksel. Algoritem deluje v štirih korakih: inicializacija, računanje razdalje, detekcija točk na srednji osi in tanjšanje. 4.2.5.1 Inicializacija V koraku inicializacije ustvarimo enakomerno mrežo velikosti N M. Število kontrolnih točk mreže je potemtakem N + 1 v smeri x in M + 1 v smeri y, velikost posamezne celice v vse smeri pa predstavlja vrednost parametra h ( x = y = z = h). Algoritem na vhodu prejme seznam krivulj, ki predstavljajo začetno mejo objekta. Krivulje se sprva transformirajo na interval x [0, N] in y [0, M] nato pa se diskretizirajo. Vsaki kontrolni točki se priredi stanje in vrednost. Stanje je lahko»poznano«,»nepoznano«ali»začasno«, glede na to, ali je kontrolna točka že bila obiskana, vrednost pa predstavlja najmanjšo razdaljo od kontrolne točke do mej vhodnih krivulj. 39

Slika 32: Inicializacija enakomerne mreže in diskretizacija vhodne krivulje. Na sliki 32 vidimo primer začetnega stanja po diskreditaciji meje, kjer pobarvane točke predstavljajo začetno fronto. Vsem pobarvanim točkam nastavimo stanje na poznano in izračunamo razdalje kontrolnih točk do mej krivulj. Vsem ostalim nepobarvanim točkam nastavimo stanje na nepoznano in dobijo vrednost. 4.2.5.2 Računanje razdalje Po inicializaciji algoritem prične z računanjem razdalje vseh nepoznanih kontrolnih točk uniformne mreže do vhodnih krivulj. Da bi se izognili časovno potratnemu računanju razdalje od točk na mreži do vhodnih krivulj, je Sethian [83] predlagal preslikavo problema na časovno odvisen problem. Predstavljajmo si zaprto krivuljo q(t) v 2D ali v 3D, ki ravnino oz. prostor deli na tri dele, in sicer notranjost q(t) +, zunanjost q(t) in mejo krivulje oz. fronto q(t). Predpostavimo, da se q(t) širi ali krči v pravokotni smeri z znano hitrostjo F (F 0). Cilj je, da sledimo gibanju krivulje oz. fronte q(t), ki se spreminja skozi čas v eni smeri. Določitev pozicije fronte je izračun časa prihoda fronte φ i,j, ko prečka točko p i,j. Primer prikazuje slika 33. 40

Slika 33: Primer propagacije fronte. Enačba, ki opisuje čas prihoda, je x = F t, kjer x predstavlja pot, F hitrost in t čas. Potem dobimo: Slika 34: Graf razmerja med časom t(x) in potjo x ob konstantni hitrosti. dx = F dt ali F = dx dt (5) in 1 = F dt dt (6) V več dimenzijah postane enačba gibanja gradient in tako dobimo 41

φ F = 1. (7) Spremenljivka φ predstavlja čas prihoda. V tem primeru je φ = φ(x, y) funkcija v R 3 ali R 2. Če podamo koordiante (x, y), nam φ vrne čas prihoda fronte do točke (x, y). Če je hitrost odvisna samo od pozicije x, potem se enačba reducira na to, kar poznamo pod izrazom enačba Eikonal (enačba (7)). Primer vidimo na sliki 33, kjer je prikazan čas prihoda φ fronte, ki se radialno širi z enakomerno hitrostjo F = 1. Enačba (7) se ovrednoti z metodama FMM ali FSM, predstavljenima v nadaljevanju. 4.2.5.3 Metoda FMM Ena izmed metod za reševanje sistema nelinearnih enačb je tako imenovana metoda FMM (angl. Fast Marching Method), ki jo je vpeljal Sethian leta 1996 [83]. Ideja metode je, da opisuje čas, v katerem bo fronta prispela do poljubne točke ob hitrosti F (F 0). Po ideji je metoda zelo podobna Dijkstravemu algoritmu [90] za iskanje optimalne poti. Za to bo uporabila enačbo Eikonal in jo ovrednotila. S tem bomo izračunali čas prihoda φ za vsako točko p i,j,k na podlagi njenih sosed (glej sliko 35). Slika 35: Prikaz sosednih vrednosti za čas prihoda фi,j,k. V prvem koraku opravimo diskretizacijo gradienta φ v enačbi (7) s pomočjo Godunove sheme [43]. Osher [123] in Sethian [40] sta predlagala obliko, povzeto v enačbi (8), 42

max(d x i,j,k T, D +x i,j,k T, 0) 2 + max(d y i,j,k T, D +y ij,,k T, 0) 2 + = 1 2, (8) F i,j,k ( max(d z i,j,k T, D +z i,j,k T, 0) 2 ) kjer sta D + in D diferencialna operatorja naprej in nazaj, definirana z: D x i,j,k = φ i,j,k φ i 1,j,k x D +x i,j,k = φ i+1,j,k φ i,j,k x D y i,j,k = φ i,j,k φ i,j 1,k y D +y i,j,k = φ i,j+1,k φ i,j,k y (9) D z i,j,k = φ i,j,k φ i,j,k 1 z D +z i,j,k = φ i,j,k+1 φ i,j,k z S substitucijo enačb (9) v enačbo (8) dobimo naslednjo obliko, zapisano v enačbi (10): max ( φ φ 1 x 2, 0) + max ( φ φ 2 2 y, 0) + max ( φ φ 2 3, 0) = 1 z F 2, (10) kjer je φ = φ i,j,k φ 1 = min (φ i 1,j,k, φ i+1,j,k ) φ 2 = min(φ i,j 1,k, φ i,j+1,k ) (11) φ 3 = min (φ i,j,k 1, φ i,j,k+1 ) Podobno kot pri Dijkstravemu algoritmu se tudi tukaj vpelje red pri izbiri točk na mreži. Čas prihoda za vsako točko je odvisen zgolj od časa prihoda sosednjih točk, ki imajo manjše vrednosti. Tako se lahko enačba (10) še dalje poenostavi na: ( φ φ 2 1 x ) + ( φ φ 2 2 y ) + ( φ φ 2 3 ) = 1 (12) z F 2 43

Metoda FMM deluje na sledeč način: Fronta je sestavljena iz točk, ki imajo stanje nastavljeno na začasno. V prvem koraku poiščemo točko na fronti, ki ima najmanjšo vrednost φ. Tej točki nastavimo stanje na poznano in poiščemo vse sosednje točke, ki imajo nepoznano stanje na mreži, ter jih vstavimo na fronto. Vsem novim točkam spremenimo stanje na začasno in jim izračunamo vrednost φ po enačbi (12). Postopek rekurzivno ponavljamo, dokler obstajajo točke z nepoznanim stanjem. Poglejmo primer delovanja metode FMM na sliki 36, kjer imamo enakomerno mrežo. Točke na mreži imajo zraven koordinat podano informacijo o stanju posamezne točke. Črna barva označuje poznano, siva začasno, bela pa nepoznano stanje. Fronta je sestavljena iz sivih točk in se bo pomikala navzven (slika 36a). Sprva poiščemo točko na fronti, ki ima najmanjšo vrednost φ. V našem primeru naj bo to točka p i,j. Tej točki nastavimo stanje na poznano in poiščemo vse njene sosede. Sosednjim točkam nastavimo stanje na začasno ter za vsako izračunamo vrednost φ po enačbi (12) (slika 36b). Nato spet poiščemo točko na fronti, ki ima najmanjšo vrednost φ (v našem primeru je to točka p i+1,j na sliki 36c), ter ji nastavimo stanje na poznano. Tej točki poiščemo sosednje točke, jim nastavimo stanje na začasno in jim izračunamo čas prihoda φ (slika 36d). Postopek nadaljujemo, dokler imamo točke z neznanim stanjem. 44

Slika 36: Prikaz propagacije fronte. 4.2.5.4 Metoda FSM Kot alternativa metodi FMM, opisani v prejšnjem poglavju, opravlja ta metoda podobno funkcijo. Slabost metode FMM je iskanje točk na fronti z najmanjšo vrednostjo φ i,j. Da bi se izognili implementaciji iskalnih podatkovnih struktur, so razvili metodo FSM (angl. Fast Sweeping Method). Postopek diskretizacije parcialnih diferencialnih enačb v točkah na mreži pri metodi FSM poteka z Godunovo shemo [43]. Predlagali so naslednjo rešitev [41, 40]: (max (φ i,j φ x min, 0)) 2 + (max(φ i,j φ y min, 0)) 2 = F 2 h 2, (13) kjer je φ i,j vrednost točke na mreži in φ x min = min (φ i 1,j, φ i+1,j ), φ y min = min (φ i,j 1, φ i,j+1 ). 45

Na mejnih točkah (p 0,j, p i,0, p i,m in p N,j ) mreže vzamemo vrednost, ki obstaja. Na primer pri točki p 0,j se enačba (13) preslika v (max(φ 0,j φ 1,j, 0)) 2 + (max(φ 0,j φ y min, 0)) 2 = F 2 h 2. (14) Če operiramo v 2D prostoru, se zgornja enačba preslika v min(a, b) + F h, če je a b F φ i,j = { a+b+ 2F 2 h 2 (a b) 2, (15), drugače 2 kjer je a = φ x min in b = φ y min, h predstavlja širino celice. Opisana metoda za vsako točko mreže p i,j, ki ima stanje nastavljeno na nepoznano, izračuna rešitev φ i,j po enačbi (15). Ob tem uporablja rešitve sosednjih točk na mreži, in sicer p i±1,j, p i,j±1, katerim se je najkasneje izračunala rešitev. Nato se vrednost za točko p i,j na mreži posodobi in predstavlja manjšo vrednosti med trenutno φ i,j in novo vrednostjo φ i,j v točki p i,j (enačba (16)). φ i,j = min (φ i,j, φ ) i,j (16) Ker en prehod ne more zagotoviti konvergiranja do pravilne vrednosti za poljubno vrednost F, mora metoda nad celotno mrežo opraviti 2 n prehodov, in sicer: 1. i = 0: N, j = 0: M 2. i = N: 0, j = 0: M 3. i = N: 0, j = M: 0 4. i = 0: N, j = M: 0 Parameter n pomeni število dimenzij. 46

4.2.5.5 Detekcija točk na srednji osi Po tem, ko smo ovrednotili vse točke na enakomerni mreži, sledi postopek detekcije točk, ki sestavljajo srednjo os. Ta izkorišča lastnost, da je točka na srednji osi enako oddaljena do več vhodnih krivulj. Iz tega razloga predstavljajo vrednosti na točkah na srednji osi lokalni maksimum. Na sliki 37 so prikazane tri točke na srednji osi. Izločanje točk na srednji osi realiziramo z Laplaceovim operatorjem ( 2 φ) [35]. Pri točkah na mreži v okolici lokalnega maksimuma 2 φ konvergira proti. Vsaka točka, ki izpolnjuje pogoj 2 φ < ε, je na srednji osi. Slika 37: Ravninski presek. 4.2.5.6 Redčenje Z 2 Zaradi uporabe pragovne funkcije pri računanju razdalje ( 2 φ < ε) je končna srednja os sestavljena iz točk, bolj natančno iz oblaka točk. Primer vidimo na sliki 38. Za srednjo os je značilno, da je široka en piksel ali voksel. Iz tega razloga moramo dobljeno srednjo os nadalje razredčiti (angl. thinning methods). 47

Vendar konstrukcija srednje osi zahteva redukcijo in povezljivost med točkami v oblaku. Oblaka točk ali vokslov ne moremo poenostaviti z metodami za poenostavitev oblaka točk, ker vsebuje srednja os delilne točke (angl. branching point) in s temi metodami ne moremo zagotoviti povezljivosti med sosednjimi. Iz tega razloga se uporablja naslednja metoda za zagotavljanje zgoraj napisanih lastnosti: Oblak točk najprej pretvorimo v bitno sliko (R 2 Z 2 ), nato pa opravimo redčenje točk nad bitno sliko z algoritmom, opisanim v [124]. Na koncu piksle pretvorimo iz Z 2 v R 2. Slika 38: Prikaz rezultirajoče rastrske srednje osi. 48

5 Aproksimacijski algoritem za gradnjo srednje osi Srednja os je definirana kot množica vseh točk, ki so enako oddaljene do najbližjih robov mnogokotnika. Nekateri avtorji zato uporabljajo Voronoijev diagram [17,23], ki ga zgradijo nad množico točk na robovih mnogokotnika. Voronoijeve točke so potem točke, ki so enako oddaljene do vsaj treh točk mnogokotnika in predstavljajo točke na srednji osi. Znano je [19, 29], da je Delaunayeva triangulacija dualna Voronoijevem diagramu. Voronoijeve točke sovpadajo s središči Delaunayevih trikotnikov (glej sliko 3) [24], ki pa so posledično tudi na srednji osi. Zato bomo nad vhodnim mnogokotnikom uporabiti algoritem omejene Delaunayeve triangulacije. Ta lahko ponekod krši Delaunayev kriterij, zato središča teh trikotnikov ne sovpadajo s točkami na srednji osi. Iz tega razloga smo uvedli hevristiko, ki popravi omenjene trikotnike omejene Delaunayeve triangulacije. Naš algoritem deluje v treh korakih: gradnja omejene Delaunayeve triangulacije, popravljanje triangulacije z vstavljanjem Steinerjevih točk in gradnja aproksimacije srednje osi. 5.1 Gradnja omejene Delaunayjeve triangulacije V tem poglavju se bomo ukvarjali s triangulacijo enostavnih mnogokotnikov. Ti lahko vsebujejo luknje ali so brez njih. Preden nadaljujemo z razlago, uvedimo naslednje definicije: Zunanji obroč mnogokotnika je enostavna sklenjena lomljenka, ki jo moramo prečkati, če potujemo iz neskončnosti in želimo priti v notranjost mnogokotnika. Enostavna lomljenka je lomljena črta, ki zaporedno povezuje oglišča mnogokotnika in se ne seka s seboj. Luknja mnogokotnika je enostavna sklenjena lomljenka, ki se nahaja znotraj zunanjega obroča mnogokotnika. Vsak mnogokotnika ima nič ali končno mnogo lukenj, ki 49

niso vgnezdene. Sestavljena je iz konkavni in konveksnih oglišč, ki pa so orientirane v smeri urinega kazalca. Veriga mnogokotnika je pri našem algoritmu definirana kot sklenjeno zaporedje konkavnih in konveksnih oglišč. Oglišča, ki so prisotna v eni verigi, niso prisotna v nobeni drugi verigi. Veriga je vedno orientirana v smeri urinega kazalca. Triangulacijo mnogokotnikov lahko delimo na triangulacijo konveksnih oz. izbočenih in konkavnih oz. vbočenih mnogokotnikov. Triangulacija konveksnega mnogokotnika je trivialna in je izvedljiva v času O(n). Na sliki 39 vidimo različne načine triangulacije konveksnega mnogokotnika. Eden izmed načinov triangulacije takega mnogokotnika je, da vzamemo poljubno oglišče mnogokotnika v i, ki bo oglišče vsakega novega trikotnika. Prvi trikotnik bo na ogliščih v i, v i 1 in v i 2, naslednji trikotnik na ogliščih v i, v i 2 in v i 3 itd. (glej sliko 39c). V nadaljevanju doktorske disertacije bomo takemu načinu triangulacije rekli neposreden način triangulacije. Slika 39: Različni načini triangulacije konveksnega mnogokotnika. V primeru, da ima mnogokotnik tudi konkavna oglišča (takšnemu mnogokotniku pravimo konkavni mnogokotnik), pa triangulacija ni več trivialna, saj lahko po zgoraj opisanem postopku dobimo neravninsko triangulacijo, tj. trikotniki triangulacije se delno prekrivajo. Zato moramo za vsak nov trikotnik preveriti, ali je katero konkavno oglišče vhodnega mnogokotnika vsebovano v novem trikotniku. Če ni, trikotnik vstavimo, v nasprotnem primeru pa poiščemo nova tri oglišča in postopek ponavljamo. Algoritem, ki na tak način triangulira mnogokotnik, imenujemo algoritem rezanja uhljev (angl. ear cutting 50

algorithm) [71]. Njegova časovna zahtevnost je O(n 3 ). Seveda pa obstajajo še druge, bolj učinkovite metode, kot so: Grahamovo preiskovanje (O(n 2 )) [115], triangulacija z enakomerno delitvijo ravnine (O(n 2 )) [116], algoritem s prebirno premico (O(n log n)) [117] in Seidlov naključni inkrementalni algoritem (O(n log n)) [118]. Za triangulacijo enostavnega mnogokotnika smo pri naši disertaciji izbrali pristop, ki deluje na podoben način kot algoritem rezanja uhljev [71]. Poimenovali ga bomo algoritem VanGogh. Namesto opravljanja testa vsebnosti konkavnih oglišč za vsak nov trikotnik algoritem uporablja konveksno lupino. Konveksno/izbočeno lupino določimo samo na konkavnih ogliščih vhodnega mnogokotnika in nam omogoča, da v dani iteraciji trianguliramo del vhodnega mnogokotnika (to je del med konveksno lupino in zunanjim obročem mnogokotnika na sliki 40 je potemnjen) brez vsebnostnega testa. Za vsako oglišče na konveksni lupini izračunamo kote med konveksno lupino in zanko mnogokotnika. Nato algoritem zaporedno obiskuje oglišča, ki so na konveksni lupini, in vstavlja nove trikotnike glede na predhodna in naslednja oglišča mnogokotnika od trenutnega konkavnega oglišča na konveksni lupini. Triangulacija poteka, dokler je vsota kotov trikotnikov v trenutnem oglišču manjša ali enaka od kota med konveksno lupino in mnogokotnikom. Ko ta pogoj ni več izpolnjen, algoritem prične obdelovati naslednje oglišče na konveksni lupini. Po obisku vseh oglišč na konveksni lupini algoritem izračuna konveksno lupino na preostalih konkavnih ogliščih vhodnega mnogokotnika in postopek triangulacije se ponavlja, dokler ne obdelamo vseh konkavnih oglišč. Del mnogokotnika, ki ostane, vsebuje samo konveksna oglišča, katerih triangulacija je trivialna. Tak mnogokotnik trianguliramo neposredno (glej sliko 39). Če je v mnogokotniku prisotno eno konkavno oglišče, ga je možno triangulirati neposredno, saj je konkavno oglišče vidno vsem konveksnim ogliščem. Vsi trikotniki, ki nastanejo, so sestavljeni iz konkavnega oglišča. Ko je triangulacija končana, algoritem za vsak trikotnik preveri Delaunayjev pogoj in, če je treba, opravi legalizacijo (zamenjuje diagonale dveh sosednjih si trikotnikov). 51

Slika 40: Primer vhodnega mnogokotnika (označenega s polno črto), konveksna lupina (črtkana črta) in koti med mnogokotnikom in konveksno lupino. Algoritem deluje v treh korakih: inicializacija, računanje kotov med mnogokotnikom in konveksno lupino in triangulacija mnogokotnika. 5.1.1 Inicializacija Mnogokotnik, ki ga algoritem prejme na vhodu, je predstavljen z zaporedjem oglišč. Ta shranimo v seznam oglišč. Nato algoritem pretvori seznam oglišč v krožni dvosmerno povezan seznam [71] ter vsakemu oglišču v seznamu oglišč nastavi kazalec na njegov zapis v krožnem dvosmerno povezanem seznamu. Za vsako oglišče algoritem izračuna kot in klasificira oglišča na konkavna ter konveksna. 52

5.1.2 Računanje kotov med mnogokotnikom in konveksno lupino V tem podpoglavju je predstavljena metoda za izračun kotov med mnogokotnikom in konveksno lupino. Konveksno lupino izračunamo samo nad konkavnimi oglišči mnogokotnika. Za izračun konveksne lupine uporabimo algoritem quick-hull, predstavljen v [121]. Tako mnogokotnik kot tudi konveksna lupina naj bosta orientirana v smeri urinega kazalca. Za izračun kota oz. kotov v poljubnem konkavnem oglišču v i na konveksni lupini potrebujemo še štiri dodatna oglišča. To so oglišča: v i 1 in v i+1, ki sta neposredni predhodnik in naslednik konkavnega oglišča v i na mnogokotniku, ter v j 1 in v j+1, ki sta neposredni predhodnik in naslednik oglišča v i na konveksni lupini. Obstajajo trije tipi kotov med konkavnim ogliščem na konveksni lupini in mnogokotnikom (glej sliko 41). Kot med v i 1 v i v j 1 naj bo označen z α (slika 41a), kot med v i+1 v i v j+1 z β (slika 41a) in kot med v j 1 v i v j+1 z γ (slika 41b). Kot α naj bo orientiran negativno, kot β pa pozitivno. V primeru, da kot ni orientiran tako, pravimo, da ne obstaja oz. da ni prisoten. Slika 41: Primeri kotov med konveksno lupino in mnogokotnikom. Preden predstavimo podrobnosti računanja kotov, vpeljimo naslednje trditve za konkavna oglišča mnogokotnika na konveksni lupini: - v oglišču je zmeraj prisoten vsaj eden izmed treh vrst kotov (slika 42), 53

- v oglišču sta lahko prisotna največ dva kota, izmed katerih nobeden ni kot γ (slika 42a), - če je v oglišču prisoten kot γ, potem α in β nista prisotna (slika 42h), - če obstaja α, ni nujno, da obstaja β (slika 42b, c, d), - če obstaja β, ni nujno, da obstaja α (slika 42e, f, g). Slika 42: Primeri kotov med mnogokotnikom in konveksno lupino. Izračun kotov poteka na naslednji način: Sprva algoritem vsem petim ogliščem (oglišča v i 1, v i, v i+1, v j 1 in v j+1 ) odšteje vrednost koordinat oglišča v i. S tem prestavi oglišče v i v koordinatno izhodišče kartezičnega koordinatnega sistema (slika 43a). Nato se na novo pridobljene koordinate oglišč pretvorijo v polarni koordinatni sistem (enačba (17)) in iz dobljenih vrednosti kotov φ i izračunamo kote α, β in γ (glej sliko 43b). 54

Slika 43: Primer računanja kotov v konkavnem oglišču na konveksni lupini. Kartezični koordinatni sistem (a), preslikava v polarni koordinatni sistem, rotacija točk in izračun kotov (b). Po definiciji je kot α v oglišču v i enak kotu φ 1, kot β pa je enak razliki kotov (φ 3 φ 2 ). V primeru, da sta φ 1 in φ 2 večja od φ 3 (pomeni, da sta daljici v j 1 i in v i j+1 zunaj mnogokotnika), priredimo kotu α vrednost kota v oglišču, torej φ 3. V primeru, da je samo eden izmed φ 1 ali φ 2 večji od φ 3 (ena izmed daljic v j 1 i in v i j+1 je zunaj mnogokotnika), je eden izmed kotov (α ali β) enak nič oz. pravimo, da ne obstaja. Če je φ 1 večji od φ 3, potem kot α ne obstaja, β pa je enak (φ 3 φ 2 ) in obratno, če je φ 2 večji od φ 3, potem je α enak φ 1, β pa ne obstaja. arctan ( y ), če je x > 0 x arctan ( y ) + π, če je x < 0 in y 0 x φ i = { arctan ( y ) π, če je x < 0 in y < 0 x π, če je x = 0 in y > 0 2 3π, če je x = 0 in y < 0 2 nedefinirano, če je x = 0 in y = 0 (17) 55

5.1.3 Triangulacija Algoritem triangulacije izbere poljubno konkavno oglišče v i na konveksni lupini in vstavlja trikotnike glede na njegova sosednja oglišča. Preden nadaljujemo z razlago postopka triangulacije, uvedimo naslednje definicije: α-trikotnik je trikotnik, ki je definiran z oglišči v i, v i 1 (predhodnik oglišča v i ) in v i 2 (predhodnik oglišča v i 1 ). β-trikotnik je trikotnik, ki je definiran z oglišči v i, v i+1 (naslednik oglišča v i ) in v i+2 (naslednika oglišča v i+1 ). 56 Triangulacija mnogokotnika v okolici konkavnega oglišča poteka v dveh korakih. V prvem koraku algoritem išče predhodnike in predpredhodnike trenutnega konkavnega oglišča v i na konveksni lupini ter tvori ustrezne trikotnike. Za trikotnik i,i 1,i 2 algoritem izračuna kot trikotnika v oglišču v i. Če je kumulativna vsota kotov α-trikotnikov v oglišču v i in kota v i 2 v i v i 1 manjša ali enaka kotu α v tem oglišču, trikotnik i,i 1,i 2 vstavimo in odstranimo oglišče v i 1. V naslednji iteraciji oglišče v i 1 predstavlja oglišče v i 2 v predhodni iteraciji. Postopek vstavljanja trikotnikov nadaljujemo, dokler je kumulativna vsota kotov α-trikotnikov v oglišču v i in kota v i 2 v i v i 1 manjša od kota α v oglišču v i. Če je kumulativna vsota kotov α-trikotnikov v oglišču v i in v i 2 v i v i 1 večja od kota α v oglišču v i, izračunamo presečišče, ki ga označimo z v s1. Presečišče izračunamo med premico na ogliščih v i in v j 1 ter daljico v. i 1 i 2 Presečišče v s1 predstavlja novo Steinerjevo točko, ki jo vstavimo na rob mnogokotnika med oglišči v i 1 in v i 2. Nato preverimo, če se v j 1 (predhodnik oglišča v i na konveksni lupini) nahaja na daljici v. i s1 Če se ne nahaja tam, potem vstavimo nov trikotnik i,i 1,s1 in odstranimo oglišče v i 1. V nasprotnem primeru (v j 1 je na daljici v ) i s1 vstavimo dva nova trikotnika, in sicer trikotnik i,i 1,j 1 in trikotnik j 1,i 1,s1, ter popravimo povezave med oglišči oz. razdelimo mnogokotnik na dve verigi. Postopek delitve mnogokotnika imenujmo α -delitev mnogokotnika

Delitev mnogokotnika poteka tako, da algoritem sprva vstavi novo točko v s, ki ima identične koordinate kot oglišče v j 1. Novo točko vstavimo na rob mnogokotnika med oglišči v j 1 in v p, ki predstavlja naslednika oglišča v j 1 na mnogokotniku. Nato popravimo sosednostne relacije oglišč v j 1, v s, v i in v i 2. Predhodnik oglišča v i postane oglišče v j 1, naslednik oglišča v i 2 pa oglišče v s. Predhodnik oglišča v s postane oglišče v i 2, naslednik v j 1 pa v i. Oglišči v j 1 in v s postaneta konveksni. Kot rezultat delitve mnogokotnika dobimo dodatno oglišče (oglišče v s, ki je konveksno) in dve verigi. Na koncu algoritem preveri, če sta v posamezni verigi prisotni manj kot dve konkavni oglišči. Če sta, algoritem verigo triangulira neposredno, kjer je konkavno oglišče prisotno v vseh trikotnikih. V nasprotnem primeru algoritem popravi kot v oglišču v s in ponovno izračuna kot med mnogokotnikom in konveksno lupino v oglišču v s. Slednji kot je po ponovnem izračunu vedno kot α. Oglejmo si primer delitve mnogokotnika na sliki 44. Prvi vstavljen trikotnik je bil 1,0,17, oglišče v 0 pa smo odstranili. Do tega koraka so označbe oglišč naslednje: v i = v 1, v j 1 = v 10, v p = v 11, v i 1 = v 17, v i 2 = v 16. Nato je algoritem poskusil vstaviti trikotnik 1,17,16. Kumulativna vsota kotov vseh α-trikotnikov v oglišču v 1 in kota v 16 v 1 v 17 je večja od kota α v oglišču v 1. Po prej opisanem postopku algoritem izračuna presečišče v s1 med premico na ogliščih v 1 in v 10 ter robom mnogokotnika v, 17 16 kamor se presečišče tudi vstavi. Nato algoritem preveri, ali je oglišče v 10 (oglišče v j 1 ) na daljici v 1 s1 (daljica v ). i s1 Algoritem ugotovi, da je oglišče na daljici, zato vstavi dva nova trikotnika (trikotnik 1,17,10 in 10,17,s1 ). Nato ustvarimo novo oglišče v s, ki ima identične koordinate kot oglišče v 10 ter ga vstavimo na rob mnogokotnika v 10 11 (rob v ). j 1 p V naslednjem koraku algoritem popravi sosednostne relacije oglišč, kjer postane: predhodnik v 1 (oglišče v i ) postane oglišče v 10 (oglišče v j 1 ), naslednik v s1 postane oglišče v s, predhodnik v s postane oglišče v s1 in naslednik v 10 postane oglišče v 1. 57

Slika 44: Ko je kumulativna vsota kotov α-trikotnikov v oglišču v1 in kota vi- 2vivi-1 enaka kotu α v oglišču v1 (a), iz sklenjenega zaporedja oglišč nastaneta dve verigi, prikazani z različnima barvama (b). Verigi, ki nastaneta s popravljanjem sosednostnih relacij, sta: s 1 = {v 1, v 2, v 3, v 4, v 5, v 6, v 7, v 8, v 9, v 10 } in s 2 = {v s, v 11, v 12, v 13, v 14, v 15, v 16, v s1 } (glej sliko 44b). V oglišču v s se s spremembo sosednih oglišč spremeni tako kot v oglišču kot tudi kot med mnogokotnikom in konveksno lupino. Kot v oglišču je definiran s v 11 v s v s1, kot med mnogokotnikom in konveksno lupino pa s v s1 v s v 15 (glej sliko 44b), ki je zmeraj kot α. Postopek triangulacije, kadar je kumulativna vsota kotov α-trikotnikov v oglišču v i in v i 2 v i v i 1 enaka kotu α v oglišču v i, se razlikuje samo po tem, da namesto oglišča v s1 uporabljamo oglišče v i 2. V drugem koraku algoritem išče naslednike in naslednike naslednikov trenutnega konkavnega oglišča v i na konveksni lupini ter ustvarja trikotnike. Za oglišče v i algoritem sprva poišče njegovega naslednika (označenega z v i+1 ) in naslednika le-tega oglišča (označenega z v i+2 ) v mnogokotniku. Za trikotnik i,i+1,i+2 algoritem izračuna kot trikotnika v oglišču v i. Če je kumulativna vsota vseh kotov β-trikotnikov v oglišču v i in kota v i+2 v i v i+1 manjša ali enaka kotu β v tem oglišču, trikotnik i,i+1,i+2 vstavimo in odstranimo oglišče v i+1. Postopek vstavljanja trikotnikov nadaljujemo, dokler je kumulativna vsota kotov β-trikotnikov in kota v i+2 v i v i+1 manjša od kota β v oglišču v i. 58

Če je kumulativna vsota kotov β-trikotnikov in kota v i+2 v i v i+1 večja od kota β v oglišču v i, izračunamo presečišče v s1 med premico na ogliščih v i in v j+1 ter daljico v. i+1 i+2 Presečišče v s1 predstavlja novo Steinerjevo točko, ki jo vstavimo na rob mnogokotnika med oglišči v i+1 in v i+2. Nato algoritem preveri, če se oglišče v j+1 nahaja na daljici v. i s1 Če se ne nahaja tam, potem algoritem vstavi nov trikotnik i,i+1,s1 in izbriše oglišče v i+1. V nasprotnem primeru vstavimo dva nova trikotnika (trikotnik i,i+1,j+1 in j+1,i+1,s1 ) in razdelimo mnogokotnik na dve verigi. Kadar je kumulativna vsota kotov β-trikotnikov v oglišču v i in v i+2 v i v i+1 enaka kotu β v oglišču v i, se postopek razlikuje samo po tem, da namesto oglišča v s1 uporabljamo oglišče v i+2. Postopek delitve mnogokotnika je analogen že napisanemu postopku α-delitve mnogokotnika s to razliko, da namesto oglišča v j 1 uporabimo oglišče v j+1, namesto v i 1 oglišče v i+1 in namesto v i 2 oglišče v i+2. Postopek delitve mnogokotnika v tem primeru imenujemo postopek β-delitve mnogokotnika. Do sedaj smo obrazložili, kako algoritem triangulira mnogokotnik s tem, da vstavlja trikotnike na podlagi predhodnih (α-trikotniki) oz. naslednjih (β-trikotniki) oglišč trenutnega konkavnega oglišča v i na konveksni lupini. V primeru, da algoritem pride do oglišča na konveksni lupini, v katerem je prisoten kot γ, postopek triangulacije spremenimo, saj ga z obstoječimi prijemi ni mogoče triangulirati. Predhodna kot tudi naslednja oglišča v i so vsebovana v notranjosti konveksne lupine. Vsak tak trikotnik, ki bi ga vstavili s predhodno omenjeno trojico oglišč ( i,i 1,i 2 ali i,i+1,i+2 ), bi lahko kršil pravilo o ravninski triangulaciji. Problem z oglišči, ki imajo prisoten kot γ, delno rešujeta predhodno opisana postopka za delitev mnogokotnika, kjer se oglišču spremeni kot γ v α ali β. Prav tako triangulacijo mnogokotnika nadaljujemo, če ima oglišče v i prisoten kot γ in je del vsaj enega izmed predhodno vstavljenih trikotnikov. V nasprotnem primeru (torej, če ima oglišče kot γ in ni del nobenega trikotnika) oglišče preskočimo. V naslednji iteraciji bo oglišče v vsakem primeru spet del konveksne lupine. Vsa ostala konkavna oglišča, ki bodo prvič postala del konveksne lupine, bodo poskrbela za spremembo kota iz γ v α ali β v oglišču v i. Algoritem, ko obdela predhodnike in naslednike trenutnega konkavnega oglišča na konveksni lupini, celoten postopek ponovi na naslednjem oglišču, ki je na konveksni lupini. Ko algoritem obdela vsa oglišča na konveksni lupini, ponovno izračuna konveksno 59

lupino na konkavnih ogliščih. Ko so vsa konkavna oglišča v mnogokotniku obdelana, se algoritem zaključi. Del mnogokotnika, ki ostane netrianguliran, trianguliramo neposredno (glej sliko 39c). Na koncu algoritem izvede popravljanje vseh trikotnikov z Delaunayjevim pogojem. Poglejmo primer triangulacije mnogokotnika na sliki 45. Na začetku zgradimo konveksno lupino. Ta je sestavljena iz oglišč v 15, v 10, v 1, v 9 in v 14 (slika 45a). Nato za vsako oglišče na konveksni lupini izračunamo kote med mnogokotnikom in konveksno lupino ter pričnemo postopek triangulacije, opisan v tem poglavju. Algoritem prične triangulirati mnogokotnik v poljubnem oglišču na konveksni lupini. V našem primeru naj bo to kar prvo oglišče na konveksni lupini, torej oglišče v 15. To oglišče ima samo kot β. V tem primeru bo algoritem preskočil korak konstrukcije α- trikotnikov. Algoritem bo poiskal naslednje oglišče oglišča v 15 (to je oglišče v 16 ), nato pa naslednika naslednjega oglišča (to je oglišče v 17 ). Za trikotnik 15,16,17 bo algoritem izračunal kot v 16 v 15 v 17. Ker je kot v 16 v 15 v 17 manjši od kota β v oglišču v 15 in ker še ne obstaja noben β-trikotnik v oglišču, se trikotnik 15,16,17 vstavi in oglišče v 16 se izbriše. Algoritem nadaljuje tako, da ponovno poišče naslednika oglišča v 15 (to je oglišče v 17 ) in naslednika naslednjega oglišča (to je v 0 ) ter izračuna v 17 v 15 v 0. Ker je kumulativna vsota kotov β-trikotnikov in v 17 v 15 v 0 manjša od kota β v oglišču v 15, trikotnik 15,17,0 vstavimo in izbrišemo oglišče v 17. Algoritem nadaljuje tako, da ponovno pogleda naslednje oglišče oglišča v 15 (to je v tem primeru v 0 ) in naslednika naslednjega oglišča (to je v 1 ) ter izračuna v 1 v 15 v 0. Kumulativna vsota kotov vseh do sedaj vstavljenih β-trikotnikov v oglišču v 15 in v 1 v 15 v 0 presega kot β v oglišču v 15. Zato izračunamo presečišče med robom mnogokotnika v 0 1 ter premico na ogliščih v 15 in v 9 (v 15 je trenutno oglišče, ki ga algoritem obdeluje, v 9 pa je naslednje oglišče oglišča v 15 na konveksni lupini). Presečišče predstavlja novo Steinerjevo točko, ki jo vstavimo na rob v, 0 1 označimo pa z v 20. Po prej opisanem postopku algoritem razdeli mnogokotnik na dva dela, ker se oglišče v 10 nahaja na daljici v. 15 20 Sprva vstavimo dva nova trikotnika, in sicer 15,0,10 in 9,20,10, nato pa razdelimo mnogokotnik. Dobimo dve verigi, in sicer s 1 = {v 1, v 2, v 3, v 4, v 5, v 6, v 7, v 8, v 9, v 10, v 20 } in s 2 = {v 21, v 11, v 12, v 13, v 14, v 15 }. Oglišče v 21 je nastalo kot dvojnik koordinat oglišča v 10 (slika 45b). Nato preverimo, če je mogoče 60

katero izmed zaporedij oglišč triangulirati neposredno. Izkaže se, da je možno triangulirati drugo zaporedje, saj vsebuje samo eno konkavno oglišče (oglišče v 14 ). Tako dobimo naslednje trikotnike: 14,13,12, 14,12,11, 14,11,21 in 14,21,15 (slika 45c). Algoritem nato še popravi kote v oglišču v 10 (oglišče v j+1 ), in sicer: kot v oglišču je definiran s v 20 v 10 v 9, kot β v tem oglišču pa s v 20 v 10 v 1. Algoritem je z β-trikotniki zapolnil celoten razpoložljiv kot β, zato gre na naslednje oglišče na konveksni lupini, to je oglišče v 1. Oglišče v 1 ima prisotna kota α in β. Algoritem sprva poišče predhodnika oglišča v 1 (to je oglišče v 20 ) in predpredhodnika oglišča v 1 (to je oglišče v 10 ) ter izračuna kot trikotnika v oglišču v 1 ( v 20 v 1 v 10 ). Kumulativna vsota kotov α-trikotnikov v oglišču v 1 in v 20 v 1 v 10 je enaka kotu α v oglišču v 1. Ker se oglišče v 10 (predhodnik na konveksni lupini oglišča v 1 ) ne nahaja na daljici v 1 10 (robne točke daljice se ne upoštevajo), vstavimo nov trikotnik 1,20,10 in odstranimo oglišče v 20. Ker smo kot α v oglišču v 1 zapolnili, gre algoritem na drugi korak triangulacije triangulacija oglišča v 1 in njegovih naslednikov. Dobimo trikotnik 1,2,3 in izračunamo kot trikotnika v oglišču v 1. Izračunani kot presega vrednost kota β v v 1, zato novega trikotnik ne vstavimo. Izračunamo presečišče med premico na ogliščih v 1 in v 9 (oglišči v i in v j+1 ) in robom mnogokotnika v 1 3 (rob v ). i+1 i+2 To presečišče je nova Steinerjeva točka, ki jo vstavimo na rob mnogokotnika med oglišči v 2 in v 3 (oglišče v 22 ) ter dodamo nov trikotnik 1,2,22. S tem smo obdelali oglišče v 1 (slika 45d). Postopek nadaljujemo v naslednjem oglišču na konveksni lupini, v oglišču v 9. Oglišče ima kot γ in še ni del nobenega obstoječega trikotnika (α- ali β-trikotnika). Zato ga algoritem preskoči (slika 45e). Ker je algoritem obdelal vsa oglišča na konveksni lupini, določi novo konveksno lupino nad vsemi preostalimi konkavnimi oglišči. Konkavna oglišča v mnogokotniku so v 3, v 9 in v 8 in so vsi člani nove konveksne lupine (slika 45f). Ponovno izračunamo kote med konveksno lupino in mnogokotnikom za vsako oglišče na konveksni lupini, triangulacija pa se prične v poljubnem oglišču konveksne lupine. V našem primeru pričnimo v oglišču v 3. Ker ima oglišče kota α in β, najprej generiramo α-trikotnike. Prvi je trikotnik 3,22,1, za katerega izračunamo kot v oglišču v 3. v 22 v 3 v 1 je manjši od kota α v oglišču v 3, zato trikotnik 3,22,1 vstavimo in odstranimo oglišče v 22. Za naslednji trikotnik (trikotnik 3,1,10 ) izračunamo kot v oglišču v 3 ( v 1 v 3 v 10 ). Ker je kumulativna vsota kotov α-trikotnikov v oglišču v 3 ( v 22 v 3 v 1 ) in kota v 1 v 3 v 10 manjša od kota α v oglišču v 3, vstavimo trikotnik 3,1,10 in odstranimo oglišče v 1. Nato algoritem za trikotnik 3,10,9 61

izračuna kot v 10 v 3 v 9. Kumulativna vsota kotov vseh α-trikotnikov v oglišču v 3 ( v 22 v 3 v 1 + v 1 v 3 v 10 ) in v 10 v 3 v 9 presega kot α v oglišču v 3. Zato izračunamo presečišče med daljico v 10 v 9 in premico na ogliščih v 3 in v 8 (oglišči v i in v j 1 ). Dobimo Steinerjevo točko, ki jo vstavimo na rob mnogokotnika v. 10 9 Označimo jo z v 23 (oglišče v s1 ). Ker oglišče v 8 (oglišče v j 1 ) ni na daljici v 3 23 (daljica v ), i s1 vstavimo trikotnik 3,10,23 in odstranimo oglišče v 10. Triangulacijo nadaljujemo z drugim korakom triangulacije. Generiramo trikotnik 3,4,5. v 4 v 3 v 5 je manjši od kota β v oglišču v 3, zato trikotnik vstavimo ter ostranimo oglišče v 4. Algoritem nadaljuje s trikotnikom 3,5,6. Kumulativna vsota kotov vseh β-trikotnikov in v 5 v 3 v 6 presega kot β v oglišču v 3, zato izračunamo presečišče med premico na ogliščih v 3 in v 9 ter daljico v. 5 6 Presečišče označimo z v 24 (glej sliko 45g). Nato popravimo sosednostne relacije v mnogokotniku, saj je oglišče v 9 (oglišče v j+1 ) na daljici v 3 24 (daljica v ). i s1 Zatem oglišče v 9 podvojimo (označimo ga z v 25 ) in ga vstavimo na rob mnogokotnika v. 9 10 Nato razdelimo mnogokotnik na dva dela, in sicer: v 24, v 6, v 7, v 8, v 9 ter v 25, v 23, v 3. Za oba dela mnogokotnika algoritem ugotovi, da ju je možno neposredno triangulirati. Prvo zaporedje vsebuje eno konkavno oglišče (oglišče v 8 ). Trikotniki, ki nastanejo, so: 8,7,6, 8,6,24 in 8,24,9. Drugo zaporedje ima samo tri oglišča, iz katerih nastane trikotnik 25,23,3. Ker v mnogokotniku ne obstaja več nobeno konkavno oglišče, se algoritem zaključi. Rezultat triangulacije vidimo na sliki 45h. Na koncu algoritem popravlja obstoječe trikotnike tako, da zadostijo Delaunayjevemu pogoju. 62

Slika 45: Primer triangulacije konkavnega mnogokotnika. 63

5.1.4 Robni primer V prejšnjem podpoglavju smo opisali delovanje algoritma triangulacije mnogokotnika, temelječega na konveksni lupini. Algoritem triangulira dele mnogokotnika, ki so med zunanjim obročem mnogokotnika ter konveksno lupino. Če ima oglišče kot α, generiramo trikotnike glede na trenutno oglišče in predhodna oglišča mnogokotnika. Če ima oglišče kot β, tvorimo trikotnike glede na trenutno oglišče na konveksni lupini in naslednja oglišča na mnogokotniku. Če ima oglišče kot γ in ni vsebovano še v nobenem trikotniku triangulacije, potem triangulacija z obstoječimi postopki v okolici takega oglišča ni možna. Povedali smo, da so predhodna in naslednja oglišča takega oglišča vsebovana v konveksni lupini, zaradi česar lahko dobimo neravninsko triangulacijo. Zato algoritem tako oglišče preskoči. V primeru, da imamo na konveksni lupini vsa oglišča, pri katerih je prisoten kot γ, triangulacijski postopek odpove (za primer glej sliko 46). γ. Slika 46: Mnogokotnik, kjer imajo vsa oglišča na konveksni lupini prisoten kot V tem primeru najprej poiščemo oglišče na konveksni lupini, ki ima najmanjšo vrednost koordinate x. Označimo ga z v i. Nato poiščemo konveksna oglišča mnogokotnika, ki imajo vrednost koordinate x manjšo od vrednosti koordinate x oglišča v i, in izmed njih izberemo oglišče v n z najmanjšo razdaljo do oglišča v i. Povezava med tema 64

ogliščema je diagonala, ki je zmeraj v celoti znotraj mnogokotnika. Z diagonalo lahko razdelimo mnogokotnik na dve verigi. S tem se kot v oglišču v i spremeni iz γ v α ali β, kar nam omogoča, da mnogokotnik v okolici oglišča v i trianguliramo na že opisan način. Kot rezultat delitve mnogokotnika dobimo dve dodatni oglišči (oglišče v s1 in oglišče v s2 ), dve neodvisni verigi. Na sliki 47a vidimo robni primer, kjer imajo vsa oglišča kot γ. Oglišče v 12 predstavlja oglišče v i, oglišče v 0 pa je potem oglišče v 12. Rezultat popravljanja sosednostnih relacij med oglišči je na sliki 47b, kjer prva veriga predstavlja oglišča v 0, v s2, v 13, v 14, v 15, v 16, druga veriga pa oglišča v 12, v s1, v 1, v 2, v 3, v 4, v 5, v 6, v 7, v 8, v 9, v 10, v 11 in v 12. Slika 47: Primer delitve zaporedja oglišč mnogokotnika v dve medsebojno neodvisni zaporedji oglišč. 5.1.5 Triangulacija mnogokotnika z luknjami Triangulacija mnogokotnika z luknjami je rešena na podoben način, kot smo to naredili pri robnem primeru. Tako zunanji obroč mnogokotnika kot tudi luknje so predstavljene z ločenimi seznami oglišč in orientirane v smeri urinega kazalca. Algoritem triangulira mnogokotnik z luknjami na sledeč način: Že v koraku inicializacije priredimo luknjam informacijo o tem, kateremu obroču pripadajo, in obroču vse luknje. V času triangulacije algoritem sprva preveri, ali ima zunanji obroč luknjo. Če jo ima, se ustvari seznam konkavnih oglišč, ki je sestavljen iz konkavnih oglišč zunanjega obroča in konkavnih oglišč vseh lukenj v zunanjem obroču. Nad tem seznamom konkavnih oglišč izračunamo konveksno lupino. 65

Če vsaj eno oglišče na konveksni lupini pripada zunanjemu obroču mnogokotnika, potem trianguliramo del mnogokotnika med konveksno lupino in zunanjim obročem mnogokotnika po že opisanem postopku (glej podpoglavje 5.1.3). V nasprotnem primeru (torej, če so vsa oglišča konveksne lupine del ene ali več lukenj oz. če so vsi koti γ) združimo zunanji obroč in luknjo mnogokotnika. Pri postopku združevanja najprej poiščemo oglišče na konveksni lupini (oglišče v i ), ki ima najmanjšo koordinato x, temu oglišču pa najbližje oglišče (oglišče v n ), ki ima manjšo koordinato x. Nato vstavimo v mnogokotnik diagonalo na ogliščih v i in v n, ki povezuje luknjo, na kateri je oglišče v i, ter zunanji obroč mnogokotnika. V ogliščih v i in v n ponovno izračunamo kote med mnogokotnikom in konveksno lupino, postopek triangulacije pa pričnemo v oglišču v i. Primer triangulacije mnogokotnika z luknjami si lahko ogledamo na sliki 48. Imejmo mnogokotnik z oglišči v 0, v 1, v 2, v 3 in dve luknji, kjer je prva definirana z oglišči v 4, v 5, v 6, v 7, druga pa z v 8, v 9, v 10, v 11. Konkavna oglišča so v 4, v 5, v 6, v 7, v 8, v 9, v 10, v 11. Mnogokotnik ima dve luknji, zato kreiramo seznam konkavnih oglišč, ki je sestavljen iz vseh konkavnih oglišč mnogokotnika in vseh lukenj. Nad tem seznamom oglišč izračunamo konveksno lupino, ki je sestavljena iz v 4, v 5, v 9, v 10, v 11, v 7 (slika 48a). Nato ugotovimo, da nobeno oglišče konveksne lupine ni na zunanjem obroču mnogokotnika. Iz tega razloga pričnemo s postopkom združevanja zunanjega obroča mnogokotnika in luknje. Oglišče z najmanjšo koordinato x na konveksni lupini je oglišče v 10 (oglišče v i ), temu najbližje oglišče na zunanjem obroču mnogokotnika pa oglišče v 3 (oglišče v n ). Ti oglišči podvojimo glede na koordinate. Tako dobimo oglišče v 12, ki ima enake koordinate kot oglišče v 3, in oglišče v 13, ki ima enake koordinate kot oglišče v 10. Oglišče v 13 vstavimo na rob mnogokotnika e 3,0, oglišče v 12 pa na e 10,11. Slednje oglišče je tudi del konveksne lupine. Nato ustvarimo seznam oglišč, kjer združimo zunanji obroč mnogokotnika in zanko, na kateri je oglišče z najmanjšo koordinato x (oglišče v 3 ). Na tak način dobimo nov mnogokotnik, definiran z oglišči v 3, v 10, v 9, v 8, v 7, v 10, v 13, v 0, v 1, v 2, triangulacijo pa pričnemo v oglišču v 10. V tem oglišču vstavimo naslednja α-trikotnika 10,13,11, 11,13,14 in naslednje β-trikotnike 10,3,2, 10,2,9 in 9,2,15 (slika 48b). Triangulacijo nadaljujemo v naslednjem oglišču na konveksni lupini, to je oglišče v 11. V tem oglišču vstavljamo samo 66

β-trikotnike. Najprej vstavimo 11,14,0. Naslednji trikotnik 11,0,1 bi presegel kot β v oglišču v 11, zato vstavimo novo Steinerjevo točko na e 0,1 (oglišče v 16 ). Ker je naslednje oglišče (oglišče v 7 ) na konveksni lupini del luknje, in ne zunanjega obroča mnogokotnika, združimo zunanji obroč mnogokotnika in to luknjo. Tako dobimo nov mnogokotnik, definiran na ogliščih: v 11, v 7, v 6, v 5, v 4, v 17, v 16, v 1, v 15, v 9, v 8. Nato vstavimo β-trikotnika 11,0,7 in 7,0,16 (slika 48c). Triangulacijo nadaljujemo v oglišču v 17, kjer ponovno vstavimo β-trikotnike, in sicer 17,16,4, 4,16,18 (slika 48d). Nato gremo na oglišče v 4, kjer vstavimo 4,18,1, 4,1,5 in 5,1,19 (slika 48e). Naslednje oglišče, ki ga obravnavamo, je oglišče v 5. V tem koraku nastaneta trikotnika 5,19,15 in 5,15,9 (slika 48f). Ker so vsa oglišča obdelana, izračunamo novo konveksno lupino. Ta je sestavljena iz oglišč v 8 in v 6 (slika 48g). Po izračunov kotov pričnemo triangulacijo v oglišču v 8. Tako vstavimo trikotnik 8,11,7. Oglišče v 8 se spremeni iz konkavnega v konveksnega, in ker imamo v mnogokotniku prisotno samo še eno konkavno oglišče, lahko ta del trianguliramo neposredno. Tako iz konkavnega oglišča (oglišče v 6 ) zaporedno ustvarjamo trikotnike, in sicer 6,7,8, 6,8,9 in 6,9,5. Rezultat triangulacije je viden na sliki 48h. 67

Slika 48: Primer triangulacije mnogokotnika z luknjami. 68

5.1.6 Rezultati triangulacije Na sliki 49 pokažemo nekaj primerov dobljene triangulacije z opisanim algoritmom, na sliki 50 vidimo triangulacijo mnogokotnikov z večjim številom oglišč, na sliki 51 pa primere triangulacije mnogokotnikov z luknjami. Vsi rezultati so dobljeni brez korekcije z Delaunayjevim kriterijem. Slika 49: Primeri triangulacije mnogokotnikov z manjšim številom oglišč. 69

Slika 50: Primeri triangulacije mnogokotnikov z večjim številom oglišč. 70

Slika 51: Primer triangulacije mnogokotnikov z luknjami. 71

5.2 Popravljanje trikotnikov triangulacije Po gradnji omejene Delaunayjeve triangulacije analiziramo dobljene trikotnike in jih po potrebi spremenimo. Posebno pozornost namenimo: topim trikotnikom in trikotnikom, ki vključujejo konveksna oglišča mnogokotnikov. 5.2.1 Popravljanje trikotnikov s topimi koti Podpoglavje opisuje postopek analize in popravljanja topih trikotnikov, ki imajo tri sosednje trikotnike (glej sliko 52). Iz topega oglišča v c mnogokotnika (oglišče v 6 na sliki 52a) pošljemo vektor proti središču očrtane krožnice c l. Nato izračunamo presečišče med vektorjem in vsemi robovi trenutnega topega trikotnika. S pomočjo sosedskih relacij trikotnikov triangulacije se pomaknemo v sosedni trikotnik preko roba, kjer se je presečišče zgodilo. Postopek ponavljamo, dokler ne naletimo na primer, ko se nobeden izmed robov trikotnika ne seka z vektorjem ali pa poslani vektor preseka rob mnogokotnika. Če se nobeden izmed robov trikotnika ne seka z vektorjem, pomeni, da je središče topega trikotnika v mnogokotniku in topega trikotnika ne popravljamo. Nasprotno, če se vektor in rob mnogokotnika sekata, vstavimo Steinerjevo točko na prebodeni rob mnogokotnika. Točko vstavimo po naslednjem postopku: Najprej poiščemo skupno oglišče v a, ki je na prebodenem robu mnogokotnika in topem trikotniku (v a je v 8 na sliki 52a). Nato izberemo rob topega trikotnika, ki ne vsebuje oglišča v a (rob e 3,6 na sliki 52a), in izračunamo točko p, ki predstavlja razpolovišče omenjenega roba. Nato kreiramo vektor c l p in izračunamo presečišče tega s predhodno prebodenim robom mnogokotnika (rob e 8,9 na sliki 52a). Na presečišče vstavimo novo Steinerjevo točko, ki jo označimo z v s. To točko nato vstavimo v obstoječo triangulacijo. To naredimo tako, da vsem trikotnikom, ki so bili prebodeni z vektorjem v c c l, premaknemo oglišče v a v oglišče v s. Po premiku vseh trikotnikov dobimo vrzel, ki jo zapolnimo s trikotnikom Δ cas. Rezultat celotnega koraka popravljanja topih trikotnikov s tremi sosedi vidimo na sliki 52b. 72

točke. Slika 52: Postopek popravljanja topega trikotnika z vstavljanjem Steinerjeve V podpoglavju opisan postopek izboljšave triangulacije popravlja samo trikotnike, ki imajo središče očrtane krožnice zunaj mnogokotnika in imajo tri sosedne trikotnike. 5.2.2 Popravljaje trikotnikov v konveksnih ogliščih Vemo, da srednja os vedno izvira iz konveksnih oglišč mnogokotnika (glej sliko 53). Zato moramo ustrezno popraviti vse trikotnike v konveksnih ogliščih. Zaradi nadaljnjih postopkov moramo zagotoviti naslednji lastnosti: da konveksna oglišča mnogokotnika pripadajo samo enemu trikotniku in ta trikotnik naj bo enakostraničen. Slika 53: Srednja os mnogokotnika vedno izvira iz konveksnega oglišča. 73

Na sliki 54a vidimo primer triangulacije mnogokotnika. Postopek popravljanja trikotnikov v konveksnih ogliščih mnogokotnika z vstavljanjem Steinerjevih točk je sledeč: Sprva ustvarimo seznam trikotnikov, ki vsebujejo konveksno oglišče v c (na sliki 54a je v c = v 1 ). Ta seznam trikotnikov uredimo v protiurni smeri okrog oglišča v c, da dobimo trikotniški trak T s (na sliki 54a je T s = Δ 2, Δ 1 ). Nato oglišču v c poiščemo najbližje oglišče v n (na sliki 54a je v n = v 4 ), tako da zaporedno računamo evklidsko razdaljo od v c do vseh oglišč, ki sestavljajo trikotnike v T s. Če sta dve oglišči enako oddaljeni od oglišča v c, potem vzamemo prvo. Razdalja d v c v n predstavlja polmer krožnice k, katere središče je v oglišču v c. Na presečišču med krožnico k s polovičnim polmerom in robovoma mnogokotnika, ki vsebujeta konveksno oglišče v c, vstavimo dve Steinerjevi točki v s1 in v s2. Prva Steinerjeva točka v s1 se vstavi na rob v c v c+1, v s2 pa na rob v c 1 v c. Dve na novo pridobljeni točki moramo sedaj povezati v obstoječo triangulacijo mnogokotnika. To storimo tako, da najprej izračunamo kot v c 1 v c v c+1 v konveksnem oglišču v c (na sliki 54b računamo kot v 4 v 1 v 2 ). Nato zaporedno v protiurni smeri spreminjamo trikotnike iz T s, kjer vsakemu trikotniku prestavimo oglišče iz v c v v s1 ali v s2. Kriterij, ki določa, kam se bo oglišče prestavilo, je kumulativna vsota kotov trikotnikov v oglišču v c. Dokler je kumulativna vsota kotov trikotnikov v oglišču v c manjša od razpolovišča kota v oglišču v c, trikotniku prestavimo oglišče v c v oglišče v s1 (glej sliko 54b). V nasprotnem primeru pa trikotniku prestavimo oglišče iz v c v v s2 (glej sliko 54c). Po spremembi vseh trikotnikov iz T s dobimo vrzel, ki jo zapolnimo z dvema dodatnima trikotnikoma: Δ c,s1,s2 (glej sliko 54d) in Δ s2,s1,n (glej sliko 54e). Na sliki 54f je prikazana triangulacija mnogokotnika, kjer so vsa obdelana konveksna oglišča. 74

Slika 54: Popravljanje trikotnikov v konveksnih ogliščih mnogokotnika. Z opisanim postopkom popravljanja trikotnikov triangulacije zagotovimo, da je obema zahtevanima lastnostnima zadoščeno, torej da konveksno oglišče pripada samo enemu trikotniku in da je le-ta enakokraki. V primeru, da je v konveksnem oglišču mnogokotnika prisoten samo en trikotnik, se postopek popravljanja trikotnikov triangulacije poenostavi tako, da ne kreiramo seznama trikotnikov. V primeru, da najbližja točka v n ni na istem obroču kot konveksno oglišče v c, se postopek triangulacije vrzeli razlikuje od prej opisanega. Poglejmo konveksno oglišče v c na sliki 55a. Po urejanju trikotnikov v nasprotni smeri urinega kazalca (T s = Δ 2, Δ 1, Δ 3 ), iskanju najbljižje točke v n in spreminjanju trikotnikov v T s (glej sliko 55b) dobimo vrzel. Zapolnimo jo z vstavljanjem dveh novih trikotnikov: Δ c,s1,s2 (glej sliko 55c) in Δ n,s1,s2 (glej sliko 55d). Rezultat popravljanja trikotnikov v vseh konveksnih ogliščih vidimo na sliki 56. 75

Slika 55: Popravljanje triangulacije, ko najbližja točka in konveksno oglišče nista na istem obroču. Zaradi premikanja trikotnikov se lahko zgodi, da premik oglišča trikotnik izrodi (vsa tri oglišča postanejo kolinearna). Izrojene trikotnike algoritem odstrani. 76

Slika 56: Rezultat popravljanja trikotnikov v vseh konveksnih ogliščih. 5.3 Generiranje srednje osi Po koraku triangulacije in popravljanja trikotnikov omejene Delaunayjeve triangulacije sledi korak gradnje aproksimacije srednje osi mnogokotnika. Postopek rekurzivno obišče vse trikotnike in zgradi aproksimacijo srednje osi. Srednja os se zgradi na podlagi tipov trikotnikov, ki jih definiramo, kot sledi (glej sliko 57): trikotniki, ki sovpadajo z enim robom mnogokotnika, so tipa A, trikotniki, ki sovpadajo z dvema robovoma mnogokotnika, so tipa B in trikotniki, ki sovpadajo s tremi robovi mnogokotnika, so tipa C. Slika 57: Trikotnike razdelimo v tipe A, B in C. 77

Trikotniki tipa C cepijo oz. razdelijo srednjo os, trikotniki tipa B predstavljajo izhodišče srednje osi iz konveksnih oglišč mnogokotnika, medtem ko trikotniki tipa A prispevajo h končni rešitvi odsek. Celoten postopek gradnje aproksimacije srednje osi je obrazložen v nadaljevanju. Algoritem prične gradnjo aproksimativne srednje osi v poljubnem trikotniku tipa C. Takšen trikotnik vedno obstaja zaradi predhodnega vstavljanja Steinerjevih točk. Sprva se za omenjen tip trikotnika preveri, ali je središče očrtane krožnice trikotnika v tem trikotniku. Če je, središče očrtane krožnice trikotnika predstavlja točko na srednji osi in algoritem rekurzivno obišče vse sosednje trikotnike. Če algoritem naleti na trikotnik tipa A, ustvari povezavo med zadnjo točko, vstavljeno na srednjo os, in razpoloviščem skupnega roba z naslednjim trikotnikom. Ker je trikotnik tipa A, pomeni, da ima samo dva sosednja trikotnika in da je skupni rob z naslednjim trikotnikom samo eden. Če algoritem obišče trikotnik tipa B, odstrani vse daljice med trenutnim trikotnikom tipa B in zadnjim obiskanim trikotnikom tipa C, ki so bile dodane zaradi trikotnikov tipa A. Nato vstavi daljico, ki povezuje središče očrtane krožnice zadnjega trikotnika tipa C in vrhnjega oglišča (angl. top vertex) trikotnika tipa B. V primeru, da središča očrtane krožnice ni v trikotniku (topi trikotnik), je postopek gradnje aproksimativne srednje osi nekoliko drugačen. Sprva algoritem pošlje vektor iz topega oglišča trikotnika tipa C proti središču očrtane krožnice. Vsi trikotniki, prebodeni z žarkom, se označijo kot onemogočeni in ne prispevajo h končni rešitvi. Algoritem rekurzivno obiskuje sosednje trikotnike in na podlagi posameznih tipov obiskanih trikotnikov doda daljico k aproksimativni srednji osi, kot smo pravkar opisali. 78

Slika 58: Gradnja aproksimativne srednje osi. Poglejmo primer na sliki 58. Gradnjo srednje osi pričnemo v trikotniku C 2 (slika 58a). Središče očrtane krožnice trikotnika C 2 je v trikotniku A 1. Trikotnik A 1 onemogočimo in ga v nadaljnjem postopku gradnje srednje osi ne obravnavamo več (ne vpliva na strukturo srednje osi). Iz trikotnika C 2 obiščemo trikotnik B 2. Zadnjo točko, vstavljeno 79

na srednjo os (središče očrtane krožnice trikotnika C 2 ), povežemo z zgornjo točko trikotnika B 2 (glej sliko 58b). Algoritem se rekurzivno vrne na trikotnik C 2, iz katerega obiščemo trikotnik B 1 (slika 58c). Uporabimo enak postopek kot prej in algoritem se rekurzivno vrne na trikotnik C 2. Iz tega trikotnika obiščemo še zadnji neobiskan sosednji trikotnik trikotnika C 2 trikotnik A 1. Ker je bil trikotnik A 1 označen za onemogočenega (iz tega razloga ne vpliva na strukturo srednje osi), ga preskočimo in nadaljujemo z gradnjo srednje osi s trikotnikom C 1 (slika 58d). Središče očrtane krožnice trikotnika C 1 povežemo z zadnjo točko, vstavljeno na srednjo os (središče očrtane krožnice trikotnika C 2 ). Algoritem obišče trikotnik A 2. Zadnjo točko, vstavljeno na srednjo os, povežemo z razpoloviščem skupnega roba med trikotnikoma A 2 in A 3 (glej sliko 58e). Algoritem nadaljuje gradnjo srednje osi s trikotnikom A 3, kjer postopek ponovimo zadnjo točko na srednji osi povežemo z razpoloviščem skupnega roba trikotnikov A 3 in C 3 (slika 58f). Naslednji obiskan trikotnik je trikotnik C 3. Središče očrtane krožnice C 3 je v trikotniku A 3, zato trikotnik A 3 onemogočimo. Ker je bil A 3 že obravnavan, se njegov vpliv na srednjo os izbriše in povežemo še zadnjo točko na srednji osi (središče očrtane krožnice C 3 ) z razpoloviščem skupnega roba med A 2 in A 3 (glej sliko 58g). Iz C 3 algoritem nadaljuje pot do trikotnika B 5. Zadnjo na srednjo os vstavljeno točko (središče očrtane krožnice trikotnika C 3 ) povežemo z vrhnjim vozliščem trikotnika B 5 (slika 58h). Podobno obdelamo trikotnik B 4 na sliki 58i. Nato se rekurzivno vrnemo do trikotnika C 1. Edini še neobiskan sosednji trikotnik trikotnika C 1 je trikotnik A 4. V tem primeru povežemo zadnjo točko na srednji osi (središče očrtane krožnice C 1 ) in razpolovišče skupnega roba med trikotnikoma A 4 in A 5 (glej sliko 58j). Nato algoritem obišče trikotnik A 5 in spet doda daljico na srednjo os (razpolovišče skupnega roba med A 4 in A 5 ter razpolovišče skupnega roba med A 5 in B 3 ) (glej sliko 58k). Gradnjo nadaljujemo s trikotnikom B 3. Sprva vse spremembe na srednji osi (vstavljene točke), nastale zaradi trikotnikov tipa A med trenutnim trikotnikom (trikotnik B 3 ) in zadnjim trikotnikom tipa C (trikotnik C 1 ), izbrišemo. Nato se na srednjo os vstavi povezava med središčem očrtane krožnice C 1 in vrhnjim ogliščem B 3. Rekurzija se prekine (algoritem je obiskal vse trikotnike) in postopek gradnje srednje osi se zaključi. Končno srednjo os mnogokotnika vidimo na sliki 58l. Enak postopek gradnje srednje osi uporabimo tudi pri mnogokotnikih z luknjami. 80

5.4 Rezultati V tem poglavju predstavimo rezultate gradnje srednje osi z našim algoritmom na testnih mnogokotnikih. Na sliki 59 vidimo srednje osi mnogokotnikov z manj oglišči in brez lukenj, na sliki 60 srednje osi pri mnogokotnikih z luknjami, na sliki 61 pa vidimo rezultat algoritma na mnogokotnikih z večjim številom oglišč. Slika 59: Primeri aproksimativnih srednjih osi, dobljenih z našim algoritmom, na mnogokotnikih z manjšim številom oglišč in brez lukenj. Število oglišč: 4 (a); 6 (b); 7 (c); 8 (d); 13 (e) (povzeto po [114]); 19 (f). 81

Slika 60: Število oglišč: 30 (a); 12 (b); 341 (c). Primeri aproksimativne srednje osi nad mnogokotniki z luknjami. 82

Slika 61: Aproksimativna srednja os nad mnogokotniki z večjim številom oglišč. Število oglišč 997 (a); 1204 (b); 270 (c) (povzeto po [19, 114, 122]). 83

6 Analiza algoritma V tem poglavju analiziramo naš algoritem najprej glede na časovno in prostorsko zahtevnost, nato pa glede na kvaliteto aproksimacije srednje osi v primerjavi z obstoječo eksaktno in aproksimacijsko rešitvijo. 6.1 Izpeljava časovne zahtevnosti Predstavljeni algoritem deluje v treh korakih. V prvem koraku zgradimo omejeno Delaunayjevo triangulacijo. Algoritem triangulira mnogokotnik s pomočjo konveksne lupine, ki jo zgradi nad konkavnimi oglišči. Za konstrukcijo konveksne lupine smo uporabili algoritem quick-hull, predstavljen v [121], ki ima časovno zahtevnost O(u log u), kjer u predstavlja število konkavnih oglišč. Nato izračunamo kote med konveksno lupino in mnogokotnikom. Časovna zahtevnost tega koraka je O(z), kjer je z u in predstavlja število oglišč konveksne lupine. Nato zaporedno obiskujemo konkavna oglišča na konveksni lupini ter vstavljamo trikotnike med konveksno lupino in mnogokotnikom. Po obisku vseh oglišč algoritem izračuna konveksno lupino na preostalih konkavnih ogliščih vhodnega mnogokotnika in postopek triangulacije ponavlja, dokler ne obdelamo vseh konkavnih oglišč. Del mnogokotnika, ki ostane, vsebuje samo konveksna oglišča, katerih triangulacija je izvedljiva v konstantnem času. Ko je triangulacija končana, algoritem za vsak trikotnik preveri Delaunayjev pogoj in po potrebi zamenjuje diagonale dveh sosednjih si trikotnikov. Celotna časovna zahtevnost algoritma za triangulacijo mnogokotnika je odvisna od tega, kolikokrat se izračuna konveksna lupina. Potemtakem je pričakovana časovna zahtevnost O(Hu log u), kjer H predstavlja število vgnezdenih konveksnih lupin. Najslabši možen primer mnogokotnika za triangulacijo vidimo na sliki 62, kjer imamo n 3 konkavnih oglišč, ta pa so razporejena tako, da v eni iteraciji dobimo samo šest oglišč na konveksni lupini. Posledično dobimo n konveksnih lupin. Za prvo konveksno lupino mora algoritem prevereriti vseh n 3 konkavnih oglišč, v drugi iteraciji pa le 6 še n 9, v tretji n 15 itd. Število oglišč, ki jih mora algoritem preveriti, predstavlja 84

naslednja vrsta n 6 i=1 (n + 3 6i), ki jo predstavimo z enačbo n2. Za eno iteracijo algoritem quick-hull potrebuje O(n log n) časa, kjer je n število oglišč. Če imamo n 6 iteracij, potem quick-hull potrebuje (n 3) log (n 3) + (n 9) log (n 9) + (n 15)log (n 15)+ To vsoto lahko zapišemo kot log ( je enako n 6 I=1 n 6 i=1 12 (n + 3 6i) (n+3 6i) ), kar (n + 3 6i) log (n + 3 6i). Upoštevajmo, da je logaritemska funkcija naraščajoča, zato je za vsak i log(n + 3 6i) log n. Posledično je: n 6 (n + 3 6i) log(n + 3 6i) I=1 n 6 (n + 3 6i) log n I=1 n 6 log n (n + 3 6i). I=1 n 6 Dobljeno končno aritmetično zaporedje I=1 (n + 3 6i) zapišemo z naslednjo enačbo: S m = m(b 1 + b m ) 2 m = b i i=1 ; b i = n + 3 6i. Tukaj moramo ločiti dva primera, in sicer: - n = 6h in - n = 6h + a; a {1,2,3,4,5}, kjer je h N. Če je n = 6h, potem je k (6h + 3 6i) I=1 = h(6h 3 + 3) 2 = 3h 2 = 3 ( n 2 6 ), kar je enako n2 12. Če je n = 6h + a, potem je 85

k (6h + a + 3 6i) I=1 = h(6h + a 3 + a + 3) 2 = h(3h + a) n a a = (n + 2a 6 2 2 ), kar je enako n2 a 2 12. Iz tega sledi: n 6 log ( (n + 3 6i) (n+3 6i) ) { i=1 n 2 12 n 2 a 2 12 log n ; 6 n, log n ; 6 n kar nam daje najslabšo časovno zahtevnost O(n 2 log n). Najboljša časovna zahtevnost je O(n). Tako časovno zahtevnost dobimo pri konveksnih mnogokotnikih in konkavnih mnogokotnikih, ki imajo manj kot dve konkavni oglišči. Slika 62: Primer najslabšega možnega mnogokotnika, kjer dobimo vgnezdene konveksne lupine na konkavnih ogliščih. 86

V drugem koraku trikotnike analiziramo in jih, če je treba, popravimo po postopku, ki je opisan v podpoglavju 5.2. Najslabši možen primer predstavlja konveksen mnogokotnik, saj moramo vstaviti 2n novih oglišč (za vsako konveksno oglišče vstavimo dve oglišči). Posledično dobimo 3n 2 trikotnikov. V zadnjem koraku sledi sprehod skozi vse dobljene trikotnike triangulacije s pomočjo medsosednostnih relacij, kjer se zgradi srednja os. Ta korak se izvede v času O(n). Potemtakem je celotna časovna zahtevnost algoritma odvisna od algoritma triangulacije. 6.2 Meritve Za določitev učinkovitosti našega algoritma (AMA Approximate Medial Axis) smo njegove izvajalne čase primerjali z izvajalnimi časi algoritma za generiranje eksaktne srednje osi (EMA Exact Medial Axis). Tega smo dobili iz [32] in je implementiran po postopku, opisanem v [33]. Algoritem za generiranje eksaktne srednje osi ne podpira mnogokotnikov z luknjami, zato smo meritve izvajalnega časa opravili samo na mnogokotnikih brez lukenj. Rezultati meritev generiranja eksaktne in aproksimacijske srednje osi so prikazani v tabeli 1, čas pa je izražen v milisekundah. Meritve smo opravili na računalniku s procesorjem Intel Core Quad Q6600 2.40GHz s 4 GB pomnilnika, uporabili pa smo mnogokotnike s slike 63. Slika 63: Primeri mnogokotnikov za meritve. Konveksni mnogokotnik (a), konkavni mnogokotnik (b) in zvezdni mnogokotnik (c). 87

Tabela 1: Primerjava izvajalnih časov (ms) našega aproksimacijskega algoritma in algoritma za generiranje eksaktne srednje osi. Število oglišč Algoritem Vrsta mnogokotnika Konveksni Konkavni Zvezdni 100 200 500 1000 2000 EMA 1.854 1.508 2.457 AMA 0.282 0.513 0.982 EMA 7.546 7.980 5.176 AMA 0.664 0.945 1.857 EMA 17.596 20.502 12.972 AMA 0.854 2.563 4.810 EMA 30.177 35.558 28.48 AMA 1.755 5.128 8.430 EMA 53.788 50.476 62.57 AMA 3.723 12.342 19.540 Meritve smo izvajali nad mnogokotniki z velikim številom oglišč, na katerih smo samo enkrat izračunali konveksno lupino (tabela 1). Meritve za realne primere smo povzeli v tabeli 2, kjer smo uporabili mnogokotnike iz slik 59 in 61. 88

Tabela 2: Meritve časa izvajanja za realne primere mnogokotnikov v milisekundah. Mnogokotnik Št. oglišč AMA EMA Slika 59a 4 0.204 0.376 Slika 59b 6 0.306 0.611 Slika 59c 7 0.315 0.635 Slika 59d 8 0.407 0.952 Slika 59e 13 0.456 1.243 Slika 59f 19 0.821 1.404 Slika 61a 997 44.856 47.924 Slika 61b 1204 46.961 68.722 Slika 61c 270 6.347 9.288 Jedro našega aproksimacijskega algoritma za generiranje srednje osi je triangulacija. Tega smo primerjali z algoritmom za omejeno Delaunayjevo triangulacijo, ki temelji na prebirni premici (označujemo ga s SWL) in je predstavljen v [31]. V času objave je bil med najučinkovitejšimi algoritmi za konstrukcijo omejene Delaunayjeve triangulacije. Izvajalne čase obeh algoritmov smo povzeli v tabeli 3, kjer smo triangulirali mnogokotnike s slike 63. V tabeli 4 smo primerjali izvajalne čase triangulacij za realne primere mnogokotnikov iz slik 59, 60 in 61. 89

Konveksni Konkavni Zvezdni Tabela 3: Izvajalni časi (ms) po korakih za algoritem VanGogh in primerjava leteh z algoritmom triangulacije, ki temelji na prebirni premici. Mnogokotnik VanGogh Čas raču- Vrsta mnogokotnika Št. oglišč nanja konveksnih lu- Čas triangulacije Število Čas legalizacije zamenjanih robov Skupen čas SWL pin 100 0.0000 0.006 0.09 178 0.120 2.694 200 0.0000 0.014 0.221 430 0.318 6.282 500 0.0000 0.032 0.501 1004 0.777 15.679 1000 0.0000 0.093 1.03 2038 1.582 31.531 2000 0.0000 0.161 2.087 4132 3.202 64.512 100 0.033 0.079 0.054 46 0.214 2.556 200 0.102 0.206 0.14 98 0.545 5.594 500 0.528 0.391 0.446 248 1.725 14.881 1000 0.803 0.812 1.373 497 3.699 32.662 2000 1.794 1.764 4.652 1000 9.662 64.109 100 0.056 0.033 0.096 75 0.247 2.317 200 0.101 0.093 0.151 164 0.503 5.628 500 0.662 0.23 0.361 438 1.774 27.104 1000 1.365 0.475 0.739 890 3.653 84.566 2000 3.014 1.010 1.490 1850 7.899 305.107 90

Mnogokotnik Tabela 4: Triangulacija realnih primerov mnogokotnikov. Št. oglišč VanGogh (konkavna/ konveksna) Št. konveksnih lupin Čas računanja konveksnih lupin Čas triangulacije Čas legalizacije Skupen čas SWL Slika 59a 0/4 0 0.000 0.001 0.000 0.001 0.036 Slika 59b 1/5 0 0.000 0.003 0.000 0.006 0.086 Slika 59c 2/5 1 0.003 0.007 0.003 0.012 0.095 Slika 59d 2/6 1 0.001 0.005 0.006 0.015 0.096 Slika 59e 4/9 1 0.002 0.014 0.01 0.024 0.182 Slika 59f 7/12 2 0.009 0.022 0.02 0.062 0.327 Slika 60a 20/10 5 0.044 0.045 0.026 0.134 0.616 Slika 60b 8/4 2 0.007 0.012 0.026 0.075 0.244 Slika 60c 176/165 17 1.817 0.805 0.423 3.717 9.968 Slika 61a 505/492 50 17.781 2.526 1.738 27.695 33.604 Slika 61b 577/627 86 7.585 3.295 3.164 17.463 36.086 Slika 61c 97/173 14 0.44 0.285 0.449 1.431 3.212 Naš algoritem triangulacije temelji na računanju konveksne lupine. Konveksna lupina se izračuna zgolj na konkavnih ogliščih mnogokotnika. Ker le-teh pri konveksnem mnogokotniku ni, se mnogokotnik triangulira neposredno. Iz tega razloga pri takih mnogokotnikih tudi dosegamo najnižje čase. Pri konkavnem in zvezdnem mnogokotniku so konkavna oglišča prisotna in se konveksna lupina mora izračunati vsaj enkrat. Iz meritev v tabeli 3 je razvidno, da je naš algoritem triangulacije bistveno hitrejši na danih primerih mnogokotnikov kot algoritem triangulacije, ki temelji na prebirni premici. Enako velja za realne mnogokotnike s slik 59, 60 in 61. 91

6.3 Prostorska zahtevnost Analizirajmo sedaj še prostorsko zahtevnost postopka generiranja aproksimacije srednje osi. Prostorska zahtevnost je v celoti odvisna od števila oglišč. Algoritem sprva prebere seznam oglišč, ki predstavljajo enostavni mnogokotnik. Prostorska zahtevnost je seveda enaka številu oglišč n. Nato v drugem koraku nad vhodnimi oglišči algoritem ustvari omejeno Delaunayjevo triangulacijo. Triangulacija sestoji iz n 2 trikotnikov, kjer je n število vseh oglišč mnogokotnika. V tretjem koraku trikotnike analiziramo in jih po potrebi popravimo. Odseke triangulacije popravimo z vstavljanjem Steinerjevih točk. Če privzamemo najslabši možni primer, kjer obdelujemo konveksni mnogokotnik, potem vstavimo 2n oglišč. V zadnjem koraku algoritma samo ustrezno povežemo sosedne trikotnike. Najslabša možna prostorska zahtevnost je potem 3n 2, ki predstavlja število trikotnikov. 6.4 Metrika za določitev natančnosti naše aproksimacije Najpomembnejša informacija pri vsakem aproksimativnem algoritmu je informacija o tem, kako natančno/kvalitetno rešitev dobimo v primerjavi z eksaktno rešitvijo. Iz tega razloga smo razvili metriko, ki oceni kvaliteto aproksimativne rešitve [122]. Ocenitev temelji na razmerju ploščin med eksaktno in aproksimacijsko srednjo osjo s ploščino celotnega mnogokotnika. 92

Slika 64: Prikaz metanja žarkov v notranjost mnogokotnika. Za ocenitev posamezne srednje osi sta potrebna dva koraka. V prvem koraku mnogokotnik diskretiziramo. Iz vsake točke na robovih mnogokotnika pošljemo žarek v notranjost mnogokotnika pravokotno glede na rob, na katerem točka leži. Nato izračunamo presečišče žarka z eksaktno srednjo osjo in razdaljo (označeno z d e ) med začetno točko žarka na mnogokotniku ter tem presečiščem. Poleg diskretizacije robov opravimo tudi diskretizacijo kota v konkavnih ogliščih (glej sliko 64). Kot sprva odmaknemo za π 2 od obeh robov v konkavnem oglišču, nato pa na enak način pošiljamo žarke v notranjost mnogokotnika in računamo presečišča z eksaktno srednjo osjo. Vsota vseh dolžin d e predstavlja ploščino mnogokotnika, ki jo označimo s S a. V drugem koraku ponovimo postopek, kjer iz vsake diskretizirane točke pošljemo žarek pravokotno v notranjost mnogokotnika in računamo presečišča z eksaktno in aproksimativno srednjo osjo. Nato izračunamo razdaljo d e in d a, ki predstavlja razdaljo od diskretizirane točke do aproksimativne srednje osi. Izberemo krajšo razdaljo in dol- m žine seštejemo, kot kaže naslednja enačba S b = i=0 min (d e, d a ). Razlika med ploščino celotnega mnogokotnika S a in ploščino S b predstavlja ploščino med eksaktno in aproksimacijsko srednjo osjo, ki jo označujemo s S c (slika 65c). Končno oceno metrike za kvaliteto rešitve izračunamo kot razmerje med celotno ploščino mnogokotnika S a in ploščino S c, ki je ploščina med srednjima osema (Napaka = S c S a ). 93

Slika 65: Primer eksaktne srednje osi (a), aproksimacije srednje osi (b) in ploščine med njima (c). 6.5 Primerjava natančnosti V podpoglavju primerjamo natančnost rešitev našega algoritma (AMA) in algoritma, temelječega na Voronoijevem diagramu (VDA), z rešitvijo algoritma za eksaktno srednjo os (EMA). Implementacijo Voronoijevega diagrama smo pridobili iz [34], ki implementira prebirni Fortunov algoritem [28]. Algoritem za konstrukcijo srednje osi, ki temelji na Voronoijevem diagramu, smo opisali v razdelku 4.2.1.4. Kvaliteto rešitev aproksimacijskih algoritmov (AMA in VDA) smo ocenjevali z metriko, opisano v podpoglavju 6.4. Kvaliteta rešitve srednje osi, pridobljene z Voronoijevim diagramom, je zelo odvisna od gostote oglišč mnogokotnika [24]. Nižja kot je gostota oglišč, slabše kvalitete je rešitev in obratno. V naših eksperimentih smo sprva generirali aproksimativno srednjo os na originalnem mnogokotniku in ocenili, kako blizu je eksaktni srednji osi. Nato smo na vsako razpolovišče roba mnogokotnika vstavili dodatno oglišče. S tem smo povečali gostoto oglišč in ponovno ocenili kvaliteto rešitve z Voronoijevim diagramom. Postopek smo ponavljali, dokler ni bila kvaliteta dobljene rešitve primerljiva s kvaliteto rešitve našega algoritma. Z vstavljanjem oglišč na razpolovišča robov mnogokotnika se je čas izvajanja seveda močno povečeval. Rezultati meritev so prikazani v tabeli 5. Sodeč po meritvah je naš algoritem bistveno boljši. Na izbranih primerih je generiral aproksimativno srednjo os, ki je bila po oceni metrike za natančnost 5% napačna. V najboljšem primeru je dal eksaktno rešitev (glej primer na sliki 59a). 94

Tabela 5: Primerjava našega algoritma z Voronoijevim diagramom. AMA Št. vstavljenih Steiner- Mnogokotnik Št. začetnih oglišč časi [ms] [%] Izvajalni Napaka jevih točk Slika 59a 4 6 0.204 0.0 Slika 59b 6 8 0.306 1.09 Slika 59c 7 8 0.315 0.12 Slika 59d 8 9 0.407 2.76 Slika 59e 13 14 0.456 0.69 Slika 59f 19 21 0.821 4.31 VDA Št. Izvajalni Napaka oglišč časi [ms] [%] 4 0.026 100 16 0.210 5.59 64 2.361 0.5 256 33.433 0.04 6 0.052 17.366 12 0.141 6.38 24 0.451 1.46 48 1.512 0.46 8 0.078 4.13 16 0.239 3.43 32 0.795 1.20 64 2.708 0.239 8 0.082 12.404 16 0.265 11.548 32 0.781 5.311 64 2.682 2.88 12 0.174 5.75 24 0.494 2.73 48 1.707 1.14 96 6.276 0.5 19 0.37 11.259 38 1.195 10.11 76 4.102 4.66 152 15.073 2.96 95

7 Zaključek Doktorska disertacija obravnava postopek gradnje srednje osi enostavnih mnogokotnikov. V uvodnih poglavjih smo se seznanili s pojmom srednje osi in pogledali njene osnovne značilnosti. Opravili smo pregled sorodnih del ter izpostavili prednosti in slabosti obstoječih pristopov. Ugotovili smo, da nekateri avtorji rešujejo problem srednje osi z Voronoijevim diagramom, aproksimativno srednjo os pa predstavljajo povezane Voronoijeve točke sosednjih si Voronoijevih celic. Voronoijev diagram je dualen Delaunayjevi triangulaciji, saj Voronoijeve točke sovpadajo s središči trikotnikov Delaunayjeve triangulacije. To je bila tudi motivacija za pričujočo nalogo. V drugem poglavju smo zato podali definicije Voronoijevih diagramov Delaunayjeve triangulacije. V naslednjem poglavju smo definirali omejeno Delaunayjevo triangulacijo. V četrtem poglavju smo opravili pregled sorodnih del. Metode smo razdelili na eksaktne in aproksimativne, slednje pa na vektorske in rastrske. V naslednjem poglavju smo predstavili naš algoritem za tvorjenje aproksimativne srednje osi enostavnih mnogokotnikih. Naš algoritem deluje v treh korakih: omejena Delaunayjeva triangulacija, korekcija triangulacije s hevrističnim postopkom in konstrukcija aproksimacije srednje osi mnogokotnika. Poglavje 6 smo posvetili analizi našega algoritma. Izpeljali smo časovno in prostorsko zahtevnost algoritma, nato pa ga primerjali tudi z meritvijo izvajalnih časov z referenčnimi algoritmi. Ker je v večini primerov časovno najbolj zahtevna konstrukcija omejene Delaunayjeve triangulacije, smo primerjali naš algoritem z algoritmom, ki deluje po principu prebirne premice. Na koncu smo naš algoritem za konstrukcijo aproksimativne srednje osi testirali glede na kvaliteto rešitve v primerjavi z aproksimativnim algoritmom, ki temelji na Voronoijevem diagramu. Ugotovili smo, da je naš algoritem občutno boljši od tega, do sedaj najpogosteje uporabljanega pristopa. Cilj doktorske disertacije je bil pregled obstoječih metod za gradnjo aproksimacije srednje osi ter izdelava novega, učinkovitejšega postopka. Postopki, ki generirajo aproksimacijo srednje osi z uporabo Voronoijevega diagrama, potrebujejo za gradnjo srednje osi veliko število dodatnih kontrolnih točk na robovih mnogokotnika, da dosežejo želeno natančnost. Posledica tega so daljši izvajalni časi algoritma. Zato smo postavili naslednji hipotezi: 96

Za generiranje aproksimacije srednje osi enostavnega mnogokotnika lahko namesto Voronoijevega diagrama uporabimo omejeno Delaunayjevo triangulacijo in Steinerjeve točke, vstavljene na robove mnogokotnika. in Število Steinerjevih točk, vstavljenih na robove mnogokotnika, je možno zmanjšati s hevristikami, ki zagotovijo izgradnjo ustrezne triangulacije, primerne za konstrukcijo aproksimativne srednje osi, s čimer odpravimo uporabniško nastavljivo pragovno funkcijo. Pri primerjavi AMA in EMA se je izkazalo, da naš algoritem dosega nižje izvajalne čase. Pri primerjavi natančnosti rešitve naš algoritem generira v najboljšem primeru eksaktno srednjo os, v najslabšem primeru pa aproksimativno srednjo os s 5% napako z metriko, ki smo jo predlagali. Pri primerjavi AMA in VDA smo z našim algoritmom dosegali občutno nižje izvajalne čase ob primerljivi natančnosti rešitve. Poleg tega je naš algoritem pri manjšem številu vstavljenih Steinerjevih točk na robove mnogokotnika generiral primerljivo srednjo os kot VDA, s čimer smo potrdili hipotezi. Povzemimo izvirne znanstvene prispevke predstavljene doktorske disertacije: zasnova in implementacija novega algoritma triangulacije mnogokotnika, ki temelji na konveksni lupini, zasnova in implementacija postopka za generiranje aproksimativne srednje osi, ki temelji na omejeni Delaunayjevi triangulaciji, vpeljava hevristike, ki nadzoruje triangulacijo z načrtnim vstavljanjem dodatnih točk na odseke robov mnogokotnika, razvoj hevristike za oceno kakovosti dobljene aproksimacije srednje osi, teoretična analiza časovne zahtevnosti za nov algoritem triangulacije mnogokotnika, ki temelji na konveksni lupini, teoretična analiza časovne in prostorske zahtevnosti algoritma za generiranje aproksimativne srednje osi in 97

eksperimentalni dokaz učinkovitosti našega algoritma v primerjavi z eksaktnim in tistim, ki uporablja Voronoijev diagram za pridobitev aproksimativne srednje osi. Pristop z uporabo omejene Delaunayjeve triangulacije se je v naših testih pokazal kot zelo učinkovita rešitev. Dosega izjemno nizke čase izvajanje in hkrati daje zelo natančno aproksimacijo srednje osi. 98

Literatura [1] Blum, H. A Transformation for extracting new descriptors of shapes. Symposium on Models for the Perception of Speech and Visual Form, Cambridge: MIT-Press, 1967; str. 362-380. [2] Blum, H. Biological shape and visual science (Part 1). Journal of theoretical biology, 38, (1973), str. 205-287. [3] Lee, J. A Spatial Access-oriented implementation of a 3-D GIS topological data model for urban entities. Geoinformatica, 8, (2004), 3, str. 237-264. [4] Mena, J. B., Automatic vectorization of segmented road networks by geometrical and topological analysis of high resolution binary images. Knowledge-Based Systems, 19, (2006), 8, str. 704-718. [5] Hallinan, P. W., Gordon, G. G., Yuille, A. L., Giblin, P., Mumford, D. Two and three dimensional patterns of the face. A. K. Peters, 1999. [6] Geraerts, R., Overmars, M. H., Clearance based path optimization for motion planning. Proceedings of the 2007 International Conference on Computational Science and Its Applications - Volume Part I. Kuala Lumpur: Springer-Verlag, 2007, str: 136-150. [7] Geraerts, R., Overmars, M. Creating high-quality roadmaps for motion planning in virtual environments. The International Journal of Robotics Research, 26, (2007), 8, str. 845 863. [8] Guibas, L., Holleman, R., Kavraki, L. E., A probabilistic roadmap planner for flexible objects with a workspace medial axis based sampling approach. Intelligent Robots and Systems, 1, (1999), str. 254 260. [9] Sonka, M., Hlavac, V., Boyle, R., Image processing, analysis, and machine vision (second edition). Thomson-Engineering, 2007. [10] Gooch, B., Coombe, G., Shirley, P., Artistic Vision: painterly rendering using computer vision techniques. Proceedings of the 2nd international symposium on Nonphotorealistic animation and rendering. Annecy: ACM, 2002. [11] Sheehy, D., Armstrong, C., Robinson, D. Shape description by medial surface construction. Visualization and Computer Graphics, 2, (1996), 1, str. 62-72. 99

[12] Hubbard, P. M. Approximating polyhedral with spheres for time critical collision detection. ACM Transactions on Graphics, 15, (1996), 3, str. 179-210. [13] Sheffer, A., Etizon, M., Rappoport, A., Bercovier, M. Hexahedral mesh generation using the embedded Voronoi graph. Engineering with Computers, 15, (1999), 3, str. 248-262. [14] Gershon, E., Elaine C., Sam D. MATHSM: medial axis transform toward high speed machining of pockets. Computer-Aided Design, 37, (2005), 2, str. 241-250. [15] Gibblin, P. J., Kimia, B. B. A formal classification of 3D medial axis points and their local geometry. Pattern Analysis and Machine Intelligence, 26, (2004), 2, str. 238-251. [16] Teichmann, M., Teller, S. Assisted Articulation of Closed Polygonal Models. Arnaldi, B., Hégron, G. (ur.). Computer Animation and Simulation 98. Vienna: Springer, 1999, str. 78-101. [17] Dey, T. K., Zhao, W. Approximate medial axis as a Voronoi subcomplex. Computer- Aided Design, 36, (2004), 2, str. 195-202. [18] Foskey, M., Lin, M. C., Manocha, D. Efficient computation of a simplified medial axis. Journal of Computing and Information Science in Engineering, 3, (2003), 4, str. 274-285. [19] Dorado, R. Medial axis of a planar region by offset self-intersections. Computer- Aided design, 41, (2009), 12, str. 1050-1059. [20] Choi, H., Choi, S., Moon, H. Mathematical theory of medial axis transform. Pacific Journal of Mathematics, 181, (1997), 1, str. 57-88. [21] Aichholzer, O., Aigner, W., Aurenhammer, F., Hackl, T., Jüttler, B., Rabl, M. Medial axis computation for planar free-form shapes. Computer-Aided Design, 41, (2009), 5, str. 339-349. [22] Aurenhammer, F., Klein, R. Voronoi Diagrams. Sack, J.R., Urrutia, G. Handbook of Computational Geometry. Amsterdam: Elsevier Science Publishing, 2000, str. 201-290. [23] Dey, T. K., Zhao, W. Approximating the medial axis from the Voronoi diagram with a convergence guarantee. Algorithmica, 38, (2004), 1, str. 179-200. 100

[24] Brandt J. W. Convergence and continuity criteria for discrete approximation of the continuous planar skeletons. CVGIP: Image Understanding. 59, (1994), 1, str. 116-124. [25] Jin, L., Donguk, K., Lisen, M., Deok-Soo, K., Shi-Min, H. A sweepline algorithm for Euclidean Voronoi diagram of circles. Computer-Aided Design, 38, (2006), 3, str. 260-272. [26] Held, M., Hubera, S. Topology-oriented incremental computation of Voronoi diagrams of circular arcs and straight-line segments. Computer-Aided Design, 41, (2009), 5, str. 327-338. [27] Kalra, N., Ferguson, D., Stentz, A. Incremental reconstruction of generalized Voronoi diagrams on grids. Robotics and Autonomous Systems, 57, (2009), 2, str. 123-128. [28] Fortune, S. J. A sweepline algorithm for Voronoi diagrams. Algorithmica, 2, (1987), 1-4, str. 153-174. [29] De Berg, M., Cheong, O., Van Kreveld, M., Overmars, M. Computational geometry, algorithms and applications. Santa Clara: Springer-Verlag, 2008. [30] Maur, P., Kolingerova, I. The employment of regular triangulation for constrained Delaunay triangulation. Lagana, A., Gavrilova, M. L., Kumar, V., Mun, Y., Tan, C. J. K., Gervasi, O. (ur). ICCSA (3), Springer, 2004, str. 198-206. [31] Domiter, V., Žalik, B. Sweep-line algorithm for constrained Delaunay triangulation. International Journal of Geographical Information Science, 22, (2008), 4, str. 449-462. [32] http://www.lupinho.net/lupinho.de/gishur.html. 04.12.2013. [33] Lee, D. T. Medial axis transformation of a planar shape. Pattern Analysis and Machine Intelligence, 4, (1982), 4, str. 363-369. [34] http://www.skynet.ie/~sos/mapviewer/voronoi.php. 04.12.2013. [35] Xia, H., Tucker, P. G. Distance Solutions for Medial Axis Transform. Proceedings of the 18th International Meshing Roundtable, Berlin: Springer, 2009, str. 247 265. [36] Lixin, C., Jian, L. Computation of medial axis and offset curves of curved boundaries in planar domain. Computer-Aided Design, 40, (2008), 4, str. 465-475. 101

[37] Soumen, B., Gaurav, H. A Medial Axis Based Thinning Strategy for Character Images. In proceedings of the second National Conference on Computer Vision, Pattern Recognition, Image Processing and Graphics (NCVPRIPG). Jaipur, 2011, str. 67-72. [38] Przybylski, M., Asfour, T., Dillmann, R. Planning grasps for robotic hands using a novel object representation based on the medial axis transform. Intelligent Robots and Systems (IROS). San Francisco: IEEE, 2011, str. 1781-1788. [39] Leymarie, F. F., Imielinska, C. Z., Chang, M. C., Kimia, B. B. A General Approach to Model Biomedical Data from 3D Unorganised Point Clouds with Medial Scaffolds. Proceedings of the 2Nd Eurographics Conference on Visual Computing for Biology and Medicine. Leipzig: Eurographics Association, 2010, str. 65-74. [40] Sethian, J. Level Set Methods and Fast Marching Methods: Evolving Interfaces. Computational Geometry, Fluid Mechanics, Computer Vision, and Materials Science. Cambridge: Cambridge University Press, 1999. [41] Zhao, H. A Fast Sweeping Method for Eikonal Equations. Mathematics of Computation, 74, 2005, str. 603 627. [42] Guo, Z., Hall, R.W. Parallel thinning with two-subiteration algorithms. Communications, 32, (1989), 3, str. 359 373. [43] Godunov, S. K. A finite-difference method for the numerical computation of discontinuous solutions of the equations of fluid dynamics. Mat. Sb. 47, (1959), str. 271-290. [44] Palágyi, K. A 3D fully parallel surface-thinning algorithm. Theoretical Computer Science, 406, (2008), 1-2, str. 119 135. [45] Lee, D. T., Drysdale, R. L. Generalization of Voronoi diagrams in the plane. SIAM Journal on computing, 10, (1981), 1, str. 73-87. [46] Aichholzer, O., Aurenhammer, F., Hackl, T., Jüttler, B., Oberneder, M., Šír Z. Computational and structural advantages of circular boundary representation. International Journal of Computational Geometry and Applications, 21, (2007), 1, str. 47-69. [47] Chew, L. P. Constrained Delaunay triangulations. Algorithmica, 4, (1987), 1, str. 97-108. 102

[48] Van Bremmelen, J., Wuak, W., Van Hekken, M., Oosterom, P. Vector vs. raster based algorithms for cross country movement planning. Auto Carto 11 Proceedings. Minneapolis, 1993; str. 304-317 [49] Kallmann, M., Bieri, H., Thalmann, D. Fully dynamic constrained Delaunay triangulations. Brunnett G., Hamann B., Mueller H., Linsen L. (ur). Geometric Modelling for Scientific Visualization. Heidelberg: Springer-Verlag, 2003, str. 241-257. [50] Kallmann, M. Path Planning in Triangulations. Proceedings of the IJCAI Workshop on Reasoning, Representation, and Learning in Computer Games. Edinburgh, 2005, str. 49-54. [51] Yan H., Wang H., Chen Y., Dai G. Path Planning Based on Constrained Delaunay Triangulation. Proceedings of the 7 th World Congress in Intellegent Control and Automation. Chongqing: IEEE, 2008, str. 5168-5173. [52] Agarwal, P. K., Arge, L., Yi, K. I/O-efficient construction of constrained Delaunay triangulations. Brodal, G., Leonardi S.(ur). Algorithms ESA 2005. Berlin: Springer Berlin Heidelberg, 2005, str. 355-366. [53] Isenburg, M., Liu, Y., Shewchuk, J. R., Shoeyink, J. Streaming computation of Delaunay triangulations. ACM Transactions on Graphics, 25, (2006), 3, str. 1049-1056. [54] Poorten, P. M., Zhou, S., Jones, C. B. Topologically-Consistent Map Generalisation Procedures and Multy-scale Spatial Databases. Geographic Information Science, 2478, (2002), str. 209-227. [55] Lawson, C. L. Software for C1 surface interpolation. Mathematical Software III. Academic Press. New York: Academic press Inc., 1977, str. 161-194. [56] Descartes R. Principia philosophiae. 1644 [57] Voronoi, G. Nouvelles applications des paramatres continusala theorie des formes quadratiques. Journal fu r die reine und angewandte Mathematik (Crelles Journal), 1908, (1907), 134, str. 198 287. [58] Wang, P., Gonzalez, M. C., Hidalgo, C. A., Barabasi, A. L. Understanding the spreading patterns of mobile phone viruses. Science, 324, (2009), 5930, str. 1071 1076. [59] Zeki A. M. Representation of water resources in satellite images using Voronoi diagrams. The 2th International Conference on Water Resources and Arid Environment, Riyadh, 2006, str. 552-556. [60] Green, P. J., Sibson, R. Computing Dirichlet Tessellations in the Plane. The Computational Journal, 21, (1978), 2, str. 168-173. 103

104 [61] George, P. L., Hecht, F., Saltel, E. Automatic mesh generator with specified boundary. Magnetics, 26, (1990), 2, str. 771-774. [62] Cui-ping, L., Zhong-xue, L., Dong-ming, Y. Ore grade interpolation based on Thiessen polygon method. Journal of Liaoning Technical University, 26, (2007), 4, str. 488-491. [63] Boots, B., South, R. Modeling retail trade areas using higher-order, multiplicatively weighted Voronoi diagrams. Journal of Retailing, 73, (1997), 4, str. 519 536 [64] Liang-Ying, S. I., Guan-Yu, D., Cheng, L. V., Xiang-Hua, L. Polycrystal geometry modeling of crystal plasticity finite element method with voronoi diagram. Journal of Materials and Metallurgy. 2009. [65] Okabe, A., Boots, B., Sugihara, K., Chiu, S. N. Spatial Tessellations: Concepts and Applications of Voronoi Diagrams. New York: John Wiley & Sons, 2000. [66] Sriraman, B., Freiman, V., Lirette-Pitre, N. Interdisciplinarity, Creativity, and Learning: Mathematics With Literature, Paradoxes, History, Technology, and Modeling. Charlotte: Information Age Publishing, 2009. [67] Abbas, C., Dzulkifli, M., Azizah, A. M. Exploiting Voronoi diagram properties in face segmentation and feature extraction. Pattern Recognition, 41, (2008), 12, str. 3842-3859. [68] Vachhani, L., Mahindrakar, A. D., Sridharan, K. Mobile Robot Navigation Through a Hardware-Efficient Implementation for Control-Law-Based Construction of Generalized Voronoi Diagram. Mechatronics, 16, (2011), 6, str. 1083 1095. [69] Kohler, T., Gumerman, G. Dynamics in human and primate societies. New York: Oxford University Press. Oxford, 2002. [70] O'Rouke J. Computational Geometry in C. New York: Cambridge University Press, 1993. [71] Preparata, F. P., Shamos, M. I. Computational geometry An introduction. New York: Springer-Verlag, 1985. [72] Yu, W., Lee, H. K., Hariharan, S., Bu, W., Ahmed, S. Evolving generalized Voronoi diagrams for accurate cellular image segmentation. Journal of the International Society for Advancement of Cytometry, 77, (2010), 4, str. 379-386. [73] Kim, D. S., Cho, Y., Kim, D., Kim, S., Bhak, J., Lee, S. H. Euclidean voronoi diagrams of 3d spheres and applications to protein structure analysis. Japan Journal of Industrial and Applied Mathematics, 22, (2005), 2, str. 251 265.

[74] Kim, D., Kim, D. S. Region-expansion for the voronoi diagram of 3d spheres. Computer-Aided Design, 38, (2006), 5, str. 417 430. [75] Ryu, J., Kim, D., Cho, Y., Park, R., Kim, D. S. Computation of molecular surface using euclidean voronoi diagram. Computer-Aided Design and Applications, 2, (2005), 1-4, str. 439-448. [76] Will, H. M. Fast and efficient computation of additively weighted voronoi cells for applications in molecular biology. Lecture Notes in Computer Science, 1432, (1998), str. 310 321. [77] Qin, X., Zhang, S., Dong, X., Jiang, H., Qian, F. Impact of Human Activities on Red- Crowned Crane Nest-Sites Based on Voronoi Diagram. Environmental Science and Information Application Technolog. Los Alamitos: IEEE Computer Society, 2009, str. 330-334. [78] Aurenhammer, F. Voronoi diagrams a survey of a fundamental geometric data structure. ACM Computing Surveys, 23, (1991), 3, str. 345 405. [79] Aurenhammer F., Klein R. Voronoi Diagrams // Optimierung und Kontrolle, Bericht Nr. 92, Karl-Franzens-Univ. Graz and Tech. Univ. Gratz. 1996 - [80] Gilbarg D., Trudinger N. Elliptic partial differential equations of second order. Springer. 2001 [81] Tsitsiklis, J. N. Efficient algorithms for globally optimal trajectories. IEEE Transactions on Automatic Control, 40, (1995), 9, str. 1528 1538. [82] Helmsen, J., Puckett, E., Colella, P., Dorr, M. Two new methods for simulating photolithography development in 3-D. In Proceedings of the SPIE The International Society for Optical Engineering Optical Microlithography, 2726, (1996), 9, str. 253 261. [83] Sethian J. A. Level Set Methods. Cambridge University Press. Cambridge UK. 1996 [84] Kimmel, R., Sethian J. A. Computing geodesic paths on manifolds. Applied Mathematics, 95, (1998), 15, str. 8431 8435. [85] Boué, M., Dupuis, P. Markov chain approximations for deterministic control problems with affine dynamics and quadratic costs in the control. SIAM Journal on Numerical Analysis, 36, (1999), 3, str. 667 695. [86] Kao, C. Y., Osher, S. J., Qian, J. Lax Friedrichs sweeping schemes for static Hamilton Jacobi equations. Journal of Computational Physics, 196, (2004), 1, str. 367 391. 105

[87] Kao, C. Y., Osher, S., Tsai, Y. H. Fast sweeping methods for static Hamilton Jacobi equations. SIAM Journal on Numerical Analysis, 42, (2005), 6, str. 2612 2632. [88] Tsai, Y. H. R., Cheng, L. T., Osher, S., Zhao, H. K. Fast sweeping algorithms for a class of Hamilton Jacobi equations. SIAM Journal on Numerical Analysis, 41, (2003), 2, str. 673 694. [89] Zhang, Y. T., Zhao, H. K., Chen, S. Fixed-point iterative sweeping methods for static Hamilton-Jacobi equations. Methods and Applications of Analysis, 13, (2006), str. 299-320. [90] Dijkstra, E. W. A note on two problems in connexion with graphs. Numerische Mathematik, 1, (1959), str. 269 271. [91] Amenta, N., Bern, M. Surface Reconstruction by Voronoi Filtering. Discrete and Computational Geometry, 22, (1999), 4, str. 481-504. [92] Amenta, N., Choi, S., Kolluri, R. K. The power crust, unions of balls, and the medial axis transform. Computational Geometry: Theory and Applications, 19, (2001), 2-3, str. 127 153. [93] Domiter V. Algoritmi triangulacije s strategijo prebiranja. Maribor: Fakulteta za elektrotehniko, računalništvo in informatiko, 2009. Dostopno na: http://dkum.unimb.si/dokument.php?id=8094 [06.12.2013]. [94] Šír, Z., Feichtinger, R., Jüttler, B. Approximating curves and their offsets using biarcs and Pythagorean hodograph quintics. Computer-Aided Design, 38, (2006), 6, str. 608-618. [95] Held M., Eibl J. Biarc approximation of polygons within asymmetric tolerance bands. Computer-Aided Design, 37, (2005), 4, str. 357-371. [96] Barequet, G., Dickerson, M. T., Goodrich, M. T. Voronoi diagrams for convex polygon-offset distance functions. Discrete & Computational Geometry, 25, (2001), 2, str. 271-291. [97] Ge, Y., Stelts, D. R., Zha, X., Wang, J., Vining, D. J. Computing the central path of colon lumen in helical CT images. Medical Imaging 1998: Image Processing, 3338, (1998), str. 702-714. [98] https://sites.google.com/site/howardtrickey/3dgraphics, 20.03.2013. 106

[99] Ghosh, P.K., Bigelow, C. A Formal Approach to letter-shape description for Type Design. Stanford: Stanford University, 1983. [100] Prasad, L., Skourikhine, A. N., Schlei, B. R. Feature-based syntactic and metric shape recognition. Vision Geometry IX, 4117, (2000), str. 234-243. [101] Ogniewicz, R. L. Skeleton-space: a multiscale shape description combining region and boundary information. Computer Vision and Pattern Recognition. Seattle: IEEE Computer Society, 1994, str. 746-751. [102] Kelly, T. L. 21.04.1998. Bulit-up roof (BUR) or modified roof assembly system. United States Patent and Trademark Office, US 5740647 A. [103] Robinson, G. P., Colchester, A. C. F., Griffin, L. D., Hawkes, D. J. Integrated skeleton and boundary shape representation for medical image interpretation. European Conference on Computer Vision. Santa Margherita Ligure: Springer, 1992, str. 725-729. [104] Kosinka, J., Lávička, M. A unified Pythagorean hodograph approach to the medial axis transform and offset approximation. Journal of Computational and Applied Mathematics. 235, (2011), 12, str. 3413-3424. [105] Lindquist, W. B., Lee, S.M., Coker, D., Jonec, K., Spanne, P. Medial axis analysis of three dimensional tomographic images of drill core samples. Journal of Geophysical Research, 101, (1996), str. 8297 8310. [106] Broutta, A., Coeurjolly, D., Sivignon, I. Hierarchical discrete medial axis for spheretree construction. International Workshop on Combinatorial Image Analysis. Berlin: Springer, 2009, str. 56 67. [107] López, A. M., Lumbreras, F., Serrat, J., Villanueva, J. J. Evaluation of Methods for Ridge and Valley Detection. IEEE Transactions on Pattern Analysis and Machine Intelligence, 21, (1999), 4, str. 327-335. [108] Haciomeroglu, M., Laycock, R. G., Day, A. M. Distributing Pedestrians in a Virtual Environment. Cyberworlds. 07. International Conference. Los Alamitos: IEEE Computer Society, 2007, str. 152-159. [109] Sundar, H., Silver, D., Gagvani, N., Dickinson, S. Skeleton based shape matching and retrieval. Proceedings of the Shape Modeling International, Washington: IEEE Computer Society, 2003, str. 130-139. 107

[110] Sherbrooke, E. C., Patrikalakis, N. M., Wolter, F. E. Differential and Topological Properties of Medial Axis Transforms. Graphical Models and Image Processing, 58, (1996), 6, str. 574-592. [111] Seng-Beng, H., Dyer, C. R. Shape Smoothing Using Medial Axis Properties. IEEE Transactions Pattern Analysis and Machine Intelligence, 8, (1986), 4, str. 512-520. [112] Wilmarth, S. A., Amato, N. M., Stiller, P. F. Motion planning for a rigid body using random networks on the medial axis of the free space. Proceedings of the fifteenth annual symposium on Computational geometry. Miami Beach: ACM, 1999, str. 173-180. [113] Pottmann, H., Peternell, M. Applications of Laguerre geometry in CAGD. Computer Aided Geometric Design. 15, (1998), 2, str. 165-186. [114] Smogavec, G. Aproksimacija srednje osi enostavnih mnogokotnikov. Maribor: Fakulteta za elektrotehniko, računalništvo in informatiko, 2009. Dostopno na: http://dkum.uni-mb.si/dokument.php?id=12582 [06.12.2013]. [115] Graham, R. L. An efficient algorithm for determining the convex hull of a finite planar set. Information processing letters, 1, (1972), 2, str. 132-133. [116] Lamot, M., Žalik, B. A fast polygon triangulation algorithm based on uniform plane subdivision. Computer & Graphics, 27, (2003), 2, str. 239-253. [117] Garey, M., Johnson, F. P., Preparata, R. E. Triangulating a simple polygon. Information Proceeding Letters. 7, (1987), 4, str. 175-180. [118] Seidl, R. A Simple and Fast Incremental Randomized algorithm for Computing Trapezoidal Decompositions and for Triangulating Polygons. Computational Geometry: Theory and Applications, 1, (1991), str. 51-64. [119] Gaurav, H., Soumen, B. Skeletonizing character images using a modified medial axis-based strategy. International Journal of Pattern Recognition and Artificial Intelligence, 25, (2011), 7, str. 1035-1054. [120] Jau-hong K., Jen-hui, C., Tsaipei, W. Chromosome classification based on the band profile similarity along approximate medial axis. Pattern Recognition, 41, (2008), 1, str. 77-89. [121] Bradford, B. C., Dobkin, P. D., Huhdanpaa, H. The Quickhull Algorithm for Convex Hulls. ACM Transactions on Mathematical Software, 22, (1996), 4, str. 469 483. 108

[122] Smogavec, G., Žalik, B. A Fast Algorithm for Constructing Approximate Medial Axis of Polygons, Using Steiner Points. Advances in Engineering Software, 52, (2012), 0, str. 1-9. [123] Osher, S., Sethian, J. Fronts propagating with curvature dependant speed. Journal of Computational Physics, 79, (1988), 1, str. 12-46. [124] Lam, L., Lee, S. W., Suen, C. Y. Thinning Methodologies-A Comprehensive Survey. IEEE Transactions on Pattern Analysis and Machine Intelligence, 14, (1992), 9, str. 869-885. [125] Hongbin, P., Junali, C., Yashe, Z. Fingerprint Thinning Algorithm Based on Mathematical Morphology. Proceedings of the Eighth IEEE International Conference on Electronic Measurement and Instruments (ICEMI-07), 2, (2007), str. 618-621. [126] Attali, D., Montanvert, A. Computing and Simplifying 2D and 3D Continuous Skeletons. Computer Vision and Image Understanding, 67, (1997), 3, str. 261 273. [127] Ogniewicz, R. L., Ilg. M. Voronoi skeletons: Theory and applications. Proceedings on Computer Vision and Pattern Recognition. Champaign: IEEE Computer Society, 1992, str. 63-69. [128] Boissonnat, J. D., Geiger, B. Three-dimensional reconstruction of complex shapes based on the Delaunay triangulation. Proceedings on Biomedical Image Processing and Biomedical Visualization. San Jose: Acharya, R. S., Goldgof, D. B., 1993, str. 964-975. [129] Schmitt, M., Mattioli, J. Morphologie Mathematique, Masson, Paris, 1993 [130] Attali, D., Bertolino, P., Montanvert, A. Using Polyballs to Approximate Shapes and Skeletons. Proceeding on the 12th International Conference on Pattern Recognition. Jerusalem: IEEE Computer Society Press,1994, str 626-628. [131] Brandt, J. W., Algazi, V. R. Continuous skeleton computation by Voronoi diagram. CVGIP: Image Understanding, 55, (1992), 3, str. 329-338. [132] Ghosh, S. Geometric approximation of curves and singularities of secant maps : a differential geometric approach. Groningen: University of Groningen, 2010 [133] Burden, R. L., Faires, J. D. Numerical Analysis, 8. Pacific Grove: Brooks/Cole, 2005 (Brooks/Cole 8 th Edition 2005) 109

8 Življenjepis Ime in priimek: Gregor Smogavec Rojen: 28. 7. 1984 Maribor, Slovenija Oče: Mati: Borut Smogavec Renata Smogavec Šolanje: 1990 1999 Osnovna šola Borcev za severno mejo, Maribor 1999 2004 Srednja elektro-računalniška šola Maribor 2004 2009 UM-FERI: dodiplomski študij računalništva in informatike, smer programska oprema 2010 2013 UM-FERI: podiplomski študij računalništva in informatike Zaposlitev: 2008 2010 UM-FERI tehniški sodelavec 2010 2012 UM-FERI asistent 2012 2013 2013 2014 UM-FERI raziskovalec UM-FERI asistent 110