Algoritmer for Delaunay-triangulering 1. En enkel algoritme 2. Radial Swee 3. Steg-for-steg 4. Inkrementelle algoritmer 5. Slitt-og-hersk Innsetting av unkter Punkt-lokalisering Tidsforbruk 1
Enkel LOP-basert algoritme Direkte resultat fra kaitlene foran; bruker: Algoritme I fra første del: Triangulering av et lukka olygon; bruker fremskutte unkt. Algoritme II; innsetting av et unkt i en triangulering. LOP (lokal otimerings-rosedyre) som swaer sidekanter etter Delaunay-kriterier til trianguleringen er Delaunay. Gitt et unktsett P. 1. Beregn Q ConvHullP. 2. Algoritme I å Q gir en triangulering. 3. Algoritme II for å sette inn alle unkter fra P innen for Q i gir en triangulering P. 4. LOP å sidekantene i helt til ingen sidekanter kan swaes gir: En triangulering P der alle sidekanter er lokalt otimale. I følge Teorem er Delaunay. 2
Kommentarer: ConvHullP kan beregnes i ONlog N. Ste4eravordenON 2 i verse fall. Krever en effektiv unktlokaliserings-algoritme i Ste 3. Algoritmen er ikke sesielt rask. Algoritmen kan være ustabil da vi ikke får swaet bort smale trekanter etter hvert. Hvordan kan vi få den mer stabil? 3
Radial Swee algoritme Bytter ut Ste 1,2,3 i enkel algoritme. (a) (b) (c) (d) 1. Velg et unkt nær senteret av P og lag sidekanter E,i N1 i1 ; figur (a) 2. Sorter og ordne P å retning og avstand fra og lag randkanter E B1 ; figur (b) triangulering P. 3. Lag trekanter T i1, i, i1 å randen av P og odater randen etter hvert. Reeter til ConvP er dekket av trekanter P; figur (c). 4. LOP å sidekantene i P helt til ingen sidekanter kan swaes; figur (d) En triangulering der alle sidekanter er lokalt otimale. I følge Teorem er P Delaunay 4
Kommentarer: Algoritmen er statisk, dvs. man må kjenne alle unktene når man starter algoritmen. SorteringeravordenONlog N Ste4avordenON 2 i verste fall. 5
Steg-for-steg algoritme Metoden går ut å å lage en og en Delaunay-trekant fra unkter i P til vi har en Delaunay-triang. P. Hvordan kan vi velge tre unkter i, j og k fra P slik at T i, j, k er en Delaunay-trekant? Fra forrige kaittel har vi: LEMMA (sirkel-lemma). Den omskrivende sirkel til en trekant i en Delaunay-triangulering av P omslutter ingen unkter fra P. Kan det finnes en trekant T i, j, k slik at CT i, j, k ikke omslutter unkter fra P, men som likevel ikke er Delaunay? TEOREM. En trekant T a,b,c med hjørneunkter a, b og c fra et unktsett P er en Delaunay-trekant i P (hvis og bare hvis) CT a,b,c omslutter ingen unkter fra P. 6
b α T ba c T abc E b α C(T abc ) a Bevis. Vi lager et konstruktivt bevis som samtidig definerer en algoritme. Anta at CT a,b,c omslutter ingen unkter fra P, se figur. La sirkelen vokse å motsatt side av E b fra c til den når et unkt. Hvis et unkt fra P ikke kan nås, må E b være en kant å ConvHullP;velgenannensidekantiT a,b,c som E b etc. Lag trekanten T b,a, ; CT b,a, omslutter nå ingen unkter fra P. Gjenta dette med en ny E b hver gang til hele ConvP er T dekket av trekanter T i i1 i en triangulering P. CT i, i 1,,T omslutter nå ingen unkter i P. P er en Delaunay-triangulering i følge Teorem og Teorem (eller Corollar). T a,b,c er en Delaunay trekant. 7
Hvis T a,b,c er en Delaunay-trekant i en Delaunay-triangulering P, så omslutter CT a,b,c ingen unkter fra P (i følge sirkel-lemma). 8
Algoritme (steg-for-steg). 1. Finn en Delaunay-sidekant E i, j fra P; for eksemel: a. i og j er to nærmste naboer i P, eller: b. i og j er to naboer å ConvHullP. 2. Lag den første voksende sirkelen C I tilfelle (a); la C ha senter i i j /2 I tilfelle (b), la C være uendelig stor med senter utenfor ConvP 3. Resten blir som konstruksjonen i beviset ovenfor. Kommentarer: Vi trenger en assende underliggende data-struktur for P slik at søk etter et hjørneunkt til en Delaunay-trekant T a,b, blir effektiv. Hvis ikke, blir tidsforbruket alltid ON 2. Algoritmen undersøker vinkelen med tounkt i,se figur. Punktet som gir max velges. Algoritmen er statisk. 9
Inkrementelle algoritmer Inkrementelle algoritmer å et unktsett P kjennetegnes ved: 1. Starter med en initiell Delaunay-triangulering I,for eks.: a. I P; der P er et subsett av P ( I kan være en trekant) b. I S der S er temorære unkter som ikke hører til P. i ConvS, i 1,,N. 2. De gjenværende unktene blir satt inn ett og ett i vilkårlig rekkefølge. Trianguleringen odateres til å være Delaunay for hvert unkt som settes inn. I tilfelle (b) må S fjernes til slutt. *) Det vil lønne seg å sortere unktene, f.eks. leksikografisk å x og y for effektiv lokalisering. Figur, LEDA 10
Ste 2: Innsetting av et unkt i en Delaunay-triangulering N P slik at N1 P også er Delaunay. (a) (b) Q R DEFINISJON (Influens-region). R trekanter som må endres ved innsetting av. DEFINISJON (Influens-olygon). Q randen til R. Alternativ (a): i) Finn R ; ii) fjern alle trekantene i R ; iii) retrianguler Q. Alternativ (b): i) Finn trekanten T i, j, k slik at T i, j, k ; ii) lag sidekanter E,i, E,j og E,k ; iii) Swa kanter til trianguleringen er Delaunay. HVORDAN ER R? 11
LEMMA. En trekant T i må endres når settes inn hvis og bare hvis CT i. Bevis. Følger direkte fra Teorem over. TEOREM. La N1 være Delaunay-trianguleringen fra innsetting av i en Delaunay-triangulering N. Da vil alle nye (og endrede) trekanter i N1 ha som en felles node. Bevis (Motbevis). Merk først at kun trekantene innenfor Q i N vil endres. Anta at det er en Delaunay-trekant T i, j, k i N1 innenfor Q slik at ikke er en node i T i, j, k. i, j and k er Voronoi-naboer relativt til P. Da er de også Voronoi-naboer i P i følge Lemma ;og siden T i, j, k er en Delaunay-trekant i N1, er den også en Delaunay-trekant i N. Motsigelse: Siden T i, j, k er innenfor Q har vi at CT i, j, k og følgelig kan T i, j, k ikke være en Delaunay-trekant i N1. 12
(a) (b) Q R Konsekvenser: Nodene til trekantene i N innenfor R hører til Q R er sammenhengende (hvis er innenfor N ) Q er stjerneformet s.a. alle noder i Q er synlige fra Algoritme 1 (med R og Q. 1. Finn R,dvs.T i slik at CT i ; Figur (a) 2. Fjern alle T i 3. Lag sidekanter E,i der i er unkter å Q. 13
(c) (d) Hvis ligger utenfor N må vi sørge for at randen til N1 blir konveks. forbindes til alle unkter å ConvHullP som er synlige fra. 14
Punktinnsetting og rekursiv swaing Innsetting av i en triangulering: N P N1 P Det fremgår av det foregående at: 1. Influensregionen R er sammenhengende 2. R er ofte begrenset (men i verste fall kan R være hele P Vi skal utnytte dette til å lage en rask og komakt algoritme basert kun å swaing. 15
Algoritme 2 (med swaing). 1. Lokaliser en trekant T i, j, k slik at T i, j, k 2. Sett inn sidekanter E,i, E,j og E,k. 3. Swa kanter innenfor R i henhold til Delaunay-kriteriene. I unkt 3 kan vi f.eks. kjøre LOP, men vi skal utlede en smartere swae-strategi (men som fortsatt kun swaer kanter som ikke er lokalt otimale)... 16
Rekursiv swaerosedyre (a) (b) E 1,1 E 1,3 ' E 1 E 1 E 1,2 E 3 E 3 E 1,4 E 2 E 2 Start å rekursiv swaing Figur (a) viser situasjonen etter Ste 2 over E,i, E,j og E,k kan ikke swaes Kun E 1, E 2 and E 3 i (a) er kandidater for swaing. (Alle andre kanter er diagonaler i de samme kvadrilateraler som før innsetting av og er derfor lokalt otimale siden N er Delaunay ) SWAP, f.eks. E 1 til E 1 ; se figur (b). Merk at E 1 swaes til. E 1,1 and E 1,2 motsatt E 1 fra blir nye kandidater for swaing, 17
(a) (b) E 1,1 E 1,3 ' E 1 E 1 E 1,2 E 3 E 3 E 1,4 E 2 E 2 Start å rekursiv swaing men, hva med E 1,3 og E 1,4? Generelt blir også disse kandidater, men: Hyotese: E 1,3 og E 1,4 som har noder i er ikke kandidater for swaing (vises senere) SWAP E 1,2 og rekursjon, se over (E 1,1 er lokalt otimal i dette eksemelet) Algorithm (recswadelaunay(edge E i )) 1. if (swatest(e i ) OK) 2. RETURN 3. swaedge(e i ) // til 4. recswadelaunay(e i,1 ) // rekursjon 5. recswadelaunay(e i,2 ) // rekursjon 18
Konklusjon så langt (hvis hyotesen holder): Kan swae rekursivt utover fra uten å måtte beregne influensregionen R.... flere konklusjoner følger senere... 19
c x E i,3 E i,1 b ' E i E i,2 C E i,4 C a Hyotese LEMMA. Hver kant-swa i algoritme recswadelaunay genererer maks. to kandidater for swaing. Bevis. Må vise at E i,3 og E i,4 er lokalt otimale etter at E i er swaet til E i. Vi gjør dette for E i,3 vedåseå kvadrilateralet, b, c, x: C a,b,c (.g.a. at E i ble swaet), men ellers er C a,b,c unktfri siden T a,b,c er Delaunay i N. C c,,b : c b C a,b,c (siden c b interolerer.) c b er unktfri og x C c,,b og E i,3 er lokalt otimal. Tilsvarende for E i,4 følger fra symmetri. 20
Observasjoner og flere resultater: Swaing starter i 3 avgrensede vinkel-sektorer utsent av og E i, i 1, 2, 3 (som dekker hele lanet) For hver swa deles en vinkelsektor i to (rekursjon). Hver kant som sjekkes er å motsatt side av i en trekant med som node En kant swaes alltid til og vil ikke swaes igjen i recswadelaunay LEMMA. Ingen kanter sjekkes mer enn en gang i recswadelaunay. En vinkelsektor, E i i R 2 er ferdigbehandlet hvis E i ikke skal swaes. recswadelaunay convergerer Alle kanter i N1 er lokalt otimale og N1 er Delaunay 21
Det følger fra Lemma: KOROLLAR: Følgende er Delaunay-kanter: 1. E,i, E,j og E,k (nye kanter som ikke swaes) 2. Alle kanter som swaes (til ) 3. Alle kanter som asserer swatest. Dette er forskjellig fra generell LOP å en vilkårlig triangulering der en swa av en kant ikke nødvendigvis gir en Delaunay-kant. 22
Verifisering av Korollar med: TEOREM. En kant E i,j mellom to unkter i og j i P er en Delaunay-kant. det eksisterer en sirkel C gjennom i og j slik at det indre av C ikke inneholder unkter fra P. (a) C C (b) C C T i ' E i E i T i 1. E,i, E,j og E,k ; figur (a). 2. Alle kanter som swaes (til ); figur (b) 3. Alle kanter som asserer swatest.; figur (b). (i så fall: C) 23
Punktinnsetting forts.... Hvis settes inn å en eksisterende indre kant dekkes dette av teorien og recswadelaunay uten sesialbehandling Hvis settes inn å å en rand-kant E i må vi slitte E i hvis vi ikke tillater degenererte trekanter. Hvis settes inn utenfor trianguleringen: Får nye initielle kanter E,1,E,2,E,3, der 1, 2, 3, er alle noder som er synlige fra. Ellers er teorien den samme (og recswadelaunay). 24
Tidsforbruk for inkrementelle algoritmer Vi skal først undersøke tidsforbruk for en worst-case konfigurasjon av P. (a) 1 (b) (c) 2 3 4 5 6 8 7 10 9 La P x i, y i være unkter uniformt fordelt å en arabel y 1 2 x2 ; figur (a). Start med T 1, 2, 3 og sett inn unkter i rekkefølgen: 4, 5,, 10. Anta at vi har satt inn k slik at 1,, k er Delaunay. Ved innsetting av k1 er influensregionen R 1,, k ; dvs. alle trekantene må endres for at 1,, k1 skal være Delaunay; figur (b) og (c). 25
Tidsforbruk for å triangulere N unkter blir: siden N i 1 1 2 N2 1 2 N 3 ON2. i4 1 2 3 N NN 1/2 1 2 N2 1 2 N 25 15 10 5-4 -2 0 2 x 4-5 ON, ONlog N, ON 2 26
Kommentarer: Punktkonfigurasjoner som gir worst-case otrer nesten aldri i raksis. Tidsforbruket er valigvis mer avhengig av den underliggende data-struktur enn av teoretisk orden å algoritmer. I raksis, hvis man har en assende data-struktur, har de flese algoritmer et ONlog N eller nesten ON forlø. 27
Punkt-lokalisering PROBLEM. Gitt et unkt og en start-trekant T i i P. Finn trekanten T i P slik at T ; eller avgjør om er utenfor. Raske algoritmer for Problem er viktige i, inkrementelle algoritmer evaluering av P etc. Eksemel å løsning av Problem: Gitt en dart d i V i,e i,t i orientert mot klokka i T i. La Hd i være halvlanet til venstre for d i som inneholder V i og noden i 0 d i. T i Hd i H 1 0 d i H 0 1 d i Anta at randen til P er konveks: 2 d b d b og Hd b er utenfor P. 28
Algoritme: Gitt x,y og en dart d i V i,e i,t i orientert mot klokka i T i. Finn T slik at T d i 1. d start : d i 2. if Hd i 3. d i : 1 0 d i // next edge ccw. in T i 4. if d i d start 5. FOUND : true, RETURN // inside T i 6. else // try to move to the adjacent triangle 7. if 2 d i d i // check if on boundary 8. FOUND : false, RETURN // outside 9. d start : 0 2 d i 10. d i : 1 2 d i // next edge ccw. in adj. T 11. GOTO Ste 2 29
temlate class PointTye, class DartTye bool locateface(pointtye& oint, DartTye& dart_iter) { DartTye dart_start dart_iter; DartTye dart_rev; for (;;) { // endless loo if (dart_iter.inlefthalfplane(oint)) { dart_iter.alha0().alha1(); if (dart_iter dart_start) return true; // left to all edges in face } else { // try to move to the adjacent triangle dart_rev dart_iter; dart_iter.alha2(); if (dart_iter dart_rev) return false; // iteration to outside boundary dart_start dart_iter; dart_start.alha0(); dart_iter.alha1(); // avoid twice on same edge and ccw in next } } // end for } 30
Slitt-og-hersk algoritme Slitt-og-hersk (divide-and-conquer) er en generell teknikk brukt innen mange områder av CG, for eksemel: Konveks omhylning Nærmeste naboer Voronoi-diagram Generelt er slitt-og-hersk algoritmer av orden ONlog N. Slitt-og-hersk er den eneste triangulerings-algoritmen som teoretisk er av orden ONlog N Siden det finnes standard slitt og-hersk algoritmer for å finne Voronoi-diagrammet VDP, kunne vi avlede Delaunay-trianguleringen fra VDP i ON tid. Vi skal se å en slitt-og-hersk algoritme for å finne Delaunay-trianguleringen direkte. 31
Løsning: 1. Sorterer unktsettet P leksikografisk å X og Y: i x i,y i x j,y j j x i x j, eller x i x j og y i y j. 2. Deler o P rekursivt i unktsett P 1,,P N slik at hvert P i inneholder noen få unkter. N er et artall. 3. Lag Delaunay-trianguleringer P 1,,P N. 4. Sy sammen ( merge ) to og to nabo-trianguleringer P L og P R til P L P R. Ste 3 og 4 gjøres rekursivt til vi har en Delaunay-triangulering P. Vi skal se nærmere å ste 4. 32
(a) E u (b) L R E b Gitt P L og P R,finnP L P R : 1. Finn ConvHullP L P R. Siden ConvHullP L og ConvHullP R er funnet, gjøres dette enkelt i (max) ON tidvedåfinnee b og E u ; figur (a). 2. Start sammensying ved E b : Finn unktet fra P L eller P R som danner en Delaunay-trekant med E b. Bruk en voksende sirkel slik som i steg-for-steg algoritmen. T L, R, i figur (a) er nå en Delaunay-trekant i følge Teorem. Sidekanter i P L og P R som skjerer T L, R, fjernes. Sett E b til den nye sidekanten og reeter helt til E u nås. 3. P L P R er nå Delaunay siden ingen unkter i P L P R er innenfor en omskrevet sirkel til en trekant i P L P R 33
Tidsforbruk for slitt-og-hersk Merk at dette er rent teoretisk. Sammensyingen av P L og P R er av orden ON. tn tidsforbruk for Delaunay-triangulering av N unkter. MN MN/2, N/2 tidsforbruk for å sy sammen P L og P R hver med N/2 unkter. Merk at MN er lineær i tid slik at, 2MN/2 MN. Vi får følgende rekursjons-formel: tn 2tN/2 MN t1 0 Dette gir tn ONlog N. Viktig: I raksis viser det seg at slitt-og-hersk ikke er raskere enn andre algoritmer selv om den (teoretisk) er den eneste som er ONlog N. 34
Anta at P ble delt inn i 2 k subsett: tn 2tN/2 MN 22tN/4 MN/2 MN 4tN/4 2MN 8tN/8 3MN 16tN/16 4MN 2 k tn/2 k kmn. Anta totalt antall unkter N 2 m Hvis N er stor og k er stor er m k Worst-case er ON 2 for Delaunay-triangulering 1. ledd av orden: 2 k N/2 k 2 2 k 2 m /2 k 2 2 2mk 2 m (siden m k) N; dvs.on 2. ledd av orden (MN er ON): kn mn, menm log 2 N (siden N 2 m ); dvs. Nlog 2 N eller ON log N 35