SlideShare a Scribd company logo
1 of 164
UNIVERZA V MARIBORU



FAKULTETA ZA ELEKTROTEHNIKO,
RAČUNALNIŠTVO IN INFORMATIKO



 INŠTITUT ZA RAČUNALNIŠTVO




          Vid Domiter
 ALGORITMI TRIANGULACIJE S
   STRATEGIJO PREBIRANJA




      Doktorska disertacija




       Maribor, marec 2009
Avtor:          Vid Domiter
Naslov:         Algoritmi triangulacije s strategijo prebiranja
UDK:            004.925.021(043.3)
Ključne besede: algoritmi, računalniška geometrija, računalniška grafika,
                CAD, trikotniške mreže,       triangulacija,   rekonstrukcija
                površja
Število izvodov: 8
Oblikovanje:    Vid Domiter
Lektura:        Branimir Domiter
Tisk:           Laboratorij za geometrijsko modeliranje in algoritme
                multimedijev
Vezava:         Lazar Biro
ZAHVALA:


   Za strokovno pomoč in vsestransko podporo pri doktorskem študiju se
zahvaljujem mentorju, red. prof. dr. Borutu Žaliku.


   Zahvaljujem se tudi bratu, mami in očetu, ki so mi ves čas nesebično stali ob
strani in prenašali moje muhe. Prav tako se zahvaljujem vsem sodelavcem, ki so
mi pri študiju kakorkoli pomagali. Nikakor pa ne smem pozabiti na prijatelje, ob
katerih sem se sprostil in pozabil na delo.


Vsem najlepša hvala!
Algoritmi triangulacije s strategijo prebiranja


UDK: 004.925.021(043.3)


Ključne besede:

algoritmi, računalniška geometrija, računalniška grafika, CAD, prebiranje, trikot-
niške mreže, triangulacija, rekonstrukcija površja



Povzetek:

   Osnovni cilj doktorske naloge je razviti lasten postopek omejene Delaunayeve
triangulacije z metodo prebiranja, ki bo vsaj enako učinkovit kot do sedaj razviti
postopki in pokazati, da je s prebiranjem možno rešiti tudi veliko težjo nalogo
rekonstrukcije površja v 3D. V nalogi najprej definiramo klasično in omejeno
Delaunayevo triangulacijo, opišemo obstoječe postopke, nato pa se osredotočimo
na lasten postopek omejene Delaunayeve triangulacije. Podrobneje opišemo njegovo
delovanje in razširitve, ki vodijo k učinkovitemu algoritmu omejene Delaunayeve
triangulacije. Temelj algoritma je pomikanje napredujoče fronte s prebirno premico
in razvoj hevristik, ki poskrbijo za uspešno vodenje napredujoče fronte in hkrati
minimizirajo število menjav trikotnikov. Nato preidemo na problem rekonstrukcije
površja, kjer podamo pregled sorodnih raziskav.        Dva postopka podrobneje
opišemo, temu pa sledi opis lastnega postopka rekonstrukcije površja s prebiranjem.
Algoritem temelji na širitvi napredujočih front s pomikanjem prebirne ravnine in
hevristikah za uspešno upravljanje s frontami. Na koncu analiziramo oba razvita
algoritma in potrdimo zastavljeni hipotezi.
Triangulation algorithms using a sweeping strategy


UDK: 004.925.021(043.3)


Key words:

algorithms, computational geometry, computer graphics, CAD, sweeping, triangular
mesh, triangulation, surface reconstruction



Abstract:

   The main goal of our disertation is implementation of a new constrained
Delaunay triangulation algorithm based on the sweeping strategy, which is at least
as efficient as the existing solutions. Another aim is to show that using the same
algorithmic paradigm in three dimensions can solve a much harder problem, namely
a surface reconstruction from a point cloud. We start by introducing the sweeping
strategy. After that, we define Delaunay and constrained Delaunay triangulation,
which is followed by a brief survey of the existing algorithms. Then we describe
our own sweep-line algorithm in detail, where constrained triangulation is built by
propagating the advancing front using heuristics. The apployment of heuristcs and
constraining edges insertion at the same time with their end-vertices importanly
increases the speed of the algorithm. In the second part of our disertation we
introduce the problem of surface reconstruction and make an overview of the
previous work. We describe our own implementation based on the sweeping strategy,
where the surface is built by propagating the advancing fronts with the sweep-plane.
We describe heuristics for managing the fronts in detail. Finally, we summarize our
contributions and confirm the proposed theses.
Seznam kratic

AF       -   napredujoča fronta (angl. advancing front)
BPA      -   Bernardinijev algoritem z vrtenjem krogle (angl.          Ball-pivoting
             algorihtm)
CDT      -   omejena Delaunayeva triangulacija (angl. constrained Delaunay
             triangulation)
DAG      -   usmerjen aciklični graf (angl. directed acyclic graph)
DT       -   Delaunayeva triangulacija (angl. Delaunay triangulation)
F-SL     -   dvokoračni algoritem CDT s prebirnim Fortuneovim algoritm DT
GIS      -   geografski informacijski sistem (angl.     geographical information
             system)
LFS      -   velikost lokalne značilnosti (angl. local feature size)
LS-D&C   -   dvokoračni algoritem CDT Leeja in Schachterja s strategijo "deli
             in vladaj"
M-INC    -   Mückejev dvokoračni algoritem CDT
MAT      -   transformacija srednje osi (angl. medial axis transform)
PSLG     -   ravninski premočrtni graf (angl. planar straight-line graph)
SL       -   naš prebirni algoritem CDT
STL      -   standarna knjižnica šablon (angl. standard template library)
Seznam oznak

     ijk         -   trikotnik z oglišči pi , pj in pk
βi               -   i-ti odsek parabolične krivulje (algoritem Fortune)
A(T )            -   vektor kotov triangulacije T
Bc,ρ             -   krogla s središčem v točki c s polmerom ρ
Bi               -   i-ti trak pri delitvi ravnine
c                -   točka, ki predstavlja središče krogle
C                -   seznam točk od p oddaljenih za največ r
Ci               -   seznam točk od p oddaljenih za največ r, ki pripadajo
                     fronti Fi
Cij              -   seznam točk j-tega intervala Ci
CDT , CDT (P )   -   omejena Delaunayeva triangulacija oz. CDT nad P
dpow             -   razdalja moči, dpow (px , Bc,ρ ) = d2 (c, px ) − ρ2
dist(p, q)       -   evklidska razdalja med točkama p in q
Dx               -   dogodek zaprtja (DC ), odprtja (DO ), združevanja (DJ )
                     in deljenja (DD )
D                -   usmerjen aciklični graf (algoritem Guibas, Knuth, Sharir)
DT , DT (P )     -   Delaunayeva triangulacija oz. DT nad P
eij              -   rob eij = pi pj
ep               -   dogodkovna točka ep = (Dx , p, F, T )
Ec               -   množica omejitvenih robov
Ei               -   seznam robov, ki se končajo v točki pi
F            -   seznam front
F, Fi        -   napredujoča fronta
G            -   vhodni ravninski graf G = {P, Ec } v algoritem CDT
K            -   krožnica
KL, KL(P )   -   konveksna lupina oz. konveksna lupina nad P
LF S(p)      -   funkcija, ki točki p površja priredi najbližjo razdaljo do
                 srednje osi
O            -   množica objektov na ravnini
p, pi        -   točka iz P s koordinatama (x, y) oz. (xi , yi )
pi pj        -   rob med točkama pi in pj
P            -   vhodna množica točk na ravnini ali v prostoru
Q            -   problem, ki ga rešujemo s prebiranjem
Qe,L         -   podregija regije Re na levi strani roba e
Qe,R         -   podregija regije Re na desni strani roba e
r            -   polmer kroga
Re           -   regija trikotnikov triangulacije neposredno ob robu e
RT           -   drevo vsebnostnih relacij napredujočih front Fi
S            -   ravnina z vsemi točkami
S            -   originalno površje objekta
S            -   aproksimacija površja S
t, ti        -   trikotnik triangulacije
T            -   seznam trikotnikov t
T , T (P )   -   triangulacija oz. triangulacija nad P
Ti           -   triangulacija nad točkami v traku Bi
U            -   množica umetnih točk
V or(P )     -   Voronoijev diagram nad P
Kazalo

Seznam slik                                                                              ix

Seznam tabel                                                                            xiv

1 Uvod                                                                                   1
  1.1   Opredelitev problema . . . . . . . . . . . . . . . . . . . . . . . . . . .        1
  1.2   Cilji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .     2
  1.3   Struktura disertacije . . . . . . . . . . . . . . . . . . . . . . . . . . .       4

2 Prebirna paradigma                                                                     5

3 Algoritmi Delaunayeve in omejene Delaunayeve triangulacije                             9
  3.1   Ravninska triangulacija . . . . . . . . . . . . . . . . . . . . . . . . . .       9
  3.2   Delaunayeva triangulacija . . . . . . . . . . . . . . . . . . . . . . . . 12
        3.2.1   Algoritmi Delaunayeve triangulacije . . . . . . . . . . . . . . . 16
                3.2.1.1   Inkrementalni algoritem Guibas, Knuth in Sharir . . 19
                3.2.1.2   Prebirni algoritem Fortune . . . . . . . . . . . . . . . 23
                3.2.1.3   Prebirni algoritem Žalik . . . . . . . . . . . . . . . . 25
  3.3   Omejena Delaunayeva triangulacija . . . . . . . . . . . . . . . . . . . 31
        3.3.1   Algoritmi omejene Delaunayeve triangulacije . . . . . . . . . . 33
        3.3.2   Dvokoračni postopki CDT . . . . . . . . . . . . . . . . . . . . 34
                3.3.2.1   Vstavljanje robov . . . . . . . . . . . . . . . . . . . . 34
                3.3.2.2   Vstavljanje robov z brisanjem . . . . . . . . . . . . . 35


                                           v
KAZALO                                                                                vi


                3.3.2.3   Vstavljanje robov z zamenjavami . . . . . . . . . . . 36
        3.3.3   Enokoračni algoritmi CDT . . . . . . . . . . . . . . . . . . . . 39
                3.3.3.1   Algoritem CDT Chew . . . . . . . . . . . . . . . . . 39

4 Prebirni algoritem omejene Delaunayeve triangulacije                                44
  4.1   Inicializacija . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
  4.2   Prebiranje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
        4.2.1   Napredujoča fronta in podatkovne strukture . . . . . . . . . . 49
        4.2.2   Dogodek točke . . . . . . . . . . . . . . . . . . . . . . . . . . 50
        4.2.3   Dogodek roba . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
                4.2.3.1   Iskanje prvega trikotnika . . . . . . . . . . . . . . . . 54
                4.2.3.2   Brisanje sekanih trikotnikov . . . . . . . . . . . . . . 55
                4.2.3.3   Triangulacija praznega območja . . . . . . . . . . . . 58
  4.3   Finalizacija . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
  4.4   Časovna analiza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
  4.5   Rezultati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

5 Rekonstrukcija površja iz oblaka točk                                               67
  5.1   Uvod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
        5.1.1   Vzorčenje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
  5.2   Sorodne raziskave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
        5.2.1   Algoritmi z delitvijo prostora . . . . . . . . . . . . . . . . . . 71
                5.2.1.1   Ploskovno usmerjena izbira celic . . . . . . . . . . . 72
                5.2.1.2   Prostorsko usmerjena izbira celic . . . . . . . . . . . 74
        5.2.2   Rekonstrukcija površja s funkcijo razdalje     . . . . . . . . . . . 76
        5.2.3   Rekonstrukcija površja z ukrivljanjem . . . . . . . . . . . . . . 77
        5.2.4   Inkrementalni algoritmi za rekonstrukcijo površja . . . . . . . 78
        5.2.5   Gručenje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
  5.3   Algoritem PowerCrust . . . . . . . . . . . . . . . . . . . . . . . . . . 80
        5.3.1   Algoritem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
KAZALO                                                                                vii


  5.4   Algoritem BPA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
        5.4.1   Preiskovanje prostora . . . . . . . . . . . . . . . . . . . . . . . 88
        5.4.2   Izbira semenskega trikotnika . . . . . . . . . . . . . . . . . . . 89
        5.4.3   Vrtenje krogle . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
        5.4.4   Operatorja združevanja in lepljenja . . . . . . . . . . . . . . . 91

6 Prebirni algoritem za rekonstrukcijo površja                                        95
  6.1   Gradniki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
        6.1.1   Napredujoča fronta . . . . . . . . . . . . . . . . . . . . . . . . 97
        6.1.2   Hierarhično vodenje front . . . . . . . . . . . . . . . . . . . . 99
        6.1.3   Iskanje najbližjih točk . . . . . . . . . . . . . . . . . . . . . . 100
  6.2   Osnovne operacije algoritma . . . . . . . . . . . . . . . . . . . . . . . 103
        6.2.1   Odprtje fronte . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
        6.2.2   Dodajanje trikotnika . . . . . . . . . . . . . . . . . . . . . . . 104
                6.2.2.1   Uravnavanje fronte . . . . . . . . . . . . . . . . . . . 105
        6.2.3   Zaprtje fronte . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
  6.3   Potek algoritma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
        6.3.1   Filtriranje bližnjih točk . . . . . . . . . . . . . . . . . . . . . . 109
        6.3.2   Vstavljanje točke v eno fronto . . . . . . . . . . . . . . . . . . 110
                6.3.2.1   Delitev fronte . . . . . . . . . . . . . . . . . . . . . . 111
        6.3.3   Vstavljanje točk v več front . . . . . . . . . . . . . . . . . . . 114
        6.3.4   Dogodkovne točke . . . . . . . . . . . . . . . . . . . . . . . . . 115
                6.3.4.1   Dopolnitev odprtja/zaprtja . . . . . . . . . . . . . . 120
                6.3.4.2   Dopolnitev delitve/združitve . . . . . . . . . . . . . . 120
        6.3.5   Razširitev opisa napredujoče fronte z delitvijo robov . . . . . . 121
        6.3.6   Krpanje lukenj . . . . . . . . . . . . . . . . . . . . . . . . . . 123
  6.4   Analiza časovne zahtevnosti . . . . . . . . . . . . . . . . . . . . . . . 123
  6.5   Rezultati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124

7 Zaključek                                                                         126
KAZALO         viii


Literatura     130

Življenjepis   141

Bibliografija   142
Slike

 2.1   Slikovni prikaz prebiranja. . . . . . . . . . . . . . . . . . . . . . . . .    7
 2.2   Statusna struktura v trenutnem stanju prebiranja. . . . . . . . . . . .        7

 3.1   Ravninska triangulacija. . . . . . . . . . . . . . . . . . . . . . . . . . 10
 3.2   Optimizacija minimalnega notranjega kota z zamenjavo roba. . . . . . 12
 3.3   Nelegalen rob. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
 3.4   Nelegalna (a) in Delaunayeva triangulacija (b). . . . . . . . . . . . . . 16
 3.5   Voronoijev diagram in Delaunayeva triangulacija. . . . . . . . . . . . 17
 3.6   Določitev velikega trikotnika. . . . . . . . . . . . . . . . . . . . . . . 20
 3.7   Vstavljanje točke tvori bodisi tri (a) bodisi štiri trikotnike (b). . . . . 21
 3.8   Gradnja podatkovne strukture D: 1. del. . . . . . . . . . . . . . . . . 22
 3.9   Gradnja podatkovne strukture D: 2. del. . . . . . . . . . . . . . . . . 23
 3.10 Predstavitev delovanja algoritma s stožci, postavljenimi nad točkami
       in prebirno ravnino π. . . . . . . . . . . . . . . . . . . . . . . . . . . 24
 3.11 Dogodek točke: na krivulji paraboličnih odsekov se pojavi nov odsek.           26
 3.12 Dogodek krožnice: parabolični odsek izgine iz krivulje paraboličnih
       odsekov. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
 3.13 Primer vstavljanja točke v dano triangulacijo. . . . . . . . . . . . . . 27
 3.14 Primeri začetnih konfiguracij v fazi inicializacije. . . . . . . . . . . . . 28
 3.15 Prva hevristika preveri kot s sosednjim robom fronte (a) in vstavi nov
       trikotnik (b) ter nadaljuje, dokler je kot < π/2 (c). . . . . . . . . . . 29
 3.16 Druga hevristika odkrije korita (a) in jih zapolni s trikotniki (b). . . . 30

                                         ix
SLIKE                                                                                 x


  3.17 Vhodni ravninski graf (a), Delaunayeva (b) in omejena Delaunayeva
        triangulacija (c). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
  3.18 CDT , vidnost in legalizacija. . . . . . . . . . . . . . . . . . . . . . . . 33
  3.19 Vstavljajoč rob e in regija vpliva Re roba e (a) ter mnogokotnika Qe,L
        in Qe,R (b). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
  3.20 Triangulacija levega mnogokotnika Qe,L (a-c) in triangulacija desnega
        mnogokotnika (d). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
  3.21 Prikaz vstavljanja in zamenjav robov.          Odstranitev točke p1 (b)
        zamenjava zadnjega roba (c).     . . . . . . . . . . . . . . . . . . . . . . 38
  3.22 Razdelitev prostora na trakove, v vsak trak po ena točka. . . . . . . . 39
  3.23 Ponazoritev traku brez triangulacije (a) in razdelitev v regije (b). . . 40
  3.24 Združitev dveh regij     . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
  3.25 Združevanje in povezovanje ob vračanju. . . . . . . . . . . . . . . . . 43

  4.1   Točke in robovi po urejanju v fazi inicializacije. . . . . . . . . . . . . 46
  4.2   Tvorba velikega trikotnika. . . . . . . . . . . . . . . . . . . . . . . . . 47
  4.3   Napredujoča fronta in osnovni nivo podatkovne strukture. . . . . . . 50
  4.4   Sredinski primer: projekcija točke pade na rob fonte (a), tvorba
        trikotnika (b) in legalizacija (c). . . . . . . . . . . . . . . . . . . . . . 52
  4.5   Levi primer: projekcija točke zadene točko fronte (a) in tvori dva
        trikotnika (b). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
  4.6   Robni primer: projekcija točke zadene rob fronte (a) in razdeli priležni
        trikotnik (b). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
  4.7   Po točki pi vstavimo vse njene robove. . . . . . . . . . . . . . . . . . 54
  4.8   Iskanje prvega trikotnika. . . . . . . . . . . . . . . . . . . . . . . . . . 55
  4.9   Sprehod po trikotnikih ob vstavljanju roba (a) v prvem koraku vrne
        regiji Qe,L in Qe,R (b) in rezultat trianguliranja (c). . . . . . . . . . . 57
  4.10 Sprehod po točkah fronte (a) in triangulacija regije Re (b). . . . . . . 58
SLIKE                                                                                 xi


  4.11 Mešani sprehod po točkah fronte (a), rezultirajoči regiji Qe,L in Qe,R
        (b) in triangulacija (c). . . . . . . . . . . . . . . . . . . . . . . . . . . 58
  4.12 Triangulacija regije Qe . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
  4.13 Finalizacija zbriše odvečne trikotnike (a) in zgradi konveksno lupino
        (b). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
  4.14 Graf odvisnosti hitrosti izvajanja od števila omejitev. . . . . . . . . . 64
  4.15 Primer vhoda pri katastrskih podatkih (a) in rezultat triangulacije (b). 65
  4.16 Primer vhoda pri triangulaciji površja (a) in rezultat triangulacije (b). 66

  5.1   Proces izgradnje površja od zajemanja vzorcev do rezultata pro-
        gramske rekonstrukcije. . . . . . . . . . . . . . . . . . . . . . . . . . . 69
  5.2   Primer površja z mejo (a) in vodotesnega površja (b). . . . . . . . . . 70
  5.3   Vzorčenje po kriteriju vzorčne poti (a) in rekonstruiran objekt s slabo
        rekonstruiranim robom (b). . . . . . . . . . . . . . . . . . . . . . . . 71
  5.4   Kriterij LFS in srednja os (modra barva)(a) ter rekonstruirano površje
        (b). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
  5.5   Črna krivulja prikazuje površje, modra srednjo os in krožnice
        transformacijo srednje osi. . . . . . . . . . . . . . . . . . . . . . . . . 81
  5.6   Voronoijeva celica točke p, pola p− in p+ ter normala površja v točki p. 82
  5.7   Diagram moči (polne črte) in dualna regularna triangulacija (črtkane
        črte). Krogi predstavljajo polarne kroge v 2D. . . . . . . . . . . . . . 83
  5.8   Objekt in približek srednje osi (vir: Amenta). . . . . . . . . . . . . . 84
  5.9   Polarna kroga sosednjih celic in kot α med presečiščem. . . . . . . . . 85
  5.10 Notranje polarne krogle objekta (a) in skorja moči kot rekonstruirano
        površje (b) (vir: Amenta). . . . . . . . . . . . . . . . . . . . . . . . . 86
  5.11 Delovanje algoritma BPA v 2D pri dovolj gostem vzorčenju (a), pri
        premalo gostem vzorčenju (b) in pri preveliki ukrivljenosti površja (c). 88
  5.12 Vrtenje krogle okrog roba pi pj (pravokoten na sliko) najde točko pk ,
        s katero ustvarimo nov trikotnik. . . . . . . . . . . . . . . . . . . . . 91
SLIKE                                                                                          xii


  5.13 Operator združevanja doda trikotnik                 ijk   in osveži fronto. . . . . . . 92
  5.14 Operator lepljenja v različnih situacijah. . . . . . . . . . . . . . . . . 93

  6.1   Predogled delovanja algoritma na krogli (a) in obroču (b, c). . . . . . 96
  6.2   Neaktivne (a) in aktivne fronte (b). . . . . . . . . . . . . . . . . . . . 98
  6.3   Zanki F0 in F2 ter prstan F1 . Puščice kažejo orientacijo front. . . . . 99
  6.4   Gnezdenje front. S črno so označe zanke, z rdečo prstani, modra
        barva pa označuje fronto, ki jo vstavljamo. . . . . . . . . . . . . . . . 100
  6.5   Predstavitev front z drevesom.            Z modro je prikazana vstavljena
        fronta, puščica prikazuje iskanje, siva oglišča pa so tista, kjer smo
        izvajali vsebnostni test. . . . . . . . . . . . . . . . . . . . . . . . . . . 100
  6.6   Iskalna struktura. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
  6.7   Nastanek fronte (a in c), dodajanje točke v fronto (b) in odprtje fronte
        (d). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
  6.8   Določanje vstavljanja. . . . . . . . . . . . . . . . . . . . . . . . . . . 105
  6.9   Tvorba trikotnika     pc ppc+ .   . . . . . . . . . . . . . . . . . . . . . . . . 106
  6.10 Tvorba trikotnika      pc− ppc .   . . . . . . . . . . . . . . . . . . . . . . . . 106
  6.11 Tvorba trikotnikov      pc− ppc    in   pc ppc+ .   . . . . . . . . . . . . . . . . . . 107
  6.12 Zaprtje fronte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
  6.13 Vstavljanje trikotnikov s preverjanjem razdalj (a in b) in zaprtje fronte
        (c). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
  6.14 Razdelitev točk na intervale (a) in odstranitev točk z upoštevanjem
        vidnosti (b). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
  6.15 Priredna delitev fronte. . . . . . . . . . . . . . . . . . . . . . . . . . . 112
  6.16 Podredna delitev fronte. . . . . . . . . . . . . . . . . . . . . . . . . . 112
  6.17 Delitev fronte F0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
  6.18 Združitev neaktivnih front kot odprtje. . . . . . . . . . . . . . . . . . 115
  6.19 Združitev neaktivnih front ni mogoča zaradi kolinearnosti projekcij
        (a), zato tvorimo novo neaktivno fronto (b). . . . . . . . . . . . . . . 115
SLIKE                                                                                xiii


  6.20 Priredna združitev . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
  6.21 Podredna združitev.      . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
  6.22 Deljenje na primeru. . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
  6.23 Združevanje na primeru. . . . . . . . . . . . . . . . . . . . . . . . . . 118
  6.24 Dogodkovna točka ep (a) in vstavljanje znotraj dogodkovne točke (b). 119
  6.25 S točko p prehitro zapremo fronto (a), zato z naslednjo točko p+
        tvorimo novo fronto (b), ki gradi nepravilno površje naprej (c) in
        željen rezultat (d). . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
  6.26 Primer napake, ko fronte ne najdemo (a), rezultat vstavljanja pa je
        nova fronta (b). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
  6.27 Primer napake, ko najdemo napačno bližnjo točko, ki jo z vidnostjo
        odtranimo (a), rezultat pa je nova fronta (b). . . . . . . . . . . . . . . 122
  6.28 Ob vstavljanju najdemo pomožno točko (a) in rezultat vstavljanja (b).122
  6.29 Ob vstavljanju najdemo pomožno točko (a) in rezultat vstavljanja (b).122
  6.30 Rekonstrukcija površja krogle (a), kapsul (b), obroča (c) in zajca (d)
        z algoritmom CRUST (levo) in z našim algoritmom (desno). . . . . . 125
Tabele

 4.1   Primerjava izvajalnih časov z obstoječimi algoritmi. . . . . . . . . . . . . 64
 4.2   Izvajalni časi posameznih delov algoritma SL. . . . . . . . . . . . . . . . 64

 6.1   Primerjava izvajalnih časov med našim algoritmom in algoritmom CRUST. 124




                                        xiv
Poglavje 1

Uvod

1.1     Opredelitev problema
Ena temeljnih paradigem reševanja problemov v računalniški geometriji je prebirna
paradigma, ki predstavlja enostavno prostorsko lokalizacijo reševanja problemov.
Temelji na drsenju prebirnega objekta (ponavadi premice ali ravnine) skozi prostor
urejenih podatkov v smeri drsenja in lokalno rešuje podproblem. Podrešitev doda
k rešitvi, ki leži za prebirnim objektom glede na smer drsenja. Tehnika je bila
velikokrat uporabljena pri reševanju dvodimenzionalnih problemov, v prostoru pa
je njena uporaba redka.
Eden izmed ravninskih problemov, ki ga lahko rešimo s prebiranjem, je triangulacija.
Delaunayeva triangulacija je posebna skupina triangulacij, ki tvori optimalne
trikotnike glede na minimalni kot trikotnikov. Področje Delaunayeve triangulacije
predstavlja star problem računalniške geometrije, kjer je bilo do danes razvitih
že ogromno algoritmov.     Lahko bi rekli, da je problem že rešen.       Teoretična
zagotovila pravijo, da je možno Delaunayevo triangulacijo zgraditi iz skoraj
vsake množice točk, vendar praksa doda še težnjo po optimalni porabi virov,
kot sta procesorski čas in delovni pomnilnik.     Tako razvijalci težijo k razvoju
algoritmov z minimalnimi časi izvajanja in minimalno porabo delovnega pomnilnika.



                                         1
