a cura di Daniele De Sanctis
Indice
1.
1.1
1.2
1.2.1
1.2.2
1.3
1.4
DIAGRAMMI DI VORONOI………………………………………………………………………. 2
DEFINIZIONI E PROPRIETA’…………………………………………………………………….. 2
ALGORITMI PER IL CALCOLO DEL DIAGRAMMA DI VORONOI………………………….. 3
ILLUSTRAZIONE FUNZIONAMENTO DELL’ALGORITMO PLANE INTERSECT…………. 4
COMPLESSITA’ ALGORITMO E MIGLIORI SOLUZIONI IMPLEMENTATIVE…………….. 5
APPLICAZIONI DEI DIAGRAMMI DI VORONOI………………………………………………. 6
BIBLIOGRAFIA E RIFERIMENTI………………………………………………………………… 7
1
1. DIAGRAMMI DI VORONOI
I diagrammi di Voronoi [ 5 ] furono discussi per la prima volta da Peter Lejeune-Dirichlet nel 1850. Ma è più di mezzo
secolo dopo (1908) che questi diagrammi vengono analizzati in uno scritto da Voronoi, da qui il nome di diagrammi di
Voronoi. Le celle o poligoni costituenti un diagramma di Voronoi vengono spesso chiamate regioni di Dirichlet.
1.1
DEFINIZIONI E PROPRIETA’
Un diagramma di Voronoi su un insieme di punti è una collezione di regioni in cui viene ripartito un piano.
Ogni regione contiene esattamente un punto del set dato e ha la proprietà di contenere tutti i punti del piano che sono più
vicini a quel punto piuttosto che ad un altro. Per capire bene questa definizione basta osservare due semplici esempi
geometrici:
Consideriamo il caso di due punti nel piano, p1 e p2. Indichiamo con
B(p1,p2) la bisecante della congiungente di questi due punti che in
effetti divide il piano in due semipiani così che ogni punto su B è
equidistante da p1 e da p2. E’ facile allora vedere che ogni punto
localizzato nel semipiano intorno a p1 deve essere necessariamente più
vicino a p1 che a p2 e ogni punto localizzato nel semipiano di p2 deve
essere necessariamente più vicino a p2 che a p1.
 p1
 p2
Fig 1.1
 p1
 p2
Adesso facciamo un passo avanti. Con tre punti nel piano ci dobbiamo
confrontare non con una ma con tre bisecanti: B(p1,p2), B(p1,p3) e
B(p2,p3). L’intersezione di queste tre bisecanti individua un punto nel
piano, chiamato punto di Voronoi, che è equidistante ai tre punti del
piano (p1,p2,p3). In questo caso particolare vengono quindi identificate
tre regioni sul piano, chiamate regioni di Voronoi o celle di Voronoi,
ciascuna contenente un punto dato.
 p3
Fig. 1.2
Da un punto di vista ancora prettamente geometrico tutte le regioni di Voronoi possono essere considerate poligoni convessi
e inoltre se tracciamo la circonferenza passante per tre punti, che individuano tre differenti regioni, notiamo che essa è
centrata esattamente nel punto di Voronoi e che non ci sono altri punti del set considerato all’interno di essa (vedi Fig 1.3).
In figura 1.4 è mostrato un diagramma di Voronoi su un set di 50 punti [ 5 ].
2
Fig. 1.4
Fig. 1.3
Vengono riportate di seguito le principali proprietà [4] di un diagramma di Voronoi dal momento che alcune di esse
vengono utilizzate durante l’implementazione dei più comuni algoritmi.




