44

Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

UNIVERZA V MARIBORU

FAKULTETA ZA ELEKTROTEHNIKO, RA�UNALNI�TVO IN

INFORMATIKO

Denis Horvat

VSEBNOSTNI TEST V PROSTORU Z

ALGORITMOM POLTRAKA

DIPLOMSKO DELO

Maribor, avgust 2011

Page 2: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

I

Diplomsko delo univerzitetnega ²tudijskega programa

VSEBNOSTNI TEST V PROSTORU Z

ALGORITMOM POLTRAKA

Avtor: Denis Horvat

�tudijski program: Univerzitetni, Ra£unalni²tvo in informatika

Mentor: prof. dr. Borut �alik

Somentor: asistent Bojan Rupnik, univ. dipl. inº.

Maribor, avgust 2011

Page 3: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC
Page 4: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

II

Zahvaljujem se mentorju, prof. dr. Borutu �aliku,

za pomo£ in vodenje pri opravljanju diplomskega

dela. Prav tako se zahvaljujem somentorju Bo-

janu Rupniku. Hvala tudi Larisi, ki je med pisan-

jem prena²ala moje muhe, in star²em, ki so mi

omogo£ili ²tudij in me podpirali.

Page 5: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

III

VSEBNOSTNI TEST V PROSTORU Z

ALGORITMOM POLTRAKA

UDK: 00.92(043.2)

Klju£ne besede: 3D vsebnostni test, ra£unalni²ka geometrija, drevesa kd, delitev

prostora, algoritem

Povzetek:

V diplomskem delu re²ujemo problem vsebnosti v prostoru s pomo£jo poltraka. Problem

re²ujemo brez predhodne priprave podatkov in s pripravo podatkov. Osredoto£imo se

predvsem na metodo s pripravo podatkov, ki za delitev prostora uporablja drevesa kd.

Opi²emo tudi problem geometrijske robustnosti in zanj podamo moºne re²itve. Vse metode

testiramo na razli£nih modelih in jih med seboj primerjamo.

Page 6: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

IV

CONTAINMENT TEST IN 3D SPACE

WITH THE RAY ALGORITHM

UDK: 00.92(043.2)

Keywords: 3D inclusion test, computational geometry, kd-trees, spatial subdivi-

sion, algorithm

Summary:

In this thesis we are solving the inclusion test in three-dimensional space with the help of

rays. The problem is solved with and without data preparation. Our main focus was the

data preparation method, which uses the kd-tree structure for spatial subdivision. We also

describe the geometry robustness problem and the solutions for solving it. All methods

are tested on various models and compared with each other.

Page 7: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

Kazalo

1 Uvod 1

1.1 Cilji in predpostavke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

1.2 Struktura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2 Vsebnostni test v ravnini 3

2.1 Metoda vsote kotov . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2.2 Metoda enakih predznakov . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.3 Metoda baricentri£nih koordinat . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

3 Vsebnostni test v prostoru s pomo£jo poltraka 8

3.1 Inicializacija . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

3.2 Iskanje prese£i²£a ravnine trikotnika s poltrakom . . . . . . . . . . . . . . . . . . 9

3.3 Vsebnostni test brez priprave podatkov . . . . . . . . . . . . . . . . . . . . . . . . 11

3.4 Vsebnostni test s pripravo podatkov . . . . . . . . . . . . . . . . . . . . . . . . . 12

4 Implementacija dreves kd za ugotavljanje vsebnosti v prostoru s pomo£jo

poltraka 16

4.1 Struktura vozli²£a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

4.2 Konstrukcija drevesa kd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

4.2.1 Dolo£itev poloºaja lo£itvene ravnine . . . . . . . . . . . . . . . . . . . . . 19

4.2.2 Zaklju£itveni kriteriji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

4.3 Uporaba drevesa kd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

4.4 Teºave z numeri£no stabilnostjo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

5 Rezultati in primerjave 27

6 Sklep 32

Page 8: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

Poglavje 1

Uvod

Vsebnostni test (angl. inclusion test) predstavlja zelo pomembno operacijo v ra£unalni²ki

geometriji. Z uporabo vsebnostnega testa ugotovimo, ali se to£ka nahaja v dolo£enem

objektu, kar predstavlja osnovno operacijo, ki je nepogre²ljiva vse od podro£ja ra£unal-

ni²kih iger, do okolij GIS (Geographic information system). Ker vsebnostni test pona-

vadi predstavlja za£etek bolj zapletene operacije, lahko mo£no vpliva na skupno hitrost

dolo£enega algoritma, zato je pomembno, da je zanesljiv in hiter.

Obstaja veliko algoritmov, ki re²ujejo problem vsebnostnega testa, a v osnovi bi jih

lahko razdelili na algoritme, ki za svoje delovanje ne potrebujejo priprave podatkov in

algoritme, ki pripravo podatkov potrebujejo.

1.1 Cilji in predpostavke

Cilji, ki smo si jih postavili, so implementirati in analizirati algoritme, ki re²ujejo problem

vsebnosti v prostoru. Z njimi bomo posku²ali dose£i £im hitrej²a izvajanja in ob tem

ohraniti £im ve£jo robustnost.

V podanih re²itvah predpostavljamo, da so 3D objekti predstavljeni s trikotni²ko mreºo

in ne vsebujejo lukenj. Velikost modelov ne bo presegala velikosti hitrega pomnilnika.

Page 9: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

1.2 STRUKTURA 2

1.2 Struktura

Diplomsko delo je, skupaj z uvodnim, razdeljeno na 6 poglavij. V poglavju 2 predstavimo

nekaj re²itev problema vsebnosti v ravnini. V 3. poglavju opi²emo, kako se lahko problema

vsebnosti lotimo v prostoru s pomo£jo poltraka s pripravo in brez priprave podatkov.

Poglavje 4 sestoji iz podrobnega opisa implementacije dreves kd, s katerimi u£inkovito

razdelimo prostor. Vsebina poglavja 5 je sestavljena iz primerjav in testnih rezultatov

opisanih algoritmov. Delo povzamemo v poglavju 6.

Page 10: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

Poglavje 2

Vsebnostni test v ravnini

Preden se lotimo problema v prostoru, je smiselno, da najprej podamo re²itve v ravnini.

Re²itve bomo uporabili v poglavju 3, ko bomo izvajali vsebnostni test v prostoru. Obstaja

veliko algoritmov, ki problem vsebnosti re²ujejo za vse vrste mnogokotnikov. Glede na

to, da bomo obravnavali modele, predstavljene s trikotni²ko mreºo, se bomo omejili le na

trikotnike. Opisali bomo tri metode, ki smo jih implementirali in ki u£inkovito in brez

priprave podatkov re²ujejo problem to£ke v trikotniku (angl. point in triangle test). Treba

je omeniti, da imajo algoritmi za ekstremne primere teºave s kon£no aritmetiko, ki se ji

bomo posvetili v podpoglavju 4.4.

2.1 Metoda vsote kotov

Imejmo enostaven mnogokotnik brez lukenj z n ogli²£i. Naj bo to£ka P testirana to£ka.