POGLAVJE 1. UVOD                                                                     2


Rešitve Delaunayeve triangulacije s prebiranjem so redke. Najbolj znan algoritem
Delaunayeve triangulacije je Fortuneov prebirni algoritem, ki v osnovi tvori
Voronoijev diagram [42], z njim pa posredno reši tudi Delaunayevo triangulacijo.
Boljši algoritem, ki s prebiranjem neposredno tvori Delaunayevo triangulacijo, je
razvil Žalik [92]. Njegov pristop zaradi hitrih izvajalnih časov, majhne porabe
prostora in manjše občutljivosti na porazdelitev vhodnih točk predstavlja dobro
možnost za rešitev splošnejšega problema omejene Delaunayeve triangulacije.
Uporaba omejene Delaunayeve triangulacija je zaradi splošnosti večja, najdemo pa
jo v računalniški geometriji in v računalniški grafiki, inženirstvu ali v geografskih
informacijskih sistemih [41, 56, 74].
Drug problem je rekonstrukcija površja iz oblaka točk. Tudi tukaj je bilo storjenega
že veliko [66], vendar problem rekonstrukcije še ni dokončno rešen. Šele pred kratkim
je dobil močno teoretično ozadje [4]. Vendar teorija drži le ob predpostavki, da
predstavlja oblak točk dober vzorec. Splošen algoritem, s katerim bi lahko v praksi
rekonstruirali površje iz prav vsakega oblaka točk, še ne obstaja.



1.2     Cilji
Cilj, ki smo si ga zadali, je za omenjena problema razviti učinkovita in praktična
postopka, temelječa na prebirni paradigmi. Prvi algoritem, ki ga želimo razviti, je
algoritem omejene Delaunayeve triangulacije. Izhajali bomo iz Žalikovega algoritma
Delaunayeve triangulacije [92], ki se je s kombinacijo prebiranja in napredujoče fronte
izkazal za izjemno hitrega, varčnega in uspešnega pri različnih porazdelitvah vhodnih
podatkov. Pokazali bomo, da je s prebirno tehniko možno zgraditi algoritem omejene
Delaunayeve triangulacije, ki bo boljši ali vsaj primerljiv z obstoječimi postopki.
Postavili smo naslednjo hipotezo:
POGLAVJE 1. UVOD                                                                 3


Hipoteza 1:

     Prebirni algoritem omejene Delauneyeve triangulacije, ki uporablja
     napredujočo fronto in ustrezne hevristike, je pri enakomerno in
     neenakomerno porazdeljenih vhodnih podatkih v splošnem hitrejši od do
     sedaj znanih algoritmov omejene Delaunayeve triangulacije.



   Hipotezo bomo poskusili potrditi z izvajanjem algoritma na različno porazde-
ljenih vhodnih podatkih, kjer se bomo osredotočili predvsem na realne podatke GIS.
Opravili bomo primerjave izvajalnih časov z najpopularnejšimi tovrstnimi algoritmi.


   Drugi problem, ki ga bomo poskusili rešiti s prebirno paradigmo, je
rekonstrukcija površja iz oblaka točk. Prepričani smo, da je z razširitvijo ideje
za tvorbo Delaunayeve triangulacije možno zgraditi površje iz oblaka točk. Prava
razširitev Delaunayeve triangulacije v 3D je sicer Delaunayeva tetraedrizacija,
vendar je bolj zanimiv problem rekonstrukcije površja, ki predstavlja njeno
podmnožico - trikotnike tetraedrov, ki ležijo na površju objekta. Med skupinami
postopkov za rekonstrukcijo površja ne zasledimo algoritmov, temelječih na prebirni
paradigmi. Druga hipoteza se glasi:


Hipoteza 2:

     Z ustreznimi hevristikami za nadzor napredujočih front je možno sestaviti
     algoritem s prebiranjem za rekonstrukcijo površja iz oblaka točk.



   Hipotezo bomo poskusili potrditi z razvojem prebirnega rekonstrukcijskega
algoritma, ki ga bomo preverili na različnih primerih.
POGLAVJE 1. UVOD                                                                   4


1.3     Struktura disertacije
Disertacijo bomo razdelili v sedem poglavij.      Po uvodnem poglavju bo sledilo
poglavje, ki ga bomo namenili predstavitvi prebirne paradigme. Tretje poglavje bo
vsebovalo teoretično izpeljavo Delaunayeve in omejene Delaunayeve triangulacije,
pregled sorodnih raziskav in opise izbranih triangulacijskih algoritmov. V četrtem
poglavju bomo opisali lasten algoritem za omejeno Delaunayevo triangulacijo s
prebiranjem.   Peto poglavje predstavlja drugi del naše disertacije, kjer bomo
napravili uvod v področje rekonstrukcije površja, ki mu bo sledil pregled obstoječih
rešitev. V šestem poglavju bomo opisali lasten prebirni algoritem za rekonstrukcijo.
V zadnjem sedmem poglavju bomo predstavili rezultate obeh razvitih algoritmov
in potrdili ali zavrnili hipotezi. Sledil bo zaključek, v katerem bomo povzeli lastne
prispevke, prav tako pa bomo podali smernice za nadaljevanje raziskave.
Poglavje 2

Prebirna paradigma

Prebirna paradigma ali krajše kar prebiranje (angl. sweeping)1 predstavlja eno
pomembnejših tehnik pri reševanju geometrijskih problemov, zato si pristop zasluži
svoje poglavje. Opis bomo povzeli po [57].


      Pri prebirnih algoritmih na ravnini navidezna prebirna premica drsi po ravnini od
dna proti vrhu in med svojo potjo rešuje zadan geometrijski problem. Med problemi,
ki so bili rešeni s tehniko prebiranja, najdemo tvorbo Voronoijevega diagrama [42],
Delaunayeve triangulacije [92], naš algoritem omejene Delaunayeve triangulacije [27],
problem iskanja najbližjih objektov [13, 46], problem odstranjevanja skritih lic [76],
izračun najkrajše poti [38] in še bi lahko naštevali. Tehnika je zelo priljubljena, zato
jo najdemo v številnih knjigah o računalniški geometriji [65, 71, 73].


      Predstavljajmo si množico objektov O na ravnini, pri katerih želimo odgovoriti
na vprašanje Q. Z vodoravno premico, ki jo postavimo nad vse objekte, pričnemo
drseti od zgoraj navdzol. Med drsenjem zberemo vse informacije objektov S, ki so
bistvene, da lahko odgovorimo na vprašanje Q. Ko je prebirna premica pod vsemi
objekti, lahko zgradimo končen odgovor na vprašanje Q.
  1
      tudi preiskovanje




                                            5
POGLAVJE 2. PREBIRNA PARADIGMA                                                  6


Med prebiranjem moramo vzdrževati podmnožico objektov, ki jo prebirna premica
preseka. Tem objektom pravimo tudi aktivni objekti. Ker se podmnožica objektov
hitro spreminja, jo hranimo v dinamični podatkovni strukturi.        Najpogosteje
uporabljamo uravnotežena dvojiška iskalna drevesa.         Podatkovno strukturo
imenujemo statusna struktura (angl. status structure). Prav tako moramo vedeti,
kdaj se bo status spremenil in kdaj lahko najdemo delce informacij za grajenje
odgovora na Q. To se zgodi le v določenih položajih prebirne premice. Točke,
v katerih se status spremeni, imenujemo dogodki (angl. events), ti pa so podani
s koordinato y, saj smo na začetku predpostavili, da je naša prebirna premica
vodoravna (v splošnem lahko prebirna premica poteka od katerikoli strani, odvisno
od problema, ki ga rešujemo). Ker se premica premika le navzdol, moramo dogodke
urediti glede na koordinato y. Podatkovni strukturi, ki hrani urejene dogodke,
pravimo seznam dogodkov (angl. event list). Zdaj naša prebirna premica več ne
drsi, temveč skače od dogodka do dogodka, kjer vsakič odstrani dogodek z največjo
koordinato y. Prebirna premica zaključi svojo pot, ko iz seznama dogodkov odstrani
vse dogodke.


   Premikanje prebirne premice predstavlja ogrodje prebiranja, ki je skupno vsem
prebirnim algoritmom. Ključen korak prebirnega pristopa je obdelava dogodkov, ki
je vezana na posamezen problem. Dva dogodka sta skoraj vedno prisotna:

   • ko se prebirna premica prvič dotakne objekta iz množice O ali ga prvič seka -
     objekt vstavimo v statusno strukturo (objekt je aktiven);

   • ko prebirna premica zapusti zadnjo točko objekta iz O - objekt odstranimo iz
     statusne strukture (objekt ni aktiven).

   S prebiranjem v ravnini lahko rešimo dvodimenzionalen geometrijski problem
s pomočjo enodimenzionalnih dinamičnih podatkovnih struktur.          Idejo lahko
posplošimo za trodimenzionalen prostor, kjer skozi prostor drsimo s prebirno
ravnino. Statusna struktura je v tem primeru dvodimenzionalna. Pristop prebiranja
POGLAVJE 2. PREBIRNA PARADIGMA                                                      7


                                                   a
                            b                                          c



                                                           d

                    e
                                       g
                                                       f
                                                                           h

                                                               i
                        j




                            Slika 2.1: Slikovni prikaz prebiranja.




                                   d         e f                   g


           Slika 2.2: Statusna struktura v trenutnem stanju prebiranja.

še ni tako razširjen v 3D, zato je njegova najpogostejša uporaba prebiranje s prebirno
premico na ravnini. Izpis 1 prikazuje ogrodje prebiranja. Slika 2.1 prikazuje primer
uporabe, kjer prebirno premico pomikamo od zgoraj navzdol. Modra barva na sliki
predstavlja dele objektov, ki jih je prebirna premica že obiskala. V celoti so bili
obiskani objekti a, b in c. V statusni strukturi se nahajajo objekti d, e, f in g
(slika 2.2). Bližnji prihajajoči dogodki, ki spremenijo statusno strukturo, si sledijo
v naslednjem vrstnem redu:

   • dno objekta d (odstranitev),

   • vrh objekta h (vstavitev),
POGLAVJE 2. PREBIRNA PARADIGMA                                                    8


     • dno objekta e (odstranitev),

     • dno objekta g (odstranitev),

     • vrh objekta i (vstavitev).

     Izvedbe prebiranja so lahko tudi drugačne, npr. vrtenje prebirne premice okrog
točke [23, 38] ali celo topološka črta namesto geometrijske premice [31].

Izpis 1 Ogrodje prebirnega algoritma
1. inicializiraj seznam dogodkov
2. inicializiraj statusno strukturo
3. Dokler seznam dogodkov ni prazen
4.    izbriši dogodek z največjo y−koordinato iz seznama dogodkov
5.    če je prebirna premica sekala (ali se dotaknila) novega objekta
6.      Vstavi objekt v statusno strukturo
7.    če prebirna premica več ne seka (ali se ne dotika) objekta
8.      izbriši objekt iz statusne strukture
9.    odgovori na vprašanje ali del vprašanja z uporabo statusne strukture
10. če je potrebno, dodaj nov dogodek v seznam dogodkov



     Implementacija prebirnih algoritmov ni zahtevna, če uporabimo obstoječo
programsko kodo za uravnotežena iskalna drevesa, urejanje podatkov in osnovne
geometrijske elemente. Prednost prebirnih algoritmov pred algoritmi strategije deli-
in-vladaj je, da nam ni potrebno hraniti vseh objektov v delovnem pomnilniku
naenkrat (v delovnem pomnilniku imamo le objekte, ki so v statusni strukturi).
Časovna zahtevnost prebirnih algoritmov je povečini O(n log n), temu pa dodamo
še čas za odgovarjanje na vprašanje Q. Prebiranje ni primerno za probleme, kjer je
vhodni tok dinamičen. Ponekod prebiranje ni smiselno, če lahko problem rešimo v
linearnem času, kot je npr. določitev oklepajoče škatle množici točk.
Poglavje 3

Algoritmi Delaunayeve in omejene
Delaunayeve triangulacije

V tem poglavju bomo formalno definirali ravninsko triangulacijo, predstavili
Delaunayevo pravilo in opisali Delaunayevo triangulacijo ter prešli na definicijo
omejene Delaunayeve triangulacije, ki mu bo sledil opis postopkov za tvorbo omejene
Delaunayeve triangulacije.



3.1     Ravninska triangulacija
Definicijo ravninske triangulacije bomo povzeli po [19]. Naj bo podana množica
točk v ravnini P = {p0 , p1 , ..., pn−1 } velikosti n. Definicijo ravninske triangulacije
nad množico točk P izpeljemo iz maksimalne delitve ravnine S, za katero velja,
da vsebuje le takšne robove, ki se med seboj ne sekajo, saj na tak način ohranimo
ravninskost delitve. To pomeni, da izven množice S ležijo sami sekajoči se robovi.
Če napravimo maksimalno ravninsko delitev s točkami iz P , govorimo o triangulaciji
nad P oz. T (P ) (slika 3.1).


   Vsak rob ei,j = pi pj , pri čemer pi , pj ∈ P in i = j, pripada natanko dvema
trikotnikoma, razen če leži na robu triangulacije, imenovanem konveksna lupina nad

                                           9
POGLAVJE 3. ALGORITMI DT IN CDT                                                    10




                         Slika 3.1: Ravninska triangulacija.

P oz. KL(P ) (na sliki 3.1 je konveksna lupina narisana s krepkejšimi črtami).


   Za vsako triangulacijo lahko s pomočjo izračuna konveksne lupine natančno
določimo število vseh robov in trikotnikov, o čemer govori naslednji izrek [19]:


   Naj bo P množica n točk na ravnini, ki niso vse kolinearne, in naj k predstavlja
število točk iz P , ki ležijo na konveksni lupini. Vsaka triangulacija T (P ) ima
2n − 2 − k trikotnikov in 3n − 3 − k robov.


   Izrek je dokazan s pomočjo Eulerjeve formule [90], ki določa razmerje med
številom oglišč nv , številom robov ne in številom lic nf ter pravi:

                                  nv − ne + nf = 2

   Če je m število trikotnikov triangulacije, je število lic nf = m + 1, saj ploskev
na ravnini predstavlja tudi zunanjost triangulacije. Zunanje lice ima k robov, ki
predstavljajo konveksno lupino. Vsak trikotnik ima 3 robove, vsak rob pa je skupen
natanko dvema licema. Število vseh robov je torej ne = (3m + k)/2. Če v formulo
vstavimo ne in nf , dobimo izračun za m = 2n − 2 − k, iz česar sledi, da je ne =
3n − 3 − k.
POGLAVJE 3. ALGORITMI DT IN CDT                                                  11


   Nad množico točk na ravnini je možno zgraditi različne triangulacije:

   • triangulacija množice točk (prostor, ki ga razdelimo na trikotnike, je omejen s
      konveksno lupino, napeto nad množico točk),

   • triangulacija enostavnega mnogokotnika (prostor je omejen z mnogokotnikom,
      katerega notranjost razdelimo v trikotnike).

   Triangulacije množice točk so lahko optimalne ali neoptimalne. Predstavnik
neoptimalnih triangulacij je triangulacija množice točk s posplošenim trikotniškim
trakom (najbolj znana je, med katerimi je najbolj znana Hamiltonova triangu-
lacija [7, 37, 53]). Med neoptimalne triangulacije spada tudi triangulacija brez
kriterija, ki zahteva le, da so trikotniki ravninski. Najbolj nas zanimajo optimalne
triangulacije, kriteriji optimalnosti pa so lahko različni:

   • minimizacija najdaljše dolžine robov trikotnika [32],

   • požrešna triangulacija [62],

   • minimizacija najmanjšega kota [35],

   • maksimizacija najmanjšega kota (Delaunayeva triangulacija),

   • minimizacija največjega kota [33],

   • maksimizacija najmanjše višine [33],

   • minimizacija največje razdalje trikotnika od središča njegovega očrtanega
      kroga [33],

   • minimizacija vsote dolžine vseh robov (angl. minimum weighted triangula-
      tion [36]).

   Danes je najpopularnejša optimalna triangulacija vsekakor Delaunayeva trian-
gulacija, med neoptimalnimi pa je bilo največ pozornosti posvečene Hamiltonovi
triangulaciji.
POGLAVJE 3. ALGORITMI DT IN CDT                                                           12


3.2     Delaunayeva triangulacija
Naj bo T triangulacija nad P , ki vsebuje m trikotnikov. Vsak trikotnik ima 3
notranje kote, zato je vseh kotov 3m, ki jih uredimo po velikosti v naraščajočem
vrstnem redu. Sestavimo vektor kotov A(T ) = (α1 , α2 , ..., α3m ), kjer velja αi ≤ αj
pri i < j. Naj bo T druga triangulacija prav tako nad množico točk P z vektorjem
kotov A(T ) = (α1 , α2 , ..., α3m ). Pravimo, da je vektor kotov A(T ) večji od vektorja
kotov A(T ), če je A(T ) leksiografsko večji od A(T ) oz. če obstaja indeks i,
1 ≤ i ≤ 3m tako, da velja αj = αj za vsak j < i in αi > αi .


   Triangulacija T je optimalna glede na kot, če velja A(T ) ≥ A(T ) za vse
triangulacije T nad P . Za takšno triangulacijo je značilno, da tvori lepše trikotnike
oz. trikotnike, ki niso ozki, takšna triangulacija pa je bolj zaželena v praktični
uporabi.




      Slika 3.2: Optimizacija minimalnega notranjega kota z zamenjavo roba.


   Rob pi pj triangulacije T (P ) naj ne leži na konveksni lupini KL(P ) (slika 3.2).
Rob pi pj je skupen trikotnikoma      i,j,k   in   j,i,l .   Če oba trikotnika skupaj tvorita
konveksni štirikotnik, dobimo novo triangulacijo T tako, da iz T odstranimo rob
pi pj in namesto njega vstavimo rob pk pl . To operacijo imenujemo zamenjava robov
(angl. edge-flip).


   Koti α1 , ..., α6 v A(T ) so zamenjani z α1 , ..., α6 v A(T ). Rob pi pj je nelegalen,
POGLAVJE 3. ALGORITMI DT IN CDT                                                          13


če velja:

                            min(αi ) < min(αi ), i ≤ i ≤ 6.

   Drugače povedano, rob je nelegalen, če lahko v T lokalno povečamo najmanjši
kot z zamenjavo tega roba. Če v triangulaciji T poskrbimo, da ne vsebuje nobenega
nelegalnega roba, pravimo, da je T legalna triangulacija. Legalna triangulacija je
optimalna glede na minimalni notranji kot. Da nam ni potrebno izračunati kotov
αi in αi , si pomagamo z naslednjim izrekom:


   Naj bo rob pi pj skupen trikotnikoma      i,j,k   in   i,j,l   in naj bo K krožnica skozi
točke pi , pj in pk (slika 3.3). Rob pi pj je nelegalen natanko takrat, ko točka pl leži
v notranjosti krožnice K. Nadalje, če točke pi , pj , pk in pl skupaj tvorijo konveksni
štirikotnik in ne ležijo na skupni krožnici, je točno eden izmed robov pi pj in pk pl
nelegalen.


   Iz izreka sledi naslednja ugotovitev: če vsakemu trikotniku triangulacije T
očrtamo krog in se znotraj tega kroga ne nahaja nobena druga točka iz P , je
triangulacija T legalna.


   Tej lastnosti pravimo pravilo praznega kroga. Leta 1934 je zgornjo ugotovitev
dokazal ruski matematik Boris Nikolajevič Delone. Ta je svoja dela objavljal v
francoskem jeziku, zato je preoblikoval svoj priimek v Delaunay.               Tako pravilo
praznega kroga imenujemo Delaunayevo pravilo. Triangulaciji, pri kateri za vsak par
trikotnikov velja pravilo praznega kroga, pravimo Delaunayeva triangulacija, njene
robove in trikotnike pa imenujemo Delaunayevi robovi oz. Delaunayevi trikotniki.
Slika 3.4 prikazuje razliko med nelegalno in Delaunayevo triangulacijo.
   Algoritem, s katerim pridemo do Delaunayeve triangulacije, je zamenjava
nelegalnih robov z legalnimi, vse dokler triangulacija ne vsebuje več nelegalnih robov.
Lawson [60] je pokazal, da je moč vsako triangulacijo pretvoriti v Delaunayevo, če
POGLAVJE 3. ALGORITMI DT IN CDT                                                                                14




                          nelegalen rob




                                          Slika 3.3: Nelegalen rob.

izvedemo legalizacijo za vsak par trikotnikov triangulacije. Rekurzivni postopek
za lokalno legalizacijo prikazuje izpis 2. Vhod v algoritem legalizacije predstavlja
trikotnik       i,j,k   (slika 3.3), pri katerem bomo preverjali legalnost roba pi pj v dani
triangulaciji T .


    Algoritem poišče sosednji trikotnik trikotniku                                 i,j,k   po robu pi pj , v našem
primeru je to trikotnik               j,i,l ,   in v njem izbere oglišče, ki ne leži na robu pi pj .
Trikotniku        i,j,k   nato očrta krog in preveri, ali oglišče pl leži v njegovi notranjosti.
Če je temu tako, je rob pi pj nelegalen, zato ga zamenja z robom pl pk . Rezultat
zamenjave sta dva nova trikotnika                        l,k,i   in   k,l,j ,   kjer rekurzivno preveri trikotnik
  l,k,i   z roboma pk pi in pi pl ter            k,l,j   z roboma pl pj in pj pk . Rekurzija se konča, ko
v triangulaciji T ni več nelegalnih robov.


    Delaunayeva triangulacija je unikatna, če v njej ne obstaja takšen konveksni
mnogokotnik, ki bi imel vsa oglišča na isti krožnici.


    Delaunayeva triangulacija je neposredno povezana z Voronoijevim diagramom
(slika 3.5). Začetki Voronoijevih diagramov segajo v 17. stoletje v čas Descartesa in
POGLAVJE 3. ALGORITMI DT IN CDT                                                                        15


Izpis 2 Procedura lokalne legalizacije v triangulaciji T
procedure Legaliziraj(                    i,j,k ,   pi pj , T )
begin
        j,i,l   = VrniSosednjiTrikotnik(                      i,j,k ,   pi pj , T );
   if Nelegalnost(              i,j,k ,    pl ) then
   begin
          {      l,k,i ,   k,l,j }   = ZamenjajRob(                     i,j,k ,   j,i,l ,   pi pj );
          Legaliziraj(           l,k,i ,   pk pi , T );
          Legaliziraj(           l,k,i ,   pi pl , T );
          Legaliziraj(           k,l,j ,   pl pj , T );
          Legaliziraj(           k,l,j ,   pj pk , T );
   end
end



izhajajo iz opazovanj vesolja, kjer so ugotavljali, da se skupine nebesnih teles gibljejo
okrog nevidnih materij, ki jih privlačijo. Tako so pričeli deliti prostor na področja
privlačnosti. Problematika je postala zanimiva in tako se je pričela razvijati nova
veja geometrije. Voronoi je prvi, ki je zanjo postavil matematične temelje leta 1908,
zato se diagrami v računalniški geometriji imenujejo po njem (najdemo jih tudi
pod imeni [10]: Dirichletova področja, Theissenovi mnogokotniki, Wigner-Seitzova
področja, Johnson-Mehlov model in Blumova transformacija).


   Naj bo razdalja med točkama a in b označena z dist(a, b). Voronoijev diagram
nad množico točk P velikosti n definiramo z delitvijo ravnine na n celic, po eno za
vsako točko iz P . Če v celico, definirano s točko pi , vstavimo točko q, velja, da je
točki q izmed vseh točk iz P najbližja točka pi oz. dist(q, pi ) < dist(q, pj ), pj ∈ P, i =
j. Voronoijev diagram nad množico točk P označimo kot V or(P ). Celici pravimo
Voronoijeva celica, robovom Voronoijevi robovi, ti pa se stikajo v Voronoijevih
POGLAVJE 3. ALGORITMI DT IN CDT                                               16




            Slika 3.4: Nelegalna (a) in Delaunayeva triangulacija (b).

točkah. Točkam iz P pravimo Voronoijeva središča (slika 3.5). Če Voronoijeva
središča sosednjih Voronoijevih celic povežemo med seboj z ravnimi robovi, dobimo
Delaunayevo triangulacijo. Pravimo, da je Deluanayeva triangulacija dualni graf
Voronoijevemu diagramu.




3.2.1    Algoritmi Delaunayeve triangulacije

Za algoritme Delaunayeve triangulacije je danes splošno znano, da je njihova
pričakovana časovna zahtevnost O(n log n).     Največje razlike med algoritmi so
POGLAVJE 3. ALGORITMI DT IN CDT                                                  17




           Slika 3.5: Voronoijev diagram in Delaunayeva triangulacija.

v dejanskem času procesiranja, v pomnilniških obremenitvah, v zahtevnosti
implementacije in stabilnosti ter v občutljivosti algoritma glede na porazdelitve
točk. Problem Delaunayeve triangulacije predstavlja eno najbolj raziskanih vej
računalniške geometrije, zato je bilo do danes razvitih veliko različnih algoritmov,
ki jih v grobem delimo v pet skupin:

  1. Algoritmi na principu ovijanja paketa (ali inkrementalni iskalni
     algoritmi). Za te algoritme je značilno postopno dodajanje točk v trenutno
     triangulacijo, kjer obstoječim mejnim robovom poiščemo najbližjo točko, ki
     ustreza Delaunayevemu pravilu, in jo pripnemo Delaunayevi triangulaciji.
     Predstavnik te skupine je algoritem Fanga in Piegla [39]. Algoritem se v
     praksi pokaže kot počasen in zelo nestabilen.