1.2
Una linea di Voronoi consiste di tutti i punti che sono equidistanti a due punti dati nel piano.
Un punto di Voronoi è caratterizzato dall’avere equidistanza al più da tre punti dati nel piano.
Una regione di Voronoi è un poligono convesso.
Una regione di Voronoi contiene al massimo un punto dell’ insieme considerato e può essere adiacente ad n
regioni di Voronoi (con n dipendente dal numero di punti considerato).
ALGORITMI PER IL CALCOLO DEL DIAGRAMMA DI VORONOI
Ci sono letteralmente centinaia di differenti algoritmi per la costruzione dei diagrammi di Voronoi.
In questa sezione verrà presentato e analizzato l’algoritmo Plane Intersect [ 1 ] , uno tra i più semplici, basato su una
descrizione matematica per generare una cella di Voronoi:
V(pi) = merge i!=j H(pi, pj)
dove H(pi, pj) è il semipiano tra il punto i e il punto j .
L’impulso all’algoritmo è dato in pratica dal calcolo di tutti i semipiani generati dalle bisecanti che un punto i forma con
tutti gli altri punti e dal successivo merging di tutti i semipiani individuati. L’operazione di merging tra semipiani
permetterà di costruire la cella di Voronoi contenente il punto i considerato. Questa operazione verrà poi ripetuta per tutti
i punti del set considerato. Di seguito viene presentato lo pseudocodice dell’algoritmo e nella successiva sezione ne verrà
illustrato il funzionamento.
3
Algoritmo PLANE-INTERSECT( P )
Input. Un set P di punti nel piano.
Output. Un vettore C, inizialmente vuoto, contenente le celle di Voronoi individuate.
1 for i  1 to lenght[ P]
2
for j  2 to lenght[ P]
3
do H  FIND-HALFPLANE(P[ i],P[ j])
4
> Viene trovato il semipiano tra il punto i e il punto j
5
if C[i]=null then C[i]  H
5
else C[i]  INTERSECT-CONVEX-REGIONS(C[i] , H)
6
> Viene effettuato il merge tra l’halfplane H appena trovato
7
> e i precedenti memorizzati in C[i]
8
return C
1.2.1
ILLUSTRAZIONE FUNZIONAMENTO DELL’ALGORITMO PLANE INTERSECT
Il principio base è il seguente: prendere ogni punto nel piano, determinare la linea di bisezione tra il punto considerato e
ogni altro punto ed unire tutti i semipiani così creati. Questo processo deve essere ripetuto per ogni punto del piano.
Viene qui illustrato il comportamento dell’algoritmo su un set di quattro punti per generare una singola cella di Voronoi.
Figura 1 – Il primo semipiano (tra p1 e p2) è
trovato.
Figura 2 – Il secondo semipiano (tra p1 e p3)
è trovato e unito al primo.
Figura 3 – Il terzo semipiano (tra p1 e p4) è
trovato e unito agli altri due.
Figura 4 – L’area risultante dall’intersezione
dei semipiani definisce la cella di
Voronoi di p1.
4
1.2.2
COMPLESSITA’ ALGORITMO E MIGLIORI SOLUZIONI IMPLEMENTATIVE
E’ facile vedere che la complessità dell’algoritmo presentato è O(n3). La funzione FIND-HALFPLANE opera in tempo
costante O(1): ciò che realizza è trovare il semipiano tra due punti. Questo può essere fatto trovando la retta bisecante
perpendicolare al segmento congiungente i due punti e passante per il punto medio di esso. INTERSECT-CONVEXREGIONS [ 1 ] calcola l’intersezione tra un poligono convesso, che formerà la cella di Voronoi, e un semipiano.
Un poligono convesso risulta dall’intersezione di più segmenti; questa funzione individua quindi le intersezioni tra i
segmenti, che formano il poligono, e una retta rappresentante il semipiano (Fig. 1).
Fig. 1
Tale intersezione può essere calcolata in tempo O(n), dove n è il numero totale dei vertici del poligono. (*)
Quest’ultima funzione verrà richiamata per ogni punto al più n-1 volte: otteniamo quindi O(n3).
Ohya, Iri, Murota[ 2 ] utilizzano un “algoritmo incrementale” efficiente e robusto. Essi ottengono una complessità
algoritmica che nel caso migliore(buona disposizione dei punti sul piano) è O(n), nel caso medio O(n logn), nel caso
peggiore O(n2). Il metodo incrementale si basa sul considerare inizialmente un diagramma di Voronoi con due o tre punti
e nel modificare tale diagramma aggiungendo un punto alla volta.
Shamos e Hoey[2] hanno presentato il primo algoritmo con complessità O(n logn), asintoticamente ottimo nel caso
peggiore. Questo algoritmo utilizza il paradigma divide-et-impera e proprio da questo deriva la sua efficienza. Nel passo
divide i punti nel piano sono ricorsivamente divisi in due metà(Vor L e VorR) e viene determinata la linea di bisezione tra
queste metà. Al termine del passo di divisione otterremo un albero binario con i punti sulle foglie; nel passo impera i vari
diagrammi di Voronoi, formati al passo precedente, verranno ricorsivamente fusi tra loro(Vor = Vor L U VorR).
Nel 1985, Steve Fortune [3], ha sviluppato un algoritmo (Fortune’s algorithm) che è più efficiente, in termini di tempo,
di qualsiasi algoritmo incrementale. L’algoritmo garantisce una complessità nel caso peggiore pari a O(n logn).
L’efficienza dell’algoritmo deriva da un’ assunzione geometrica sulla quale l’algoritmo si basa. Un cono con un angolo
di 45° è posto su ogni punto del piano(Fig 1). Successivamente un piano inclinato a 45° viene fatto scivolare sul sistema
di coordinate(Fig 2). L’intersezione con il cono viene proiettata sul piano x-y e definisce una linea di voronoi. Quando il
piano si muove lungo l’asse x , l’intersezione con il singolo cono definisce una curva di parabola(Fig 3). I punti di
intersezione delle singole parabole definiscono le linee di Voronoi tra i punti del piano x-y (Fig 4).
Fig. 1.1
Fig. 1.2
(*) INTERSECT-CONVEX-REGIONS è un algoritmo basato su una tecnica nota come ‘plane sweep’. Si rimanda alle pag. 20-29, 61-67 di [ 1]
5
Fig. 1.3
1.3
Fig. 1.4
APPLICAZIONI DEI DIAGRAMMI DI VORONOI
I diagrammi di Voronoi vengono comunemente utilizzati nei più disparati campi della scienza. Scot Drysdale (Dartmouth
College), ci fornisce la seguente lista [7]:













Antropologia e Archeologia – Identificare le parti di una regione sottoposte all’influenza di differenti clan
neolitici, capi rango, centri cerimoniali o fortezze.
Astronomia – Identificare gruppi di stelle e gruppi di galassie.
Biologia, Ecologia – Modellare e analizzare la competizione tra piante (“area potenzialmente disponibile per la
crescita di un albero…”).
Cartografia – Disporre su una mappa differenti fotografie satellitari (mosaico).
Chimica – Studiare le proprietà chimiche del sodio metallico.
Geografia – Analizzare le aree di insediamenti urbani.
Modellazione geometrica – Trovare una “buona” triangolazione delle superfici 3D.
Marketing – Analizzare la dislocazione dei centri di marketing nelle aree metropolitane.
Matematica – Studio delle forme quadratiche definite.
Meteorologia – Stimare le precipitazioni regionali medie, dati dei dati discreti sulle misurazioni effettuate.
Fisiologia – Analizzare la distribuzione capillare in una sezione del muscolo per stimare il trasporto di ossigeno.
Robotica – Analizzare cammini alternativi in presenza di ostacoli.
Zoologia – Modellare e analizzare i territori degli animali.
Oltre a tutte queste “real world applications”, i diagrammi di Voronoi hanno alcune particolari applicazioni nel campo
dell’informatica e nella geometria computazionale.






Problema dell’ufficio postale di Knuth’s – Dato un set di locazioni per gli uffici postali, come si determina
l’ufficio postale più vicino ad una data abitazione? (Knuth ignora l’esistenza di C.A.P.).
Coppia di vicini – Dato un set di punti, quali sono i due più vicini tra loro?
Minimum Spanning Tree euclediano.
Problema del Toxic Waste Dump – Determinare la più grande circonferenza vuota.
Problema del raggio fissato – Trovare tutte le coppie di punti che più si avvicinano ad una distanza data.
Enumerazione, in ordine crescente, delle distanze tra i punti – Trovare la prima coppia di vicini, poi la seconda, la
terza, e così via.
6
1.4 BIBLIOGRAFIA E RIFERIMENTI
[ 1 ] “Computational Geometry: Algorithms and Applications, Second Edition” by Mark de Berg, Marc van Kreveld,
Mark Overmars, Utrecht (the Netherlands), cap. 2,cap. 4.
[ 2 ] T. Ohya, M. Iri e k. Murota, “improvements of the incremental method for the Voronoi diagram with
computational comparison of various algorithms” (1984).
[ 3 ] Voronoi Diagrams in 2-D Based on notes written by Edgar Ramos. April 29, 2003, pag. 6-9.
[5]
[6]
[7]
www.voronoi.com
http://mathworld.wolfram.com/VoronoiDiagram.html
www.ics.uci.edu (Geometry in Action)
7