INF-MAT5370 Grafer og datastrukturer Øyvind Hjelle oyvindhj@simula.no, +47 67 82 82 75 Simula Research Laboratory, www.simula.no August 3, 2009
Innhold Kort om grafer Topologiske operatorer og operasjoner, G-maps Presentasjon og analyse av forskjellige datastrukturer Kort om objekt-orientert implementasjon
Grafer Definisjon En graf G(V,E) består av et sett noder V og et sett kanter E som forbinder to og to noder i V. (a) (b) Grafer har i utgangspunktet ingen geometrisk informasjon. I forbindelse med trianguleringer snakker vi om embedded graphs, dvs. vi assosierer geometri til de topologiske elementene noder og kanter.
Topologi og geometri Vi prøver å skille mellom topologi og geometri: Topologi: Noder Kanter Trekanter Geometri: punkter kurver (linjer) flatelapper
Grafer og trianguleringer Trianguleringer kan sees på som spesialtilfeller av grafer: Hver trekant er implisitt gitt som en cycle av tre kanter (og tre noder). G (V,E) er planar. Definisjon En graf G(V,E) kalles planar dersom den kan tegnes i planet slik at en hver kant e i,j = (v i,v j ) ikke skjærer G utenom i v i og v j. Grafen i figur (a) er opplagt planar. Det kan vises at grafen i figur (b) ikke er planar.
Grafer... Andre definisjoner: Rettet graf: Kantene e i,j har retninger, for eks., fra v i til v j Multigraf: Det kan være mer enn en kant mellom to noder v i og v j. Ellers kalles grafen en enkel graf. Noen datastrukturer for trianguleringer er basert på halv-kanter (half-edges) der hver sidekant er to topologiske elementer som peker i hver sin retning; altså en Planar rettet multigraf. Ved å se på trianguleringer som grafer kan vi nyttegjøre oss av grafteortiske konsepter og graf-algoritmer.
Elementære topologiske operasjoner Med topologiske operasjoner på en triangulering menes operasjoner som ikke bruker geometrisk informasjon (embedding). Konseptuelt har vi to typer: I. Operasjoner som endrer topologien i. II. Operasjoner for å traversere (I) kan bestå av operatorer som: bevarer antall topologiske elementer, V, E og T, for eks. swapping, 2 fjerner topologiske elementer, 3 legger til topologiske elementer. Vi skal se nærmere på operatorer av typen II.
G-maps (generalized maps) G-maps muliggjør en algebraisk beskrivelse av topologien i B-rep strukturer (B-rep= Boundary Representation ). G-maps er basert på noen få enkle konsepter, og gir oss et kraftig verktøy til å implementere interfacer til datastrukturer. Vi skal bruke konsepter fra G-maps til å lage traverserings-operatorer (iteratorer) på trianguleringer. TTL (Triangulation Template Library), til bruk i øvinger, er basert på G-maps.
G-maps... Definisjon En dart i en triangulering er et entydig trippel d = (v i,e j,t k ) der v i er en av nodene i kanten e j, og e j er en sidekant i trekanten t k. Topologien i en triangulering består dermed av et entydig sett D av darts. e j t k v i d=(v i,e j,t k )
α-iteratorer (involusjoner) Vi definerer tre entydige funksjoner α 0, α og α 2 som opererer på settet D av darts. α i : D D, i = 0,,2 (dvs.α i (d) = d ) α i, i = 0,,2 er en-til-en avbildninger og bijektive, dvs. α i (α i (d)) = d. Initial dart Result of α 0 Result of α Result of α 2
α-iteratorer... Initial dart Result of α 0 Result of α Result of α 2 node edge triangle α 0 (switch nodes) fixed fixed α (switch edges) fixed fixed α 2 (switch triangles) fixed fixed
G-maps... flere definisjoner Fix point: Dersom e j i en dart d = (v i,e j,t k ) er på randen Ω av en triangulering, definerer vi d til å være uendret under α 2 : α 2 (d) = d. Komposisjon: En komposisjon α i (α j (d)) skrives α i α j (d) En triangulering kan nå representeres som en graf G (D,α 0,α,α 2 ) som vi kaller en G-map.
Orbits d d d α,α 2 ( d ) α,α ( d ) α,α ( d ) 0 2 0 0-orbit -orbit 2-orbit Definisjon (k-orbit, k = 0,, 2) La {α i } være en, to eller alle tre α -iteratorer til en G-map G(D,α 0,α,α 2 ), og la d D. En orbit {α i } (d) av d er settet av alle darts i D som kan nås med komposisjoner av {α i } (i vilkårlig rekkefølge) ved å starte fra d. α i,α j, i,j k, i j (d) kalles k-orbit til d.
Egenskaper ved α-iteratorer Hvis en komposisjon α i α j utføres gjentatte ganger har vi: orbits... α 0 α itererer over noder og kanter i en trekant (2-orbit) α α 2 itererer rundt en node (0-orbit) α 0 α 2 iterer rundt en sidekant (-orbit) Hvis vi bytter α i α j med α j α i itereres det i motsatt retning. Alle d D i en regulær triangulering kan nås med komposisjoner av α i, i = 0,,2 α i (d), i = 0,,2 bytter klokke-retning på d unntatt for et fix point, dvs. for α 2 (d) når d er på randen.
egenskaper... I tillegg har vi og α i α i (d) = d, i = 0,,2 (α 0 α 2 (d)) 2 = α 0 α 2 α 0 α 2 (d) = d. e j t k v i d=(v i,e j,t k )
Dualen til en G-map er en merket graf: 2 2 2 0 2 2 2 0 2 0 0 0 2 0 0 0 2 2 2 2 0 2 2 Dualen til G(D,α 0,α,α 2 ): En node svarer til en dart En graf-kant merket i svarer til α i (d). Grafen er regulær av grad 3.
n-g-maps... G-maps kan generaliseres til n dimensjoner; n-g-map Eksempel: tetrahedrisering, n = 3; 3-G-map: d = (node, edge, triangle, tetrahedron) α-iteratorer: α i, i = 0,,2,3. node edge triangle tetrahedron α 0 fixed fixed fixed α fixed fixed fixed α 2 fixed fixed fixed α 3 fixed fixed fixed
Datastrukturer for trianguleringer Valg av datastruktur er avhengig av applikasjonen. Generelt; trade-off mellom hastighet av å utføre topologiske operasjoner, dvs. α 0, α, α 2, og 2 lagringsbehov (i RAM eller database). Eksempel: Visualisering: Må ha tilstrekkelig naboskapsrelasjon for å ekstrahere trekant-striper raskt. Lagring på database: Trenger en datastruktur som tar liten plass. I mange applikasjoner trengs flere datastrukturer; og verktøy for å mappe mellom dem.
Eksempel-triangulering 3 3 4 2 6 2 7 6 4 5 5
recall... Fra preliminaries : T 2 V, E 3 V, V deg(v i ) 6 V i= (når V >> V B.) T = 2 V I + V B 2 T 2 V 5 E 3 V 6 V 3 V B 3
Lagring av geometrisk informasjon Hvis en triangulering representerer en terrengmodell, er den oftest stykkevis lineær; og kun nodene, {(x i,y i,z i )}, må lagres: 3 V 8 (bytes pr. double) = 24 V bytes (For glatte Bernstein-Bezier flater kan det være aktuelt å lagre mange koeffisienter i tillegg.)
Minimal trekant-basert datastruktur Kun en liste med trekanter uten topologisk informasjon: Triangle # : 2: 3: 4: 5: 6: Triangle i j k 7 2 2 7 4 2 4 3 7 6 4 4 6 5 7 6
Lagringsbehov for pekere : La N P være antall pekere. Bruker T 2 V 5, og T 2 V. N P = 3 T 6 V 5 og N P 6 V.
minimal trekantbasert... Hvis hver peker krever 4 bytes, må det lagres 4N P 24 V bytes, dvs. det samme som for geometrien ((x i,y i,z i )-koordinatene til nodene). Kompakt lagring Ingen naboskapsinformasjon α 2 er en O(N) operasjon. Brukes for lagring i database?
Trekant-basert med naboer Lagrer også nabotrekanter (mot klokka). k t k,i t j,k t i,j,k i t i,j j Triangle # : 2: 3: 4: 5: 6: Triangle i j k 7 2 2 7 4 2 4 3 7 6 4 4 6 5 7 6 neighbours t j,k t k,i t i,j 2-6 4 3 - - 2 5 2 6 - - 4-4
trekantbasert med naboer... Lagringsbehovet for pekere er det doble av den minimale strukturen: N P 2 V 30 and N P 2 V
α 0, α og α 2 er O(). 4 α 0 ( d) 7 4 6 d α ( d 2 ) α ( d) 6 d = (v 6,e 6,7,t 7,,6 ) α 0 (d) = (v 7,e 6,7,t 7,,6 ). α (d) = (v 6,e,6,t 7,,6 ). α 2 (d) = (v 6,e 7,6,t 7,6,4 ).
Node-basert med naboer 4 7 4 5 6 5 - Pseudo node 6
node-basert med naboer... Vertex # 2 3 4 5 6 7 Adjaceny (ADJ) 6 7 2 0 7 4 3 0 2 4 0 3 2 7 6 5 0 4 6 0 5 4 7 0 6 4 2 End (END) 4 9 2 8 2 26 30
lagringsbehov: N ADJ = V deg(v i ) + V B, inkludert pseudonoder, og i= N END = V. N ADJ = 2 E + V B = 2(3 V V B 3) + V B = 6 V 2 V B 6 + V B = 6 V V B 6 (Recall: E = 3 V V B 3)
lagringsbehov... N P = N ADJ + N END = (6 V V B 6) + V = 7 V V B 6 7 V 9 7 V når V >> V B. Dette er betydelig mindre enn for trekant-basert (N P 2 V ), men vi har ingen liste av trekanter. Med trekanter: N P 3 V. (pluss 2 3 V ) α 0, α og α 2 er O() og (muligens) raskere enn trekant-basert.
Halv-kant (half-edge) datastruktur Hver sidekant splittes i to rettede halv-kanter orientert i hver sin retning. (a) 3 8 9 7 4 2 4 6 5 2 3 7 5 2 8 0 3 5 7 4 6 6 En halv-kant hører kun til en trekant og er orientert mot klokka. Hver halv-kant har tre pekere i) Node, ii) NextEdge, iii) TwinEdge (b) 7 6 4
Half- Edge # : 2: 3: 4: 5: 6: 7: 8: 9: 0: : 2: 3: 4:... Vertex 2 7 2 7 4 2 4 3 7 6 4 4 6... Half-edge pointers Next edge Twin-edge 2-3 8 4 5 3 6 2 4 7 8 6 9-7 - 7 2 3 0 5 4 5 -......
Lagringsbehov: N V : antall nodepekere N Eh : antall halv-kant pekere Totalt: N P = N V + N Eh 8 V. Hvis vi også skal ha trekanter må vi lagre 2 V pekere i tillegg, dvs. totalt: N P 20 V. Krever mer minne enn de andre strukturene, men α 0, α og α 2 er (mye) raskere.
Dart-basert datastruktur Lar dart en være det eneste topologiske elementet i datastrukturen. (a) 2 3 7 4 (b) 6 0 7 7 5 4 5 4 9 8 4 5 α 2 8 6 6 α 2 7 3 3 2 α 0 6 Dette konseptet brukes bl.a. i 3D geologisk modellering, for eks. i gocad. Kan brukes for små modeller.
(a) 2 3 7 4 (b) 6 0 7 7 5 4 5 4 9 8 4 Dart d : 2: 3: 4: 5: 6: 7: 8: 9: 0: : 6 5 8 α 2 6 α 3 α 0 Dart pointers Vertex α 0 (d) α (d) α 2 (d) 2 6 6 3 2 6 4 2 2 7 3 5 7 6 4 7 5 8 6 8 2 3 4 7 9 4 4 0 8 5 7 9 6 7 2 0 4 2 2 6 7 3
dart-basert... lagringsbehov: 6 darts for hver trekant bruker T 2 V 5 og T 2 V N P 48 V 20 og N P 48 V. Hvis en liste av trekanter også lagres (hver trekant som en leading dart ), får vi i tillegg 2 V pekerfelter; dvs. totalt N P 50 V. ca. tre ganger lagringsbehovet for halv-kant strukturen!!! Men, rask: ingen beregninger eller sammenligninger for å utføre α 0, α og α 2. Konklusjon: uakseptabelt for store datamengder.
Sammendrag, datastrukturer Trade-off mellom lagringsbehov og hastighet: Struktur Lagring Effektivitet Minimal trekant-basert N P 6 V α 2 = O(N) Node-basert med naboer N P 7 V god Trekant-basert med nab. N P 2 V god+ Halv-kant (Half-Edge) N P 8 V god++ Dart-basert N P 48 V O(0)
Objekt-orientert design Eksempel med halv-kant (half-edge) struktur: Klasser: Node, HalfEdge, Triangle, Triangulation. (twin edge) Node 0 Half-Edge Triangle N Tiangulation (next in triangle) Klassediagram
Implementasjon class Triangle kan implementeres som en peker til en av halv-kantene. class Triangulation kan implementeres som std::list<triangle>. Typiske medlemsfunksjoner: HalfEdge::getNextHalfEdge: α α 0 (d) HalfEdge::getTwinEdge: α 0 α 2 (d)