Vsebnostni test izvedemo na naslednji na£in:

• iz to£ke P potegnimo poltrake v ogli²£a mnogokotnika,

• izra£unamo in se²tejemo kote med sosednjimi poltraki, kjer kot med dvema vektor-

jema izra£unamo s pomo£jo skalarnega produkta:

θ = arccos

(~a~b

|~a||~b|

)(2.1)

• £e je dobljen rezultat enak 2π (360◦), to£ka leºi znotraj mnogokotnika, £e je 0, pa

to£ka leºi izven mnogokotnika (slika 2.1).

Page 11: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

2.2 METODA ENAKIH PREDZNAKOV 4

Metoda vsote kotov [6] ima £asovno zahtevnost O(n) in je precej po£asna, saj je ra£u-

nanje kotov zahtevna operacija. Ta po£asnost je v na²em primeru manj²a, saj moramo za

trikotnik opraviti samo 3 izra£une, a je metoda vsote kotov dale£ najpo£asnej²a izmed treh

opisanih v tem poglavju. Metodo je mogo£e uporabiti tudi pri mnogokotnikih z luknjami,

a pod pogojem, da vemo na katerem nivoju se nahajajo.

Slika 2.1: Metoda vsote kotov

2.2 Metoda enakih predznakov

Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC sledijo v

smeri urinega kazalca. Naj bo P testirana to£ka, A in B pa dve izmed ogli²£ mnogokot-

nika. �e razdelimo prostor po robu AB (z vektorjem −→w ), je ena stran, ki nikoli ne vsebuje

mnogokotnika. Stran, na kateri leºi to£ka, dobimo s pomo£jo vektorskega produkta.

Slika 2.2: Dolo£itev strani to£ke glede na rob mnogokotnika

Glede na sliko 2.2 izra£unajmo vektorski produkt med −→w in −→u . Dobimo vektor, ki kaºe

proti nam. V nasprotnem primeru, £e izra£unamo vektorski produkt med −→w in −→v , pa do-

bimo vektor, ki kaºe vstran od nas. Sklepamo lahko, da bodo vsi rezultati vektorskega pro-

dukta s to£kami nad −→w imeli enake predznake, in sicer nasprotne kot rezultati vektorskega

Page 12: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

2.3 METODA BARICENTRI�NIH KOORDINAT 5

produkta s to£kami, ki so pod −→w. Metoda enakih predznakov [1, 15] predpostavlja, da,

£e bodo rezultati vektorskih produktov vseh stranic imeli enak predznak, je to£ka znotraj

mnogokotnika, v kolikor pa med preverjanjem ugotovimo, da se je predznak spremenil,

lahko test predhodno prekinemo, kar ²e dodatno pohitri testiranje. Test prikazuje slika

2.3.

Slika 2.3: Vsebnostni test enakih predznakov

�asovna zahtevnost algoritma je v najslab²em primeru O(n) in je veliko hitrej²i in

natan£nej²i kot algoritem vsote kotov, saj je izra£un vektorskega produkta hitra operacija.

2.3 Metoda baricentri£nih koordinat

Baricentri£ni koordinatni sistem (angl. Barycentric coordinate system) je leta 1827 pred-

stavil August Ferdinand Möbius. Opisal ga je kot koordinatni sistem, v katerem je lokacija

to£ke dolo£ena kot sredi²£e mase oziroma baricentra mas, postavljenega na ogli²£a trikot-

nika. Baricentri£ne koordinate so oblika homogenih koordinat. Metodo, kako s pomo£jo

baricentri£nih koordinat re²iti vsebnostni test v trikotniku, sta predlagala Möller in Trum-

bore [3].

To£ke trikotnika ABC tvorijo ravnino v prostoru. To£ke so dane s: T(u, v, w) = uA +

vB + wC, kjer so (u, v, w) baricentri£ne koordinate to£ke na ravnini, tako da je u + v +

w = 1 (slika 2.4).

Page 13: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

2.3 METODA BARICENTRI�NIH KOORDINAT 6

Slika 2.4: Baricentri£ne koordinate

Izberimo si eno to£ko trikotnika in predvidevajmo vse poloºaje drugih to£k, relativno glede

na to to£ko. Na primer, izberimo si to£ko A (slika 2.5). Nadalje potrebujemo ²e bazne

vektorje, s pomo£jo katerih bomo lahko izra£unali vse to£ke na tej ravnini. Za bazo vza-

memo roba trikotnika, ki se stikata z A: −→n = B - A in −→m = C - A. Zdaj lahko iz te to£ke

pridemo do katere koli to£ke na ravnini, tako da za£nemo pri to£ki A in se sprehodimo

dolo£eno dolºino po −→m in −→n . Glede na re£eno lahko vsako to£ko na ravnini zapi²emo kot:

P = A+ u−→m + v−→n (2.2)

�e gledamo ena£bo (2.2) in sliko 2.5 opazimo, da £e sta u ali v manj²a od 0, potem gremo

izven trikotnika, enako velja, £e je u+v > 1. Za ustrezen izra£un baricentri£nih koordinat

u in v izhajamo iz ena£be 2.2:

(P − A) = u−→m + v−→n−→w = u−→m + v−→n

(2.3)

Imamo dve neznanki, zato potrebujemo dve ena£bi. Ena£bo 2.3 mnoºimo enkrat z vek-

torjem −→m , drugi£ z −→n . Rezultat sta ena£bi za u in v :

u =(−→n−→n )(−→w−→m)− (−→n−→m)(−→w−→n )

(−→m−→m)(−→n−→n )− (−→m−→n )(−→n−→m)(2.4)

v =(−→m−→m)(−→w−→n )− (−→m−→n )(−→w−→m)

(−→m−→m)(−→n−→n )− (−→m−→n )(−→n−→m)(2.5)

Page 14: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

2.3 METODA BARICENTRI�NIH KOORDINAT 7

Glede na to, da sta imenovalca v ena£bah enaka, lahko algoritem ²e dodatno pohitrimo

tako, da imenovalec izra£unamo samo enkrat. �e dobljen u in v zadostujeta pogojem u

> 0, v > 0 in u + v < 1, potem to£ka leºi znotraj trikotnika.

Slika 2.5: Prikaz vsebnostnega testa z baricentri£nimi koordinatami

Rezultat je algoritem, ki se izvede ²e hitreje kot algoritem enakih predznakov, saj je

ra£unsko manj zahteven.

Page 15: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

Poglavje 3

Vsebnostni test v prostoru s pomo£jo

poltraka

Ideja za test vsebnosti s pomo£jo sledenja poltraku (angl. ray tracing) je naslednja: iz

to£ke, ki sluºi kot izhodi²£e, po²ljemo poltrak v eno smer. Poltraki vseh testiranih to£k

bodo poslani v enako smer. V primeru, da je ²tevilo prese£i²£ z objektom liho, je to£ka v

objektu, v nasprotnem primeru je zunaj objekta (slika 3.1).

Slika 3.1: Vsebnostni test v prostoru s pomo£jo poltraka