POGLAVJE 3. ALGORITMI DT IN CDT                                                    18


 2. Inkrementalni konstrukcijski algoritmi. So najbolj razširjeni triangu-
    lacijski algoritmi.   Temeljijo na zaporednem vstavljanju točk v obstoječo
    Delaunayevo triangulacijo z delitvijo trikotnika, v katerega pade trenutno
    vstavljena točka.     Svoje delovanje pričnejo s tvorbo velikega ali super
    trikotnika, ki zajame celotno vhodno množico točk in je tudi prvi trikotnik, ki
    se deli. Najden trikotnik razdelijo na tri ali štiri nove trikotnike, za katere je
    potrebno še preveriti, ali izpolnjujejo Delaunayevo pravilo. Ker triangulacijo
    zgradimo nad razširjeno množico točk, moramo na koncu le-te odstraniti.
    Najbolj znan algoritem so predstavili Guibas, Knuth in Sharir [48]. Algoritem
    uporablja usmerjen acikličen graf za iskanje trikotnika. Guibas in Stolfi [47] sta
    izvedla iskanje trikotnika s sprehodom po triangulaciji iz naključnega trikotnika
    in se izognila iskalni podatkovni strukturi. Su in Drysdale [79] sta za iskanje
    trikotnika uporabila enakomerno delitev ravnine. Postopek, kjer je iskanje
    trikotnika prevedeno v problem iskanja najbližje točke z uporabo dvonivojske
    delitve ravnine, najdemo v [91], postopek z delitvijo ravnine na trakove in
    uporabo seznama s preskakovanjem pa v [87]. Algoritmi so relativno preprosti
    za implementacijo.

 3. Algoritmi s prebirno premico. Za njih je značilen sprehod s prebirno
    premico po naraščajoče urejenih vhodnih podatkih v smeri gibanja premice.
    Prostor za premico predstavlja trenutno rešitev, prostor pred premico pa je
    še neraziskan. Ko premica obišče točko, govorimo o dogodku. Najbolj znan
    algoritem za Voronoijev diagram in (posredno) za triangulacijo je napravil
    Fortune [42], veliko preprostejšo rešitev pa je predlagal Žalik [92]. Algoritmi
    dosegajo visoke hitrosti.

 4. Algoritmi s strategijo deli in vladaj. Za tovrstne algoritme je značilno,
    da problem razdelijo na podprobleme, dokler ti niso enostavno rešljivi, delne
    rešitve pa zlijejo ob vračanju iz rekurzije. Triangulacijski algoritmi razdelijo
    vhodno množico običajno na trakove [22] ali pravokotne celice [28]. Prednost
POGLAVJE 3. ALGORITMI DT IN CDT                                                      19


      tovrstnih algoritmov je njihova primernost za paralelno procesiranje, bodisi
      na enem bodisi na več računalnikih.         Druga prednost so nizki izvajalni
      časi. Slabost, s katero se ti algoritmi ponavadi srečujejo, je relativno težka
      implementacija, zato se pogosto zadovoljimo s kakšnim programersko manj
      zahtevnim algoritmom.

  5. Algoritem z vbočeno lupino.             Zanimivo idejo za tvorbo Delaunayeve
      triangulacije in Voronoijevega diagrama s pomočjo konveksne lupine v 3D
      sta predstavila Edelsbrunner in Seidel [30]. Metoda je sestavljena iz treh
      korakov. Prvi korak preslika vhodno množico na paraboloid, drugi korak nad
      preslikanimi točkami zgradi 3D konveksno lupino in nato odstrani zgornjo
      ploskev dobljenega paraboloida. Tretji korak preostale trikotnike preslika na
      ravnino xy, na kateri se izriše Delaunayeva triangulacija.


3.2.1.1    Inkrementalni algoritem Guibas, Knuth in Sharir

Eden najbolj znanih algoritmov za tvorbo Delaunayeve triangulacije so razvili
Guibas, Knuth in Sharir [48]. Gre za naključni inkrementalni algoritem, katerega
osnovna ideja je deljenje trikotnikov v nove trikotnike z vstavljanjem točk v povsem
poljubnem vrstnem redu.        Pripravo podatkov predstavlja premešanje vrstnega
reda (angl. randomization) točk, ki zagotavlja pričakovano časovno zahtevnost
O(n log n).


   Algoritem prične s tvorbo velikega umetnega trikotnika, ki zaobjame vse točke
iz množice P (slika 3.6). DT tako izvedemo nad množico točk P               U , kjer je
U = {p−1 , p−2 , p−3 } množica oglišč velikega trikotnika. Ker je končni cilj DT (P ) in
ne DT (P      U ), moramo na koncu izbrisati vse robove, katerih vsaj eno izmed oglišč
pripada množici U .


   Točke p−1 , p−2 in p−3 postavimo dovolj daleč, da ne vplivajo na DT (P ).
POGLAVJE 3. ALGORITMI DT IN CDT                                                                                    20




                          Slika 3.6: Določitev velikega trikotnika.

Dobro postavitev dobimo, če postavimo oklepajoči pravokotnik nad P v izhodišče
koordinatnega sistema. Kot max označimo najdaljšo stranico, za oglišča velikega
trikotnika pa izberemo p−1 (0, 3 max), p−2 (−3 max, −3 max) in p−3 (3 max, 0).


   Z gradnjo velikega umetnega trikotnika                  −1,−2,−3   smo zagotovili, da se v njegovi
notranjosti nahajajo vse točke.            Tako je postopek deljenja trikotnikov splošen.
Poteka tako, da najprej poiščemo trikotnik, ki ga bomo razdelili (v primeru
vstavljanja prve točke je to veliki trikotnik), nato pa izvedemo deljenje. Pojavita se
lahko dve situaciji (slika 3.7):

   • točka pade v notranjost trikotnika - trikotnik razdelimo na 3 nove trikotnike
      (točka pr razdeli trikotnik         i,j,k   na trikotnike        i,j,r ,       j,k,r ,   k,i,r ),   in

   • točka pade na rob - trikotnika, ki jima je rob skupen, razpolovimo (točka pr
      razdeli trikotnik     i,j,k   na   i,j,r   in   j,k,r ,   trikotnik        k,l,i   pa na     k,l,r   in   l,i,r ).

      Rob pi pk razpade na robova pi pr in pr pk . V primeru, da rob pripada KL(P ),
      razdelimo le en trikotnik.
POGLAVJE 3. ALGORITMI DT IN CDT                                                               21




       Slika 3.7: Vstavljanje točke tvori bodisi tri (a) bodisi štiri trikotnike (b).

    Novi robovi niso nujno Delaunayevi, zato takoj sledi postopek legalizacije, ki
poskrbi, da je dobljena triangulacija spet Delaunayeva. Po deljenju trikotnika               i,j,k

(slika 3.7) preverimo robove pi pj , pj pk in pk pi , po deljenju trikotnikov   i,j,k   in   k,l,i

pa pi pj , pj pk , pk pl in pl pi .


    Predstavljeni algoritem za iskanje ustreznega trikotnika uporablja usmerjeni
aciklični graf (angl. directed acyclic graph ali DAG), s katerim opišemo časosled
življenja trikotnikov. Označimo ga z D. Notranja vozlišča grafa D predstavljajo
trikotnike, ki so obstajali v predhodnih triangulacijah in smo jih tekom vstavljanja
točk razdelili ali uničili, listi pa predstavljajo trikotnike trenutne triangulacije. V
korenu grafa se nahaja veliki trikotnik, ki predstavlja začetno triangulacijo. Ko
v trenutno triangulacijo vstavimo novo točko, pričnemo z iskanjem trikotnika, ki
POGLAVJE 3. ALGORITMI DT IN CDT                                                    22


ga bomo delili. Z iskanjem pričnemo v korenu D, nato pa nadaljujemo v tistem
sinu, ki vsebuje točko. Najden trikotnik se nahaja v listu grafa D. Primer gradnje
triangulacije in grafa D vidimo na slikah 3.8 in 3.9. Zadnji korak na sliki 3.9
prikazuje stanje v grafu D ob zamenjavi skupnega roba trikotnikov    4   in   8.




   Ostane še zadnji korak, v katerem moramo izbrisati vse trikotnike, katerih vsaj
eno oglišče pripada U .




                Slika 3.8: Gradnja podatkovne strukture D: 1. del.


   Slabost algoritma je velika poraba pomnilnika, saj poleg trenutno obstoječih
POGLAVJE 3. ALGORITMI DT IN CDT                                                 23


trikotnikov v grafu hranimo vse trikotnike, ki so nekoč obstajali.


   Učinkovitejše inkrementalne algoritme z uporabo dvonivojske delitve ravnine za
iskanje najbližjega trikotnika sta predstavila Žalik in Kolingerova [91], rešitev z
delitvijo prostora na trakove pa Zadravec in Žalik [87].




                Slika 3.9: Gradnja podatkovne strukture D: 2. del.



3.2.1.2   Prebirni algoritem Fortune

Fortune [42] je leta 1987 razvil algoritem za tvorbo Voronoijevega diagrama s
prebirno premico, ki dosega časovno zahtevnost O(n log n). Splošno načelo prebirne
premice pravi, da množica podatkov pred premico v smeri gibanja predstavlja še
neobdelane podatke, medtem ko za premico nastaja rezultat. Pri Voronoijevem
diagramu se pojavi problem, saj se robovi, ki pripadajo Voronoijevi celici V (pi ),
na prebirni ravnini pojavijo prej, kot prebirna premica doseže ustrezno točko pi .
POGLAVJE 3. ALGORITMI DT IN CDT                                                    24


Fortune je problem spretno rešil s preslikavo v 3D prostor tako, da je nad točke
napel stožce in prebirno premico obravnaval kot prebirno ravnino, nagnjeno pod
kotom 45 ◦ (slika 3.10). Le-ta seka ravnino točk v premici s, ki postane naša prebirna
premica. Algoritem v osnovi ne reši Delaunayeve triangulacije, a ker je le-ta njegov
dual (prikazano na sliki 3.5), je preslikava med njima opravljena v linearnem času.




Slika 3.10: Predstavitev delovanja algoritma s stožci, postavljenimi nad točkami in
prebirno ravnino π.

   Ker je ravnina nagnjena za enak kot kot stranice stožcev, prebirna premica najde
točko p natanko takrat, ko se prebirna ravnina prvič dotakne stožca, definiranega
nad točko p. Presek ravnine s katerim koli stožcem predstavlja parabolo. Preseki
ravnine z večimi sosednjimi stožci skupaj izrišejo krivuljo paraboličnih odsekov,
imenovano tudi spodnja meja paraboličnih odsekov (angl. parabolic front, beach
line). Zanimivo je, da se dva sosednja parabolična odseka stikata v točki, ki leži
na bisektorju med dvema sosednjima točkama. Potek stičišča opiše Voronoijev rob.
Preiskovalna ravnina najprej odkrije Voronoijev rob in šele kasneje točko, ki ta rob
POGLAVJE 3. ALGORITMI DT IN CDT                                                     25


definira. Voronoijev diagram je popolno definiran za spodnjo mejo paraboličnih
odsekov in ne za s. Jasno je, da je osrednja struktura, ki jo moramo vzdrževati,
krivulja paraboličnih odsekov.


   Algoritem razlikuje med dvema dogodkoma prebirne premice s:

   • dogodek točke - prebirna premica naleti na točko iz P . Na krivulji paraboličnih
     odsekov se pojavi nov odsek, ki razdeli enega od odsekov na dva nova
     (slika 3.11). V trenutku, ko preberemo točko, je presek med ravnino π in
     stožcem poltrak, ki si ga predstavljamo kot parabolo širine 0. Dogodek pomeni
     začetek nastajanja novega Voronoijevega roba.

   • dogodek krožnice - odsek na parabolični krivulji odsekov se skrči v točko in
     izgine (slika 3.12). Če je βj izginjajoči odsek, sta βj in βk njegova sosednja
     odseka, tik preden βj izgine. Takšne tri parabole so določene s svojimi točkami
     pi , pj in pk (slika 3.12a). V trenutku, ko βj izgine, potekajo vse tri parabole
     skozi skupno točko q. Točka q je enako oddaljena od točk pi , pj in pk , zato
     obstaja krožnica, ki poteka skozi njih in ima središče v q (slika 3.12b). Najnižja
     točka krožnice leži na prebirni premici s. Znotraj krožnice ne more obstajati
     nobena druga točka, saj bi bila razdalja od take točke do q manjša kot razdalja
     od q do prebirne premice s. Tako je q točka Voronoijevega diagrama. Rezultat
     dogodka krožnice je torej zaključek Voronoievega roba v Voronoijevi točki. Ko
     se prebirna premica premakne naprej, presečišče preostalih odsekov βi in βk
     riše Voronoijev rob (slika 3.12c).



3.2.1.3   Prebirni algoritem Žalik

Prebirni algoritem, ki ga bomo izpostavili, je algoritem Delaunayeve triangulacije,
ki ga je razvil Žalik [92]. Postopek bomo v tem podpoglavju le orisali, saj je naš
algoritem njegova izboljšava in razširitev z omejitvami, ki jo bomo kasneje podrobno
POGLAVJE 3. ALGORITMI DT IN CDT                                                   26




 Slika 3.11: Dogodek točke: na krivulji paraboličnih odsekov se pojavi nov odsek.




Slika 3.12: Dogodek krožnice: parabolični odsek izgine iz krivulje paraboličnih
odsekov.

opisali.


   Pristop je precej drugačen, kot ga je razvil Fortune, čeprav temelji na strategiji
prebiranja. Ves postopek poteka na ravnini, kjer točke uredimo po koordinati y,
nato pa se z vodoravno prebirno premico premikamo od točke do točke in gradimo
trikotniško mrežo. Osnovni gradnik algoritma je napredujoča fronta (angl. advancing
front), ki predstavlja zgornjo mejo triangulacije in mesto, kamor dodajamo nove
trikotnike v obstoječo triangulacijo. Spretna implementacija napredujoče fronte
omogoča hiter dostop do ustreznega roba fronte, kamor bomo dodali nov trikotnik.
Ker je napredujoča fronta tudi edina zahtevnejša struktura, ki jo algoritem
uporablja, je algoritem zelo varčen s pomnilnikom in enostaven za implementacijo.


   Slika 3.13 prikazuje vmesno stanje delovanja algoritma.           Zgoraj vidimo
POGLAVJE 3. ALGORITMI DT IN CDT                                                       27


napredujočo fronto - mejo triangulacije, kjer se trikotniki dodajajo z napredovanjem
prebirne premice s, in spodaj trenutno zgrajen del konveksne lupine, ki jo avtor
imenuje spodnja konveksna lupina. Prebirna premica s na sliki 3.13a obišče točko pi .
Projekcija točke na napredujočo fronto vrne rob pl pr , s katerim zgradimo trikotnik
  i,l,r ,   točko pi pa dodamo v napredujočo fronto (slika 3.13b). Ko prebirna premica
obišče zadnjo točko, s sprehodom po napredujoči fronti in preverjanjem kotov med
robovi napredujoče fronte zgradimo še zgornjo konveksno lupino.




                  Slika 3.13: Primer vstavljanja točke v dano triangulacijo.

    Eden zahtevnejših korakov je inicializacija, katere cilj je tvorba prvega trikotnika,
začetne napredujoče fronte in spodnje konveksne lupine. Ker obstaja verjetnost
različnih tipov kolinearnosti prvih k točk, je avtor možne situacije razdelil v tri
skupine konfiguracij, ki so prikazane na sliki 3.14. Zgornji primeri prikazujejo možne
POGLAVJE 3. ALGORITMI DT IN CDT                                                   28


situacije pri nekolinearnih začetnih točkah, spodnji pa pri kolinearnih. Obstajajo še
zrcalne situacije glede na navpičnico.




           Slika 3.14: Primeri začetnih konfiguracij v fazi inicializacije.

   Vstavljanje točke poteka tako, da točki poiščemo najbližji rob fronte, dodamo
trikotnik in izvedemo postopek Lawsonove legalizacije, da je pravilu praznega kroga
vselej zadoščeno. Prav tako se spremeni napredujoča fronta, lahko pa tudi konveksna
lupina. Razlikujemo med tremi primeri vstavljanja točke:

   • Levi primer: pravokotna projekcija točke pade levo od fronte. Vstavljanje
     zgradi enega ali več trikotnikov, osveži napredujočo fronto in spodnjo
     konveksno lupino.

   • Desni primer: pravokotna projekcija točke pade desno od fronte. Izvedemo
     enako kot za levi primer, le na drugi strani.

   • Sredinski primer: pravokotna projekcija točke pade na sredino roba fronte ali
     na točko. Vstavljanje doda enega ali več trikotnikov ter osveži le napredujočo
POGLAVJE 3. ALGORITMI DT IN CDT                                                     29


      fronto.   V primeru vodoravnega roba fronte lahko vstavljena točka pade
      neposredno nanj. V tem primeru priležni trikotnik razdelimo na dva.

   Napredujoča fronta je enodimenzionalna podatkovna struktura, ki služi
predstavitvi meje triangulacije in hitremu iskanju. Zaželeno je, da se fronta čim
bolj prilega prebirni premici oz.    da je čim bolj gladka, saj je takrat najbolj
učinkovita. Zato algoritem razpolaga z dvema hevrističnima funkcijama, ki skrbita
za njeno glajenje. Izkaže se namreč, da zaradi neenakomerne porazdelitve podatkov
prihaja do situacij, kjer deli fronte ostanejo daleč za prebirno premico.        Hitro
odpravljanje takšnih situacij odpravlja prva hevristika, ki ob vstavitvi trikotnika
preverja kote med sosednjimi robovi fronte in v primeru, da je vmesni kot manjši od
π/2 (slika 3.15a), vstavi dodaten trikotnik (slika 3.15b). Preverjanje kotov poteka v
obeh smereh, levo in desno od vstavljene točke, in se ustavi takoj, ko je vmesni kot
večji od π/2 (slika 3.15c).




Slika 3.15: Prva hevristika preveri kot s sosednjim robom fronte (a) in vstavi nov
trikotnik (b) ter nadaljuje, dokler je kot < π/2 (c).


   Kljub temu se lahko zgodi, da nastanejo korita oz. globeli, ki jih s prvo hevristiko
ne moremo zaznati in odpraviti. Za to poskrbi druga hevristika, ki takšne globeli
POGLAVJE 3. ALGORITMI DT IN CDT                                                       30




                     pi




   Slika 3.16: Druga hevristika odkrije korita (a) in jih zapolni s trikotniki (b).

pravočasno odkrije in jih zapolni s trikotniki. Pregledovanje enako kot pri prvi
hevristiki poteka v smereh levo in desno od vstavljene točke. Slika 3.16a prikazuje
situacijo, ko smo vstavili točko pi . Nato vzamemo naslednjo točko na fronti v desni
smeri pr in še njeno desno sosedo pr+ . Če je naklon premice, ki poteka skozi pi
in pr+ manjši od 3/4π, smo našli korito. Koritu poiščemo levi in desni rob ter
dno (na sliki 3.16b predstavlja levi rob točka pr+ , desni rob točka pa in dno pb ).
Območje trianguliramo, pri tem pa seveda upoštevamo Delaunayevo pravilo. Na
koncu osvežimo napredujočo fronto in postopek je končan.


   Meritve so pokazale, da s pomočjo hevristik algoritem bistveno pohitrimo, saj
zmanjšamo število menjav pri legalizaciji. Algoritem dosega časovno zahtevnost
POGLAVJE 3. ALGORITMI DT IN CDT                                                   31


O(n log n) in je skoraj neodvisen od porazdelitve podatkov [92].



3.3     Omejena Delaunayeva triangulacija
Delaunayevo triangulacijo je možno razširiti tako, da vhodna množica vsebuje tudi
daljice. Ta problem so v računalniški geometriji poimenovali omejena Delaunayeva
triangulacija (angl. constrained Delaunay triangulation ali CDT). Z upoštevanjem
daljic, ki kasneje postanejo robovi triangulacije, rezultat ni več Delaunayeva
triangulacija, ampak triangulacija, ki je Delaunayevi kolikor se le da blizu. To ji
preprečujejo ravno daljice, ki jih zaradi tega, ker predstavljajo omejitve, imenujemo
omejujoči robovi (angl. constraining edges). Velika uporabnost CDT se je pokazala
pri načrtovanju poti [20, 54, 55, 84], pri metodi končnih elementov [45] in v
GIS [1, 52, 72].
   Vhodno množico predstavimo kot ravninski premočrtni graf G = {P, Ec } (angl.
planar straight-line graph ali PSLG), kjer je P množica točk in Ec množica
omejujočih robov. Zahtevamo, da so oglišča robov Ec zastopana v P . Razliko
med Delaunayevo in omejeno Delaunayevo triangulacijo prikazuje slika 3.17. Če
trianguliramo samo točke iz P , dobimo Delaunayevo triangulacijo.           Nekateri
Delaunayevi robovi triangulacije lahko sekajo omejujoče robove Ec (slika 3.17b).
Če množica robov Ec predstavlja tudi robove triangulacije, dobimo omejeno
Delaunayevo triangulacijo (slika 3.17c).


   Vpeljimo pojem vidnosti (angl.        visibility), ki pravi, da sta točki pi in pj
medsebojno vidni, če povezava med njima ne seka nobenega roba iz Ec in če točki
pi in pj ne predstavljata oglišč roba iz Ec .


   Če pogledamo sliko 3.18a, vidimo, da trikotnik t krši klasično Delaunayevo
pravilo. V takem primeru bi zamenjali rob e z e , vendar tega ne bomo storili,
saj rob e predstavlja omejitev. Točki pi in pl sta medsebojno vidni, prav tako tudi
POGLAVJE 3. ALGORITMI DT IN CDT                                                    32




Slika 3.17: Vhodni ravninski graf (a), Delaunayeva (b) in omejena Delaunayeva
triangulacija (c).

točki pj in pl , med pk in pl pa vidnost ne velja. Legalizacija zamenja rob pj pk z
robom pi pm (slika 3.18b).


   Ker Delaunayevo pravilo ne upošteva robov iz Ec , pravilo praznega kroga
razširimo z vidnostjo in ga poimenujemo šibko Delaunayevo pravilo.           Tako se
definicija omejene Delaunayeve triangulacije glasi:


   Omejena Delaunayeva triangulacija ali CDT nad ravninskim grafom G =
{P, Ec } je takšna triangulacija, ki vsebuje vse robove iz Ec in velja, da očrtan krog
POGLAVJE 3. ALGORITMI DT IN CDT                                                        33




                       Slika 3.18: CDT , vidnost in legalizacija.

trikotnika t v triangulaciji ne vsebuje točke iz P , ki je vidna iz vseh oglišč trikotnika
t.


     Pokažimo še, da je Delaunayeva triangulacija le specifičen primer omejene
Delaunayeve triangulacije. Omejena Delaunayeva triangulacija nad grafom G je
Delaunayeva triangulacija, kadar je množica Ec prazna. Torej, DT (G) = CDT (G),
ko je Ec prazna množica. Enačaj velja tudi takrat, kadar so vsi robovi iz Ec
Delaunayevi.




3.3.1     Algoritmi omejene Delaunayeve triangulacije

Zaradi vse večjih zahtev v inženirstvu se je razvila nova veja algoritmov, ki so
zmožni triangulirati velike množice podatkov. Podatki se hranijo na disku, od tam
pa jih je potrebno prenesti v delovni pomnilnik, zato ti algoritmi namenjajo večjo
pozornost optimizaciji prenosa podatkov med diskom in pomnilnikom [1, 52]. Mi
POGLAVJE 3. ALGORITMI DT IN CDT                                                      34


se bomo osredotočili izključno na način tvorbe omejene Delaunayeve triangulacije,
kjer bomo predpostavili, da velikosti delovnega pomnilnika ne predstavlja omejitve.


Omejeno Delaunayevo triangulacijo lahko zgradimo na dva načina:

   • dvokoračni postopki zgradijo CDT (G) v dveh korakih, kjer je prvi korak
      DT (P ), vstavljanje robov Ec pa predstavlja drugi korak;

   • enokoračni postopki zgradijo CDT (G) v enem koraku, tako da hkrati
      upoštevajo celoten graf G, torej točke P in robove Ec .


3.3.2     Dvokoračni postopki CDT

Dvokoračni postopek je preprostejši, saj se pri tvorbi CDT (G) osredotočimo le
na problem vstavljanja robov v triangulacijo, ki smo jo dobili v prvem koraku.
Tako lahko za izgradnjo DT (P ) izberemo katerikoli algoritem navadne Delaunayeve
triangulacije, ki smo jih opisali v predhodnem poglavju.


3.3.2.1   Vstavljanje robov

V drugem koraku v dobljeno DT (P ) vstavimo vse omejujoče robove iz Ec . Za vsak
rob e ∈ Ec moramo poiskati njegovi oglišči, nato pa območje ob robu e predelati tako,
da bo e postal del končne CDT (G). Oglišči lahko najdemo s pomočjo podatkovnih
struktur, ki jih je uporabljal algoritem za DT .       Iskalne strukture potrebujemo
za iskanje bodisi najbližjih točk, robov ali trikotnikov v triangulaciji bodisi za
iskanje oglišč pri vstavljanju robov. Med njimi najdemo dvojiška drevesa (drevo
AVL, rdeče-črno drevo, drevo k-D), sekljalne tabele (angl. hash-table), sezname s
preskakovanjem (angl. skip-list), usmerjene grafe ter enakomerne delitve prostora.


   Predelava naključnega inkrementalnega algoritma, ki za iskanje trikotnikov
uporablja DAG, je smiselna, če DAG uporabimo tudi za iskanje oglišč ob vstavljanju
robov. Alternativna rešitev bi bila, če bi iz množice točk P odstranili vse tiste točke,
POGLAVJE 3. ALGORITMI DT IN CDT                                                     35


ki predstavljajo oglišča robov iz Ec (množico teh točk označimo s Pc ⊆ P ) in bi v
prvem koraku zgradili DT (P − Pc ). Drugi korak bi najprej vstavil oglišči roba e in
si zapomnil položaj oglišč, nato pa bi prešel na spreminjanje triangulacije tako, da
bi rob e pravilno umestil v triangulacijo.


   Včasih algoritmi za DT ne gradijo takšnih podatkovnih struktur, ki bi bile
primerne za uporabo v drugem koraku. Takrat imamo na voljo več možnosti. Ena
je ta, da algoritem DT dopolnimo z gradnjo iskalne podatkovne strukture. Druga
možnost je, da iskalno podatkovno strukturo zgradimo pred izvajanjem algoritma
DT ali po njem. A ker lahko vpeljava dodatnih podatkovnih struktur pomnilniško
preobremeni postopek, obstaja še tretja možnost. Ta za iskanje oglišč ali trikotnikov
potrebuje le triangulacijo in sosednostne povezave med trikotniki. Iskalne algoritme,
ki znotraj triangulacije iščejo točke ali trikotnike, imenujemo algoritmi korakanja po
triangulaciji (angl. walking algorithms) [25, 58].




