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
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