Page 16: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

3.1 INICIALIZACIJA 9

3.1 Inicializacija

Na²a implementacija je sposobna nalagati modele formata VRML v2.0 (angl. Virtual

Reality Modeling Language). Format je standarden za prikaz tridimenzionalne vektorske

gra�ke na svetovnem spletu. Zamenjal ga je format X3D. V datoteki so zapisana ogli²£a

(angl. vertices) in lica (angl. faces) 3D objekta skupaj z barvami, teksturami, svetilnostjo.

Poleg tega VRML podpira tudi animacije, zvoke in interakcijo z geometrijskimi modeli.

V na²i implementaciji med nalaganjem shranjujemo podatke modela v dinami£no polje,

ki uporablja strukturo triangle. Ta struktura vsebuje:

• 3 ogli²£a trikotnika in

• normalo trikotnika.

Ogli²£a in normala so tipa vector3, ki vsebuje koordinate x, y in z. Normalo za vsako lice

izra£unamo ºe med nalaganjem modela, saj jo potrebujemo med vsebnostnim testom, ki

je posledi£no hitrej²i. To normalo uporabljamo tudi za osnovno plosko sen£enje (angl. �at

shading) modelov, izra£unamo pa jo s pomo£jo vektorskega produkta. Med nalaganjem

i²£emo tudi ekstremni ogli²£i celotnega objekta. Ti ogli²£i bomo potrebovali kasneje pri

vsebnostem testu s pripravo podatkov, opisanemu v podpoglavju 3.4.

3.2 Iskanje prese£i²£a ravnine trikotnika s poltrakom

Uporabljeni modeli so sestavljeni iz trikotnikov, zato je prese£i²£e z modelom v bistvu

prese£i²£e z enim izmed trikotnikov, ki je del modela. Test, £e poltrak (angl. ray) seka

posamezen trikotnik naredimo tako, da:

• poi²£emo prese£i²£e z ravnino posameznega trikotnika,

• nad tem prese£i²£em izvedemo vsebnostni test z eno izmed metod poglavja 2.

Preden lahko izra£unamo prese£i²£e z ravnino trikotnika, moramo omeniti, da lahko vsako

to£ko na poltraku izrazimo po ena£bi (3.1), kjer predstavlja O izhodi²£e poltraka, t dolºino

na poltraku in−→D smerni vektor.

P = O + t−→D (3.1)

Page 17: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

3.2 ISKANJE PRESE�I��A RAVNINE TRIKOTNIKA S POLTRAKOM 10

Se pravi, £e ugotovimo dolºino t na poltraku, potem bomo ugotovili, kje leºi prese£i²£e z

ravnino testiranega trikotnika. Izhajamo iz osnovne ena£be za ravnino, ki jo lahko izrazimo

na ve£ na£inov [12]:

• de�nicija iz normale ravnine in to£ke na ravnini,

• de�nicija iz dveh vektorjev ravnine in to£ke na ravnini ter

• de�nicija iz treh to£k na ravnini.

V na²i implementaciji smo si izbrali prvi na£in, saj normalo trikotnika (ki je hkrati tudi

normala ravnine tega trikotnika) poznamo ºe iz inicializacije modela (podpoglavje 3.1).

Preden posku²amo najti prese£i²£e poltraka z ravnino, najprej preverimo paralelnost s

skalarnim produktom med normalo ravnine in smernim vektorjem. V primeru rezultata 0,

lahko preverjanje zaklju£imo, saj je poltrak vzporeden z ravnino (slika 3.2) in posledi£no

ne more sekati testiranega trikotnika. V nasprotnem primeru nadaljujemo z ra£unanjem.

Slika 3.2: Poltrak, vzporeden glede na ravnino trikotnika

Vzemimo ena£bo ravnine (3.2), kjer je Pn ena izmed to£k trikotnika,−→N normala ravnine

in d oddaljenost ravnine od izhodi²£a (0,0,0).

0 = Pn ∗−→N + d //izrazimo d (3.2)

d = −(Pn ∗−→N )

Manjka nam ²e t (dolºina po poltraku). Uporabimo ena£bo (3.2) in namesto Pn vstavimo

Page 18: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

3.3 VSEBNOSTNI TEST BREZ PRIPRAVE PODATKOV 11

ena£bo (3.1). Dobimo:

0 = (O + t−→D) ∗

−→N + d //izrazimo t (3.3)

t =−(O ∗

−→N + d)

−→D ∗ ~N

V primeru, da je t iz ena£be (3.3) negativen, se prese£i²£e nahaja za izhodi²£em poltraka

(slika 3.3), kar nas ne zanima in preverjanje zaklju£imo. Ko pa je t pozitiven, rezultat

vstavimo v ena£bo (3.1). Dobimo prese£i²£e poltraka z ravnino trikotnika (slika 3.4).

Slika 3.3: Prese£i²£e leºi za izhodi²£em poltraka

Slika 3.4: Prese£i²£e leºi na ravnini

3.3 Vsebnostni test brez priprave podatkov

Vsebnostni test brez priprave podatkov za svoje delovanje ne potrebuje nobenega pred-

ra£unanja ali predshranjevanja podatkov. Za ta test smo implementirali osnovno naivno

metodo testiranja vsebnosti. Bistvo te metode je, da z danim poltrakom testiramo vsak

trikotnik objekta. Metoda deluje, a je zelo po£asna, ²e posebej, £e imamo v modelu veliko

trikotnikov in testiramo ve£ to£k. Testiranje prese£i²£a med poltrakom in posameznim

Page 19: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

3.4 VSEBNOSTNI TEST S PRIPRAVO PODATKOV 12

trikotnikom je ra£unsko zahtevno. Najprej moramo poiskati prese£i²£e ravnine trikotnika

s poltrakom in potem izvesti vsebnostni test nad tem prese£i²£em in trikotnikom. Zaradi

po£asnosti je pametno, da razmislimo o moºnih pohitritvah:

• hitrej²i vsebnostni test to£ke v trikotniku,

• hitrej²e iskanje prese£i²£a poltraka z ravnino in

• zmanj²anje ²tevila testiranj.

Glede na to, da se prvi dve komponenti izvedeta ºe relativno hitro, nam ostane tretja

to£ka, ki med drugim vpliva na prvi dve in bi lahko drasti£no izbolj²ala hitrost na²ega

testa. Na£inom, kako zmanj²ati ²tevilo testiranj, smo posvetili naslednje podpoglavje,

kjer bomo s pripravo podatkov dosegli bolj²e rezultate.

3.4 Vsebnostni test s pripravo podatkov

Kot smo ºe nakazali v prej²njem podpoglavju, je za doseganje bolj²ih rezultatov potrebno

zmanj²ati £im ve£ nepotrebnih preverjanj, £e poltrak seka trikotnik. To naredimo tako,

da se omejimo samo na prostor, kjer se nahaja poltrak. Preverimo samo trikotnike, ki so

v tem omejenem prostoru. Iz slike 3.5 vidimo, da je ve£ina testiranj nepotrebnih. Slika

