Triangolazione di Delaunay Duccio Mugnaini1 [email protected] 1 Dipartimento di Scienza e Alta Tecnologia (DiSTA) Università degli Studi dell’Insubria Metodi numerici per la grafica :: Geometria computazionale Duccio Mugnaini - [email protected] Triangolazione di Delaunay Universities of Approssimazione di un terreno Il problema Costruire un modello della superficie di un terreno avendo a disposizione un numero finito di altezze in determinati punti del terreno. ⇒ possiamo utilizzare un terrain, ovvero un grafico di una funzione f : A ⊂ R 2 → R che assegna un’altezza a f (p) ∀p ∈ A dominio del terrain. Ma non conosciamo l’altezza di ogni punto in A ma soltanto di un sottoinsieme P. Obiettivo: approssimare l’altezza dei punti in A basandosi sui campionamenti a disposizione. Duccio Mugnaini - [email protected] Triangolazione di Delaunay Universities of Approssimazione di un terreno Un approccio naive Assegnare ad ogni punto p ∈ A l’altezza del più vicino punto campionato in P (basandoci sul diagramma di Voronoi, Vor(P)). ⇒ otteniamo un terrain discreto che però approssima la superficie in modo innaturale. Soluzione: ricorriamo alla triangolazione, cioè una suddivisione del piano composto da: I facce: sono tutti triangoli; I vertici: sono i punti del campionamento P. Duccio Mugnaini - [email protected] Triangolazione di Delaunay Universities of Approssimazione di un terreno Un possibile approccio Step :: 1 Determinare triangolazione di P (assumiamo che tutto il terreno sia trangolabile); Step :: 2 Solleviamo ogni punto in P all’altezza definita dalla funzione f (p) trasformando il triangolo bidimensionale in uno tridimensionale. ⇒ otteniamo un terreno poliedrale. Ma quale triangolazione é la migliore? Duccio Mugnaini - [email protected] Triangolazione di Delaunay Universities of Valutazione triangolazione La soluzione migliore appare la (a) in quanto (b), flippando un edge, introduce un triangolo stretto facendo apparire una valle innaturale. Comparazione tra triangolazioni Date due triangolazioni valuteremo migliore confrontando il minimo angolo. Se il minimo angolo è uguale allora passeremo al successivo e così via. Vedremo che: :: ∃ un numero finito di triangolazioni possibili; :: ∃ una triangolazione che massimizza il minimo angolo (triangolazione obiettivo). Duccio Mugnaini - [email protected] Triangolazione di Delaunay Universities of Triangolazione Sia P = {p1 , . . . , pn } un insieme di punti nel piano. Definiamo: Suddivisione planare massimale Consiste in un suddivisione S tale che nessun lato che connette due vertici può essere aggiunto ad S senza distruggere la sua planarità. Triangolazione di P Consiste nella s.p.m. i cui vertici sono i punti di P. Duccio Mugnaini - [email protected] Triangolazione di Delaunay Universities of Triangolazione La triangolazione consiste in triangoli? Si. Ogni faccia eccetto quella illimitata deve essere un triangolo. Ogni faccia limitata è un poligono (nel nostro caso è il convex hull di P) e sappiamo che ogni poligono può essere triangolato. Attenzione: nel caso in cui il dominio del terrain sia limitato da una cornice (per esempio un rettangolo), allora gli spigoli devono essere aggiunti al dominio. :: # triangoli è uguale per ogni triangolazione di P; :: # lati è uguale per ogni triangolazione di P. Duccio Mugnaini - [email protected] Triangolazione di Delaunay Universities of Complessità triangolazione Teorema P un insieme di punti nel piano, non tutti collineari. k il numero di punti sul confine della convex hull di P. ⇒ ogni triangolazione τ di P ha: :: 2n − 2 − k triangoli; :: 3n − 3 − k lati; Dimostrazione I ogni triangolo ha 3 lati; I la faccia ∞ ha k lati; I ogni lato è incidente con 2 triangoli ⇒ nl = 3m+k 2 ⇒ Formula di Eulero n − ne + nf = 2 Duccio Mugnaini - [email protected] Triangolazione di Delaunay Universities of Vettore degli angoli Sia τ una triangolazione di P. Supponiamo m il numero di triangoli. Siano α1 , α2 , . . . α3m gli angoli di τ ordinati in ordine crescente αi ≤ αj ∀i < j. Allora definiamo: Vettore degli angoli A(τ) := [α1 , α2 , . . . α3m ] Duccio Mugnaini - [email protected] Triangolazione di Delaunay Universities of Vettore degli angoli Sia τ 0 un’altra triangolazione di P 0 ] il relativo Sia A(τ 0 ) := [α10 , α20 , . . . α3m vettore degli angoli. Possiamo allora comparare due triangolazioni in base agli angoli: Comparazione fra triangolazioni A(τ) > A(τ 0 ) se A(τ) è lessicograficamente più grande di A(τ 0 ) cioè: ∃i indice 1 ≤ i ≤ 3m tc αj = αj0 ∀j < i e αi > αi0 Possiamo introdurre un criterio di ottimalità per una triangolazione τ : τ triangolazione angle-optimal se A(τ) ≥ A(τ 0 ) ∀τ 0 di P Duccio Mugnaini - [email protected] Triangolazione di Delaunay Universities of Flipping e lati illegali Consideriamo il lato e = pi pj della triangolazione τ . Se non è un lato della faccia ∞ è condiviso tra due triangoli. Se i due triangoli formano un quadrilatero convesso possiamo flipparlo ottenendo τ 0 . ⇒ l’unica differenza tra A(τ) e A(τ 0 ) è nei 6 angoli. Lato illegale se min αi < min αi0 1≤i ≤6 1≤i ≤6 ⇒ un lato e si definirà illegale se possiamo localmente incrementare il più piccolo angolo effettuando il flip del lato. ⇒ se τ contiene un lato e illegale e τ 0 è la triangolazione ottenuta flippando, allora: A(τ 0 ) > A(τ) Duccio Mugnaini - [email protected] Triangolazione di Delaunay Universities of Flipping e lati illegali É necessario calcolare tutti i 12 angoli per capire se un lato è illegale? No, grazie al teorema di Talete. Teorema di Talete Sia C una circonferenza, l una linea che interseca C in due punti a, b. Siano p, q , r , s punti appartenenti allo stesso semipiano individuato da ` con: :: p e q ∈ C; :: r interno a C; :: s esterno a C; ⇒ ∠arb > ∠apb = ∠aqb > ∠asb (indicando con ∠abc il minimo angolo del triangolo abc). Duccio Mugnaini - [email protected] Triangolazione di Delaunay Universities of Flipping e lati illegali Dal teorema di Talete segue il seguente lemma: Lemma Sia il lato pi pj incidente ai triangoli (pi , pj , pk , ) e (pi , pj , pl ). Sia C la circonferenza che passa attraverso (pi , pj , pk ), allora: :: il lato pi pj è illegale ⇔ pl stà all’interno di C; :: se pi , pj , pk , pl formano un quadrilatero convesso e non stanno su una circonferenza comune ⇒ esattamente un lato tra pi pj e pk pl è illegale. ⇒ quando tutti e quattro i punto stanno sulla stessa circonferenza allora entrambi i lati sono legali. Duccio Mugnaini - [email protected] Triangolazione di Delaunay Universities of Flipping e lati illegali Dal teorema di Talete segue il seguente lemma: Lemma Sia il lato pi pj incidente ai triangoli (pi , pj , pk , ) e (pi , pj , pl ). Sia C la circonferenza che passa attraverso (pi , pj , pk ), allora: :: il lato pi pj è illegale ⇔ pl stà all’interno di C; :: se pi , pj , pk , pl formano un quadrilatero convesso e non stanno su una circonferenza comune ⇒ esattamente un lato tra pi pj e pk pl è illegale. ⇒ quando tutti e quattro i punto stanno sulla stessa circonferenza allora entrambi i lati sono legali. Duccio Mugnaini - [email protected] Triangolazione di Delaunay Universities of Flipping e lati illegali Triangolazione Legale Una triangolazione che non contiene lati illegali è considerata legale ⇒ ogni triangolazione angle-optimal è legale (flippando un lato illegale si incrementa il minimo angolo). Come ottenere una triangolazione legale? Data una triangolazione iniziale è semplice calcolare una triangolazione legale: while ( ∃pi pj illegale) do flip pi pj end while Terminazione Ricordiamo che il flip di un lato illegale aumenta il minimo angolo di una triangolazione e dato che le triangolazioni possibili sono un numero finito abbiamo la garanzia della terminazione. Come otteniamo una triangolazione? Duccio Mugnaini - [email protected] Triangolazione di Delaunay Universities of Triangolazione di Delaunay :: Sia P = {p1 . . . pn } un insieme di n punti nel piano; :: sia Vor (P ) il diagramma di Voronoi di P; :: chiamiamo cella di p la regione di un punto p; Duccio Mugnaini - [email protected] Triangolazione di Delaunay Universities of Triangolazione di Delaunay :: Sia P = {p1 . . . pn } un insieme di n punti nel piano; :: sia Vor (P ) il diagramma di Voronoi di P; :: chiamiamo cella di p la regione di un punto p; Grafo duale di Voronoi - G(V , E ) :: V - un nodo per ogni cella di Voronoi; :: E - esiste un arco fra due nodi se le corrispondenti celle condividono un lato. Duccio Mugnaini - [email protected] Triangolazione di Delaunay Universities of Triangolazione di Delaunay :: Sia P = {p1 . . . pn } un insieme di n punti nel piano; :: sia Vor (P ) il diagramma di Voronoi di P; :: chiamiamo cella di p la regione di un punto p; Grafo duale di Voronoi - G(V , E ) :: V - un nodo per ogni cella di Voronoi; :: E - esiste un arco fra due nodi se le corrispondenti celle condividono un lato. Stiriamo gli archi del duale . . . Delaunay Graph - DG(P ) grafo composto da :: V - insieme di vertici corrispondenti ai punti di Vor (P ), cioè ai punti P; :: E - insieme di lati rappresentanti l’adiacenza di due celle di Vor (P ). Duccio Mugnaini - [email protected] Triangolazione di Delaunay Universities of Triangolazione di Delaunay Teorema Il grafo di Delaunay di un insieme di punti nel piano è un grafo planare (può essere raffigurato senza archi che si intersecano). Dimostrazione ... Duccio Mugnaini - [email protected] Triangolazione di Delaunay Universities of Triangolazione di Delaunay & Diagramma di Voronoi Dato un insieme P di punti nel piano è possibile riscrivere i teoremi di caratterizzazione di Vor (P ) in termini di DG(P ). Teorema :: 3 punti pi pj pk ∈ P sono vertici della stessa faccia di DG(P ) ⇔ la circonferenza passante per pi pj pk non contiene altri punti di P al suo interno; :: 2 punti pi pj ∈ P formano un lato di DG(P ) ⇔ ∃ una circonferenza C che contiene nel suo perimetro pi pj e nessun altro punto di P. Teorema τ triangolazione di P è una DG(P ) ⇔ la circonferenza di ogni triangolo di τ non contiene un punto di P al suo interno. Duccio Mugnaini - [email protected] Triangolazione di Delaunay Universities of Triangolazione di Delaunay Dal teorema che caratterizza la struttura del diagramma di Voronoi e dalla corrispondenza fra DG(P ) e Vor (P ) abbiamo che se i punti p1 ..pk stanno sulla stessa circonferenza (e quindi incidenti a un vertice vi di Vor (P )) ⇒ la faccia f corrispondente sarà un poligono convesso con p1 ..pk come vertici. ⇒ se i punti P sono distribuiti casualmente è altamente improbabile che esistano 4 punti sulla stessa circonferenza. Chiameremo un insieme di punti P in posizione generale (p.g.) se P non contiene 4 punti sulla stessa circonferenza. ⇒ se P è in g.p. tutti i vertici di Vor (P ) hanno grado 3 ⇒ DG(P ) sarà una triangolazione Duccio Mugnaini - [email protected] Triangolazione di Delaunay Universities of Triangolazione di Delaunay e legalità Dati P punti nel piano, il nostro scopo era quello di trovare una triangolazione τ buona per modellare il nostro terreno. Per il criterio del minimo angolo abbiamo visto che τ è buona se è legale. Teorema Una triangolazione τ di P è legale ⇔ τ è di Delaunay. Dimostrazione ... Duccio Mugnaini - [email protected] Triangolazione di Delaunay Universities of τ legale ⇔ τ Delaunay Duccio Mugnaini - [email protected] Triangolazione di Delaunay Universities of Calcolare la triangolazione di Delaunay Avendo a disposizione Vor (P ) è facile ottenere DG(P ) e triangolando le facce derivanti da vertici con grado maggiore di tre si può ottenere una triangolazione di Delaunay. Approccio alternativo: calcolare una triangolazione direttamente utilizzando un approccio incrementale random come segue: step :: 1 aggiungere 2 extra punti p−1 , p−2 (scelti ad hoc) che insieme al punto più in alto a destra p0 formeranno un triangolo che conterrà tutti i punti P; step :: 2 scegliere casualmente un punto pr da P; step :: 3 trovare il triangolo ∆ in cui risiede pr ; step :: 4 suddividere ∆ in nuovi triangoli che hanno come vertice anche pr ; step :: 5 flippare i lati finché non si ottiene di nuovo una triangolazione legale Duccio Mugnaini - [email protected] Triangolazione di Delaunay step :: 6 ripetere dallo step 2. Universities of Calcolare la triangolazione di Delaunay Gestire l’aggiunta random di un punto pr Consideriamo l’aggiunta di un punto pr . Possiamo avere i seguenti casi: case :: 1 pr è situato all’interno di un triangolo della corrente triangolazione ⇒ aggiungiamo tre nuovi lati che connettono pr ai vertici del triangolo; case :: 2 pr è situato sul lato di un triangolo ⇒ aggiungiamo due nuovi lati da pr ai vertici opposti del triangolo adiacente. ⇒ abbiamo una nuova triangolazione ma non è detto che sia di Delaunay (in quanto possono essere stati aggiunto archi illegali). Duccio Mugnaini - [email protected] Triangolazione di Delaunay Universities of Calcolare la triangolazione di Delaunay Quali lati diventano illegali con l’inserimento di pr ? Dato che un lato diventa illegale solo se uno fra i due triangoli adiacenti cambia ⇒ i lati esterni sono diventati potenzialmente illegali. Duccio Mugnaini - [email protected] Triangolazione di Delaunay Universities of Calcolare la triangolazione di Delaunay Duccio Mugnaini - [email protected] Triangolazione di Delaunay Universities of Calcolare la triangolazione di Delaunay Correttezza Dobbiamo provare che nessun lato illegale rimane dopo la chiamata di L EGALIZE E DGE Lemma Ogni nuovo lato creato da D ELAUNAY T RIANGOLATION o in L EGALIZE E DGE durante l’inserimento di pr è un lato del grafo di Delaunay di {p−2 , p−1 , p0 . . . pr } Dimostrazione Duccio Mugnaini - [email protected] Triangolazione di Delaunay Universities of Calcolare la triangolazione di Delaunay Procedura per individuare il triangolo corrente di pr Utilizzeremo un DAG (Directed acyclic graph) per mantenere la struttura del DG(P ) in cui: :: foglie - triangoli della corrente triangolazione; :: nodi interni - triangoli della triangolazione agli stadi precedenti ma che sono stati distrutti. Il DAG verrà inizializzato all riga 3 con i tre vertici del triangolo enorme. Duccio Mugnaini - [email protected] Triangolazione di Delaunay Universities of Calcolare la triangolazione di Delaunay Procedura per individuare il triangolo corrente di pr Utilizzeremo un DAG (Directed acyclic graph) per mantenere la struttura del DG(P ) in cui: :: foglie - triangoli della corrente triangolazione; :: nodi interni - triangoli della triangolazione agli stadi precedenti ma che sono stati distrutti. Il DAG verrà inizializzato all riga 3 con i tre vertici del triangolo enorme. Duccio Mugnaini - [email protected] Triangolazione di Delaunay Universities of Calcolare la triangolazione di Delaunay Procedura per individuare il triangolo corrente di pr Utilizzeremo un DAG (Directed acyclic graph) per mantenere la struttura del DG(P ) in cui: :: foglie - triangoli della corrente triangolazione; :: nodi interni - triangoli della triangolazione agli stadi precedenti ma che sono stati distrutti. Il DAG verrà inizializzato all riga 3 con i tre vertici del triangolo enorme. Duccio Mugnaini - [email protected] Triangolazione di Delaunay Universities of Thank you for your attention.