3.3.2.2   Vstavljanje robov z brisanjem

Naj bo e omejujoč rob, ki ga vstavljamo med oglišči pa in pb v obstoječo triangulacijo.
Rob e preseka množico robov, zato je te robove (vključno s trikotniki) potrebno
odstraniti. Vsi robovi, ki jih rob e ni sekal, ostanejo v triangulaciji, saj zadostijo
šibkemu Delaunayevemu pravilu. Območje ob robu, imenovano tudi regija vpliva
roba e, označimo z Re . Regija Re vsebuje vse robove in trikotnike, ki jih moramo
zbrisati. Po brisanju rob e regijo Re razdeli v dve podregiji, ki se stikata z robom
e. Regiji levo in desno od roba e označimo s Qe,L in Qe,R , če na e gledamo kot
na usmerjen rob od pa do pb (slika 3.19).       Qe,R in Qe,L nista nujno preprosta
mnogokotnika (mnogokotnik Qe,L na sliki 3.19b vsebuje rob, ki ni povezan z
obema ogliščema). Vsako regijo trianguliramo posebej, zato je dovolj, da postopek
razložimo le za regijo Qe,L . Ko imamo triangulaciji obeh regij Qe,L in Qe,R , med
sabo povežemo še trikotnika obeh regij, ki ležita ob robu e.
POGLAVJE 3. ALGORITMI DT IN CDT                                                   36




Slika 3.19: Vstavljajoč rob e in regija vpliva Re roba e (a) ter mnogokotnika Qe,L in
Qe,R (b).

   S trianguliranjem mnogokotnika pričnemo tako, da skozi pa in pb napnemo
krožnico (slika 3.20a). Nato se pomikamo od roba e proti točkam regije Qe,L , dokler
ne najdemo točke p, ki zadosti Delaunayevemu pravilu. S točko p tvorimo nova
robova pa p in ppb , ki ju vstavimo v CDT , točki pa in pb pa izbrišemo iz Qe,L
(slika 3.20b). Enak postopek rekurzivno ponovimo za oba nova robova. Točke p
iščemo le med preostalimi točkami regije Qe,L . Postopek ponavljamo, dokler Qe,L
vsebuje točke (slika 3.20c). Enako storimo za Qe,R , kar vrne triangulacijo celotne
regije Re (slika 3.20d).


3.3.2.3     Vstavljanje robov z zamenjavami

Opišimo še drugo varianto vstavljanja robov, ki so jo predstavili Dyn, Goren in
Rippa [29]. Pokazali so, da je katerokoli triangulacijo nad množico točk znotraj
mnogokotniške domene možno pretvoriti v katerokoli drugo triangulacijo nad isto
množico točk le z zamenjavami robov. Mnogokotniška domena je spet Re , ki jo
sestavljata Qe,L in Qe,R . Algoritem se sestoji iz dveh glavnih korakov:

  1. Procedura menjave vseh robov, ki so presekani z e, poskrbi, da je rob e del
      nove triangulacije, ki ni nujno CDT.
POGLAVJE 3. ALGORITMI DT IN CDT                                                           37




Slika 3.20: Triangulacija levega mnogokotnika Qe,L (a-c) in triangulacija desnega
mnogokotnika (d).

   2. Lawsonova lokalna legalizacija zagotovi, da je v vsakem trenutku zadoščeno
      Delaunayevemu pravilu, vendar le znotraj posamezne podregije Qe,L oz. Qe,R .

   Korak 1 zamenjuje robove v Re postopoma, dokler rob e ni vključen v
triangulacijo. Točke med pa in pb označimo s pi , tako da levi mnogokotnik Qe,L
opišemo z množico oglišč {pa , p1 , p2 , ..., pn , pb }. Postopek razložimo za primer, kjer v
Qe,L nastopa rob s prostim ogliščem (oglišča si ne deli z drugim robom). Zaporedje
pi opiše zanko. Tako lahko več parov {pl , pk } vsebuje isto točko iz Qe,L (v našem
primeru {p2 , p4 })). Za takšne mnogokotnike pravimo, da so večkratno povezani.
Vsakemu pi pripada natanko en notranji kot αi . Za vsak rob, ki je bil menjan,
velja, da je sekal omejujoč rob e in da sta njegovi oglišči ležali na nasprotnih straneh
POGLAVJE 3. ALGORITMI DT IN CDT                                                     38


roba e (pripadali sta torej Qe,L in Qe,R ). Za vsak zamenjan rob pa morajo veljati
pogoji zamenjave, kar pomeni, da rob predstavlja diagonalo konveksnega štirikotnika
(notranji koti ob ogliščih štirikotnika ob diagonali morajo biti manjši od π).
Med robovi, ki sekajo e, zmeraj obstaja rob, ki ga je možno zamenjati. Torej
vedno obstaja oglišče pm v Qe,L , kjer je kot αm < π. Obstaja tudi vsaj en rob
izhajajoč iz pm , ki seka e z drugim krajiščem v Qe,R , čigar notranji kot je manjši
od π. Postopek orišemo na sliki 3.21. Zanka Qe,L predstavlja zaporedje {p2 , p3 , p4 }.
Najprej odstranimo točko p1 (slika 3.21b). S postopkom nadaljujemo, dokler nam
ne ostane le še en rob, ki ga je potrebno zamenjati. Rezultat zadnje menjave je rob
e, ki postane rob omejene Delaunayeve triangulacije (slika 3.21c).




Slika 3.21: Prikaz vstavljanja in zamenjav robov. Odstranitev točke p1 (b) zamenjava
zadnjega roba (c).
POGLAVJE 3. ALGORITMI DT IN CDT                                                      39


3.3.3     Enokoračni algoritmi CDT

Pri snovanju enokoračnih algoritmov sproti razmišljamo o načinu vstavljanja robov
in točk. Enokoračni algoritmi [22, 68, 85] so redkejši od dvokoračnih, saj so velikokrat
dvokoračne rešitve preprostejše in dovolj dobre.


3.3.3.1   Algoritem CDT Chew

Algoritem, ki ga bomo opisali, je predstavil Chew [22]. Predpostavljamo, da se graf
G nahaja znotraj pravokotnika (grafu le očrtamo oklepajoči pravokotnik). Točke
uredimo v naraščajočem vrstnem redu po koordinati x in pravokotnik razdelimo na
navpične trakove tako, da se v vsakem traku nahaja natanko ena točka. Primer
delitve prikazuje slika 3.22, kjer smo zaradi lažje predstave pravokotnik razdelili na
enakomerne trakove (širina trakov zavisi od porazdelitve točk). Če med vhodnimi
podatki najdemo vsaj dve točki z enako koordinato x, delitev ni izvedljiva, zato
avtor v takih situacijah predlaga zasuk grafa. Do rešitve pridemo tako, da za vsak
trak posebej izračunamo omejeno Delaunayevo triangulacijo, nato sosednje trakove
med seboj združujemo in računamo njuno skupno triangulacijo, dokler ne zgradimo
omejene Delaunayeve triangulacije nad celotnim G. Časovna zahtevnost postopka
je O(n log n).




        Slika 3.22: Razdelitev prostora na trakove, v vsak trak po ena točka.
POGLAVJE 3. ALGORITMI DT IN CDT                                                       40


   Ker prostor delimo glede na točke, razdelimo vse robove Ec , tako da se v trakovih
nahajajo le delni robovi. Zato bi morali za vsak trak poleg točke hraniti tudi vse
delne robove, ki potekajo skozi trak, kar bi v primeru dolgih robov in velikega
števila trakov zasedlo veliko pomnilnika. Prekomernemu hranjenju se izognemo, če
trakove razdelimo na regije, kjer vsako omejimo s parom delnih robov. Tako lahko
vodimo informacije le za tiste regije, ki v svoji notranjosti hranijo točke oz. delne
triangulacije. Primer traka prikazuje slika 3.23a, razdelitev v regije pa vidimo na
sliki 3.23b. Regije, ki jih vodimo, so obarvane z belo.




                            (a)                               (b)


   Slika 3.23: Ponazoritev traku brez triangulacije (a) in razdelitev v regije (b).


Robove Ec delimo v tri skupine glede na odnos s trakom :

   • robovi, ki povsem ležijo v traku,

   • robovi, ki imajo v traku le eno oglišče in

   • robovi, ki trak presekajo iz leve in desne strani.

   Slednjih večinoma ne hranimo. Avtor jih imenuje križni robovi (angl. cross-
edges). Hranimo samo tiste regije, ki vsebujejo vsaj eno točko. Imenujemo jih
POGLAVJE 3. ALGORITMI DT IN CDT                                                  41


točkovne regije.


   Algoritem se ukvarja s tremi bistvenimi vprašanji:

   • kako upravljati s točkovnimi regijami,

   • kako regije združevati ter

   • kako zliti dve sosednji CDT pri združitvi trakov.

   Začetne regije ustvarimo v fazi inicializacije in vsebujejo natanko eno točko. Za
to potrebujemo informacije o najbližjem zgornjem in spodnjem robu (ta robova sta
v najslabšem primeru robova začetnega pravokotnika). Najbližje robove poiščemo v
času O(n log n) s pomočjo prebiranja v vodoravni smeri.


   Ob vračanju sosednja trakova združimo tako, da zlijemo njune regije. Po obeh
trakovih se sprehodimo od zgoraj navzdol. Regijo v zlitem traku pričnemo tvoriti
takrat, ko vsaj eden izmed trakov, ki ju združujemo, vsebuje točkovno regijo. S
tvorbo nove regije zaključimo, ko nobeden od trakov ne vsebuje več točkovne regije.
Slika 3.24 prikazuje primer združitve regij. Na levi vidimo stanje pred in na desni
stanje po združitvi.


   Ko imamo novo regijo, nam preostane še izračun skupne CDT. Metoda je
podobna metodi za izgradnjo klasične DT, ki sta jo predlagala Lee in Schachter [61].
Pojavi se vprašanje, kje v posameznih triangulacijah pričeti z združevanjem. Avtor
vpelje štiri pomožne neskončne točke (±∞, ±∞), ki jih postavimo v vogale vsake
točkovne regije (prazne točke na sliki 3.23). Točke so dejansko v neskončnosti,
vendar si jih za lažje razumevanje predstavljajmo v vogalih regije. Neskončne točke
posamezne regije lahko geometrijsko sovpadajo s točkami sosednje regije, vendar
nimajo medsebojnega vpliva - vsaka regija ima svoje točke. Kadarkoli želimo poseči
v triangulacijo regije, za začetno točko uporabimo neskončno točko.
POGLAVJE 3. ALGORITMI DT IN CDT                                                    42




                        (a)                                  (b)

                          Slika 3.24: Združitev dveh regij

   Velja, če iz obstoječe regije odstranimo vse neskončne točke in iz njih izhajajoče
robove, preostale točke in robovi regije tvorijo CDT.
   Naj bosta B1 in B2 sosednja trakova, ki ju zlijemo v trak B in naj bo T CDT
traka B. Trakova B1 in B2 vsebujeta vsak svojo CDT (T1 in T2 ), ki se ob zlitju v
B spremenita. Če je rob e Delaunayev rob v T in sta obe oglišči v B1 , potem je e
Delaunayev rob T v B1 . Združevanje triangulacij T1 in T2 napravimo v treh korakih:

  1. Ob meji med trakoma odstranimo neskončne točke, tako da dobimo delno
     CDT v vsaki polovici. S točkami vred odstranimo tudi vse iz njih izhajajoče
     robove (tudi Delaunayeve, a ne omejujočih). Neskončne točke nato dodamo v
     vse štiri vogale nove regije, kjer jih še ni. Edini robovi, ki jih moramo dodati,
     so robovi, ki sekajo mejo med trakoma.

  2. Delne triangulacije zlepimo.

  3. Odstranimo vse neskončne točke, ki niso vogalne.

   Slika 3.25 prikazuje primer CDT od začetka do konca. Na sliki (a) vidimo začetno
razdelitev na 8 trakov, kjer je v vsakem po ena regija s točko. Nato po dva in dva
sososednja trakova združimo (b), tako da nam ostanejo le 4 regije, nato 2 (c) in na
koncu dobimo 1 regijo in končno CDT (d).
POGLAVJE 3. ALGORITMI DT IN CDT                                               43




               (a)                                         (b)




               (c)                                         (d)

               Slika 3.25: Združevanje in povezovanje ob vračanju.

   Izboljšavo algoritma je predstavil Moreau [68].   Izognil se je potencialnemu
zasuku vhodnega grafa in izboljšal zlivanje trakov, algoritem pa je tako primeren
tudi za triangulacijo mnogokotnikov.
Poglavje 4

Prebirni algoritem omejene
Delaunayeve triangulacije

V tem poglavju bomo predstavili naš pristop za tvorbo omejene Delaunayeve
triangulacije s prebirno premico.    Algoritem je posplošitev in delna izboljšava
prebirnega algoritma za Delaunayevo triangulacijo, ki ga je predstavil Žalik [92].
Njegov algoritem DT se je izkazal za zelo učinkovitega pri različnih porazdelitvah
točk, ponaša pa se tudi z majhno porabo pomnilnika in doseganjem zavidljivo nizkih
izvajalnih časov. Kot takšen predstavlja izziv za številne razširitve, saj se s tem
poveča njegova uporabnost. Vprašljivo pa je, ali je možno algoritem posplošiti za
problem omejene Delaunayeve triangulacije tako, da bi ohranili njegovo učinkovitost.
Zanima nas, kako vpeljati postopek vstavljanja robov, kjer sta bistveni vprašanji,
kdaj in kako vstavljati. Rešitev, ki jo predlagamo, je nekakšna kombinacija med
eno- in dvokoračnim algoritmom CDT. Postopek uporablja paradigmo prebiranja z
uporabo napredujoče fronte. Algoritem bomo opisali v vrstnem redu izvajanja:

   • inicializacija,

   • prebiranje in

   • finalizacija.


                                        44
POGLAVJE 4. PREBIRNI ALGORITEM CDT                                                             45


4.1      Inicializacija
Stalen strošek prebirnih algoritmov je faza inicializacije, katere osnovna naloga je
priprava podatkov tako, da algoritem lahko prične s prebiranjem. Obvezen korak
je ureditev geometrijskih objektov glede na izbran način prebiranja. Pri nas gre
za drsenje prebirne premice po ravnini, zato je najenostavneje, če točke uredimo
naraščajoče v smeri ene izmed koordinatnih osi (v našem primeru smo izbrali
koordinato y). A ker omejena Delaunayeva triangulacija poleg množice točk na
vhodu prejme še množico vnaprej definiranih robov oz. ravninski graf G = {P, Ec },
moramo pri urejanju točk paziti, da ohranimo prvotne robove. Gre za povsem
implementacijski problem, saj so robovi zaradi varčnosti prostora na disku podani
s parom oglišč, ki hranijo položaj točke v P . Pri urejanju točk le-te "premečemo",
zato moramo s preprosto preslikavo po ali med urejanjem točk osvežiti tudi robove
Ec , da ohranimo prvotno sliko.


    Vsak rob iz Ec je definiran kot eij = pi pj , kjer sta pi ,pj ∈ P . Zaradi praktičnega
razloga robove usmerimo, tako da je oglišče roba, ki ga prebirna premica obišče prej,
pri poimenovanju na prvem mestu, oglišče roba, ki ga premica obišče kasneje, pa na
drugem mestu. Točko pi imenujemo začetna točka roba in točko pj končna točka.
Če imamo opravka z vodoravnim robom, za začetno oglišče vzamemo tisto, katere
točka ima manjšo koordinato x. Za rob pi pj velja:

                               yi < yj ali yi = yj in xi < xj .

    Pri pripravi podatkov vsaki točki pi priredimo množico robov Ei , ki vsebuje vse
tiste robove, ki se končajo v točki pi (pi je končna točka roba, torej vse robove
oblike px pi , kjer je x indeks začetne točke). Poglejmo primer na sliki 4.1. Točka p0
predstavlja začetno oglišče robov e0,5 in e0,8 . Ker se p0 nikjer ne pojavi kot končno
oglišče, je njena E0 ={}. Prazne so tudi množice E1 , E2 , E4 in E6 . Nasprotno velja za
točke p3 (E3 ={e1,3 , e2,3 }), p5 (E5 ={e0,5 }), p7 (E7 ={e5,7 ,e6,7 }) in p8 (E8 ={e0,8 ,e5,8 }).
POGLAVJE 4. PREBIRNI ALGORITEM CDT                                                   46




             Slika 4.1: Točke in robovi po urejanju v fazi inicializacije.

   Zadnji korak inicializacije prebirnega algoritma za navadno DT v fazi
inicializacije ustvari še prvi trikotnik, s katerim zgradi začetno napredujočo fronto in
začetno spodnjo konveksno lupino. Glede na položaj prvih k točk (k ≥ 3) je možnih
več začetnih konfiguracij, ki so prikazane v prejšnjem poglavju (slika 3.14). Če si ob
vseh teh primerih poskušamo predstavljati še robove, je različnih situacij še veliko
več. Zato uvedemo rešitev, ki spretno zaobide inicializacijsko raznovrstnost tako, da
vpeljemo umetni začetni trikotnik, kot kaže slika 4.2. Ustvarimo dve umetni točki
p−1 in p−2 , ki ležita levo oz. desno od skrajne leve oz. skrajne desne točke iz množice
P , njuna koordinata y pa je manjša od najnižje točke p0 . Koordinate določimo po
naslednji formuli:


                             p−1 = (xmin − δx , ymin − δy )

                             p−2 = (xmax + δx , ymin − δy )

                                δx = 0.3(xmax − xmin )

                                δy = 0.3(ymax − ymin )
POGLAVJE 4. PREBIRNI ALGORITEM CDT                                                47




                       Slika 4.2: Tvorba velikega trikotnika.

   Umetni trikotnik se tekom triangulacije ne spreminja, saj algoritem legalizacije,
ki ga uporabljamo za vzdrževanje Delaunayevega pravila v fazi prebiranja, v umetni
trikotnik ne poseže. Tudi vse trikotnike, ki jih tvorimo s pomočjo umetnih točk
p−1 in p−2 , v legalizaciji preskočimo. Z umetnim trikotnikom na enostaven in vselej
enak način tvorimo začetno napredujočo fronto F = {p−1 , p0 , p−2 }. Na ta način
smo potencialno obravnavno zaporedja kolinearnih točk prenesli v fazo prebiranja,
kjer niso deležne posebne pozornosti. Z vpeljavo začetnega umetnega trikotnika
pridobimo tudi pri prebiranju, saj se zmanjša število različnih obravnav točke.


   Z uvedbo velikega začetnega trikotnika tudi nekoliko izgubimo, ker ne gradimo
spodnje konveksne lupine, vendar so rezultati pokazali, da je ta strošek zanemarljiv.



4.2     Prebiranje
Osrednji del algoritma predstavlja prebiranje oz. drsenje prebirne premice po ravnini
v smeri naraščanja koordinate y. Na svoji poti naleti na dve vrsti dogodkov:

   • dogodek točke nastopi takrat, ko se premica dotakne točke pi (s točko pi
      ustvarimo nov trikotnik in ga dodamo v triangulacijo);

   • dogodek roba nastopi takrat, ko se premica dotakne točke pj , kjer pj
POGLAVJE 4. PREBIRNI ALGORITEM CDT                                                48


     predstavlja končno točko roba pi pj (triangulacijo preuredimo tako, da rob pi pj
     predstavlja stranico trikotnikov triangulacije).

   Dogodka sta med seboj povezana. Vsak dogodek roba je hkrati dogodek točke,
obratna implikacija ne velja. Pravimo, da dogodek roba sledi dogodku točke, če
točka predstavlja končno točko oglišča roba, sicer gre le za navaden dogodek točke.


   Izpis 3 prikazuje ogrodje prebiranja. Glavna zanka obravnava dogodke točk, kjer
v trenutno triangulacijo T vstavimo obiskano točko pi . Nato preverimo, če je točki
pi pripadajoč seznam robov Ei prazen. Če ni prazen, notranja zanka poskrbi, da
obravnavamo vsak rob e ∈ Ei . Ko v triangulacijo T vstavimo vse robove točke pi ,
izvedemo še hevristiki za glajenje napredujoče fronte.


Izpis 3 Ogrodje prebirnega algoritma za CDT
procedure Prebiranje(P)
   for i := 1 to size(P ) do
      pi = P [i];
      T := VstaviTočko(pi , T );
      if size(Ei ) > 0 then
          for j := 1 to size(Ei ) do
             e := Ei [j];
             T := VstaviRob(e, T );
      IzvediHevristiko1();
      IzvediHevristiko2();



   Preden nadaljujemo z natančnim opisom postopkov vstavljanja točk in robov, si
poglejmo lastnosti in implementacijo napredujoče fronte.
POGLAVJE 4. PREBIRNI ALGORITEM CDT                                                    49


4.2.1     Napredujoča fronta in podatkovne strukture

Napredujoča fronta (krajše fronta) F predstavlja zgornjo mejo trenutne triangulacije
in s tem mesto dodajanja novih trikotnikov.            Njena osnovna naloga je, da
vstavljajoči točki poišče najbližje ležeči rob, s katerim bomo zgradili nov trikotnik.
Geometrijska oblika fronte je lomljenka, sestavljena iz robov mejnih trikotnikov
(slika 4.3). Trikotniške robove, ki ležijo na napredujoči fronti, imenujemo rob fronte,
točkam pa pravimo točke fronte. Fronta omogoča dostop do mejnih trikotnikov,
ki jih potrebujemo pri vzdrževanju sosednostnih povezav vstavljenih trikotnikov s
trikotniki ob fronti.


   Napredujoča fronta je enodimenzionalna podatkovna struktura, katere ključ