prikazuje, kako bi lahko preverili eno to£ko, na² cilj pa je, kako preveriti poljubno ²tevilo

to£k, ne da bi morali za vsako posebej izra£unati podro£je preverjanja. Ponudi se re²itev:

1. Opazovano sceno predhodno razdelimo s pomo£jo podatkovne strukture.

2. Shranjeno razdelitev uporabimo ob izvajanju testiranja.

V nadaljevanju na kratko opi²emo nekaj moºnosti, kako u£inkovito razdeliti prostor (ve£

o tem [4]).

Page 20: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

3.4 VSEBNOSTNI TEST S PRIPRAVO PODATKOV 13

Slika 3.5: Omejitev testiranj na dolo£eno obmo£je (ozna£eno z rde£o)

Enakomerno porazdeljene mreºe

Ena metoda je, da opazovan prostor prekrijemo s tridimenzionalno enakomerno porazde-

ljeno mreºo (angl. uniform grid). S tem doseºemo, da se prostor deli na veliko celic enakih

velikosti. Vsak objekt poveºemo s celico, ki ga vsebuje. Dostop do celic je preprost: glo-

balne koordinate delimo z velikostjo celice, da dobimo koordinate celice. Posledi£no je tudi

poenostavljen dostop do sosednih celic. Teºava, s katero se soo£imo ob gradnji mreºe, je

velikost celic, saj so lahko objekti vsebovani v ve£ celicah, kar pa ni ugodno, saj moramo

posledi£no preveriti ve£ celic.

Hierarhi£no porazdeljene mreºe

Nadaljevanje ideje enakomerno porazdeljene mreºe predstavljajo hierarhi£no porazdeljene

mreºe (angl. hierarhical grids), ki se u£inkovito spopadejo s problemom velikosti celic, te

pa predstavljajo teºave predvsem pri objektih z neenakomerno porazdelitvijo. Celice so

predstavljene na razli£nih nivojih in so razli£nih velikosti. Del objekta je lahko vsebovan

v najve£ eni celici. �tevilo nivojev je lahko razli£no. Ta razdelitev (slika 3.6) je zelo

u£inkovita, ko imamo opravka z dinami£nimi objekti.

Page 21: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

3.4 VSEBNOSTNI TEST S PRIPRAVO PODATKOV 14

Slika 3.6: Hierarhi£no porazdeljene mreºe

Drevesa

Ideja dreves je, da rekurzivno delijo prostor, dokler ni doseºen zaklju£ni kriterij (dolo£ena

globina, ²tevilo objektov v trenutni celici). Poznamo ve£ vrst dreves:

Osmi²ka/²tiri²ka drevesa: Osmi²ko drevo (angl. octree) rekurzivno deli trenutno

celico na polovici vsake osi, da dobi 8 novih celic (slika 3.7). V ravnini uporabljamo ²tiri²ka

drevesa (angl. quadtree), ki celico razdelijo na 4 nove celice.

Slika 3.7: Deljenje prostora z osmi²kim drevesom

Page 22: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

3.4 VSEBNOSTNI TEST S PRIPRAVO PODATKOV 15

BSP drevesa: Drevo binarne delitve prostora (angl. Binary Space Partitoning tree -

BSP) je bilo razvito za re²evanje problema zakritih ploskev, njihovo uporabo pa najdemo

tudi v aplikacijah sledenja ºarku in zaznavanja trkov. Drevo BSP ima dve varianti: osno

poravnano in mnogokotni²ko poravnano(slika 3.8). Mnogokotni²ka varianta za delitveno

ravnino vzame ravnino, na kateri temelji mnogokotnik. Osno orientirano varianto, ime-

novano tudi drevo kd, smo implementirali v na²i aplikaciji, zato jo bomo podrobno opisali

v poglavju 4.

Slika 3.8: Mnogokotni²ko poravnana varianta drevesa BSP

Page 23: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

Poglavje 4

Implementacija dreves kd za

ugotavljanje vsebnosti v prostoru s

pomo£jo poltraka

Za hitro in u£inkovito opravljanje testa vsebnosti moramo predhodno razdeliti prostor,

da zmanj²amo ²tevilo testiranj med trikotniki in poltrakom. Nekaj metod razdeljevanja

prostora smo na kratko opisali v podpoglavju 3.4. V na²i aplikaciji smo izvedli vsebnostni

test s pomo£jo osno poravnane variante drevesa BSP, imenovane tudi drevo kd.

Drevo dimenzije k (angl. k-dimensional tree) je binarno drevo, v katerem je vsako

vozli²£e k-dimenzionalna to£ka. V na²i aplikaciji smo se omejili le na tri dimenzije. Za

razliko od osmi²kega drevesa tukaj prostora ne delimo v treh dimenzijah naenkrat, ampak

vsako dimenzijo posebej v svoji globini. Delitev prostora doseºemo z ravnino (v drugi

dimenziji bi jo s £rto), ki je vedno vzporedna z eno izmed osi. Drevo kd je za vrsto objektov

S po [5] de�nirano kot: Vsako vozli²£e v je v drevesu povezano s svojo osno poravnanim

omejujo£im kvadrom (angl. axis aligned bounding box) AABB(v), ki predstavlja celico.

Celica, ki je povezana s prvim (korenskim) vozi²£em je kvader AB, ki vsebuje vse objekte

S (slika 4.2). Vsakemu nekon£nemu vozli²£u je dodeljena ravnina Hv, ki deli trenuten

AABB(v) na dve novi celici. Vsako kon£no vozli²£e (list) vsebuje seznam vseh objektov,

ki so v celici trenutnega vozli²£a. V primeru, da list vsebuje vsaj en objekt, ga imenujemo

poln list, v nasprotnem primeru pa prazen list (slika 4.1).

Page 24: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

4.1 STRUKTURA VOZLI��A 17

Slika 4.1: Prikaz delitve 2d prostora z drevesom kd

Slika 4.2: Omejujo£ kvader za£etne scene

4.1 Struktura vozli²£a

Drevo v na²em programu zgradimo s pomo£jo strukture kdNode, ki vsebuje:

• QVector<triangle*>* trianglesInCell: Dinami£no polje (vektor), ki vodi se-

znam vseh vsebovanih trikotnikov trenutnega kvadra. Uporabljamo kazalce, saj

seznam vseh trikotnikov vodi ºe spremenljivka model, ki jo inicializiramo v pod-

Page 25: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

4.1 STRUKTURA VOZLI��A 18

poglavju 3.1. Tako tukaj samo dobimo ustrezne naslove in se izognemo veliki redun-

danci enakih objektov v pomnilniku. V primeru, da vozli²£e ni list, je ta vrednost

nastavljena na NULL.

• kdNode* leftCell: Spremenljivka hrani kazalec na levo polovico razdeljene celice.

V primeru, da vozli²£e nima levega sina, ima vrednost NULL.

• kdNode* rightCell: Spremenljivka hrani kazalec na desno polovico razdeljene

celice. V primeru, da vozli²£e nima desnega sina, ima vrednost NULL.

