Come triangolare da un diagramma Voronoï?


13

Ho calcolato un diagramma Voronoï da una serie di punti (con Boost.polygon ).

Provo a trovare una triangolazione di Delaunay, collegando ciascun centro di cella per ciascun bordo Voronoï, ma mi mancano alcuni bordi.

Nell'immagine seguente, i punti rossi sono i miei punti iniziali, le linee blu sono i bordi Voronoï (ho ignorato i bordi infiniti) e le linee verdi sono i bordi di triangolazione (un bordo verde per ciascun bordo blu, che collega due origini di celle).

Possiamo vedere che mancano i bordi diagonali. Cosa mi sto perdendo?

diagramma di voronoi

Risposte:


19

Il punto centrale nel diagramma è un bordo degenerato del diagramma Voronoi. Se si genera un diagramma Voronoi per una nuvola di punti irregolare, ogni vertice avrà grado 3. Un vertice con grado 4 (o più) può accadere solo quando due (o più) vertici coincidono. Ciò significa che c'è un bordo di lunghezza zero tra di loro. Ma quel bordo dovrebbe ancora avere un bordo corrispondente nella triangolazione di Delaunay. Il problema è che è arbitrario quale dei due possibili bordi si sceglie, perché il bordo di lunghezza zero non ha direzione associata.

Per visualizzare ciò di cui sto parlando, considera di iniziare con quattro punti meno distanziati regolarmente (in modo tale che iniziamo con solo vertici di grado 3) e tradurli gradualmente nelle loro posizioni regolari.

Possiamo farlo in due modi diversi, che portano entrambi al caso degenerato nel diagramma. Vedrai che finirai con due diverse triangolazioni Delaunay, che sono entrambi limiti validi per il caso degenerato:

inserisci qui la descrizione dell'immagineinserisci qui la descrizione dell'immagine

Suppongo che al tuo codice manchi questo caso degenerato per una ragione o per l'altra, ma senza vedere effettivamente come calcoli la triangolazione di Delaunay dal diagramma Voronoi è impossibile indicarti oltre.

Si noti inoltre che avere degenerazioni ancora più elevate (di oltre quattro punti distribuiti ad angoli uguali attorno a un cerchio) richiederebbe probabilmente un'attenzione aggiuntiva:

inserisci qui la descrizione dell'immagineinserisci qui la descrizione dell'immagine

Queste animazioni mostrano anche che (anche in un caso non degenerato), i corrispondenti bordi Voronoi e Delaunay non si incrociano necessariamente nella loro estensione. Ciò potrebbe rendere più difficile vedere che i 2 (o 3) bordi che triangolano il poligono regolare all'estremità corrispondono effettivamente a diversi bordi degeneri che sono tutti al centro. Si noti inoltre che in totale ci sono 5 diverse triangolazioni del pentagono e 14 triangolazioni dell'esagono (anche se non so se tutti i 14 possano essere ottenuti deformando una triangolazione non degenerata).

Modifica (per OP)

I diagrammi di Voronoi calcolati con Boost.polygon consentono di attraversare ogni vertice Voronoi e ogni bordo collegato a quei vertici (in senso orario o antiorario). In questo modo, è possibile creare un triangolo per ogni coppia di bordi (due bordi collegati si collegheranno a 3 celle).


Puoi rispondere anche qui o eliminerò la mia altra domanda.
arthur.sw,

3
@ arthur.sw Il cross-posting è generalmente scoraggiato su SE, quindi suppongo che eliminarlo ci sarebbe l'opzione migliore.
Martin Ender,

un creatore interattivo di diagrammi voronoï: alexbeutel.com/webgl/voronoi.html
arthur.sw

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.