El Diagrama de Voronoi
Geometría Computacional
Curso: 1º de Ingeniería Informática, Plan 2004
Profesora: Lidia Ortega Alvarado
Departamento: Informática
Curso académico: 2010/11
Ubicación: http://wwwdi.ujaen.es/asignaturas/gc/tema5.odp
Actualizado: 11/11/2010
Índice
● Introducción
● Definición
El diagrama de Voronoi
● Propiedades
● Algoritmos de construcción
➔ Método Incremental
➔ Divide y Vencerás
● Aplicaciones inmediatas
● Bibliografía
Introducción
Teléfono de emergencias: ¿dónde se encuentra?.....le envío la
ambulancia más cercana,
El diagrama de Voronoi
¿Dónde y cuantos postes de telefonía móvil habría que colocar
para que la recepción de la señal sea completa en una región?
¿Dónde colocamos un nuevo comercio para que sea
competente?
¿Cual será el grado de pureza de los minerales de una
determinada zona?
Introducción
Georgy Feodosevich Voronoi (18681908)
El diagrama de Voronoi
Descartes Astronomia 1644 “Heavens”
Dirichlet Matemáticas 1850 Tesselation de Dirichlet
Voronoi Matemáticas 1908 Voronoi diagram
Boldyrev Geologia 1909 area de influencia de polígonos
Thiessen Meteorología 1911 polígonos de Theissen
Niggli Cristalografía 1927 dominio de acción
Wigner & Seitz Física 1933 regiones de WignerSeitz
Frank & Casper Física 1958 dominio de los átomos
Brown Ecología 1965
Mead Ecología 1966
Hoofd et al. Anatomía 1985 dominios capilares
Icke Astronomía 1987 Voronoi diagram
Definición
¿Cuál es el punto más cercano al punto x?
El diagrama de Voronoi
x
Definición
El punto x está dentro de la región de puntos más cercanos al
punto pi
El diagrama de Voronoi
V(pi)
p
i
La región de Voronoi del punto pi la denominamos V(pi)
Definición
La unión de todas las regiones de Voronoi es el
diagrama de Voronoi
El diagrama de Voronoi
V(P)={V(p0),V(p1),...,V(p0)}
punto
generador
vértice
arista
Propiedades
1. Dos puntos pi y pj son vecinos
si comparten una arista. Una arista pj
es la bisectriz perpendicular del
El diagrama de Voronoi
segmento pipj
2. Un vértice es un punto
equidistante a tres generadores pi
(si lo es a más de tres hablamos
de casos degenerados) y es
la intersección de tres aristas
3. Una región de Voronoi es un
polígono convexo o es una región
no acotada
4. Una región de Voronoi es no 5. Dentro del círculo con centro en
acotada si su punto generador un vértice de Voronoi y que pasa por 3
pertenece a la envolvente convexa puntos generadores no puede existir ningún
de la nube de puntos otro punto generador
Algoritmos de construcción
Método Incremental
PASO i+1
Partiendo del diagrama de Voronoi
El diagrama de Voronoi
para los i puntos, V(P0P1,...,Pi), se
añade el punto i+1, del siguiente pi+1
modo:
pk
1. Se localiza en punto pi+1 en
V(p0,p1,...,pi) en tiempo O(logn).
Sea V(pk) la región en la que
se encuentra.
2.Encontrar las bisectrices entre pi+1
y pk ,y entre pk y el resto de puntos cuya
frontera es intersectada por las sucesivas bisectrices
3. Eliminar las porciones de arista y los vértices que queden dentro de la
nueva región de Voronoi
Algoritmos de construcción
Método Incremental
Tiempo de ejecución:
El diagrama de Voronoi
Insertar el punto pi+1
● localización: O(logn)
● crear la nueva región O(1)
● eliminar vértices y porciones
de aristas O(1)
O(nlogn)
Algoritmos de construcción
Método Divide y Vencerás
Partimos del conjunto de puntos S
El diagrama de Voronoi
1. Dividir S en dos
subconjuntos S1 y S2 de
aproximadamente el
mismo tamaño.
2. Calcular recursivamente
Vor(S1) y Vor(S2).
3. Unir Vor(S1) y Vor(S2)
para obtener Vor(S). S1 S2
Algoritmos de construcción
Método Divide y Vencerás
Partimos del conjunto de puntos S
El diagrama de Voronoi
1. Dividir S en dos
subconjuntos S1 y S2 de
aproximadamente el
mismo tamaño.
2. Calcular recursivamente
Vor(S1) y Vor(S2).
3. Unir Vor(S1) y Vor(S2)
para obtener Vor(S). Vor(S1) Vor(S2)
Algoritmos de construcción
Método Divide y Vencerás
Partimos del conjunto de puntos S
El diagrama de Voronoi
1. Dividir S en dos
subconjuntos S1 y S2 de
aproximadamente el
mismo tamaño.
2. Calcular recursivamente
Vor(S1) y Vor(S2).
3. Unir Vor(S1) y Vor(S2)
para obtener Vor(S). Vor(S1) Vor(S2)
Algoritmos de construcción
Método Divide y Vencerás
Paso 3. Unir Vor(S1) y Vor(S2)
El diagrama de Voronoi
Si S1 y S2 están separados por
una línea vertical (S1 a la
izquierda y S2 a la derecha),
existe una línea poligonal
monótona creciente tal que
todo punto q situado a la
izquierda (derecha) de dicha
poligonal está en la región de
Voronoi de un punto de S1
(S2).
Vor(S1) Vor(S2)
Algoritmos de construcción
Método Divide y Vencerás
Paso 3.1. Encontrar la cadena p q
El diagrama de Voronoi
divisoria
1. Partir de una línea que llega
desde infinito y alcanza a la
primera región de S1 (la del
punto p) y la primera de S2
(la del punto q).
2. Calcular la bisectriz entre
p y q hasta alcanzar una arista
de Voronoi, de S1 o de S2
Vor(S1) Vor(S2)
Algoritmos de construcción
Método Divide y Vencerás
Paso 3.1. Encontrar la cadena p
El diagrama de Voronoi
divisoria
Si se alcanza un eje de S2 se
q
actualiza el punto q con el punto
vecino; se se alcanza
una arista de S1 se actualiza
el punto p
Vor(S1) Vor(S2)
Algoritmos de construcción
Método Divide y Vencerás
Paso 3.1. Encontrar la cadena
El diagrama de Voronoi
divisoria
Si se alcanza un eje de S2 se
p q
actualiza el punto q con el punto
vecino; se se alcanza
una arista de S1 se actualiza
el punto p
Vor(S1) Vor(S2)
Algoritmos de construcción
Método Divide y Vencerás
Paso 3.1. Encontrar la cadena
El diagrama de Voronoi
divisoria
Si se alcanza un eje de S2 se
actualiza el punto q con el punto p
vecino; se se alcanza
una arista de S1 se actualiza
el punto p q
Vor(S1) Vor(S2)
Algoritmos de construcción
Método Divide y Vencerás
Paso 3.1. Encontrar la cadena
El diagrama de Voronoi
divisoria
Si se alcanza un eje de S2 se
actualiza el punto q con el punto
vecino; se se alcanza
una arista de S1 se actualiza p
el punto p q
Vor(S1) Vor(S2)
Algoritmos de construcción
Método Divide y Vencerás
Paso 3.1. Encontrar la cadena
El diagrama de Voronoi
divisoria
Si se alcanza un eje de S2 se
actualiza el punto q con el punto
vecino; se se alcanza
una arista de S1 se actualiza
el punto p q
Vor(S1) Vor(S2)
Algoritmos de construcción
Método Divide y Vencerás
Paso 3.1. Encontrar la cadena
El diagrama de Voronoi
divisoria
Si se alcanza un eje de S2 se
actualiza el punto q con el punto
vecino; se se alcanza
una arista de S1 se actualiza
el punto p
q
p
Vor(S1) Vor(S2)
Algoritmos de construcción
Método Divide y Vencerás
Paso 3.2. Eliminar aristas y
El diagrama de Voronoi
vértices sobrantes
a) Eliminar las líneas de Vor(S1)
que queden a la derecha de
b) Eliminar las líneas de Vor(S2)
que queden a la izquierda de
Vor(S1) Vor(S2)
Algoritmos de construcción
Método Divide y Vencerás
Paso 3.2. Eliminar aristas y
El diagrama de Voronoi
vértices sobrantes
a) Eliminar las líneas de Vor(S1)
que queden a la derecha de
b) Eliminar las líneas de Vor(S2)
que queden a la izquierda de
Vor(S1) Vor(S2)
Algoritmos de construcción
Método Divide y Vencerás
Tiempo de ejecución:
El diagrama de Voronoi
T(n) = 2T(n/2)+cn si n>1
T(n) = d si n<=1
Proceso de unión:
● Construir : O(n)
● Eliminar aristas y
vértices sobrantes O(n)
O(n)
Estructura de Datos
wingededge data structure h.sucesor[k]
Para cada eje k ah.sucesor[k]
El diagrama de Voronoi
h.sucesor[k]: el ordinal del siguiente final.vertice[k]
eje a k en sentido horario alrededor
del vértice final
izda.poligono[k]
h.predecesor[k]: el ordinal del eje k
decha.poligono[k]
siguiente eje a k en sentido horario comienzo.vertice[k]
alrededor del vértice comienzo
ah.sucesor[k]: el ordinal del siguiente h.predecesor[k]
eje a k en sentido antihorario
ah.predecesor[k]
alrededor del vértice final
ah.predecesor[k]: el ordinal del siguiente
eje a k en sentido antihorario alrededor
del vértice comienzo
decha.poligono[k]: el ordinal del polígono que
está a la derecha del eje k
izda.poligono[k]: el ordinal del polígono que está a la izquierda del eje k
Para cada polígono i
eje.alrededor.poligono[i] ordinal de algún eje en la frontera del polígono i
Estructura de Datos
6
Ejemplo de EEDD p∞ 6 p2 3
3 2
El diagrama de Voronoi
7
1
k(eje) 1 2 3 4 5 6 7 8 9
decha.poligono[k] 1 1 2 4 3 i i i i p3
izda.poligono[k] 3 2 3 1 4 2 3 4 1 1 p1
comienzo.vertice[k] 2 1 1 2 2 3 6 5 4 2
final.vertice[k] 1 3 6 4 5 6 5 4 3 5
9
h.predecesor[k] 4 1 2 5 1 9 6 7 8 5 4
ah.predecesor[k] 5 3 1 1 4 2 3 5 4
h.sucesor[k] 3 6 7 9 8 3 5 4 2 p4 4
ah.sucesor[k] 2 9 6 8 7 7 8 9 6
i(polígono) 1 2 3 4 i
8
eje.alrededor.poligono[i] 1 2 1 4 6
j(vértice) 1 2 3 4 5 6
eje.alrededor.vertice[j] 1 1 2 4 5 3
Aplicaciones inmediatas
El vecino más cercano
El diagrama de Voronoi
Búsqueda exhaustiva O(n)
Usando diagrama de Voronoi
Localizar un punto dentro de
una región de Voronoi usando
el método de la cadena
x
O(logn)
Aplicaciones inmediatas
Todos los vecinos más cercanos
Búsquedas exhaustivas O(n2)
El diagrama de Voronoi
Usando diagrama de Voronoi
Cada punto localiza su vecino
más cercano (es uno de los
vecinos de Voronoi) en
O(1) obteniendo el grafo de
vecinos más cercanos NNG
O(n)
● Encontrar los 2 puntos más
cercanos
Aplicaciones inmediatas
Envolvente convexa
El diagrama de Voronoi
No es un método eficaz si el
único objeto es construir la
envolvente convexa, pero si
se tiene como
pre_procesamiento basta
enlazar los generadores con
regiones infinitas
O(n)
Aplicaciones inmediatas
El mayor círculo posible
Se trata de encontrar el mayor
El diagrama de Voronoi
círculo vacío cuyo centro esté
dentro de la envolvente
convexa.
Ejemplo: ¿dónde coloco mi
nuevo comercio?
● El centro del círculo debe
ser un vértice de Voronoi o
los puntos de intersección
entre la envolvente convexa
y los ejes de Voronoi
O(nlogn)
Aplicaciones inmediatas
Triangulación de la nube de puntos
El diagrama de Voronoi
Existen muy diversos métodos
pero el diagrama de Voronoi
proporciona la mejor de las
posibles triangulaciones
Tiangulacion de
Delaunay
más en el próximo tema
Bibliografía
El diagrama de Voronoi
PREPARATA F.P., SHAMOS M.I. Computational Geometry. An
Introduction. SpringerVerlag. 1985 (capítulo 2)