• �oat splitPosition: Spremenljivka hrani poloºaj, na katerem smo razdelili celico.

• short axis: Spremenljivka nosi oznako osi, ki je bila razdeljena.

Velikost strukture: trianglesInCell + leftCell + rightCell + splitPosition + axis = 18

zlogov (4*4 + 2 = 18). To lahko z malce ve£ znanja iz ra£unalni²kih arhitektur brez

velikih sprememb zmanj²amo, saj lahko pri velikih modelih ²tevilo objektov zelo naraste.

Podatkovni tip �oat je predstavljen s 4 zlogi, kar pomeni 32 bitov. V primeru, da na²i

spremenljivki splitPosition spremenimo zadnja 2 bita v neki nam uporabni zastavici, bo

to imelo zelo majhen u£inek na vrednost, ki ne bo spremenila u£inkovitosti delitve. Naj

bodo osi ozna£ene z 2 bitoma: x = 00, y = 01 in z = 10. Ko delimo dolo£eno os, podatek

z njeno oznako (katero os delimo) zapi²emo v zadnja 2 bita spremenljivke splitPosition.

Vrednost enostavno spet dobimo z bitnimi operacijami in ustrezno masko. S to spremembo

zmanj²amo velikost na²e strukture na 16 zlogov. Obstajajo na£ini, kako strukturo ²e

dodatno zmanj²ati. Objekte shranjujemo zaporedno v pomnilnik (objekti se shranijo

zaporedno, £e so shranjeni v polju) in posledi£no nam ni potrebno shranjevati naslovov, saj

jih lahko izra£unamo iz naslova trenutnega vozli²£a (naslovi imajo v na²em primeru velikost

4 zloge): naslovLeviSin = naslovTrenutnoVozlisce + 4; naslovDesniSin = naslovLeviSin

+ 4. Hitrost lahko ²e dodatno izbolj²amo, £e programiramo zavestno za predpomnilnik

(angl. cache aware) [4], s £imer pa se mi nismo ukvarjali.

Page 26: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

4.2 KONSTRUKCIJA DREVESA KD 19

4.2 Konstrukcija drevesa kd

Konstrukcijo drevesa pri£nemo s celico na²e celotne scene (slika 4.2). Za£etna ekstrema

smo izra£unali ºe v inicializaciji. Celico vozli²£a rekurzivno delimo na vsakem nivoju z

lo£itveno ravnino. Osi, ki jih bomo delili, izbiramo v ciklu (angl. round robin method): x,

y, z, x, y ... Druga alternativa bi bila, da bi vedno razdelili najdalj²o os. Os lahko delimo

na poljubni poziciji, dokler je delitvena ravnina vzporedna z eno izmed osi. Pri gradnji

drevesa kd si moramo postaviti dve pomembni vpra²anji:

• Kje postaviti lo£itveno ravnino?

• Kdaj kon£ati z deljenjem prostora?

4.2.1 Dolo£itev poloºaja lo£itvene ravnine

Izbira poloºaja lo£itvene ravnine je najpomembnej²a naloga pri gradnji drevesa kd. Od-

lo£itev, kam jo postavimo, dolo£a razliko med dobrim in slabim drevesom, ki lahko zelo

vpliva na hitrost. Poznamo ve£ na£inov dolo£itve poloºaja lo£itvene ravnine:

• Prostorska mediana: Prostor delimo vedno na polovici trenutne osi. U£inkovitost

te metode je odvisna od oblike geometrijskega objekta.

• Objektna mediana: Deli prostor na tak²en na£in, da posku²a ²tevilo objektov na

vsaki strani ohraniti pribliºno enako. Tega na£ina dolo£itve poloºaja ravnine nismo

implementirali, saj ima metoda ºe v teoriji veliko pomanjkljivost [9, 5]: V primeru, da

bi prostor vedno delili glede na vsebino objektov, bi dobili bolj uravnove²eno drevo

kot pri drugih metodah. To se nam mogo£e zdi dobra ideja, a v praksi se izkaºe

za slabo. Pregledati bomo namre£ morali vsebino vseh celic, skozi katere potuje

poltrak, saj bo vsaka vsebovala trikotnike (noben list ne bo prazen list). Vzemimo

situacijo iz slike 4.3: Prostor delimo najprej po x in potem na vsaki polovici ²e po y.

Tudi v primeru, da poltrak lahko po²ljemo mimo trikotnikov, bomo ²e vedno morali

opraviti nepotrebne teste.

Page 27: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

4.2 KONSTRUKCIJA DREVESA KD 20

Slika 4.3: Prikaz delitve 2d prostora s kriterijem objektne mediane

• Ocenitvena hevristika: Pri deljenju prostora s pomo£jo ocenitvene hevristike

posku²amo prostor razdeliti tako, da ustvarimo £im ve£ ve£jih praznih celic (slika

4.4) £im bliºja korenskemu vozli²£u. V na²i implementaciji smo uporabili hevris-

tiko SAH (angl. surface area heuristic). Za vsako potencialno delitev izra£unamo

tako imenovano ceno delitve. Na koncu izberemo tisto delitveno ravnino, ki ima

najniºjo ceno. Kako dobimo ceno? Verjetnost, da bo poltrak sekal trenutno celico,

je povezana s povr²ino celice (4.1), kjer je s ²irina, v vi²ina in g globina.

p = 2 ∗ (s ∗ v + s ∗ g + g ∗ v) (4.1)

Ceno ene celice dobimo iz formule (4.2), kjer je cpl cena pre£kanja celice, pl povr²ina

celice, stprim ²tevilo trikotnikov v celici in cs cena sekanja celice. cpl in cs sta kon-

stanti.

cena = cpl + pl ∗ stprim ∗ cs (4.2)

Ceno delitve dobimo tako, da izra£unamo ceni obeh potencialnih delitvenih celic in ju

se²tejemo. Potencialni kandidati za optimalni poloºaj delitvene ravnine so ekstremi

(glede na os) vseh trikotnikov v objektu. Se pravi, £e je objekt sestavljen iz 5000

trikotnikov, imamo za prvo delitev 10000 kandidatov. Za vsako delitev moramo tudi

vedno pre²teti, koliko trikotnikov vsebujeta novi celici. To je zelo draga operacija,

zaradi katere je delitev zelo po£asna, zato smo po [9] izvedli izbolj²avo: poiskali

smo delitvene poloºaje in jih shranili v polje. To polje smo v £asu O(n*log(n))

Page 28: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

4.2 KONSTRUKCIJA DREVESA KD 21

uredili od najmanj²ega do najve£jega in odstranili dvojnike. Glede na to, da je polje

urejeno, ra£unamo cene delitvenih poloºajev od leve proti desni. Za tiste trikotnike,

za katere smo ugotovili, da so ºe levo, ozna£imo in jih naslednji£ ve£ ne testiramo,

saj ne morejo biti ve£ desno. Delitev se izvede veliko hitreje, a ²e vedno prepo£asi

za objekte z veliko trikotniki. Zato smo implementirali tudi metodo, ki uporablja

