INF-MAT5370 Trianguleringer i planet (Preliminaries) Øyvind Hjelle oyvindhj@simula.no, +47 67 82 82 75 Simula Research Laboratory, www.simula.no August 23, 2009
Innhold Notasjon og terminologi Graf-egenskaper med trianguleringer i planet Enkle trianguleringsalgoritmer
Punkter og domener. Vi starter med et sett punkter i planet P = {p i }, i = 1,...,N p i = (x i,y i ). og et domene Ω i planet slik Ω og randen Ω tilfredstiller: Ω P Ω, er ett eller flere enkle lukka polygoner (ikke selvskjærende) Hjørnepunktene i Ω er punkter i P Ω er ofte den konvekse omhylningen til P, for eks. i Delaunay trianguleringer:
Konvekst domene til Ω
Hva er en triangulering? Grovt sagt er en triangulering av punktene i P en dekomponering av Ω i trekanter (P) = {t i } T i=1 som ikke overlapper hverandre, og slik at hjørnene i alle t i er punkter i P. Eksempler:
Notasjoner og (norske) uttrykk., (P) Triangulering (av punkter P), = {t i } T V, V I, V B Sett av noder, indre noder og randnoder E, E I, E B Tilsvarende for sidekanter (eller kanter ) T Sett av trekanter V, E, T Antall noder, sidekanter og trekanter V I, V B Antall indre noder og randnoder ( V = V I + V B ) E I, E B Tilsv. for sidekanter, E = E I + E B V ( ) Antall noder i trianguleringen v i,e i,t i Node, sidekant, trekant e i,j Sidekant mellom noder v i og v j t i,j,k Trekant med v i, v j og v k som noder Alltid definert mot klokka. C(t i,j,k ) Omskrivende sirkel til trekant t i,j,k i=1
Topologi og Geometri Vi skiller mellom topologi og geometri: Topologi: Noder, sidekanter og trekanter. Geometri: Punkter, kurver, flatelapper
Hva er en gyldig triangulering? 1 Ingen trekant t i,j,k i er degenerert, dvs. p i, p j, og p k er ikke kolineære. 2 Int(t i,j,k ) Int(t α,β,γ ) = φ (Int = Interior ) 3 Snittet t i,j,k t α,β,γ er en felles sidekant, en felles node eller φ. 4 Unionen T i=1 t i = Ω, Ω R 2 og er regulær hvis også: 5 Domenet Ω (og ) er sammenhengende 6 (og Ω) har ingen hull 7 Hvis v i er en randnode i, så er det nøyaktig to randkanter som møtes i v i, dvs. V B = E B.
Gyldig, ikke regulær Regulær Ikke gyldig
Egenskaper ved trianguleringer. Vi kan se på trianguleringer som spesialtilfeller av grafer. Det er følgende samenheng mellom antall noder, kanter og trekanter. Lemma For en regulær triangulering har vi: T = 2 V I + V B 2 (I) E = 3 V I + 2 V B 3 (II) E I = 3 V I + V B 3 (III) T = E V + 1. (IV ) (IV ) kalles Euler Polyhedron formelen, (eller Euler-Poincaré)
Bevis av (I), induksjonsbevis: Trivielt hvis T = 1; da er V I = 0 og V B = 3. Induksjon: Anta T 2 og at en trekant t i fjernes fra slik at også er regulær. Vi har to tilfeller: 1. t i har to randkanter i V I ( ) = V I ( ), og V B ( ) = V B ( ) 1 Anta at (I) holder for : T( ) = T( ) + 1 = ( ) 2 V I ( ) + V B ( ) 2 + 1 = 2 V I ( ) + ( V B ( ) 1) 2 + 1 = 2 V I ( ) + V B ( ) 2.
2. t i har kun en randkant i V I ( ) = V I ( ) 1, og V B ( ) = V B ( ) + 1. Anta at (I) holder for : T( ) = T( ) + 1 = ( ) 2 V I ( ) + V B ( ) 2 + 1 = 2( V I ( ) 1) + ( V B ( ) + 1) 2 + 1 = 2 V I ( ) + V B 2. (Bevis av (II) og (III) er øvinger.)
Bevis av (IV) (IV) følger ved å kombinere (I), (II) og V = V I + V B T = 2 V I + V B 2 = 3 V I + 2 V B 3 ( V I + V B ) + 1 = E V + 1. Nyttige observasjoner: Antall sidekanter og trekanter avhenger av randen Hvis vi setter inn en indre node økes T med 2 og E med 3.
Nedre og øvre grenser for T og E uttrykt ved antall noder i. Lemma For en regulær triangulering har vi: V 2 T 2 V 5 2 V 3 E 3 V 6.
Bevis. Vi bruker følgende: (I) og (II) V = V I + V B V B 3 (til bruk på høyresiden) V B V (til bruk på venstresiden) T = 2 V I + V B 2 = 2( V I + V B ) V B 2 = 2 V V B 2 E = 3 V I + 2 V B 3 = 3( V I + V B ) V B 3 = 3 V V B 3 og resultatene følger.
Definisjon Graden til en node v i, deg(v i ) i en triangulering er antall sidekanter som møtes i v i (eng.: degree or valency). Lemma For en triangulering (regulær eller ikke) har vi V deg(v i ) = 2 E. i=1 Proof. Trivielt; i en gyldig triangulering bidrar hver sidekant med 2 til grad-summen.
Når V er stor og Ω er den konvekse omhylningen til P, vil vi ha at V >> V B. Da får vi følgene nyttige uttrykk for gjennomsnittlig grad-sum (average valence): V deg(v i ) = 2 E = 2(3 V I + 2 V B 3) i=1 = 6( V I + V B ) 2 V B 6 = 6 V 2 V B 6 6 V
Under de samme betingelsene, V >> V B, får vi for antall trekanter og antall sidekanter: T = 2 V I + V B 2 = 2 V V B 2 2 V E = 3 V I + 2 V B 3 = 3 V V B 3 3 V Estimatene over er nyttige når vi skal estimere: CPU-tid for algoritmer, spesielt traversering lagringsbehov for datastrukturer. Ellers, ved allokering av minne.
En enkel trianguleringsalgoritme Algoritme: 1 Gitt randen til som et lukka polygon. 2 Triangulerer settet av randnoder V B 3 Setter inn indre punkter (noder) 4 Setter inn predefinerte sidekanter Definisjon Et punkt p i i et enkelt lukka polygon P = {p 1,... p N } kalles fremskutt (eng.: protruding) dersom 1 Den indre vinkelen ved p i i trekanten t i 1,i,i+1 er mindre enn π. (Konvensjon: p N+1 = p 1 ) 2 Trekanten t i 1,i,i+1 inneholder ingen punkter fra P utenom p i 1, p i, og p i+1. Det kan vises at et hvert lukka polygon har minst to fremskutte punkt.
Protruding Point Removal (a) t i-1,i,i+1 p i+1 p i p i-1 (b) 1 (c) 2 1 (d) 2 3 1 (e) 4 2 3 1 (f) 5 8 6 4 7 2 3 1
Algoritme (I) Triangulering av et enkelt lukka polygon P. Algoritme 1 Finn et fremskutt punkt p i i P = {p 1,...,p N }; figur (a) 2 Lag en sidekant e i 1,i+1 av punktene p i 1 og p i+1 og lag trekanten t i 1,i,i+1. La P = {p 1,...,p N } \ p i være det nye polygonet med N 1 punkter; figur (b) 3 If (N == 3), dvs. hvis P er en enkelt trekant STOP; figur (f) 4 GOTO 1.
Algoritme (II) Innsetting av et punkt p i i en triangulering. Algoritme 1 Lokaliser en trekant t i ; p i t i 2 If (p i Int(t i )) erstatt t i med tre nye trekanter; figur (a) else if (p i Int(e i )); dvs. e i er en kant i t i erstatt t i og naboen til t i med fire trekanter; figur (b). (a) (b) p i p i e i t i t i
Algoritme (I), og Algoritme (II) for alle p i Ω, gir en regulær triangulering i følge definisjonen over. Observasjon: Antall trekanter og sidekanter økes med 2 og 3 for hvert punkt som settes inn med Algoritme (II); jfr. ligning (I) og (II).
Triangulering med føringer (Constrained triangulation) Med føringer menes predefinerte sidekanter som skal være med i trianguleringen. Anvendleser: Representasjon av elver, veier og geologiske forkastninger i terrengmodeller. Representasjon av features i DAK-modeller. Predefinerte kanter stiller krav til datastrukturer og algoritmer som må håndtere disse til lavest mulig kostnad. Teorien for Delaunay-trianguleringer er utvidet til å håndtere føringer.
Algoritme (III) Innsetting av en predefinert sidekant (constrained edge). Gitt en predefinert sidekan e i,j. Anta at endepunktene p i og p j er satt inn i med Algoritme (II). Algoritme 1 For alle t i i, If (Int(t i ) e ij φ), fjern t i fra Vi får en eller flere regioner R i på hver side av e i,j innenfor enkle lukka polygoner. (Mer enn en hvis e i,j skjærer kanter i endepunkter.) 2 Trianguler hver region R i med Algoritme (I).
Innsetting av predefinert sidekant. (a) e i,j p j p i (b) e i,j p j p i
Algoritmer: Observasjoner Siden antall noder V B på randen er konstant, har vi full kontroll over antall trekanter T og antall sidekanter, E og E I i henhold til formlene (I) (IV ). Passende datastrukturer/topologistrukturer med naboskapsinformasjon er nødvendig for å unngå worst case CPU-tid, for eks. ved lokaliserng av en trekant t i i slik at et punkt p i t i. (P) er ikke entydig; for eks., i Algoritme (I) avhenger av hvilken rekkefølge fremskutte punkter behandles. Vi skal senere se på en spesiell type triangulering, Delaunay, som er (nesten) entydig.
Swapping / Flipping / (Exchange) Swapping er en viktig operasjon på sidekanter i en triangulering. v i+1 v i+2 e i+1,i+3 e i,i+2 v i+3 v i = {t 1,2,3,t 1,3,4 } = {t 1,2,4,t 2,3,4 }
Swapping... Kan kun utføres på sidekanter som er diagonaler i strengt konvekse quadrilateraler. Men kan repeteres - det kan vises at: alle mulige trianguleringer av P kan nås via en sekvens av swaps. (Det er et endelig antall trianguleringer av P). Mange trianguleringsalgoritmer er basert på swapping. Kan benyttes for å optimere trianguleringer. Swapping kan gjøres etter ulike kriterier. Hvis vi bruker Delaunay kriterier vil vi til slutt få en Delaunay triangulering som er (nesten) entydig.
Swapping: Eksempel Triangulering før ( a ) og etter ( b ) swapping av to sidekanter. (a) (b) Observasjon: a har flere smale trekanter enn b Smale trekanter kan gi numeriske problemer i (geometriske) algoritmer.
Flatetrianguleringer (Surface Triangulations) F. eks. stykkevise lineære flater:
Barycentriske koordinater p 3 H 2 A H 1 2 p A 1 p 1 A 3 H 3 p 2 p = (x,y,z), p i = (x i,y i,z i ), i = 1,2,3 p = b 1 p 1 + b 2 p 2 + b 3 p 3 b 1 = A 1 /A, b 2 = A 2 /A b 3 = A 3 /A A = A 1 + A 2 + A 3. Høydeverdien (funksjonsverdien i p): z p = b 1 z 1 + b 2 z 2 + b 3 z 3.