iskanja je koordinata x, ki se skriva znotraj točke pi (slika 4.3). Točke fronte
so urejene, kar je idealno za hitro iskanje. Vsaka točka fronte hrani dva osnovna
podatka, to sta oglišče fronte, ki predstavlja točko pi , in trikotnik ti , ležeč ob robu
fronte pi pi+1 . Tako imamo dovolj informacij, da lahko tvorimo nov trikotnik in ga
povežemo z ustreznim trikotnikom dane triangulacije. Puščice na sliki predstavljajo
kazalec na trikotnik, ležeč ob robu fronte (trikotnik ti na sliki). Ko v fronto vstavimo
novo točko p, najprej poiščemo rob fronte tako, da vstavljajoči točki poiščemo
najbližjo točko pc , s pomočjo katere najdemo rob fronte (to je lahko bodisi rob
pc−1 pc bodisi ec,c+1 . Z novim trikotnikom fronto osvežimo, zato moramo obvezno
osvežiti kazalce na trikotnike. Ker pri iskanju uporabimo le koordinato x točke p,
govorimo o projekciji točke p na fronto.


   Žalik je fronto implementiral kot kombinacijo sekljalne tabele in dvojno
povezanega dinamičnega seznama, ki jo je poimenoval preprost seznam s
preskakovanjem (angl. simple skip-list). Takšno implementacijo smo izbrali tudi
mi. Alternativa je uporaba uravnoteženih dvojiških iskalnih dreves, kot sta drevo
AVL ali rdeče-črno drevo ali ena izmed izvedb seznamov s preskakovanjem. Njihovo
POGLAVJE 4. PREBIRNI ALGORITEM CDT                                                 50




        Slika 4.3: Napredujoča fronta in osnovni nivo podatkovne strukture.

uporabnost je pokazal Zadravec s sodelavci [87, 88].




4.2.2     Dogodek točke

Ob dogodku točke z iskanjem v podatkovni strukturi napredujoče fronte poiščemo
ustrezen rob fronte. Projekcija točke pi lahko pade na različne dele fronte, situacije
so naslednje [92]:

   • Sredinski primer: projekcija točke pi pade na rob fronte;

   • Levi primer: projekcija točke pi pade na točko fronte;

   • Robni primer: gre za posebno situacijo sredinskega primera. Točka pi se nahaja
      na robu fronte.

   Sredinski primer (slika 4.4a) obravnavamo tako, da zgradimo nov trikotnik       l,r,i

(slika 4.4b) in osvežimo fronto tako, da vsebuje vstavljeno točko pi . Osvežimo tudi
kazalec na trikotnik v točki pl . Da zadostimo Delaunayevemu pravilu, pokličemo
postopek legalizacije (slika 4.4c).


   Levi primer (slika 4.5a) obravnava situacijo, kjer projekcija točke pi pade na
točko fronte. Ker vemo, da bo hevristika (opisana v nadaljevanju) zgradila dodaten
POGLAVJE 4. PREBIRNI ALGORITEM CDT                                                       51


trikotnik, lahko to storimo že zdaj. Zgradimo dva nova trikotnika          l−,l,i   in   l,r,i

(slika 4.5b). Točko pl bi sicer morali odstraniti iz fronte, a je hitreje, če točko pl le
zamenjamo s točko pi ter osvežimo kazalec na trikotnik v točki pl− . Za oba nova
trikotnika pokličemo legalizacijo.
Robni primer, kjer točka pi leži neposredno na robu fronte, razdelimo, točko pi pa
vstavimo v fronto.


   Pri algoritmu klasične DT moramo obravnavati tudi situaciji, kjer projekcija
točke pi zgreši napredujočo fronto (pade levo oz. desno od F). Omenjeni situaciji
za razliko od zgoraj naštetih zahtevata večji poseg v podatkovne strukture, saj
vstavljanje točke spremeni tako napredujočo fronto kot tudi spodnjo konveksno
lupino. Zaradi vpeljave začetnega umetnega trikotnika se situacijama izognemo.
Umetni trikotnik namreč zagotavlja, da vsaka projekcija fronto vselej zadene.


   Po končanem vstavljanju pokličemo hevristični funkciji za preprečevanje
nastajanja zarez in globeli. Postopek je enak kot v prebirnem algoritmu DT (glej
podpoglavje 3.2.1.3 in [92]).


4.2.3     Dogodek roba

Dogodek roba poskrbi, da v triangulacijo na zahtevano mesto vstavimo vse
omejujoče robove. Dogodek roba sledi dogodku točke pi , če seznam robov točke
Ei ni prazen. Točka pi je torej končna točka enega ali več omejujočih robov ex,i =
px pi , kjer px predstavlja začetno točko poljubnega roba iz Ei (takšen primer vidimo
na sliki 4.7). Če imamo opravka z vstavljanjem več robov hkrati, robove vstavimo
enega za drugim. Vstavljajoč rob bomo zaradi preglednosti označili z e, njegovo
začetno oglišče pa naj predstavlja točka pj (e =pj pi ). Zaradi različnih preverjanj
vpeljemo vektor − , ki je obrnjen v nasprotni smeri roba e in ga definiramo kot
                 →
                 ve
→ = pj − pi .
−
ve
POGLAVJE 4. PREBIRNI ALGORITEM CDT                                                 52




Slika 4.4: Sredinski primer: projekcija točke pade na rob fonte (a), tvorba trikotnika
(b) in legalizacija (c).



   Načine vstavljanja robov v triangulacijo smo že opisali.          Odločili smo se
za implementacijo postopka vstavljanja robov z brisanjem. Ideja vstavljanja je
preprosta - v triangulaciji odstranimo vse Delaunayeve robove (in trikotnike), ki jih
rob e preseka, nato pa območje ob e ponovno trianguliramo, pri tem pa upoštevamo
Delaunayevo pravilo.       Rob e označimo kot stalen in postane del končne CDT .
Če se spomnimo dvokoračnih postopkov za CDT, vidimo, da potrebujemo iskalno
podatkovno strukturo že zaradi dostopa do oglišč roba e. Prednost našega pristopa
je sprotnost vstavljanja, kar s pridom izkoristimo. Ko v triangulacijo vstavimo točko
pi , ki ji sledi dogodek roba e, končnega oglišča roba sploh ni potrebno iskati.


   Vstavljanje robov sicer krši osnovno načelo prebirnih algoritmov, ki pravi, da
je del preiskane množice podatkov že del končne rešitve, saj bomo ustvarjeno
triangulacijo prerešetali, a nič zato. Že osnovni Žalikov pristop je izjema. Za vsakim
novo tvorjenim trikotnikom sledi legalizacija, značilna za inkrementalne metode, ki
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted
Un encrypted

More Related Content

Featured

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by HubspotMarius Sescu
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTExpeed Software
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 

Featured (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

Un encrypted

  • 1. UNIVERZA V MARIBORU FAKULTETA ZA ELEKTROTEHNIKO, RAČUNALNIŠTVO IN INFORMATIKO INŠTITUT ZA RAČUNALNIŠTVO Vid Domiter ALGORITMI TRIANGULACIJE S STRATEGIJO PREBIRANJA Doktorska disertacija Maribor, marec 2009
  • 2. Avtor: Vid Domiter Naslov: Algoritmi triangulacije s strategijo prebiranja UDK: 004.925.021(043.3) Ključne besede: algoritmi, računalniška geometrija, računalniška grafika, CAD, trikotniške mreže, triangulacija, rekonstrukcija površja Število izvodov: 8 Oblikovanje: Vid Domiter Lektura: Branimir Domiter Tisk: Laboratorij za geometrijsko modeliranje in algoritme multimedijev Vezava: Lazar Biro
  • 3. ZAHVALA: Za strokovno pomoč in vsestransko podporo pri doktorskem študiju se zahvaljujem mentorju, red. prof. dr. Borutu Žaliku. Zahvaljujem se tudi bratu, mami in očetu, ki so mi ves čas nesebično stali ob strani in prenašali moje muhe. Prav tako se zahvaljujem vsem sodelavcem, ki so mi pri študiju kakorkoli pomagali. Nikakor pa ne smem pozabiti na prijatelje, ob katerih sem se sprostil in pozabil na delo. Vsem najlepša hvala!
  • 4. Algoritmi triangulacije s strategijo prebiranja UDK: 004.925.021(043.3) Ključne besede: algoritmi, računalniška geometrija, računalniška grafika, CAD, prebiranje, trikot- niške mreže, triangulacija, rekonstrukcija površja Povzetek: Osnovni cilj doktorske naloge je razviti lasten postopek omejene Delaunayeve triangulacije z metodo prebiranja, ki bo vsaj enako učinkovit kot do sedaj razviti postopki in pokazati, da je s prebiranjem možno rešiti tudi veliko težjo nalogo rekonstrukcije površja v 3D. V nalogi najprej definiramo klasično in omejeno Delaunayevo triangulacijo, opišemo obstoječe postopke, nato pa se osredotočimo na lasten postopek omejene Delaunayeve triangulacije. Podrobneje opišemo njegovo delovanje in razširitve, ki vodijo k učinkovitemu algoritmu omejene Delaunayeve triangulacije. Temelj algoritma je pomikanje napredujoče fronte s prebirno premico in razvoj hevristik, ki poskrbijo za uspešno vodenje napredujoče fronte in hkrati minimizirajo število menjav trikotnikov. Nato preidemo na problem rekonstrukcije površja, kjer podamo pregled sorodnih raziskav. Dva postopka podrobneje opišemo, temu pa sledi opis lastnega postopka rekonstrukcije površja s prebiranjem. Algoritem temelji na širitvi napredujočih front s pomikanjem prebirne ravnine in hevristikah za uspešno upravljanje s frontami. Na koncu analiziramo oba razvita algoritma in potrdimo zastavljeni hipotezi.
  • 5. Triangulation algorithms using a sweeping strategy UDK: 004.925.021(043.3) Key words: algorithms, computational geometry, computer graphics, CAD, sweeping, triangular mesh, triangulation, surface reconstruction Abstract: The main goal of our disertation is implementation of a new constrained Delaunay triangulation algorithm based on the sweeping strategy, which is at least as efficient as the existing solutions. Another aim is to show that using the same algorithmic paradigm in three dimensions can solve a much harder problem, namely a surface reconstruction from a point cloud. We start by introducing the sweeping strategy. After that, we define Delaunay and constrained Delaunay triangulation, which is followed by a brief survey of the existing algorithms. Then we describe our own sweep-line algorithm in detail, where constrained triangulation is built by propagating the advancing front using heuristics. The apployment of heuristcs and constraining edges insertion at the same time with their end-vertices importanly increases the speed of the algorithm. In the second part of our disertation we introduce the problem of surface reconstruction and make an overview of the previous work. We describe our own implementation based on the sweeping strategy, where the surface is built by propagating the advancing fronts with the sweep-plane. We describe heuristics for managing the fronts in detail. Finally, we summarize our contributions and confirm the proposed theses.
  • 6. Seznam kratic AF - napredujoča fronta (angl. advancing front) BPA - Bernardinijev algoritem z vrtenjem krogle (angl. Ball-pivoting algorihtm) CDT - omejena Delaunayeva triangulacija (angl. constrained Delaunay triangulation) DAG - usmerjen aciklični graf (angl. directed acyclic graph) DT - Delaunayeva triangulacija (angl. Delaunay triangulation) F-SL - dvokoračni algoritem CDT s prebirnim Fortuneovim algoritm DT GIS - geografski informacijski sistem (angl. geographical information system) LFS - velikost lokalne značilnosti (angl. local feature size) LS-D&C - dvokoračni algoritem CDT Leeja in Schachterja s strategijo "deli in vladaj" M-INC - Mückejev dvokoračni algoritem CDT MAT - transformacija srednje osi (angl. medial axis transform) PSLG - ravninski premočrtni graf (angl. planar straight-line graph) SL - naš prebirni algoritem CDT STL - standarna knjižnica šablon (angl. standard template library)
  • 7. Seznam oznak ijk - trikotnik z oglišči pi , pj in pk βi - i-ti odsek parabolične krivulje (algoritem Fortune) A(T ) - vektor kotov triangulacije T Bc,ρ - krogla s središčem v točki c s polmerom ρ Bi - i-ti trak pri delitvi ravnine c - točka, ki predstavlja središče krogle C - seznam točk od p oddaljenih za največ r Ci - seznam točk od p oddaljenih za največ r, ki pripadajo fronti Fi Cij - seznam točk j-tega intervala Ci CDT , CDT (P ) - omejena Delaunayeva triangulacija oz. CDT nad P dpow - razdalja moči, dpow (px , Bc,ρ ) = d2 (c, px ) − ρ2 dist(p, q) - evklidska razdalja med točkama p in q Dx - dogodek zaprtja (DC ), odprtja (DO ), združevanja (DJ ) in deljenja (DD ) D - usmerjen aciklični graf (algoritem Guibas, Knuth, Sharir) DT , DT (P ) - Delaunayeva triangulacija oz. DT nad P eij - rob eij = pi pj ep - dogodkovna točka ep = (Dx , p, F, T ) Ec - množica omejitvenih robov Ei - seznam robov, ki se končajo v točki pi
  • 8. F - seznam front F, Fi - napredujoča fronta G - vhodni ravninski graf G = {P, Ec } v algoritem CDT K - krožnica KL, KL(P ) - konveksna lupina oz. konveksna lupina nad P LF S(p) - funkcija, ki točki p površja priredi najbližjo razdaljo do srednje osi O - množica objektov na ravnini p, pi - točka iz P s koordinatama (x, y) oz. (xi , yi ) pi pj - rob med točkama pi in pj P - vhodna množica točk na ravnini ali v prostoru Q - problem, ki ga rešujemo s prebiranjem Qe,L - podregija regije Re na levi strani roba e Qe,R - podregija regije Re na desni strani roba e r - polmer kroga Re - regija trikotnikov triangulacije neposredno ob robu e RT - drevo vsebnostnih relacij napredujočih front Fi S - ravnina z vsemi točkami S - originalno površje objekta S - aproksimacija površja S t, ti - trikotnik triangulacije T - seznam trikotnikov t T , T (P ) - triangulacija oz. triangulacija nad P Ti - triangulacija nad točkami v traku Bi U - množica umetnih točk V or(P ) - Voronoijev diagram nad P
  • 9. Kazalo Seznam slik ix Seznam tabel xiv 1 Uvod 1 1.1 Opredelitev problema . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 Cilji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.3 Struktura disertacije . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2 Prebirna paradigma 5 3 Algoritmi Delaunayeve in omejene Delaunayeve triangulacije 9 3.1 Ravninska triangulacija . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3.2 Delaunayeva triangulacija . . . . . . . . . . . . . . . . . . . . . . . . 12 3.2.1 Algoritmi Delaunayeve triangulacije . . . . . . . . . . . . . . . 16 3.2.1.1 Inkrementalni algoritem Guibas, Knuth in Sharir . . 19 3.2.1.2 Prebirni algoritem Fortune . . . . . . . . . . . . . . . 23 3.2.1.3 Prebirni algoritem Žalik . . . . . . . . . . . . . . . . 25 3.3 Omejena Delaunayeva triangulacija . . . . . . . . . . . . . . . . . . . 31 3.3.1 Algoritmi omejene Delaunayeve triangulacije . . . . . . . . . . 33 3.3.2 Dvokoračni postopki CDT . . . . . . . . . . . . . . . . . . . . 34 3.3.2.1 Vstavljanje robov . . . . . . . . . . . . . . . . . . . . 34 3.3.2.2 Vstavljanje robov z brisanjem . . . . . . . . . . . . . 35 v
  • 10. KAZALO vi 3.3.2.3 Vstavljanje robov z zamenjavami . . . . . . . . . . . 36 3.3.3 Enokoračni algoritmi CDT . . . . . . . . . . . . . . . . . . . . 39 3.3.3.1 Algoritem CDT Chew . . . . . . . . . . . . . . . . . 39 4 Prebirni algoritem omejene Delaunayeve triangulacije 44 4.1 Inicializacija . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 4.2 Prebiranje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 4.2.1 Napredujoča fronta in podatkovne strukture . . . . . . . . . . 49 4.2.2 Dogodek točke . . . . . . . . . . . . . . . . . . . . . . . . . . 50 4.2.3 Dogodek roba . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 4.2.3.1 Iskanje prvega trikotnika . . . . . . . . . . . . . . . . 54 4.2.3.2 Brisanje sekanih trikotnikov . . . . . . . . . . . . . . 55 4.2.3.3 Triangulacija praznega območja . . . . . . . . . . . . 58 4.3 Finalizacija . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 4.4 Časovna analiza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 4.5 Rezultati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 5 Rekonstrukcija površja iz oblaka točk 67 5.1 Uvod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 5.1.1 Vzorčenje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 5.2 Sorodne raziskave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 5.2.1 Algoritmi z delitvijo prostora . . . . . . . . . . . . . . . . . . 71 5.2.1.1 Ploskovno usmerjena izbira celic . . . . . . . . . . . 72 5.2.1.2 Prostorsko usmerjena izbira celic . . . . . . . . . . . 74 5.2.2 Rekonstrukcija površja s funkcijo razdalje . . . . . . . . . . . 76 5.2.3 Rekonstrukcija površja z ukrivljanjem . . . . . . . . . . . . . . 77 5.2.4 Inkrementalni algoritmi za rekonstrukcijo površja . . . . . . . 78 5.2.5 Gručenje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 5.3 Algoritem PowerCrust . . . . . . . . . . . . . . . . . . . . . . . . . . 80 5.3.1 Algoritem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
  • 11. KAZALO vii 5.4 Algoritem BPA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 5.4.1 Preiskovanje prostora . . . . . . . . . . . . . . . . . . . . . . . 88 5.4.2 Izbira semenskega trikotnika . . . . . . . . . . . . . . . . . . . 89 5.4.3 Vrtenje krogle . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 5.4.4 Operatorja združevanja in lepljenja . . . . . . . . . . . . . . . 91 6 Prebirni algoritem za rekonstrukcijo površja 95 6.1 Gradniki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 6.1.1 Napredujoča fronta . . . . . . . . . . . . . . . . . . . . . . . . 97 6.1.2 Hierarhično vodenje front . . . . . . . . . . . . . . . . . . . . 99 6.1.3 Iskanje najbližjih točk . . . . . . . . . . . . . . . . . . . . . . 100 6.2 Osnovne operacije algoritma . . . . . . . . . . . . . . . . . . . . . . . 103 6.2.1 Odprtje fronte . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 6.2.2 Dodajanje trikotnika . . . . . . . . . . . . . . . . . . . . . . . 104 6.2.2.1 Uravnavanje fronte . . . . . . . . . . . . . . . . . . . 105 6.2.3 Zaprtje fronte . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 6.3 Potek algoritma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 6.3.1 Filtriranje bližnjih točk . . . . . . . . . . . . . . . . . . . . . . 109 6.3.2 Vstavljanje točke v eno fronto . . . . . . . . . . . . . . . . . . 110 6.3.2.1 Delitev fronte . . . . . . . . . . . . . . . . . . . . . . 111 6.3.3 Vstavljanje točk v več front . . . . . . . . . . . . . . . . . . . 114 6.3.4 Dogodkovne točke . . . . . . . . . . . . . . . . . . . . . . . . . 115 6.3.4.1 Dopolnitev odprtja/zaprtja . . . . . . . . . . . . . . 120 6.3.4.2 Dopolnitev delitve/združitve . . . . . . . . . . . . . . 120 6.3.5 Razširitev opisa napredujoče fronte z delitvijo robov . . . . . . 121 6.3.6 Krpanje lukenj . . . . . . . . . . . . . . . . . . . . . . . . . . 123 6.4 Analiza časovne zahtevnosti . . . . . . . . . . . . . . . . . . . . . . . 123 6.5 Rezultati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 7 Zaključek 126
  • 12. KAZALO viii Literatura 130 Življenjepis 141 Bibliografija 142
  • 13. Slike 2.1 Slikovni prikaz prebiranja. . . . . . . . . . . . . . . . . . . . . . . . . 7 2.2 Statusna struktura v trenutnem stanju prebiranja. . . . . . . . . . . . 7 3.1 Ravninska triangulacija. . . . . . . . . . . . . . . . . . . . . . . . . . 10 3.2 Optimizacija minimalnega notranjega kota z zamenjavo roba. . . . . . 12 3.3 Nelegalen rob. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.4 Nelegalna (a) in Delaunayeva triangulacija (b). . . . . . . . . . . . . . 16 3.5 Voronoijev diagram in Delaunayeva triangulacija. . . . . . . . . . . . 17 3.6 Določitev velikega trikotnika. . . . . . . . . . . . . . . . . . . . . . . 20 3.7 Vstavljanje točke tvori bodisi tri (a) bodisi štiri trikotnike (b). . . . . 21 3.8 Gradnja podatkovne strukture D: 1. del. . . . . . . . . . . . . . . . . 22 3.9 Gradnja podatkovne strukture D: 2. del. . . . . . . . . . . . . . . . . 23 3.10 Predstavitev delovanja algoritma s stožci, postavljenimi nad točkami in prebirno ravnino π. . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.11 Dogodek točke: na krivulji paraboličnih odsekov se pojavi nov odsek. 26 3.12 Dogodek krožnice: parabolični odsek izgine iz krivulje paraboličnih odsekov. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.13 Primer vstavljanja točke v dano triangulacijo. . . . . . . . . . . . . . 27 3.14 Primeri začetnih konfiguracij v fazi inicializacije. . . . . . . . . . . . . 28 3.15 Prva hevristika preveri kot s sosednjim robom fronte (a) in vstavi nov trikotnik (b) ter nadaljuje, dokler je kot < π/2 (c). . . . . . . . . . . 29 3.16 Druga hevristika odkrije korita (a) in jih zapolni s trikotniki (b). . . . 30 ix
  • 14. SLIKE x 3.17 Vhodni ravninski graf (a), Delaunayeva (b) in omejena Delaunayeva triangulacija (c). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 3.18 CDT , vidnost in legalizacija. . . . . . . . . . . . . . . . . . . . . . . . 33 3.19 Vstavljajoč rob e in regija vpliva Re roba e (a) ter mnogokotnika Qe,L in Qe,R (b). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 3.20 Triangulacija levega mnogokotnika Qe,L (a-c) in triangulacija desnega mnogokotnika (d). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.21 Prikaz vstavljanja in zamenjav robov. Odstranitev točke p1 (b) zamenjava zadnjega roba (c). . . . . . . . . . . . . . . . . . . . . . . 38 3.22 Razdelitev prostora na trakove, v vsak trak po ena točka. . . . . . . . 39 3.23 Ponazoritev traku brez triangulacije (a) in razdelitev v regije (b). . . 40 3.24 Združitev dveh regij . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 3.25 Združevanje in povezovanje ob vračanju. . . . . . . . . . . . . . . . . 43 4.1 Točke in robovi po urejanju v fazi inicializacije. . . . . . . . . . . . . 46 4.2 Tvorba velikega trikotnika. . . . . . . . . . . . . . . . . . . . . . . . . 47 4.3 Napredujoča fronta in osnovni nivo podatkovne strukture. . . . . . . 50 4.4 Sredinski primer: projekcija točke pade na rob fonte (a), tvorba trikotnika (b) in legalizacija (c). . . . . . . . . . . . . . . . . . . . . . 52 4.5 Levi primer: projekcija točke zadene točko fronte (a) in tvori dva trikotnika (b). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 4.6 Robni primer: projekcija točke zadene rob fronte (a) in razdeli priležni trikotnik (b). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 4.7 Po točki pi vstavimo vse njene robove. . . . . . . . . . . . . . . . . . 54 4.8 Iskanje prvega trikotnika. . . . . . . . . . . . . . . . . . . . . . . . . . 55 4.9 Sprehod po trikotnikih ob vstavljanju roba (a) v prvem koraku vrne regiji Qe,L in Qe,R (b) in rezultat trianguliranja (c). . . . . . . . . . . 57 4.10 Sprehod po točkah fronte (a) in triangulacija regije Re (b). . . . . . . 58
  • 15. SLIKE xi 4.11 Mešani sprehod po točkah fronte (a), rezultirajoči regiji Qe,L in Qe,R (b) in triangulacija (c). . . . . . . . . . . . . . . . . . . . . . . . . . . 58 4.12 Triangulacija regije Qe . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 4.13 Finalizacija zbriše odvečne trikotnike (a) in zgradi konveksno lupino (b). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 4.14 Graf odvisnosti hitrosti izvajanja od števila omejitev. . . . . . . . . . 64 4.15 Primer vhoda pri katastrskih podatkih (a) in rezultat triangulacije (b). 65 4.16 Primer vhoda pri triangulaciji površja (a) in rezultat triangulacije (b). 66 5.1 Proces izgradnje površja od zajemanja vzorcev do rezultata pro- gramske rekonstrukcije. . . . . . . . . . . . . . . . . . . . . . . . . . . 69 5.2 Primer površja z mejo (a) in vodotesnega površja (b). . . . . . . . . . 70 5.3 Vzorčenje po kriteriju vzorčne poti (a) in rekonstruiran objekt s slabo rekonstruiranim robom (b). . . . . . . . . . . . . . . . . . . . . . . . 71 5.4 Kriterij LFS in srednja os (modra barva)(a) ter rekonstruirano površje (b). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 5.5 Črna krivulja prikazuje površje, modra srednjo os in krožnice transformacijo srednje osi. . . . . . . . . . . . . . . . . . . . . . . . . 81 5.6 Voronoijeva celica točke p, pola p− in p+ ter normala površja v točki p. 82 5.7 Diagram moči (polne črte) in dualna regularna triangulacija (črtkane črte). Krogi predstavljajo polarne kroge v 2D. . . . . . . . . . . . . . 83 5.8 Objekt in približek srednje osi (vir: Amenta). . . . . . . . . . . . . . 84 5.9 Polarna kroga sosednjih celic in kot α med presečiščem. . . . . . . . . 85 5.10 Notranje polarne krogle objekta (a) in skorja moči kot rekonstruirano površje (b) (vir: Amenta). . . . . . . . . . . . . . . . . . . . . . . . . 86 5.11 Delovanje algoritma BPA v 2D pri dovolj gostem vzorčenju (a), pri premalo gostem vzorčenju (b) in pri preveliki ukrivljenosti površja (c). 88 5.12 Vrtenje krogle okrog roba pi pj (pravokoten na sliko) najde točko pk , s katero ustvarimo nov trikotnik. . . . . . . . . . . . . . . . . . . . . 91
  • 16. SLIKE xii 5.13 Operator združevanja doda trikotnik ijk in osveži fronto. . . . . . . 92 5.14 Operator lepljenja v različnih situacijah. . . . . . . . . . . . . . . . . 93 6.1 Predogled delovanja algoritma na krogli (a) in obroču (b, c). . . . . . 96 6.2 Neaktivne (a) in aktivne fronte (b). . . . . . . . . . . . . . . . . . . . 98 6.3 Zanki F0 in F2 ter prstan F1 . Puščice kažejo orientacijo front. . . . . 99 6.4 Gnezdenje front. S črno so označe zanke, z rdečo prstani, modra barva pa označuje fronto, ki jo vstavljamo. . . . . . . . . . . . . . . . 100 6.5 Predstavitev front z drevesom. Z modro je prikazana vstavljena fronta, puščica prikazuje iskanje, siva oglišča pa so tista, kjer smo izvajali vsebnostni test. . . . . . . . . . . . . . . . . . . . . . . . . . . 100 6.6 Iskalna struktura. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 6.7 Nastanek fronte (a in c), dodajanje točke v fronto (b) in odprtje fronte (d). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 6.8 Določanje vstavljanja. . . . . . . . . . . . . . . . . . . . . . . . . . . 105 6.9 Tvorba trikotnika pc ppc+ . . . . . . . . . . . . . . . . . . . . . . . . . 106 6.10 Tvorba trikotnika pc− ppc . . . . . . . . . . . . . . . . . . . . . . . . . 106 6.11 Tvorba trikotnikov pc− ppc in pc ppc+ . . . . . . . . . . . . . . . . . . . 107 6.12 Zaprtje fronte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 6.13 Vstavljanje trikotnikov s preverjanjem razdalj (a in b) in zaprtje fronte (c). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 6.14 Razdelitev točk na intervale (a) in odstranitev točk z upoštevanjem vidnosti (b). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 6.15 Priredna delitev fronte. . . . . . . . . . . . . . . . . . . . . . . . . . . 112 6.16 Podredna delitev fronte. . . . . . . . . . . . . . . . . . . . . . . . . . 112 6.17 Delitev fronte F0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 6.18 Združitev neaktivnih front kot odprtje. . . . . . . . . . . . . . . . . . 115 6.19 Združitev neaktivnih front ni mogoča zaradi kolinearnosti projekcij (a), zato tvorimo novo neaktivno fronto (b). . . . . . . . . . . . . . . 115
  • 17. SLIKE xiii 6.20 Priredna združitev . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 6.21 Podredna združitev. . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 6.22 Deljenje na primeru. . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 6.23 Združevanje na primeru. . . . . . . . . . . . . . . . . . . . . . . . . . 118 6.24 Dogodkovna točka ep (a) in vstavljanje znotraj dogodkovne točke (b). 119 6.25 S točko p prehitro zapremo fronto (a), zato z naslednjo točko p+ tvorimo novo fronto (b), ki gradi nepravilno površje naprej (c) in željen rezultat (d). . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 6.26 Primer napake, ko fronte ne najdemo (a), rezultat vstavljanja pa je nova fronta (b). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 6.27 Primer napake, ko najdemo napačno bližnjo točko, ki jo z vidnostjo odtranimo (a), rezultat pa je nova fronta (b). . . . . . . . . . . . . . . 122 6.28 Ob vstavljanju najdemo pomožno točko (a) in rezultat vstavljanja (b).122 6.29 Ob vstavljanju najdemo pomožno točko (a) in rezultat vstavljanja (b).122 6.30 Rekonstrukcija površja krogle (a), kapsul (b), obroča (c) in zajca (d) z algoritmom CRUST (levo) in z našim algoritmom (desno). . . . . . 125
  • 18. Tabele 4.1 Primerjava izvajalnih časov z obstoječimi algoritmi. . . . . . . . . . . . . 64 4.2 Izvajalni časi posameznih delov algoritma SL. . . . . . . . . . . . . . . . 64 6.1 Primerjava izvajalnih časov med našim algoritmom in algoritmom CRUST. 124 xiv
  • 19. Poglavje 1 Uvod 1.1 Opredelitev problema Ena temeljnih paradigem reševanja problemov v računalniški geometriji je prebirna paradigma, ki predstavlja enostavno prostorsko lokalizacijo reševanja problemov. Temelji na drsenju prebirnega objekta (ponavadi premice ali ravnine) skozi prostor urejenih podatkov v smeri drsenja in lokalno rešuje podproblem. Podrešitev doda k rešitvi, ki leži za prebirnim objektom glede na smer drsenja. Tehnika je bila velikokrat uporabljena pri reševanju dvodimenzionalnih problemov, v prostoru pa je njena uporaba redka. Eden izmed ravninskih problemov, ki ga lahko rešimo s prebiranjem, je triangulacija. Delaunayeva triangulacija je posebna skupina triangulacij, ki tvori optimalne trikotnike glede na minimalni kot trikotnikov. Področje Delaunayeve triangulacije predstavlja star problem računalniške geometrije, kjer je bilo do danes razvitih že ogromno algoritmov. Lahko bi rekli, da je problem že rešen. Teoretična zagotovila pravijo, da je možno Delaunayevo triangulacijo zgraditi iz skoraj vsake množice točk, vendar praksa doda še težnjo po optimalni porabi virov, kot sta procesorski čas in delovni pomnilnik. Tako razvijalci težijo k razvoju algoritmov z minimalnimi časi izvajanja in minimalno porabo delovnega pomnilnika. 1
  • 20. POGLAVJE 1. UVOD 2 Rešitve Delaunayeve triangulacije s prebiranjem so redke. Najbolj znan algoritem Delaunayeve triangulacije je Fortuneov prebirni algoritem, ki v osnovi tvori Voronoijev diagram [42], z njim pa posredno reši tudi Delaunayevo triangulacijo. Boljši algoritem, ki s prebiranjem neposredno tvori Delaunayevo triangulacijo, je razvil Žalik [92]. Njegov pristop zaradi hitrih izvajalnih časov, majhne porabe prostora in manjše občutljivosti na porazdelitev vhodnih točk predstavlja dobro možnost za rešitev splošnejšega problema omejene Delaunayeve triangulacije. Uporaba omejene Delaunayeve triangulacija je zaradi splošnosti večja, najdemo pa jo v računalniški geometriji in v računalniški grafiki, inženirstvu ali v geografskih informacijskih sistemih [41, 56, 74]. Drug problem je rekonstrukcija površja iz oblaka točk. Tudi tukaj je bilo storjenega že veliko [66], vendar problem rekonstrukcije še ni dokončno rešen. Šele pred kratkim je dobil močno teoretično ozadje [4]. Vendar teorija drži le ob predpostavki, da predstavlja oblak točk dober vzorec. Splošen algoritem, s katerim bi lahko v praksi rekonstruirali površje iz prav vsakega oblaka točk, še ne obstaja. 1.2 Cilji Cilj, ki smo si ga zadali, je za omenjena problema razviti učinkovita in praktična postopka, temelječa na prebirni paradigmi. Prvi algoritem, ki ga želimo razviti, je algoritem omejene Delaunayeve triangulacije. Izhajali bomo iz Žalikovega algoritma Delaunayeve triangulacije [92], ki se je s kombinacijo prebiranja in napredujoče fronte izkazal za izjemno hitrega, varčnega in uspešnega pri različnih porazdelitvah vhodnih podatkov. Pokazali bomo, da je s prebirno tehniko možno zgraditi algoritem omejene Delaunayeve triangulacije, ki bo boljši ali vsaj primerljiv z obstoječimi postopki. Postavili smo naslednjo hipotezo:
  • 21. POGLAVJE 1. UVOD 3 Hipoteza 1: Prebirni algoritem omejene Delauneyeve triangulacije, ki uporablja napredujočo fronto in ustrezne hevristike, je pri enakomerno in neenakomerno porazdeljenih vhodnih podatkih v splošnem hitrejši od do sedaj znanih algoritmov omejene Delaunayeve triangulacije. Hipotezo bomo poskusili potrditi z izvajanjem algoritma na različno porazde- ljenih vhodnih podatkih, kjer se bomo osredotočili predvsem na realne podatke GIS. Opravili bomo primerjave izvajalnih časov z najpopularnejšimi tovrstnimi algoritmi. Drugi problem, ki ga bomo poskusili rešiti s prebirno paradigmo, je rekonstrukcija površja iz oblaka točk. Prepričani smo, da je z razširitvijo ideje za tvorbo Delaunayeve triangulacije možno zgraditi površje iz oblaka točk. Prava razširitev Delaunayeve triangulacije v 3D je sicer Delaunayeva tetraedrizacija, vendar je bolj zanimiv problem rekonstrukcije površja, ki predstavlja njeno podmnožico - trikotnike tetraedrov, ki ležijo na površju objekta. Med skupinami postopkov za rekonstrukcijo površja ne zasledimo algoritmov, temelječih na prebirni paradigmi. Druga hipoteza se glasi: Hipoteza 2: Z ustreznimi hevristikami za nadzor napredujočih front je možno sestaviti algoritem s prebiranjem za rekonstrukcijo površja iz oblaka točk. Hipotezo bomo poskusili potrditi z razvojem prebirnega rekonstrukcijskega algoritma, ki ga bomo preverili na različnih primerih.
  • 22. POGLAVJE 1. UVOD 4 1.3 Struktura disertacije Disertacijo bomo razdelili v sedem poglavij. Po uvodnem poglavju bo sledilo poglavje, ki ga bomo namenili predstavitvi prebirne paradigme. Tretje poglavje bo vsebovalo teoretično izpeljavo Delaunayeve in omejene Delaunayeve triangulacije, pregled sorodnih raziskav in opise izbranih triangulacijskih algoritmov. V četrtem poglavju bomo opisali lasten algoritem za omejeno Delaunayevo triangulacijo s prebiranjem. Peto poglavje predstavlja drugi del naše disertacije, kjer bomo napravili uvod v področje rekonstrukcije površja, ki mu bo sledil pregled obstoječih rešitev. V šestem poglavju bomo opisali lasten prebirni algoritem za rekonstrukcijo. V zadnjem sedmem poglavju bomo predstavili rezultate obeh razvitih algoritmov in potrdili ali zavrnili hipotezi. Sledil bo zaključek, v katerem bomo povzeli lastne prispevke, prav tako pa bomo podali smernice za nadaljevanje raziskave.
  • 23. Poglavje 2 Prebirna paradigma Prebirna paradigma ali krajše kar prebiranje (angl. sweeping)1 predstavlja eno pomembnejših tehnik pri reševanju geometrijskih problemov, zato si pristop zasluži svoje poglavje. Opis bomo povzeli po [57]. Pri prebirnih algoritmih na ravnini navidezna prebirna premica drsi po ravnini od dna proti vrhu in med svojo potjo rešuje zadan geometrijski problem. Med problemi, ki so bili rešeni s tehniko prebiranja, najdemo tvorbo Voronoijevega diagrama [42], Delaunayeve triangulacije [92], naš algoritem omejene Delaunayeve triangulacije [27], problem iskanja najbližjih objektov [13, 46], problem odstranjevanja skritih lic [76], izračun najkrajše poti [38] in še bi lahko naštevali. Tehnika je zelo priljubljena, zato jo najdemo v številnih knjigah o računalniški geometriji [65, 71, 73]. Predstavljajmo si množico objektov O na ravnini, pri katerih želimo odgovoriti na vprašanje Q. Z vodoravno premico, ki jo postavimo nad vse objekte, pričnemo drseti od zgoraj navdzol. Med drsenjem zberemo vse informacije objektov S, ki so bistvene, da lahko odgovorimo na vprašanje Q. Ko je prebirna premica pod vsemi objekti, lahko zgradimo končen odgovor na vprašanje Q. 1 tudi preiskovanje 5
  • 24. POGLAVJE 2. PREBIRNA PARADIGMA 6 Med prebiranjem moramo vzdrževati podmnožico objektov, ki jo prebirna premica preseka. Tem objektom pravimo tudi aktivni objekti. Ker se podmnožica objektov hitro spreminja, jo hranimo v dinamični podatkovni strukturi. Najpogosteje uporabljamo uravnotežena dvojiška iskalna drevesa. Podatkovno strukturo imenujemo statusna struktura (angl. status structure). Prav tako moramo vedeti, kdaj se bo status spremenil in kdaj lahko najdemo delce informacij za grajenje odgovora na Q. To se zgodi le v določenih položajih prebirne premice. Točke, v katerih se status spremeni, imenujemo dogodki (angl. events), ti pa so podani s koordinato y, saj smo na začetku predpostavili, da je naša prebirna premica vodoravna (v splošnem lahko prebirna premica poteka od katerikoli strani, odvisno od problema, ki ga rešujemo). Ker se premica premika le navzdol, moramo dogodke urediti glede na koordinato y. Podatkovni strukturi, ki hrani urejene dogodke, pravimo seznam dogodkov (angl. event list). Zdaj naša prebirna premica več ne drsi, temveč skače od dogodka do dogodka, kjer vsakič odstrani dogodek z največjo koordinato y. Prebirna premica zaključi svojo pot, ko iz seznama dogodkov odstrani vse dogodke. Premikanje prebirne premice predstavlja ogrodje prebiranja, ki je skupno vsem prebirnim algoritmom. Ključen korak prebirnega pristopa je obdelava dogodkov, ki je vezana na posamezen problem. Dva dogodka sta skoraj vedno prisotna: • ko se prebirna premica prvič dotakne objekta iz množice O ali ga prvič seka - objekt vstavimo v statusno strukturo (objekt je aktiven); • ko prebirna premica zapusti zadnjo točko objekta iz O - objekt odstranimo iz statusne strukture (objekt ni aktiven). S prebiranjem v ravnini lahko rešimo dvodimenzionalen geometrijski problem s pomočjo enodimenzionalnih dinamičnih podatkovnih struktur. Idejo lahko posplošimo za trodimenzionalen prostor, kjer skozi prostor drsimo s prebirno ravnino. Statusna struktura je v tem primeru dvodimenzionalna. Pristop prebiranja
  • 25. POGLAVJE 2. PREBIRNA PARADIGMA 7 a b c d e g f h i j Slika 2.1: Slikovni prikaz prebiranja. d e f g Slika 2.2: Statusna struktura v trenutnem stanju prebiranja. še ni tako razširjen v 3D, zato je njegova najpogostejša uporaba prebiranje s prebirno premico na ravnini. Izpis 1 prikazuje ogrodje prebiranja. Slika 2.1 prikazuje primer uporabe, kjer prebirno premico pomikamo od zgoraj navzdol. Modra barva na sliki predstavlja dele objektov, ki jih je prebirna premica že obiskala. V celoti so bili obiskani objekti a, b in c. V statusni strukturi se nahajajo objekti d, e, f in g (slika 2.2). Bližnji prihajajoči dogodki, ki spremenijo statusno strukturo, si sledijo v naslednjem vrstnem redu: • dno objekta d (odstranitev), • vrh objekta h (vstavitev),
  • 26. POGLAVJE 2. PREBIRNA PARADIGMA 8 • dno objekta e (odstranitev), • dno objekta g (odstranitev), • vrh objekta i (vstavitev). Izvedbe prebiranja so lahko tudi drugačne, npr. vrtenje prebirne premice okrog točke [23, 38] ali celo topološka črta namesto geometrijske premice [31]. Izpis 1 Ogrodje prebirnega algoritma 1. inicializiraj seznam dogodkov 2. inicializiraj statusno strukturo 3. Dokler seznam dogodkov ni prazen 4. izbriši dogodek z največjo y−koordinato iz seznama dogodkov 5. če je prebirna premica sekala (ali se dotaknila) novega objekta 6. Vstavi objekt v statusno strukturo 7. če prebirna premica več ne seka (ali se ne dotika) objekta 8. izbriši objekt iz statusne strukture 9. odgovori na vprašanje ali del vprašanja z uporabo statusne strukture 10. če je potrebno, dodaj nov dogodek v seznam dogodkov Implementacija prebirnih algoritmov ni zahtevna, če uporabimo obstoječo programsko kodo za uravnotežena iskalna drevesa, urejanje podatkov in osnovne geometrijske elemente. Prednost prebirnih algoritmov pred algoritmi strategije deli- in-vladaj je, da nam ni potrebno hraniti vseh objektov v delovnem pomnilniku naenkrat (v delovnem pomnilniku imamo le objekte, ki so v statusni strukturi). Časovna zahtevnost prebirnih algoritmov je povečini O(n log n), temu pa dodamo še čas za odgovarjanje na vprašanje Q. Prebiranje ni primerno za probleme, kjer je vhodni tok dinamičen. Ponekod prebiranje ni smiselno, če lahko problem rešimo v linearnem času, kot je npr. določitev oklepajoče škatle množici točk.
  • 27. Poglavje 3 Algoritmi Delaunayeve in omejene Delaunayeve triangulacije V tem poglavju bomo formalno definirali ravninsko triangulacijo, predstavili Delaunayevo pravilo in opisali Delaunayevo triangulacijo ter prešli na definicijo omejene Delaunayeve triangulacije, ki mu bo sledil opis postopkov za tvorbo omejene Delaunayeve triangulacije. 3.1 Ravninska triangulacija Definicijo ravninske triangulacije bomo povzeli po [19]. Naj bo podana množica točk v ravnini P = {p0 , p1 , ..., pn−1 } velikosti n. Definicijo ravninske triangulacije nad množico točk P izpeljemo iz maksimalne delitve ravnine S, za katero velja, da vsebuje le takšne robove, ki se med seboj ne sekajo, saj na tak način ohranimo ravninskost delitve. To pomeni, da izven množice S ležijo sami sekajoči se robovi. Če napravimo maksimalno ravninsko delitev s točkami iz P , govorimo o triangulaciji nad P oz. T (P ) (slika 3.1). Vsak rob ei,j = pi pj , pri čemer pi , pj ∈ P in i = j, pripada natanko dvema trikotnikoma, razen če leži na robu triangulacije, imenovanem konveksna lupina nad 9
  • 28. POGLAVJE 3. ALGORITMI DT IN CDT 10 Slika 3.1: Ravninska triangulacija. P oz. KL(P ) (na sliki 3.1 je konveksna lupina narisana s krepkejšimi črtami). Za vsako triangulacijo lahko s pomočjo izračuna konveksne lupine natančno določimo število vseh robov in trikotnikov, o čemer govori naslednji izrek [19]: Naj bo P množica n točk na ravnini, ki niso vse kolinearne, in naj k predstavlja število točk iz P , ki ležijo na konveksni lupini. Vsaka triangulacija T (P ) ima 2n − 2 − k trikotnikov in 3n − 3 − k robov. Izrek je dokazan s pomočjo Eulerjeve formule [90], ki določa razmerje med številom oglišč nv , številom robov ne in številom lic nf ter pravi: nv − ne + nf = 2 Če je m število trikotnikov triangulacije, je število lic nf = m + 1, saj ploskev na ravnini predstavlja tudi zunanjost triangulacije. Zunanje lice ima k robov, ki predstavljajo konveksno lupino. Vsak trikotnik ima 3 robove, vsak rob pa je skupen natanko dvema licema. Število vseh robov je torej ne = (3m + k)/2. Če v formulo vstavimo ne in nf , dobimo izračun za m = 2n − 2 − k, iz česar sledi, da je ne = 3n − 3 − k.
  • 29. POGLAVJE 3. ALGORITMI DT IN CDT 11 Nad množico točk na ravnini je možno zgraditi različne triangulacije: • triangulacija množice točk (prostor, ki ga razdelimo na trikotnike, je omejen s konveksno lupino, napeto nad množico točk), • triangulacija enostavnega mnogokotnika (prostor je omejen z mnogokotnikom, katerega notranjost razdelimo v trikotnike). Triangulacije množice točk so lahko optimalne ali neoptimalne. Predstavnik neoptimalnih triangulacij je triangulacija množice točk s posplošenim trikotniškim trakom (najbolj znana je, med katerimi je najbolj znana Hamiltonova triangu- lacija [7, 37, 53]). Med neoptimalne triangulacije spada tudi triangulacija brez kriterija, ki zahteva le, da so trikotniki ravninski. Najbolj nas zanimajo optimalne triangulacije, kriteriji optimalnosti pa so lahko različni: • minimizacija najdaljše dolžine robov trikotnika [32], • požrešna triangulacija [62], • minimizacija najmanjšega kota [35], • maksimizacija najmanjšega kota (Delaunayeva triangulacija), • minimizacija največjega kota [33], • maksimizacija najmanjše višine [33], • minimizacija največje razdalje trikotnika od središča njegovega očrtanega kroga [33], • minimizacija vsote dolžine vseh robov (angl. minimum weighted triangula- tion [36]). Danes je najpopularnejša optimalna triangulacija vsekakor Delaunayeva trian- gulacija, med neoptimalnimi pa je bilo največ pozornosti posvečene Hamiltonovi triangulaciji.
  • 30. POGLAVJE 3. ALGORITMI DT IN CDT 12 3.2 Delaunayeva triangulacija Naj bo T triangulacija nad P , ki vsebuje m trikotnikov. Vsak trikotnik ima 3 notranje kote, zato je vseh kotov 3m, ki jih uredimo po velikosti v naraščajočem vrstnem redu. Sestavimo vektor kotov A(T ) = (α1 , α2 , ..., α3m ), kjer velja αi ≤ αj pri i < j. Naj bo T druga triangulacija prav tako nad množico točk P z vektorjem kotov A(T ) = (α1 , α2 , ..., α3m ). Pravimo, da je vektor kotov A(T ) večji od vektorja kotov A(T ), če je A(T ) leksiografsko večji od A(T ) oz. če obstaja indeks i, 1 ≤ i ≤ 3m tako, da velja αj = αj za vsak j < i in αi > αi . Triangulacija T je optimalna glede na kot, če velja A(T ) ≥ A(T ) za vse triangulacije T nad P . Za takšno triangulacijo je značilno, da tvori lepše trikotnike oz. trikotnike, ki niso ozki, takšna triangulacija pa je bolj zaželena v praktični uporabi. Slika 3.2: Optimizacija minimalnega notranjega kota z zamenjavo roba. Rob pi pj triangulacije T (P ) naj ne leži na konveksni lupini KL(P ) (slika 3.2). Rob pi pj je skupen trikotnikoma i,j,k in j,i,l . Če oba trikotnika skupaj tvorita konveksni štirikotnik, dobimo novo triangulacijo T tako, da iz T odstranimo rob pi pj in namesto njega vstavimo rob pk pl . To operacijo imenujemo zamenjava robov (angl. edge-flip). Koti α1 , ..., α6 v A(T ) so zamenjani z α1 , ..., α6 v A(T ). Rob pi pj je nelegalen,
  • 31. POGLAVJE 3. ALGORITMI DT IN CDT 13 če velja: min(αi ) < min(αi ), i ≤ i ≤ 6. Drugače povedano, rob je nelegalen, če lahko v T lokalno povečamo najmanjši kot z zamenjavo tega roba. Če v triangulaciji T poskrbimo, da ne vsebuje nobenega nelegalnega roba, pravimo, da je T legalna triangulacija. Legalna triangulacija je optimalna glede na minimalni notranji kot. Da nam ni potrebno izračunati kotov αi in αi , si pomagamo z naslednjim izrekom: Naj bo rob pi pj skupen trikotnikoma i,j,k in i,j,l in naj bo K krožnica skozi točke pi , pj in pk (slika 3.3). Rob pi pj je nelegalen natanko takrat, ko točka pl leži v notranjosti krožnice K. Nadalje, če točke pi , pj , pk in pl skupaj tvorijo konveksni štirikotnik in ne ležijo na skupni krožnici, je točno eden izmed robov pi pj in pk pl nelegalen. Iz izreka sledi naslednja ugotovitev: če vsakemu trikotniku triangulacije T očrtamo krog in se znotraj tega kroga ne nahaja nobena druga točka iz P , je triangulacija T legalna. Tej lastnosti pravimo pravilo praznega kroga. Leta 1934 je zgornjo ugotovitev dokazal ruski matematik Boris Nikolajevič Delone. Ta je svoja dela objavljal v francoskem jeziku, zato je preoblikoval svoj priimek v Delaunay. Tako pravilo praznega kroga imenujemo Delaunayevo pravilo. Triangulaciji, pri kateri za vsak par trikotnikov velja pravilo praznega kroga, pravimo Delaunayeva triangulacija, njene robove in trikotnike pa imenujemo Delaunayevi robovi oz. Delaunayevi trikotniki. Slika 3.4 prikazuje razliko med nelegalno in Delaunayevo triangulacijo. Algoritem, s katerim pridemo do Delaunayeve triangulacije, je zamenjava nelegalnih robov z legalnimi, vse dokler triangulacija ne vsebuje več nelegalnih robov. Lawson [60] je pokazal, da je moč vsako triangulacijo pretvoriti v Delaunayevo, če
  • 32. POGLAVJE 3. ALGORITMI DT IN CDT 14 nelegalen rob Slika 3.3: Nelegalen rob. izvedemo legalizacijo za vsak par trikotnikov triangulacije. Rekurzivni postopek za lokalno legalizacijo prikazuje izpis 2. Vhod v algoritem legalizacije predstavlja trikotnik i,j,k (slika 3.3), pri katerem bomo preverjali legalnost roba pi pj v dani triangulaciji T . Algoritem poišče sosednji trikotnik trikotniku i,j,k po robu pi pj , v našem primeru je to trikotnik j,i,l , in v njem izbere oglišče, ki ne leži na robu pi pj . Trikotniku i,j,k nato očrta krog in preveri, ali oglišče pl leži v njegovi notranjosti. Če je temu tako, je rob pi pj nelegalen, zato ga zamenja z robom pl pk . Rezultat zamenjave sta dva nova trikotnika l,k,i in k,l,j , kjer rekurzivno preveri trikotnik l,k,i z roboma pk pi in pi pl ter k,l,j z roboma pl pj in pj pk . Rekurzija se konča, ko v triangulaciji T ni več nelegalnih robov. Delaunayeva triangulacija je unikatna, če v njej ne obstaja takšen konveksni mnogokotnik, ki bi imel vsa oglišča na isti krožnici. Delaunayeva triangulacija je neposredno povezana z Voronoijevim diagramom (slika 3.5). Začetki Voronoijevih diagramov segajo v 17. stoletje v čas Descartesa in
  • 33. POGLAVJE 3. ALGORITMI DT IN CDT 15 Izpis 2 Procedura lokalne legalizacije v triangulaciji T procedure Legaliziraj( i,j,k , pi pj , T ) begin j,i,l = VrniSosednjiTrikotnik( i,j,k , pi pj , T ); if Nelegalnost( i,j,k , pl ) then begin { l,k,i , k,l,j } = ZamenjajRob( i,j,k , j,i,l , pi pj ); Legaliziraj( l,k,i , pk pi , T ); Legaliziraj( l,k,i , pi pl , T ); Legaliziraj( k,l,j , pl pj , T ); Legaliziraj( k,l,j , pj pk , T ); end end izhajajo iz opazovanj vesolja, kjer so ugotavljali, da se skupine nebesnih teles gibljejo okrog nevidnih materij, ki jih privlačijo. Tako so pričeli deliti prostor na področja privlačnosti. Problematika je postala zanimiva in tako se je pričela razvijati nova veja geometrije. Voronoi je prvi, ki je zanjo postavil matematične temelje leta 1908, zato se diagrami v računalniški geometriji imenujejo po njem (najdemo jih tudi pod imeni [10]: Dirichletova področja, Theissenovi mnogokotniki, Wigner-Seitzova področja, Johnson-Mehlov model in Blumova transformacija). Naj bo razdalja med točkama a in b označena z dist(a, b). Voronoijev diagram nad množico točk P velikosti n definiramo z delitvijo ravnine na n celic, po eno za vsako točko iz P . Če v celico, definirano s točko pi , vstavimo točko q, velja, da je točki q izmed vseh točk iz P najbližja točka pi oz. dist(q, pi ) < dist(q, pj ), pj ∈ P, i = j. Voronoijev diagram nad množico točk P označimo kot V or(P ). Celici pravimo Voronoijeva celica, robovom Voronoijevi robovi, ti pa se stikajo v Voronoijevih
  • 34. POGLAVJE 3. ALGORITMI DT IN CDT 16 Slika 3.4: Nelegalna (a) in Delaunayeva triangulacija (b). točkah. Točkam iz P pravimo Voronoijeva središča (slika 3.5). Če Voronoijeva središča sosednjih Voronoijevih celic povežemo med seboj z ravnimi robovi, dobimo Delaunayevo triangulacijo. Pravimo, da je Deluanayeva triangulacija dualni graf Voronoijevemu diagramu. 3.2.1 Algoritmi Delaunayeve triangulacije Za algoritme Delaunayeve triangulacije je danes splošno znano, da je njihova pričakovana časovna zahtevnost O(n log n). Največje razlike med algoritmi so
  • 35. POGLAVJE 3. ALGORITMI DT IN CDT 17 Slika 3.5: Voronoijev diagram in Delaunayeva triangulacija. v dejanskem času procesiranja, v pomnilniških obremenitvah, v zahtevnosti implementacije in stabilnosti ter v občutljivosti algoritma glede na porazdelitve točk. Problem Delaunayeve triangulacije predstavlja eno najbolj raziskanih vej računalniške geometrije, zato je bilo do danes razvitih veliko različnih algoritmov, ki jih v grobem delimo v pet skupin: 1. Algoritmi na principu ovijanja paketa (ali inkrementalni iskalni algoritmi). Za te algoritme je značilno postopno dodajanje točk v trenutno triangulacijo, kjer obstoječim mejnim robovom poiščemo najbližjo točko, ki ustreza Delaunayevemu pravilu, in jo pripnemo Delaunayevi triangulaciji. Predstavnik te skupine je algoritem Fanga in Piegla [39]. Algoritem se v praksi pokaže kot počasen in zelo nestabilen.
  • 36. POGLAVJE 3. ALGORITMI DT IN CDT 18 2. Inkrementalni konstrukcijski algoritmi. So najbolj razširjeni triangu- lacijski algoritmi. Temeljijo na zaporednem vstavljanju točk v obstoječo Delaunayevo triangulacijo z delitvijo trikotnika, v katerega pade trenutno vstavljena točka. Svoje delovanje pričnejo s tvorbo velikega ali super trikotnika, ki zajame celotno vhodno množico točk in je tudi prvi trikotnik, ki se deli. Najden trikotnik razdelijo na tri ali štiri nove trikotnike, za katere je potrebno še preveriti, ali izpolnjujejo Delaunayevo pravilo. Ker triangulacijo zgradimo nad razširjeno množico točk, moramo na koncu le-te odstraniti. Najbolj znan algoritem so predstavili Guibas, Knuth in Sharir [48]. Algoritem uporablja usmerjen acikličen graf za iskanje trikotnika. Guibas in Stolfi [47] sta izvedla iskanje trikotnika s sprehodom po triangulaciji iz naključnega trikotnika in se izognila iskalni podatkovni strukturi. Su in Drysdale [79] sta za iskanje trikotnika uporabila enakomerno delitev ravnine. Postopek, kjer je iskanje trikotnika prevedeno v problem iskanja najbližje točke z uporabo dvonivojske delitve ravnine, najdemo v [91], postopek z delitvijo ravnine na trakove in uporabo seznama s preskakovanjem pa v [87]. Algoritmi so relativno preprosti za implementacijo. 3. Algoritmi s prebirno premico. Za njih je značilen sprehod s prebirno premico po naraščajoče urejenih vhodnih podatkih v smeri gibanja premice. Prostor za premico predstavlja trenutno rešitev, prostor pred premico pa je še neraziskan. Ko premica obišče točko, govorimo o dogodku. Najbolj znan algoritem za Voronoijev diagram in (posredno) za triangulacijo je napravil Fortune [42], veliko preprostejšo rešitev pa je predlagal Žalik [92]. Algoritmi dosegajo visoke hitrosti. 4. Algoritmi s strategijo deli in vladaj. Za tovrstne algoritme je značilno, da problem razdelijo na podprobleme, dokler ti niso enostavno rešljivi, delne rešitve pa zlijejo ob vračanju iz rekurzije. Triangulacijski algoritmi razdelijo vhodno množico običajno na trakove [22] ali pravokotne celice [28]. Prednost
  • 37. POGLAVJE 3. ALGORITMI DT IN CDT 19 tovrstnih algoritmov je njihova primernost za paralelno procesiranje, bodisi na enem bodisi na več računalnikih. Druga prednost so nizki izvajalni časi. Slabost, s katero se ti algoritmi ponavadi srečujejo, je relativno težka implementacija, zato se pogosto zadovoljimo s kakšnim programersko manj zahtevnim algoritmom. 5. Algoritem z vbočeno lupino. Zanimivo idejo za tvorbo Delaunayeve triangulacije in Voronoijevega diagrama s pomočjo konveksne lupine v 3D sta predstavila Edelsbrunner in Seidel [30]. Metoda je sestavljena iz treh korakov. Prvi korak preslika vhodno množico na paraboloid, drugi korak nad preslikanimi točkami zgradi 3D konveksno lupino in nato odstrani zgornjo ploskev dobljenega paraboloida. Tretji korak preostale trikotnike preslika na ravnino xy, na kateri se izriše Delaunayeva triangulacija. 3.2.1.1 Inkrementalni algoritem Guibas, Knuth in Sharir Eden najbolj znanih algoritmov za tvorbo Delaunayeve triangulacije so razvili Guibas, Knuth in Sharir [48]. Gre za naključni inkrementalni algoritem, katerega osnovna ideja je deljenje trikotnikov v nove trikotnike z vstavljanjem točk v povsem poljubnem vrstnem redu. Pripravo podatkov predstavlja premešanje vrstnega reda (angl. randomization) točk, ki zagotavlja pričakovano časovno zahtevnost O(n log n). Algoritem prične s tvorbo velikega umetnega trikotnika, ki zaobjame vse točke iz množice P (slika 3.6). DT tako izvedemo nad množico točk P U , kjer je U = {p−1 , p−2 , p−3 } množica oglišč velikega trikotnika. Ker je končni cilj DT (P ) in ne DT (P U ), moramo na koncu izbrisati vse robove, katerih vsaj eno izmed oglišč pripada množici U . Točke p−1 , p−2 in p−3 postavimo dovolj daleč, da ne vplivajo na DT (P ).
  • 38. POGLAVJE 3. ALGORITMI DT IN CDT 20 Slika 3.6: Določitev velikega trikotnika. Dobro postavitev dobimo, če postavimo oklepajoči pravokotnik nad P v izhodišče koordinatnega sistema. Kot max označimo najdaljšo stranico, za oglišča velikega trikotnika pa izberemo p−1 (0, 3 max), p−2 (−3 max, −3 max) in p−3 (3 max, 0). Z gradnjo velikega umetnega trikotnika −1,−2,−3 smo zagotovili, da se v njegovi notranjosti nahajajo vse točke. Tako je postopek deljenja trikotnikov splošen. Poteka tako, da najprej poiščemo trikotnik, ki ga bomo razdelili (v primeru vstavljanja prve točke je to veliki trikotnik), nato pa izvedemo deljenje. Pojavita se lahko dve situaciji (slika 3.7): • točka pade v notranjost trikotnika - trikotnik razdelimo na 3 nove trikotnike (točka pr razdeli trikotnik i,j,k na trikotnike i,j,r , j,k,r , k,i,r ), in • točka pade na rob - trikotnika, ki jima je rob skupen, razpolovimo (točka pr razdeli trikotnik i,j,k na i,j,r in j,k,r , trikotnik k,l,i pa na k,l,r in l,i,r ). Rob pi pk razpade na robova pi pr in pr pk . V primeru, da rob pripada KL(P ), razdelimo le en trikotnik.
  • 39. POGLAVJE 3. ALGORITMI DT IN CDT 21 Slika 3.7: Vstavljanje točke tvori bodisi tri (a) bodisi štiri trikotnike (b). Novi robovi niso nujno Delaunayevi, zato takoj sledi postopek legalizacije, ki poskrbi, da je dobljena triangulacija spet Delaunayeva. Po deljenju trikotnika i,j,k (slika 3.7) preverimo robove pi pj , pj pk in pk pi , po deljenju trikotnikov i,j,k in k,l,i pa pi pj , pj pk , pk pl in pl pi . Predstavljeni algoritem za iskanje ustreznega trikotnika uporablja usmerjeni aciklični graf (angl. directed acyclic graph ali DAG), s katerim opišemo časosled življenja trikotnikov. Označimo ga z D. Notranja vozlišča grafa D predstavljajo trikotnike, ki so obstajali v predhodnih triangulacijah in smo jih tekom vstavljanja točk razdelili ali uničili, listi pa predstavljajo trikotnike trenutne triangulacije. V korenu grafa se nahaja veliki trikotnik, ki predstavlja začetno triangulacijo. Ko v trenutno triangulacijo vstavimo novo točko, pričnemo z iskanjem trikotnika, ki
  • 40. POGLAVJE 3. ALGORITMI DT IN CDT 22 ga bomo delili. Z iskanjem pričnemo v korenu D, nato pa nadaljujemo v tistem sinu, ki vsebuje točko. Najden trikotnik se nahaja v listu grafa D. Primer gradnje triangulacije in grafa D vidimo na slikah 3.8 in 3.9. Zadnji korak na sliki 3.9 prikazuje stanje v grafu D ob zamenjavi skupnega roba trikotnikov 4 in 8. Ostane še zadnji korak, v katerem moramo izbrisati vse trikotnike, katerih vsaj eno oglišče pripada U . Slika 3.8: Gradnja podatkovne strukture D: 1. del. Slabost algoritma je velika poraba pomnilnika, saj poleg trenutno obstoječih
  • 41. POGLAVJE 3. ALGORITMI DT IN CDT 23 trikotnikov v grafu hranimo vse trikotnike, ki so nekoč obstajali. Učinkovitejše inkrementalne algoritme z uporabo dvonivojske delitve ravnine za iskanje najbližjega trikotnika sta predstavila Žalik in Kolingerova [91], rešitev z delitvijo prostora na trakove pa Zadravec in Žalik [87]. Slika 3.9: Gradnja podatkovne strukture D: 2. del. 3.2.1.2 Prebirni algoritem Fortune Fortune [42] je leta 1987 razvil algoritem za tvorbo Voronoijevega diagrama s prebirno premico, ki dosega časovno zahtevnost O(n log n). Splošno načelo prebirne premice pravi, da množica podatkov pred premico v smeri gibanja predstavlja še neobdelane podatke, medtem ko za premico nastaja rezultat. Pri Voronoijevem diagramu se pojavi problem, saj se robovi, ki pripadajo Voronoijevi celici V (pi ), na prebirni ravnini pojavijo prej, kot prebirna premica doseže ustrezno točko pi .
  • 42. POGLAVJE 3. ALGORITMI DT IN CDT 24 Fortune je problem spretno rešil s preslikavo v 3D prostor tako, da je nad točke napel stožce in prebirno premico obravnaval kot prebirno ravnino, nagnjeno pod kotom 45 ◦ (slika 3.10). Le-ta seka ravnino točk v premici s, ki postane naša prebirna premica. Algoritem v osnovi ne reši Delaunayeve triangulacije, a ker je le-ta njegov dual (prikazano na sliki 3.5), je preslikava med njima opravljena v linearnem času. Slika 3.10: Predstavitev delovanja algoritma s stožci, postavljenimi nad točkami in prebirno ravnino π. Ker je ravnina nagnjena za enak kot kot stranice stožcev, prebirna premica najde točko p natanko takrat, ko se prebirna ravnina prvič dotakne stožca, definiranega nad točko p. Presek ravnine s katerim koli stožcem predstavlja parabolo. Preseki ravnine z večimi sosednjimi stožci skupaj izrišejo krivuljo paraboličnih odsekov, imenovano tudi spodnja meja paraboličnih odsekov (angl. parabolic front, beach line). Zanimivo je, da se dva sosednja parabolična odseka stikata v točki, ki leži na bisektorju med dvema sosednjima točkama. Potek stičišča opiše Voronoijev rob. Preiskovalna ravnina najprej odkrije Voronoijev rob in šele kasneje točko, ki ta rob
  • 43. POGLAVJE 3. ALGORITMI DT IN CDT 25 definira. Voronoijev diagram je popolno definiran za spodnjo mejo paraboličnih odsekov in ne za s. Jasno je, da je osrednja struktura, ki jo moramo vzdrževati, krivulja paraboličnih odsekov. Algoritem razlikuje med dvema dogodkoma prebirne premice s: • dogodek točke - prebirna premica naleti na točko iz P . Na krivulji paraboličnih odsekov se pojavi nov odsek, ki razdeli enega od odsekov na dva nova (slika 3.11). V trenutku, ko preberemo točko, je presek med ravnino π in stožcem poltrak, ki si ga predstavljamo kot parabolo širine 0. Dogodek pomeni začetek nastajanja novega Voronoijevega roba. • dogodek krožnice - odsek na parabolični krivulji odsekov se skrči v točko in izgine (slika 3.12). Če je βj izginjajoči odsek, sta βj in βk njegova sosednja odseka, tik preden βj izgine. Takšne tri parabole so določene s svojimi točkami pi , pj in pk (slika 3.12a). V trenutku, ko βj izgine, potekajo vse tri parabole skozi skupno točko q. Točka q je enako oddaljena od točk pi , pj in pk , zato obstaja krožnica, ki poteka skozi njih in ima središče v q (slika 3.12b). Najnižja točka krožnice leži na prebirni premici s. Znotraj krožnice ne more obstajati nobena druga točka, saj bi bila razdalja od take točke do q manjša kot razdalja od q do prebirne premice s. Tako je q točka Voronoijevega diagrama. Rezultat dogodka krožnice je torej zaključek Voronoievega roba v Voronoijevi točki. Ko se prebirna premica premakne naprej, presečišče preostalih odsekov βi in βk riše Voronoijev rob (slika 3.12c). 3.2.1.3 Prebirni algoritem Žalik Prebirni algoritem, ki ga bomo izpostavili, je algoritem Delaunayeve triangulacije, ki ga je razvil Žalik [92]. Postopek bomo v tem podpoglavju le orisali, saj je naš algoritem njegova izboljšava in razširitev z omejitvami, ki jo bomo kasneje podrobno
  • 44. POGLAVJE 3. ALGORITMI DT IN CDT 26 Slika 3.11: Dogodek točke: na krivulji paraboličnih odsekov se pojavi nov odsek. Slika 3.12: Dogodek krožnice: parabolični odsek izgine iz krivulje paraboličnih odsekov. opisali. Pristop je precej drugačen, kot ga je razvil Fortune, čeprav temelji na strategiji prebiranja. Ves postopek poteka na ravnini, kjer točke uredimo po koordinati y, nato pa se z vodoravno prebirno premico premikamo od točke do točke in gradimo trikotniško mrežo. Osnovni gradnik algoritma je napredujoča fronta (angl. advancing front), ki predstavlja zgornjo mejo triangulacije in mesto, kamor dodajamo nove trikotnike v obstoječo triangulacijo. Spretna implementacija napredujoče fronte omogoča hiter dostop do ustreznega roba fronte, kamor bomo dodali nov trikotnik. Ker je napredujoča fronta tudi edina zahtevnejša struktura, ki jo algoritem uporablja, je algoritem zelo varčen s pomnilnikom in enostaven za implementacijo. Slika 3.13 prikazuje vmesno stanje delovanja algoritma. Zgoraj vidimo
  • 45. POGLAVJE 3. ALGORITMI DT IN CDT 27 napredujočo fronto - mejo triangulacije, kjer se trikotniki dodajajo z napredovanjem prebirne premice s, in spodaj trenutno zgrajen del konveksne lupine, ki jo avtor imenuje spodnja konveksna lupina. Prebirna premica s na sliki 3.13a obišče točko pi . Projekcija točke na napredujočo fronto vrne rob pl pr , s katerim zgradimo trikotnik i,l,r , točko pi pa dodamo v napredujočo fronto (slika 3.13b). Ko prebirna premica obišče zadnjo točko, s sprehodom po napredujoči fronti in preverjanjem kotov med robovi napredujoče fronte zgradimo še zgornjo konveksno lupino. Slika 3.13: Primer vstavljanja točke v dano triangulacijo. Eden zahtevnejših korakov je inicializacija, katere cilj je tvorba prvega trikotnika, začetne napredujoče fronte in spodnje konveksne lupine. Ker obstaja verjetnost različnih tipov kolinearnosti prvih k točk, je avtor možne situacije razdelil v tri skupine konfiguracij, ki so prikazane na sliki 3.14. Zgornji primeri prikazujejo možne
  • 46. POGLAVJE 3. ALGORITMI DT IN CDT 28 situacije pri nekolinearnih začetnih točkah, spodnji pa pri kolinearnih. Obstajajo še zrcalne situacije glede na navpičnico. Slika 3.14: Primeri začetnih konfiguracij v fazi inicializacije. Vstavljanje točke poteka tako, da točki poiščemo najbližji rob fronte, dodamo trikotnik in izvedemo postopek Lawsonove legalizacije, da je pravilu praznega kroga vselej zadoščeno. Prav tako se spremeni napredujoča fronta, lahko pa tudi konveksna lupina. Razlikujemo med tremi primeri vstavljanja točke: • Levi primer: pravokotna projekcija točke pade levo od fronte. Vstavljanje zgradi enega ali več trikotnikov, osveži napredujočo fronto in spodnjo konveksno lupino. • Desni primer: pravokotna projekcija točke pade desno od fronte. Izvedemo enako kot za levi primer, le na drugi strani. • Sredinski primer: pravokotna projekcija točke pade na sredino roba fronte ali na točko. Vstavljanje doda enega ali več trikotnikov ter osveži le napredujočo
  • 47. POGLAVJE 3. ALGORITMI DT IN CDT 29 fronto. V primeru vodoravnega roba fronte lahko vstavljena točka pade neposredno nanj. V tem primeru priležni trikotnik razdelimo na dva. Napredujoča fronta je enodimenzionalna podatkovna struktura, ki služi predstavitvi meje triangulacije in hitremu iskanju. Zaželeno je, da se fronta čim bolj prilega prebirni premici oz. da je čim bolj gladka, saj je takrat najbolj učinkovita. Zato algoritem razpolaga z dvema hevrističnima funkcijama, ki skrbita za njeno glajenje. Izkaže se namreč, da zaradi neenakomerne porazdelitve podatkov prihaja do situacij, kjer deli fronte ostanejo daleč za prebirno premico. Hitro odpravljanje takšnih situacij odpravlja prva hevristika, ki ob vstavitvi trikotnika preverja kote med sosednjimi robovi fronte in v primeru, da je vmesni kot manjši od π/2 (slika 3.15a), vstavi dodaten trikotnik (slika 3.15b). Preverjanje kotov poteka v obeh smereh, levo in desno od vstavljene točke, in se ustavi takoj, ko je vmesni kot večji od π/2 (slika 3.15c). Slika 3.15: Prva hevristika preveri kot s sosednjim robom fronte (a) in vstavi nov trikotnik (b) ter nadaljuje, dokler je kot < π/2 (c). Kljub temu se lahko zgodi, da nastanejo korita oz. globeli, ki jih s prvo hevristiko ne moremo zaznati in odpraviti. Za to poskrbi druga hevristika, ki takšne globeli
  • 48. POGLAVJE 3. ALGORITMI DT IN CDT 30 pi Slika 3.16: Druga hevristika odkrije korita (a) in jih zapolni s trikotniki (b). pravočasno odkrije in jih zapolni s trikotniki. Pregledovanje enako kot pri prvi hevristiki poteka v smereh levo in desno od vstavljene točke. Slika 3.16a prikazuje situacijo, ko smo vstavili točko pi . Nato vzamemo naslednjo točko na fronti v desni smeri pr in še njeno desno sosedo pr+ . Če je naklon premice, ki poteka skozi pi in pr+ manjši od 3/4π, smo našli korito. Koritu poiščemo levi in desni rob ter dno (na sliki 3.16b predstavlja levi rob točka pr+ , desni rob točka pa in dno pb ). Območje trianguliramo, pri tem pa seveda upoštevamo Delaunayevo pravilo. Na koncu osvežimo napredujočo fronto in postopek je končan. Meritve so pokazale, da s pomočjo hevristik algoritem bistveno pohitrimo, saj zmanjšamo število menjav pri legalizaciji. Algoritem dosega časovno zahtevnost
  • 49. POGLAVJE 3. ALGORITMI DT IN CDT 31 O(n log n) in je skoraj neodvisen od porazdelitve podatkov [92]. 3.3 Omejena Delaunayeva triangulacija Delaunayevo triangulacijo je možno razširiti tako, da vhodna množica vsebuje tudi daljice. Ta problem so v računalniški geometriji poimenovali omejena Delaunayeva triangulacija (angl. constrained Delaunay triangulation ali CDT). Z upoštevanjem daljic, ki kasneje postanejo robovi triangulacije, rezultat ni več Delaunayeva triangulacija, ampak triangulacija, ki je Delaunayevi kolikor se le da blizu. To ji preprečujejo ravno daljice, ki jih zaradi tega, ker predstavljajo omejitve, imenujemo omejujoči robovi (angl. constraining edges). Velika uporabnost CDT se je pokazala pri načrtovanju poti [20, 54, 55, 84], pri metodi končnih elementov [45] in v GIS [1, 52, 72]. Vhodno množico predstavimo kot ravninski premočrtni graf G = {P, Ec } (angl. planar straight-line graph ali PSLG), kjer je P množica točk in Ec množica omejujočih robov. Zahtevamo, da so oglišča robov Ec zastopana v P . Razliko med Delaunayevo in omejeno Delaunayevo triangulacijo prikazuje slika 3.17. Če trianguliramo samo točke iz P , dobimo Delaunayevo triangulacijo. Nekateri Delaunayevi robovi triangulacije lahko sekajo omejujoče robove Ec (slika 3.17b). Če množica robov Ec predstavlja tudi robove triangulacije, dobimo omejeno Delaunayevo triangulacijo (slika 3.17c). Vpeljimo pojem vidnosti (angl. visibility), ki pravi, da sta točki pi in pj medsebojno vidni, če povezava med njima ne seka nobenega roba iz Ec in če točki pi in pj ne predstavljata oglišč roba iz Ec . Če pogledamo sliko 3.18a, vidimo, da trikotnik t krši klasično Delaunayevo pravilo. V takem primeru bi zamenjali rob e z e , vendar tega ne bomo storili, saj rob e predstavlja omejitev. Točki pi in pl sta medsebojno vidni, prav tako tudi
  • 50. POGLAVJE 3. ALGORITMI DT IN CDT 32 Slika 3.17: Vhodni ravninski graf (a), Delaunayeva (b) in omejena Delaunayeva triangulacija (c). točki pj in pl , med pk in pl pa vidnost ne velja. Legalizacija zamenja rob pj pk z robom pi pm (slika 3.18b). Ker Delaunayevo pravilo ne upošteva robov iz Ec , pravilo praznega kroga razširimo z vidnostjo in ga poimenujemo šibko Delaunayevo pravilo. Tako se definicija omejene Delaunayeve triangulacije glasi: Omejena Delaunayeva triangulacija ali CDT nad ravninskim grafom G = {P, Ec } je takšna triangulacija, ki vsebuje vse robove iz Ec in velja, da očrtan krog
  • 51. POGLAVJE 3. ALGORITMI DT IN CDT 33 Slika 3.18: CDT , vidnost in legalizacija. trikotnika t v triangulaciji ne vsebuje točke iz P , ki je vidna iz vseh oglišč trikotnika t. Pokažimo še, da je Delaunayeva triangulacija le specifičen primer omejene Delaunayeve triangulacije. Omejena Delaunayeva triangulacija nad grafom G je Delaunayeva triangulacija, kadar je množica Ec prazna. Torej, DT (G) = CDT (G), ko je Ec prazna množica. Enačaj velja tudi takrat, kadar so vsi robovi iz Ec Delaunayevi. 3.3.1 Algoritmi omejene Delaunayeve triangulacije Zaradi vse večjih zahtev v inženirstvu se je razvila nova veja algoritmov, ki so zmožni triangulirati velike množice podatkov. Podatki se hranijo na disku, od tam pa jih je potrebno prenesti v delovni pomnilnik, zato ti algoritmi namenjajo večjo pozornost optimizaciji prenosa podatkov med diskom in pomnilnikom [1, 52]. Mi
  • 52. POGLAVJE 3. ALGORITMI DT IN CDT 34 se bomo osredotočili izključno na način tvorbe omejene Delaunayeve triangulacije, kjer bomo predpostavili, da velikosti delovnega pomnilnika ne predstavlja omejitve. Omejeno Delaunayevo triangulacijo lahko zgradimo na dva načina: • dvokoračni postopki zgradijo CDT (G) v dveh korakih, kjer je prvi korak DT (P ), vstavljanje robov Ec pa predstavlja drugi korak; • enokoračni postopki zgradijo CDT (G) v enem koraku, tako da hkrati upoštevajo celoten graf G, torej točke P in robove Ec . 3.3.2 Dvokoračni postopki CDT Dvokoračni postopek je preprostejši, saj se pri tvorbi CDT (G) osredotočimo le na problem vstavljanja robov v triangulacijo, ki smo jo dobili v prvem koraku. Tako lahko za izgradnjo DT (P ) izberemo katerikoli algoritem navadne Delaunayeve triangulacije, ki smo jih opisali v predhodnem poglavju. 3.3.2.1 Vstavljanje robov V drugem koraku v dobljeno DT (P ) vstavimo vse omejujoče robove iz Ec . Za vsak rob e ∈ Ec moramo poiskati njegovi oglišči, nato pa območje ob robu e predelati tako, da bo e postal del končne CDT (G). Oglišči lahko najdemo s pomočjo podatkovnih struktur, ki jih je uporabljal algoritem za DT . Iskalne strukture potrebujemo za iskanje bodisi najbližjih točk, robov ali trikotnikov v triangulaciji bodisi za iskanje oglišč pri vstavljanju robov. Med njimi najdemo dvojiška drevesa (drevo AVL, rdeče-črno drevo, drevo k-D), sekljalne tabele (angl. hash-table), sezname s preskakovanjem (angl. skip-list), usmerjene grafe ter enakomerne delitve prostora. Predelava naključnega inkrementalnega algoritma, ki za iskanje trikotnikov uporablja DAG, je smiselna, če DAG uporabimo tudi za iskanje oglišč ob vstavljanju robov. Alternativna rešitev bi bila, če bi iz množice točk P odstranili vse tiste točke,
  • 53. POGLAVJE 3. ALGORITMI DT IN CDT 35 ki predstavljajo oglišča robov iz Ec (množico teh točk označimo s Pc ⊆ P ) in bi v prvem koraku zgradili DT (P − Pc ). Drugi korak bi najprej vstavil oglišči roba e in si zapomnil položaj oglišč, nato pa bi prešel na spreminjanje triangulacije tako, da bi rob e pravilno umestil v triangulacijo. Včasih algoritmi za DT ne gradijo takšnih podatkovnih struktur, ki bi bile primerne za uporabo v drugem koraku. Takrat imamo na voljo več možnosti. Ena je ta, da algoritem DT dopolnimo z gradnjo iskalne podatkovne strukture. Druga možnost je, da iskalno podatkovno strukturo zgradimo pred izvajanjem algoritma DT ali po njem. A ker lahko vpeljava dodatnih podatkovnih struktur pomnilniško preobremeni postopek, obstaja še tretja možnost. Ta za iskanje oglišč ali trikotnikov potrebuje le triangulacijo in sosednostne povezave med trikotniki. Iskalne algoritme, ki znotraj triangulacije iščejo točke ali trikotnike, imenujemo algoritmi korakanja po triangulaciji (angl. walking algorithms) [25, 58]. 3.3.2.2 Vstavljanje robov z brisanjem Naj bo e omejujoč rob, ki ga vstavljamo med oglišči pa in pb v obstoječo triangulacijo. Rob e preseka množico robov, zato je te robove (vključno s trikotniki) potrebno odstraniti. Vsi robovi, ki jih rob e ni sekal, ostanejo v triangulaciji, saj zadostijo šibkemu Delaunayevemu pravilu. Območje ob robu, imenovano tudi regija vpliva roba e, označimo z Re . Regija Re vsebuje vse robove in trikotnike, ki jih moramo zbrisati. Po brisanju rob e regijo Re razdeli v dve podregiji, ki se stikata z robom e. Regiji levo in desno od roba e označimo s Qe,L in Qe,R , če na e gledamo kot na usmerjen rob od pa do pb (slika 3.19). Qe,R in Qe,L nista nujno preprosta mnogokotnika (mnogokotnik Qe,L na sliki 3.19b vsebuje rob, ki ni povezan z obema ogliščema). Vsako regijo trianguliramo posebej, zato je dovolj, da postopek razložimo le za regijo Qe,L . Ko imamo triangulaciji obeh regij Qe,L in Qe,R , med sabo povežemo še trikotnika obeh regij, ki ležita ob robu e.
  • 54. POGLAVJE 3. ALGORITMI DT IN CDT 36 Slika 3.19: Vstavljajoč rob e in regija vpliva Re roba e (a) ter mnogokotnika Qe,L in Qe,R (b). S trianguliranjem mnogokotnika pričnemo tako, da skozi pa in pb napnemo krožnico (slika 3.20a). Nato se pomikamo od roba e proti točkam regije Qe,L , dokler ne najdemo točke p, ki zadosti Delaunayevemu pravilu. S točko p tvorimo nova robova pa p in ppb , ki ju vstavimo v CDT , točki pa in pb pa izbrišemo iz Qe,L (slika 3.20b). Enak postopek rekurzivno ponovimo za oba nova robova. Točke p iščemo le med preostalimi točkami regije Qe,L . Postopek ponavljamo, dokler Qe,L vsebuje točke (slika 3.20c). Enako storimo za Qe,R , kar vrne triangulacijo celotne regije Re (slika 3.20d). 3.3.2.3 Vstavljanje robov z zamenjavami Opišimo še drugo varianto vstavljanja robov, ki so jo predstavili Dyn, Goren in Rippa [29]. Pokazali so, da je katerokoli triangulacijo nad množico točk znotraj mnogokotniške domene možno pretvoriti v katerokoli drugo triangulacijo nad isto množico točk le z zamenjavami robov. Mnogokotniška domena je spet Re , ki jo sestavljata Qe,L in Qe,R . Algoritem se sestoji iz dveh glavnih korakov: 1. Procedura menjave vseh robov, ki so presekani z e, poskrbi, da je rob e del nove triangulacije, ki ni nujno CDT.
  • 55. POGLAVJE 3. ALGORITMI DT IN CDT 37 Slika 3.20: Triangulacija levega mnogokotnika Qe,L (a-c) in triangulacija desnega mnogokotnika (d). 2. Lawsonova lokalna legalizacija zagotovi, da je v vsakem trenutku zadoščeno Delaunayevemu pravilu, vendar le znotraj posamezne podregije Qe,L oz. Qe,R . Korak 1 zamenjuje robove v Re postopoma, dokler rob e ni vključen v triangulacijo. Točke med pa in pb označimo s pi , tako da levi mnogokotnik Qe,L opišemo z množico oglišč {pa , p1 , p2 , ..., pn , pb }. Postopek razložimo za primer, kjer v Qe,L nastopa rob s prostim ogliščem (oglišča si ne deli z drugim robom). Zaporedje pi opiše zanko. Tako lahko več parov {pl , pk } vsebuje isto točko iz Qe,L (v našem primeru {p2 , p4 })). Za takšne mnogokotnike pravimo, da so večkratno povezani. Vsakemu pi pripada natanko en notranji kot αi . Za vsak rob, ki je bil menjan, velja, da je sekal omejujoč rob e in da sta njegovi oglišči ležali na nasprotnih straneh
  • 56. POGLAVJE 3. ALGORITMI DT IN CDT 38 roba e (pripadali sta torej Qe,L in Qe,R ). Za vsak zamenjan rob pa morajo veljati pogoji zamenjave, kar pomeni, da rob predstavlja diagonalo konveksnega štirikotnika (notranji koti ob ogliščih štirikotnika ob diagonali morajo biti manjši od π). Med robovi, ki sekajo e, zmeraj obstaja rob, ki ga je možno zamenjati. Torej vedno obstaja oglišče pm v Qe,L , kjer je kot αm < π. Obstaja tudi vsaj en rob izhajajoč iz pm , ki seka e z drugim krajiščem v Qe,R , čigar notranji kot je manjši od π. Postopek orišemo na sliki 3.21. Zanka Qe,L predstavlja zaporedje {p2 , p3 , p4 }. Najprej odstranimo točko p1 (slika 3.21b). S postopkom nadaljujemo, dokler nam ne ostane le še en rob, ki ga je potrebno zamenjati. Rezultat zadnje menjave je rob e, ki postane rob omejene Delaunayeve triangulacije (slika 3.21c). Slika 3.21: Prikaz vstavljanja in zamenjav robov. Odstranitev točke p1 (b) zamenjava zadnjega roba (c).
  • 57. POGLAVJE 3. ALGORITMI DT IN CDT 39 3.3.3 Enokoračni algoritmi CDT Pri snovanju enokoračnih algoritmov sproti razmišljamo o načinu vstavljanja robov in točk. Enokoračni algoritmi [22, 68, 85] so redkejši od dvokoračnih, saj so velikokrat dvokoračne rešitve preprostejše in dovolj dobre. 3.3.3.1 Algoritem CDT Chew Algoritem, ki ga bomo opisali, je predstavil Chew [22]. Predpostavljamo, da se graf G nahaja znotraj pravokotnika (grafu le očrtamo oklepajoči pravokotnik). Točke uredimo v naraščajočem vrstnem redu po koordinati x in pravokotnik razdelimo na navpične trakove tako, da se v vsakem traku nahaja natanko ena točka. Primer delitve prikazuje slika 3.22, kjer smo zaradi lažje predstave pravokotnik razdelili na enakomerne trakove (širina trakov zavisi od porazdelitve točk). Če med vhodnimi podatki najdemo vsaj dve točki z enako koordinato x, delitev ni izvedljiva, zato avtor v takih situacijah predlaga zasuk grafa. Do rešitve pridemo tako, da za vsak trak posebej izračunamo omejeno Delaunayevo triangulacijo, nato sosednje trakove med seboj združujemo in računamo njuno skupno triangulacijo, dokler ne zgradimo omejene Delaunayeve triangulacije nad celotnim G. Časovna zahtevnost postopka je O(n log n). Slika 3.22: Razdelitev prostora na trakove, v vsak trak po ena točka.
  • 58. POGLAVJE 3. ALGORITMI DT IN CDT 40 Ker prostor delimo glede na točke, razdelimo vse robove Ec , tako da se v trakovih nahajajo le delni robovi. Zato bi morali za vsak trak poleg točke hraniti tudi vse delne robove, ki potekajo skozi trak, kar bi v primeru dolgih robov in velikega števila trakov zasedlo veliko pomnilnika. Prekomernemu hranjenju se izognemo, če trakove razdelimo na regije, kjer vsako omejimo s parom delnih robov. Tako lahko vodimo informacije le za tiste regije, ki v svoji notranjosti hranijo točke oz. delne triangulacije. Primer traka prikazuje slika 3.23a, razdelitev v regije pa vidimo na sliki 3.23b. Regije, ki jih vodimo, so obarvane z belo. (a) (b) Slika 3.23: Ponazoritev traku brez triangulacije (a) in razdelitev v regije (b). Robove Ec delimo v tri skupine glede na odnos s trakom : • robovi, ki povsem ležijo v traku, • robovi, ki imajo v traku le eno oglišče in • robovi, ki trak presekajo iz leve in desne strani. Slednjih večinoma ne hranimo. Avtor jih imenuje križni robovi (angl. cross- edges). Hranimo samo tiste regije, ki vsebujejo vsaj eno točko. Imenujemo jih
  • 59. POGLAVJE 3. ALGORITMI DT IN CDT 41 točkovne regije. Algoritem se ukvarja s tremi bistvenimi vprašanji: • kako upravljati s točkovnimi regijami, • kako regije združevati ter • kako zliti dve sosednji CDT pri združitvi trakov. Začetne regije ustvarimo v fazi inicializacije in vsebujejo natanko eno točko. Za to potrebujemo informacije o najbližjem zgornjem in spodnjem robu (ta robova sta v najslabšem primeru robova začetnega pravokotnika). Najbližje robove poiščemo v času O(n log n) s pomočjo prebiranja v vodoravni smeri. Ob vračanju sosednja trakova združimo tako, da zlijemo njune regije. Po obeh trakovih se sprehodimo od zgoraj navzdol. Regijo v zlitem traku pričnemo tvoriti takrat, ko vsaj eden izmed trakov, ki ju združujemo, vsebuje točkovno regijo. S tvorbo nove regije zaključimo, ko nobeden od trakov ne vsebuje več točkovne regije. Slika 3.24 prikazuje primer združitve regij. Na levi vidimo stanje pred in na desni stanje po združitvi. Ko imamo novo regijo, nam preostane še izračun skupne CDT. Metoda je podobna metodi za izgradnjo klasične DT, ki sta jo predlagala Lee in Schachter [61]. Pojavi se vprašanje, kje v posameznih triangulacijah pričeti z združevanjem. Avtor vpelje štiri pomožne neskončne točke (±∞, ±∞), ki jih postavimo v vogale vsake točkovne regije (prazne točke na sliki 3.23). Točke so dejansko v neskončnosti, vendar si jih za lažje razumevanje predstavljajmo v vogalih regije. Neskončne točke posamezne regije lahko geometrijsko sovpadajo s točkami sosednje regije, vendar nimajo medsebojnega vpliva - vsaka regija ima svoje točke. Kadarkoli želimo poseči v triangulacijo regije, za začetno točko uporabimo neskončno točko.
  • 60. POGLAVJE 3. ALGORITMI DT IN CDT 42 (a) (b) Slika 3.24: Združitev dveh regij Velja, če iz obstoječe regije odstranimo vse neskončne točke in iz njih izhajajoče robove, preostale točke in robovi regije tvorijo CDT. Naj bosta B1 in B2 sosednja trakova, ki ju zlijemo v trak B in naj bo T CDT traka B. Trakova B1 in B2 vsebujeta vsak svojo CDT (T1 in T2 ), ki se ob zlitju v B spremenita. Če je rob e Delaunayev rob v T in sta obe oglišči v B1 , potem je e Delaunayev rob T v B1 . Združevanje triangulacij T1 in T2 napravimo v treh korakih: 1. Ob meji med trakoma odstranimo neskončne točke, tako da dobimo delno CDT v vsaki polovici. S točkami vred odstranimo tudi vse iz njih izhajajoče robove (tudi Delaunayeve, a ne omejujočih). Neskončne točke nato dodamo v vse štiri vogale nove regije, kjer jih še ni. Edini robovi, ki jih moramo dodati, so robovi, ki sekajo mejo med trakoma. 2. Delne triangulacije zlepimo. 3. Odstranimo vse neskončne točke, ki niso vogalne. Slika 3.25 prikazuje primer CDT od začetka do konca. Na sliki (a) vidimo začetno razdelitev na 8 trakov, kjer je v vsakem po ena regija s točko. Nato po dva in dva sososednja trakova združimo (b), tako da nam ostanejo le 4 regije, nato 2 (c) in na koncu dobimo 1 regijo in končno CDT (d).
  • 61. POGLAVJE 3. ALGORITMI DT IN CDT 43 (a) (b) (c) (d) Slika 3.25: Združevanje in povezovanje ob vračanju. Izboljšavo algoritma je predstavil Moreau [68]. Izognil se je potencialnemu zasuku vhodnega grafa in izboljšal zlivanje trakov, algoritem pa je tako primeren tudi za triangulacijo mnogokotnikov.
  • 62. Poglavje 4 Prebirni algoritem omejene Delaunayeve triangulacije V tem poglavju bomo predstavili naš pristop za tvorbo omejene Delaunayeve triangulacije s prebirno premico. Algoritem je posplošitev in delna izboljšava prebirnega algoritma za Delaunayevo triangulacijo, ki ga je predstavil Žalik [92]. Njegov algoritem DT se je izkazal za zelo učinkovitega pri različnih porazdelitvah točk, ponaša pa se tudi z majhno porabo pomnilnika in doseganjem zavidljivo nizkih izvajalnih časov. Kot takšen predstavlja izziv za številne razširitve, saj se s tem poveča njegova uporabnost. Vprašljivo pa je, ali je možno algoritem posplošiti za problem omejene Delaunayeve triangulacije tako, da bi ohranili njegovo učinkovitost. Zanima nas, kako vpeljati postopek vstavljanja robov, kjer sta bistveni vprašanji, kdaj in kako vstavljati. Rešitev, ki jo predlagamo, je nekakšna kombinacija med eno- in dvokoračnim algoritmom CDT. Postopek uporablja paradigmo prebiranja z uporabo napredujoče fronte. Algoritem bomo opisali v vrstnem redu izvajanja: • inicializacija, • prebiranje in • finalizacija. 44
  • 63. POGLAVJE 4. PREBIRNI ALGORITEM CDT 45 4.1 Inicializacija Stalen strošek prebirnih algoritmov je faza inicializacije, katere osnovna naloga je priprava podatkov tako, da algoritem lahko prične s prebiranjem. Obvezen korak je ureditev geometrijskih objektov glede na izbran način prebiranja. Pri nas gre za drsenje prebirne premice po ravnini, zato je najenostavneje, če točke uredimo naraščajoče v smeri ene izmed koordinatnih osi (v našem primeru smo izbrali koordinato y). A ker omejena Delaunayeva triangulacija poleg množice točk na vhodu prejme še množico vnaprej definiranih robov oz. ravninski graf G = {P, Ec }, moramo pri urejanju točk paziti, da ohranimo prvotne robove. Gre za povsem implementacijski problem, saj so robovi zaradi varčnosti prostora na disku podani s parom oglišč, ki hranijo položaj točke v P . Pri urejanju točk le-te "premečemo", zato moramo s preprosto preslikavo po ali med urejanjem točk osvežiti tudi robove Ec , da ohranimo prvotno sliko. Vsak rob iz Ec je definiran kot eij = pi pj , kjer sta pi ,pj ∈ P . Zaradi praktičnega razloga robove usmerimo, tako da je oglišče roba, ki ga prebirna premica obišče prej, pri poimenovanju na prvem mestu, oglišče roba, ki ga premica obišče kasneje, pa na drugem mestu. Točko pi imenujemo začetna točka roba in točko pj končna točka. Če imamo opravka z vodoravnim robom, za začetno oglišče vzamemo tisto, katere točka ima manjšo koordinato x. Za rob pi pj velja: yi < yj ali yi = yj in xi < xj . Pri pripravi podatkov vsaki točki pi priredimo množico robov Ei , ki vsebuje vse tiste robove, ki se končajo v točki pi (pi je končna točka roba, torej vse robove oblike px pi , kjer je x indeks začetne točke). Poglejmo primer na sliki 4.1. Točka p0 predstavlja začetno oglišče robov e0,5 in e0,8 . Ker se p0 nikjer ne pojavi kot končno oglišče, je njena E0 ={}. Prazne so tudi množice E1 , E2 , E4 in E6 . Nasprotno velja za točke p3 (E3 ={e1,3 , e2,3 }), p5 (E5 ={e0,5 }), p7 (E7 ={e5,7 ,e6,7 }) in p8 (E8 ={e0,8 ,e5,8 }).
  • 64. POGLAVJE 4. PREBIRNI ALGORITEM CDT 46 Slika 4.1: Točke in robovi po urejanju v fazi inicializacije. Zadnji korak inicializacije prebirnega algoritma za navadno DT v fazi inicializacije ustvari še prvi trikotnik, s katerim zgradi začetno napredujočo fronto in začetno spodnjo konveksno lupino. Glede na položaj prvih k točk (k ≥ 3) je možnih več začetnih konfiguracij, ki so prikazane v prejšnjem poglavju (slika 3.14). Če si ob vseh teh primerih poskušamo predstavljati še robove, je različnih situacij še veliko več. Zato uvedemo rešitev, ki spretno zaobide inicializacijsko raznovrstnost tako, da vpeljemo umetni začetni trikotnik, kot kaže slika 4.2. Ustvarimo dve umetni točki p−1 in p−2 , ki ležita levo oz. desno od skrajne leve oz. skrajne desne točke iz množice P , njuna koordinata y pa je manjša od najnižje točke p0 . Koordinate določimo po naslednji formuli: p−1 = (xmin − δx , ymin − δy ) p−2 = (xmax + δx , ymin − δy ) δx = 0.3(xmax − xmin ) δy = 0.3(ymax − ymin )
  • 65. POGLAVJE 4. PREBIRNI ALGORITEM CDT 47 Slika 4.2: Tvorba velikega trikotnika. Umetni trikotnik se tekom triangulacije ne spreminja, saj algoritem legalizacije, ki ga uporabljamo za vzdrževanje Delaunayevega pravila v fazi prebiranja, v umetni trikotnik ne poseže. Tudi vse trikotnike, ki jih tvorimo s pomočjo umetnih točk p−1 in p−2 , v legalizaciji preskočimo. Z umetnim trikotnikom na enostaven in vselej enak način tvorimo začetno napredujočo fronto F = {p−1 , p0 , p−2 }. Na ta način smo potencialno obravnavno zaporedja kolinearnih točk prenesli v fazo prebiranja, kjer niso deležne posebne pozornosti. Z vpeljavo začetnega umetnega trikotnika pridobimo tudi pri prebiranju, saj se zmanjša število različnih obravnav točke. Z uvedbo velikega začetnega trikotnika tudi nekoliko izgubimo, ker ne gradimo spodnje konveksne lupine, vendar so rezultati pokazali, da je ta strošek zanemarljiv. 4.2 Prebiranje Osrednji del algoritma predstavlja prebiranje oz. drsenje prebirne premice po ravnini v smeri naraščanja koordinate y. Na svoji poti naleti na dve vrsti dogodkov: • dogodek točke nastopi takrat, ko se premica dotakne točke pi (s točko pi ustvarimo nov trikotnik in ga dodamo v triangulacijo); • dogodek roba nastopi takrat, ko se premica dotakne točke pj , kjer pj
  • 66. POGLAVJE 4. PREBIRNI ALGORITEM CDT 48 predstavlja končno točko roba pi pj (triangulacijo preuredimo tako, da rob pi pj predstavlja stranico trikotnikov triangulacije). Dogodka sta med seboj povezana. Vsak dogodek roba je hkrati dogodek točke, obratna implikacija ne velja. Pravimo, da dogodek roba sledi dogodku točke, če točka predstavlja končno točko oglišča roba, sicer gre le za navaden dogodek točke. Izpis 3 prikazuje ogrodje prebiranja. Glavna zanka obravnava dogodke točk, kjer v trenutno triangulacijo T vstavimo obiskano točko pi . Nato preverimo, če je točki pi pripadajoč seznam robov Ei prazen. Če ni prazen, notranja zanka poskrbi, da obravnavamo vsak rob e ∈ Ei . Ko v triangulacijo T vstavimo vse robove točke pi , izvedemo še hevristiki za glajenje napredujoče fronte. Izpis 3 Ogrodje prebirnega algoritma za CDT procedure Prebiranje(P) for i := 1 to size(P ) do pi = P [i]; T := VstaviTočko(pi , T ); if size(Ei ) > 0 then for j := 1 to size(Ei ) do e := Ei [j]; T := VstaviRob(e, T ); IzvediHevristiko1(); IzvediHevristiko2(); Preden nadaljujemo z natančnim opisom postopkov vstavljanja točk in robov, si poglejmo lastnosti in implementacijo napredujoče fronte.
  • 67. POGLAVJE 4. PREBIRNI ALGORITEM CDT 49 4.2.1 Napredujoča fronta in podatkovne strukture Napredujoča fronta (krajše fronta) F predstavlja zgornjo mejo trenutne triangulacije in s tem mesto dodajanja novih trikotnikov. Njena osnovna naloga je, da vstavljajoči točki poišče najbližje ležeči rob, s katerim bomo zgradili nov trikotnik. Geometrijska oblika fronte je lomljenka, sestavljena iz robov mejnih trikotnikov (slika 4.3). Trikotniške robove, ki ležijo na napredujoči fronti, imenujemo rob fronte, točkam pa pravimo točke fronte. Fronta omogoča dostop do mejnih trikotnikov, ki jih potrebujemo pri vzdrževanju sosednostnih povezav vstavljenih trikotnikov s trikotniki ob fronti. Napredujoča fronta je enodimenzionalna podatkovna struktura, katere ključ iskanja je koordinata x, ki se skriva znotraj točke pi (slika 4.3). Točke fronte so urejene, kar je idealno za hitro iskanje. Vsaka točka fronte hrani dva osnovna podatka, to sta oglišče fronte, ki predstavlja točko pi , in trikotnik ti , ležeč ob robu fronte pi pi+1 . Tako imamo dovolj informacij, da lahko tvorimo nov trikotnik in ga povežemo z ustreznim trikotnikom dane triangulacije. Puščice na sliki predstavljajo kazalec na trikotnik, ležeč ob robu fronte (trikotnik ti na sliki). Ko v fronto vstavimo novo točko p, najprej poiščemo rob fronte tako, da vstavljajoči točki poiščemo najbližjo točko pc , s pomočjo katere najdemo rob fronte (to je lahko bodisi rob pc−1 pc bodisi ec,c+1 . Z novim trikotnikom fronto osvežimo, zato moramo obvezno osvežiti kazalce na trikotnike. Ker pri iskanju uporabimo le koordinato x točke p, govorimo o projekciji točke p na fronto. Žalik je fronto implementiral kot kombinacijo sekljalne tabele in dvojno povezanega dinamičnega seznama, ki jo je poimenoval preprost seznam s preskakovanjem (angl. simple skip-list). Takšno implementacijo smo izbrali tudi mi. Alternativa je uporaba uravnoteženih dvojiških iskalnih dreves, kot sta drevo AVL ali rdeče-črno drevo ali ena izmed izvedb seznamov s preskakovanjem. Njihovo
  • 68. POGLAVJE 4. PREBIRNI ALGORITEM CDT 50 Slika 4.3: Napredujoča fronta in osnovni nivo podatkovne strukture. uporabnost je pokazal Zadravec s sodelavci [87, 88]. 4.2.2 Dogodek točke Ob dogodku točke z iskanjem v podatkovni strukturi napredujoče fronte poiščemo ustrezen rob fronte. Projekcija točke pi lahko pade na različne dele fronte, situacije so naslednje [92]: • Sredinski primer: projekcija točke pi pade na rob fronte; • Levi primer: projekcija točke pi pade na točko fronte; • Robni primer: gre za posebno situacijo sredinskega primera. Točka pi se nahaja na robu fronte. Sredinski primer (slika 4.4a) obravnavamo tako, da zgradimo nov trikotnik l,r,i (slika 4.4b) in osvežimo fronto tako, da vsebuje vstavljeno točko pi . Osvežimo tudi kazalec na trikotnik v točki pl . Da zadostimo Delaunayevemu pravilu, pokličemo postopek legalizacije (slika 4.4c). Levi primer (slika 4.5a) obravnava situacijo, kjer projekcija točke pi pade na točko fronte. Ker vemo, da bo hevristika (opisana v nadaljevanju) zgradila dodaten
  • 69. POGLAVJE 4. PREBIRNI ALGORITEM CDT 51 trikotnik, lahko to storimo že zdaj. Zgradimo dva nova trikotnika l−,l,i in l,r,i (slika 4.5b). Točko pl bi sicer morali odstraniti iz fronte, a je hitreje, če točko pl le zamenjamo s točko pi ter osvežimo kazalec na trikotnik v točki pl− . Za oba nova trikotnika pokličemo legalizacijo. Robni primer, kjer točka pi leži neposredno na robu fronte, razdelimo, točko pi pa vstavimo v fronto. Pri algoritmu klasične DT moramo obravnavati tudi situaciji, kjer projekcija točke pi zgreši napredujočo fronto (pade levo oz. desno od F). Omenjeni situaciji za razliko od zgoraj naštetih zahtevata večji poseg v podatkovne strukture, saj vstavljanje točke spremeni tako napredujočo fronto kot tudi spodnjo konveksno lupino. Zaradi vpeljave začetnega umetnega trikotnika se situacijama izognemo. Umetni trikotnik namreč zagotavlja, da vsaka projekcija fronto vselej zadene. Po končanem vstavljanju pokličemo hevristični funkciji za preprečevanje nastajanja zarez in globeli. Postopek je enak kot v prebirnem algoritmu DT (glej podpoglavje 3.2.1.3 in [92]). 4.2.3 Dogodek roba Dogodek roba poskrbi, da v triangulacijo na zahtevano mesto vstavimo vse omejujoče robove. Dogodek roba sledi dogodku točke pi , če seznam robov točke Ei ni prazen. Točka pi je torej končna točka enega ali več omejujočih robov ex,i = px pi , kjer px predstavlja začetno točko poljubnega roba iz Ei (takšen primer vidimo na sliki 4.7). Če imamo opravka z vstavljanjem več robov hkrati, robove vstavimo enega za drugim. Vstavljajoč rob bomo zaradi preglednosti označili z e, njegovo začetno oglišče pa naj predstavlja točka pj (e =pj pi ). Zaradi različnih preverjanj vpeljemo vektor − , ki je obrnjen v nasprotni smeri roba e in ga definiramo kot → ve → = pj − pi . − ve
  • 70. POGLAVJE 4. PREBIRNI ALGORITEM CDT 52 Slika 4.4: Sredinski primer: projekcija točke pade na rob fonte (a), tvorba trikotnika (b) in legalizacija (c). Načine vstavljanja robov v triangulacijo smo že opisali. Odločili smo se za implementacijo postopka vstavljanja robov z brisanjem. Ideja vstavljanja je preprosta - v triangulaciji odstranimo vse Delaunayeve robove (in trikotnike), ki jih rob e preseka, nato pa območje ob e ponovno trianguliramo, pri tem pa upoštevamo Delaunayevo pravilo. Rob e označimo kot stalen in postane del končne CDT . Če se spomnimo dvokoračnih postopkov za CDT, vidimo, da potrebujemo iskalno podatkovno strukturo že zaradi dostopa do oglišč roba e. Prednost našega pristopa je sprotnost vstavljanja, kar s pridom izkoristimo. Ko v triangulacijo vstavimo točko pi , ki ji sledi dogodek roba e, končnega oglišča roba sploh ni potrebno iskati. Vstavljanje robov sicer krši osnovno načelo prebirnih algoritmov, ki pravi, da je del preiskane množice podatkov že del končne rešitve, saj bomo ustvarjeno triangulacijo prerešetali, a nič zato. Že osnovni Žalikov pristop je izjema. Za vsakim novo tvorjenim trikotnikom sledi legalizacija, značilna za inkrementalne metode, ki