isto hevristiko, vendar je kandidatov delitev veliko manj (razdelimo delitveno os na

k delov, kjer je k [30-100]). Rezultat ni optimalen, a je skoraj v vseh primerih bolj²i

kot navadna delitev prostora z mediano.

Slika 4.4: Prikaz delitve ravnine s kriterijem ocenitvene hevristike

4.2.2 Zaklju£itveni kriteriji

Povedali smo, kako razdelimo prostor, nismo pa omenili, kdaj ga nehamo deliti. Deliti

nehamo, ko doseºemo dolo£eno globino drevesa dmax, ali je v celici manj kot tmax trikot-

nikov. Konstanti dmax in tmax dolo£imo sami. Pri na²ih testiranjih v ve£ini primerov

uporabljamo dmax = 20 in tmax = 4. Pri ocenitveni hevristiki se ponudi ²e en zaklju£itveni

kriterij: delimo tako dolgo, dokler je cena deljenja na globini n niºja kot pa cena deljenja

na globini n-1 (na isti veji drevesa).

Page 29: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

4.3 UPORABA DREVESA KD 22

Slika 4.5: Prikaz delitve s prostorsko mediano (levo) in SAH (desno) pri globini 9

4.3 Uporaba drevesa kd

Princip uporabe drevesa je naslednji: poi²£emo vse liste (kon£na vozli²£a), ki jih seka na²

poltrak in preverimo vse trikotnike, ki so v njih. V na²i implementaciji smo uporabili

algoritem TAArec (angl. Recursive Ray Traversal Algorithm) [7, 4]. Potem, ko poltrak

vstopi v vozli²£e drevesa kd, ki ima dvoje podvozli²£, se dolo£i, ali morata biti pregledani

obe in v kak²nem vrstnem redu. Na ti vozli²£i se gleda glede na izvor poltraka in poloºaj

delitvene ravnine, kot na "bliºje" in "oddaljeno" vozli²£e. TAArec se na vsakem koraku

odlo£i, katero podvozli²£e bo pregledano. Vedno izra£unamo oddaljenost t do delitvene

ravnine v trenutno obiskanem vozli²£u. Za korensko vozli²£e izra£unamo tudi vhodno in

izhodno oddaljenost dvhod in dizhod, ki se skozi globino glede na trenutno vozli²£e spre-

minjata. Oddaljenost do ravnine dobimo po (4.3), kjer je S delitvena pozicija, O izvor

poltraka, D orientacija poltraka in a trenutna delitvena os.

t =S −Oa

Da

(4.3)

Page 30: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

4.3 UPORABA DREVESA KD 23

Glede na dolºine po poltraku dvhod, dizhod in t lahko dobimo naslednje situacije:

a) t > dizhod: poltrak seka bliºje vozli²£e,

b) t < dvhod: poltrak seka oddaljeno vozli²£e,

c) dvhod < t < dizhod: poltrak seka bliºje in oddaljeno vozli²£e.

Slika 4.6: Prikaz osnovnih situacij pregleda drevesa kd

V primeru a in b se spustimo v bliºnje oziroma oddaljeno vozli²£e in rekurzivno na-

daljujemo, dokler ne pridemo do lista. Pri primeru c pa oddaljeno vozli²£e shranimo na

sklad in najprej rekurzivno razre²imo bliºje vozli²£e, nato pa ²e oddaljeno. Vedno, ko

pridemo do lista, preverimo vse trikotnike, ki jih ta vsebuje. Hitrost je odvisna predvsem

od kvalitete drevesa, ki smo jo obdelali v prej²njem poglavju.

Page 31: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

4.4 TE�AVE Z NUMERI�NO STABILNOSTJO 24

Slika 4.7: Prikaz vsebnostnega testa (levo) poltrakov, preverjenih trikotnikov in listov

(desno)

4.4 Teºave z numeri£no stabilnostjo

Numeri£na stabilnost je v geometrijskih algoritmih zaºelena lastnost, ki pa jo je teºko

dose£i. Pravimo, da je algoritem nestabilen, ko ob ve£ini situacij deluje pravilno, v neka-

terih primerih pa pride do napak, ki vodijo k zru²itvi aplikacije ali do napa£nih rezultatov.

Teoreti£no so rezultati lahko pravilni, v praksi pa realnih ²tevil ne moremo predstaviti

povsem natan£no (s celimi ²tevili ni teºav). Omejeni smo s 4 (�oat) ali 8 (double) zlo-

govno predstavitvijo realnega ²tevila. Nastanejo lahko naslednje napake [4, 8]:

• Pretvorbene in predstavitvene napake (angl. Converstation and repre-

sentation errors): Veliko napak izvira iz tega, da nekatera decimalna ²tevila ne

morejo biti to£no predstavljena kot binarna ²tevila, zato so zaokroºena na najbliºje

pribliºke. Ti pribliºki pa lahko povzro£ajo napake.

• Napake prevelikih oziroma premajhnih ²tevil (angl. Over�ow and under-

�ow errors): Lahko se nam zgodi primer, da je ²tevilo preveliko (over�ow) oziroma

premajhno (under�ow), da bi bilo ra£unalni²ko predstavljivo. Te napake se dogajajo

v primerih, ko mnoºimo med sabo dve veliki (ali majhni) ²tevili. Podobno se zgodi,

£e veliko ²tevilo delimo z zelo majhnim (ali obratno).

Page 32: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

4.4 TE�AVE Z NUMERI�NO STABILNOSTJO 25

• Zaokroºitvene napake (angl. Round o� errors): V primeru, ko delimo dve

²tevili a = b/c, a zahteva natan£nost, ki je ve£ja od b in c. �e predstavitev tega

²tevila ne bo moºna (²tevilo ima na voljo premalo bitov), koli£nik ne bo povsem

natan£en. Zaokroºitvene napake se dogajajo pri ve£ini operacij in ne samo pri del-

jenju.

• Izni£itev ²tevk (angl. Digit-cancellation errors): Te napake se zgodijo, ko

med sabo od²tejemo skoraj enaki vrednosti, ali ko je majhna vrednost pri²teta k

veliki.

Ra£unalni²ka geometrija je posebej ob£utljiva na omenjene napake, zato smo morali pri

na²i implementaciji paziti na kar nekaj stvari. Prva izmed teh je bila primerjava realnih

²tevil. Ob primerjavi bomo skoraj vedno dobili rezultat, ko ²tevili nista enaki, £eprav

na prvi pogled sta. Razlikujeta se namre£ v razli£nih zelo majhnih decimalkah, ki so

nastale zaradi zaokroºevanja. Ena izmed re²itev bi bila uvedba absolutne tolerance, kjer

primerjamo dve ²tevili a in b s pomo£jo zelo majhne vrednosti epsilon ε:

if(Abs(a− b) <= ε) (4.4)

Pri dani re²itvi (4.4) je v£asih zelo teºko dolo£iti ustrezen ε, zato smo se odlo£ili za drugo al-

ternativo, in sicer uvedbo relativnega epsilona. Zato, ker programiramo s pomo£jo ogrodja

Qt, nam je na voljo funkcija qFuzzyCompare, ki sprejme dve realni ²tevili in ju primerja

s pomo£jo relativnega ε (4.5), s katerim doseºemo robustnej²o preverjanje za ceno vi²je

ra£unske zahtevnosti.

if(Abs(a− b) <= ε ∗Min(Abs(a), Abs(b))) (4.5)

Naslednji ve£ji problem je, ko poltrak seka skupni rob trikotnikov (slika 4.8). V mate-

mati£no natan£ni numeriki bi poltrak sekal trikotnik ABC. V kon£ni aritmetiki pa se lahko

zgodi, da je po izra£unanem prese£i²£u z ravnino trikotnika (poglavje 3.2) to pomaknjeno

malo v levo oziroma v desno. Zaradi tega algoritem v nekaterih primerih sploh ne najde

prese£i²£a z nobenim izmed obeh trikotnikov (ali pa z obema). Trikotnika obravnavamo

£isto lo£eno, £eprav imata skupen rob, zato lahko zaradi izgube informacij dobimo dva

razli£na rezultata. Robustni testi si morajo deliti £im ve£ izra£unov in odlo£itev, na kateri

Page 33: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

4.4 TE�AVE Z NUMERI�NO STABILNOSTJO 26

Slika 4.8: Moºna napaka pri izra£unu prese£i²£a z trikotnikovo ravnino

strani skupnega roba leºi poltrak, mora biti skupna. Izbrati moramo samo enega izmed

dveh trikotnikov, ki imata skupen rob. To naredimo s pomo£jo izlo£itvenih izra£unov (4.6),

kjer je O izhodi²£e in−→D smerni vektor. Z izlo£itvenimi ra£uni problem ºe deloma re²imo

v prostoru. V primeru, da imajo vsi ti izra£uni enak predznak, nadaljujemo z izra£unom

prese£i²£a za ta trikotnik, druga£e za trikotnik ozna£imo, da ga je poltrak zgre²il.

i = (−→OA×

−−→OB) ∗

−→D (4.6)

j = (−−→OB ×

−→OC) ∗

−→D

k = (−→OC ×

−→PA) ∗

−→D

Robustnost smo s pomo£jo ε pove£ali tudi v vsakem izmed posameznih testov za iskanje

to£ke v trikotniku (poglavje 2). Iz testiranj smo ugotovili, da je najmanj zanesljiva metoda

vsote kotov. Treba je omeniti, da ti testi v£asih napak popolnoma ne odpravijo, ampak

jih samo ob£utno zmanj²ajo.

Page 34: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

Poglavje 5

Rezultati in primerjave

Izmerili smo £ase CPE(s) za naivno metodo in na drevesih kd, ki smo jih zgradili z razli£-

nimi kriteriji. Vse meritve so bile opravljene na osebnem ra£unalniku s procesorjem Intel

i5, 3300 MHz in 4Gb RAM pomnilnika na operacijskem sistemu Windows 7. Vsi algoritmi

so implementirani s pomo£jo ogrodja Qt (jezik c++). Podrobnosti o uporabljenih modelih

se nahajajo v tabeli 5.1. Za vsako situacijo smo opravili tri meritve, rezultat je njihovo

povpre£je.

Tabela 5.1: Podatki o modelih

model: ²t. ogli²£ ²t. trikotnikov

grenades 5050 5584

pumpkin 5002 10000

cat 7335 14634

owl 19884 39764

barrel 31276 57728

bust 47516 95028

isis 93823 187642

tiger 309403 618786

grenadesHP 957507 1072128

Page 35: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

5 REZULTATI IN PRIMERJAVE 28

Razpredelnica 5.2 prikazuje porabljen £as CPE(s) pri naivni metodi nad modelom

grenade. Uporabljeni so bili vsi testi iz poglavja 2, ki ugotavljajo, ali je to£ka v trikotniku.

Vidimo, da je metoda, ki uporablja baricentri£ne koordinate, najhitrej²a. Od metode

enakih predznakov je hitrej²a za pribliºno 155 %, od metode vsote kotov pa za ve£ kot

223 %. Posledi£no bomo v vseh testih uporabljali metodo baricentri£nih koordinat, saj se

je izkazala tudi za najbolj robustno.

Tabela 5.2: Porabljen £as CPE(s) za opravljanje testa vsebnosti v trikotniku

metoda/to£ke 1000 5000 10000 50000

vsota kotov 2.719 13.011 26.131 128.047

enaki predznaki 1.902 9.048 17.940 89.436

baricentri£ne koordinate 1.284 5.881 11.497 57.268

Razpredelnica 5.3 prikazuje £as CPE(s) izvajanja algoritma s pomo£jo dreves kd, ki so

bila zgrajena z razli£nimi kriteriji deljenja prostora. Vsebnost smo ugotavljali nad 500 000

to£kami, ki so bile naklju£no razporejene po sceni. Scena je bila od za£etnega omejujo£ega

kvadra modela ve£ja za 100 enot na stranico. Globina drevesa je bila nastavljena na 20,

deljenje na trenutni globini se je predhodno zaklju£ilo, £e so v celici bili manj kot ²tirje

trikotniki. Uporabili smo kriterije delitve prostora s prostorsko mediano (ozna£en kot

SM), deljenje prostora z ocenitveno hevristiko (ozna£ena kot OSAH) in okrnjena verzija

OSAH, ki vzame na delitveno os samo 100 potencialnih delitvenih kandidatov (ozna£en

kot PSAH). Za vsa testiranja so bili omogo£eni testi, ki pove£ajo robustnost.

Ugotovili smo, da ima ²tevilo trikotnikov na £as manj²i vpliv kot sama orientiranost

poltrakov in struktura modela. Uporaba hevristi£nega kriterija gradnje drevesa se je

izkazala za naju£inkovitej²o pri vseh testiranih modelih. OSAH je od PSAH hitrej²i za

pribliºno 107 %, kar pa je dober kompromis, saj gradnja drevesa s kriterijem OSAH traja

veliko dlje kot pri PSAH. Pri modelih grenade, barrels, grenadeHP je na £ase precej vpli-

vala razdeljenost modelov. Zaradi veliko praznega prostora na sceni omenjenih modelov je

posledi£no vpliv ocenitvene hevristike bolj opazen, saj hevristika posku²a izolirati najve£je

prazne celice.

Page 36: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

5 REZULTATI IN PRIMERJAVE 29

Tabela 5.3: Porabljen £as CPE(s) za izvajanje vsebnostnega testa s pomo£jo dreves kd na

razli£nih modelih

model SM PSAH OSAH

grenade 1.794 0.960 0.715

pumpkin 0.944 0.710 0.708

barrels 1.793 0.609 0.607

owl 0.797 0.645 0.639

bust 0.535 0.503 0.490

isis 0.905 0.780 0.750

tiger 0.718 0.546 0.515

grenadeHP 3.230 2.152 2.028

Slika 5.1: Razlika v £asu glede na razli£ne kriterije gradnje drevesa. Najbolj vidna pri

razdeljenih modelih grenade, barrels in grenadeHP.

Gradnja drevesa s pomo£jo hevristike je £asovno zahtevna. �eprav smo naredili nekaj

optimizacij (opisano v sklopu podpoglavja 4.2.1), s pomo£jo katerih se drevo zgradi hitreje,

gradnja pri modelih z veliko trikotniki poteka po£asi. Tabela 5.4 prikazuje, kako ²tevilo

trikotnikov v celici vpliva na £as gradnje drevesa in kako se to pozna pri hitrosti vsebnost-

nega testa. �tevilo trikotnikov smo postopoma ve£ali. Minimalno ²tevilo trikotnikov v

Page 37: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

5 REZULTATI IN PRIMERJAVE 30

Tabela 5.4: �as CPE(s) gradnje drevesa in vsebnostnega testa glede na ²tevilo trikotnikov

v celici

cmin tvs tdrevo

1 0.795 7.972

3 0.797 7.535

5 0.826 7.005

7 0.83 6.973

9 0.873 6.662

11 0.93 6.505

13 0.959 6.053

15 0.999 6.006

17 1.03 5.788

19 1.014 5.445

21 1.02 5.226

23 1.18 5.221

celici smo ozna£ili s cmin, £as vsebnostnega testa pri danem drevesu smo ozna£ili s tvs, £as

gradnje drevesa pa s tdrevo. Prikazan test smo opravili na modelu isis.

Slika 5.2: Vpliv ²tevila trikotnikov v celici na hitrost gradnje drevesa in vsebnostnega testa

Page 38: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

5 REZULTATI IN PRIMERJAVE 31

Tabela 5.5 prikazuje primerjavo med naivno metodo in drevesi kd na razli£nih modelih.

V kon£ni £as CPE(s) je v²teta tudi gradnja samega drevesa kd. Za gradnjo drevesa po

metodi PSAH smo na os vzeli 30 delitvenih kandidatov. Iz tabele vidimo, da se naivno

metodo spla£a uporabiti nad majhnim ²tevilom testnih to£k, pri zelo majhnih modelih, v

nasprotnem primeru pa jo lahko ozna£imo za dale£ najslab²o. Za najbolj²o metodo se v

splo²nem izkaºe drevo kd, grajeno po metodi HS. �eprav imata PSAH in OSAH ponekod

izvajalne £ase zelo nizke, je njuna gradnja drevesa zahtevnej²a in posledi£no po£asnej²a. To

se vidi predvsem pri OSAH. Metodi sta primerni, ko si lahko privo²£imo dalj²e predhodno

deljenje prostora in je pomemben predvsem £as samega izvajanja testa.

Tabela 5.5: Porabljen £as CPE(s), za izvajanje vsebnostnega testa pri naivni metodi v

primerjavi z drevesi kd skupaj z njihovo gradnjo

model ²t. to£k naivna HS PSAH OSAH

grenade

100 0.078 0.156 0.53 0.312

1000 0.343 0.172 0.532 0.313

10000 2.808 0.187 0.556 0.327

100000 26.520 0.468 0.702 0.421

pumpkin

100 0.078 0.109 0.482 1.076

1000 0.593 0.109 0.483 1.077

10000 5.366 0.129 0.497 1.091

100000 49.515 0.249 0.593 1.169

barrel

100 0.297 0.093 0.827 11.554

1000 2.668 0.093 0.831 11.555

10000 25.958 0.125 0.851 11.558

100000 <100 0.499 0.954 11.684

Page 39: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

Poglavje 6

Sklep

Algoritmi preverjanja vsebnosti predstavljajo pomembno temeljno operacijo v ra£unalni²ki

geometriji. V na²em diplomskem delu smo opisali, kako izvesti vsebnostni test to£k v pro-

storu. Predvsem smo se posvetili algoritmu s pripravo podatkov, kjer smo implementirali

razli£ne na£ine za gradnjo dreves kd in dobili zadovoljive rezultate. Dobro konstruirano

drevo kd je osnova za za vse aplikacije, ki za svoje delovanje potrebujejo u£inkovito razde-

ljen prostor. Treba se je pa zavedati, da je dobro drevo ponavadi £asovno bolj zahtevno,

zato je njegova uporaba odvisna od situacije.

Page 40: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

Literatura

[1] B. �alik, Vsebnostni algoritmi, Algoritmi ra£unalni²ke geometrije, 2006, pp. 131-136

[2] K. Ooms, P. De Maeyer and T. Neutens, A 3D inclusion test on large dataset, Devel-

opments in 3D Geo-Information Sciences, 2010, pp. 181-186

[3] T. Möller, Ben Trumbore, Fast, Minimum Storage Ray/Triangle Intersection, Journal

of Graphics Tools, vol. 2, no. 1, 1997, pp. 21-28

[4] C. Ericson, Intersecting Ray or Segment Against Triangle, Real-Time Collision Detec-

tion, 2005, pp. 190-194

[5] V. Havran, BSP-Trees and Kd-Trees, Heuristic Ray Shooting Algorithms 2000, pp.

11-14

[6] E. Haines, Point in Polygon Strategies, Graphics Gems IV, ed. Paul Heckbert, Aca-

demic Press, 1994, pp. 24-46

[7] Y. Cao, Acceleration Structure for Ray Tracing, K-D Tree Traversal, 2010

[8] C. Ericson, Numerical Robustness, Lecture Notes on Numerical Robustness

[9] J. Bikker, Raytracing Topics and Techniques, 2004, http://www.flipcode.com/

archives/Raytracing_Topics_Techniques-Part_7_Kd-Trees_and_More_Speed.

shtml (18.7.2011)

[10] J. Scott, Point in triangle test, http://www.blackpawn.com/texts/pointinpoly/

default.html (18.7.2011)

Page 41: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC

LITERATURA 34

[11] Wikipedia contrubitors, Barycentric coordinate system (mathematics), http:

//en.wikipedia.org/wiki/Barycentric_coordinate_system_(mathematics)

(19.7.2011)

[12] Wikipedia contrubitors, Plane (geometry), http://en.wikipedia.org/wiki/Plane_

(geometry) (19.8.2011)

[13] VRML totally beginner's guide, http://gallery.djinngo.com/gallery/

documentation/widgets_development_vrml_beginner.html (20.7.2011)

[14] B. Wade, BSP TREE FREQUENTLY ASKED QUESTIONS, http://www.gamers.

org/dhs/helpdocs/bsp_faq.html (23.7.2011)

[15] C. Bartlett, Line to Triangle intersection test, http://www.angelfire.com/fl/

houseofbartlett/solutions/line2tri.html (22.8.2011)

Page 42: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC
Page 43: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC
Page 44: Denis Horvat VSEBNOSTNI TEST V PROSTORU Z ALGORITMOM POLTRAKA DIPLOMSKO DELO · 2017. 11. 27. · Imejmo izbo£en mnogokotnik, ki je orientiran tako, da si ogli²£a trikotnika ABC