Anda di halaman 1dari 32

Tema 5

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 (1868­1908)

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 Wigner­Seitz 
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

winged­edge 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 anti­horario 
ah.predecesor[k]
alrededor del vértice final
ah.predecesor[k]: el ordinal del siguiente 
eje a k en sentido anti­horario 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

O´ROURKE  Joseph.  Computational  Geometry  in  C.  Cambridge 


University Press. 1998  (capítulo 5)

El diagrama de Voronoi
PREPARATA F.P., SHAMOS M.I. Computational Geometry. An 
Introduction. Springer­Verlag. 1985 (capítulo 2)

BERG,  KREVELD,  OVERMARS,  SCHWARZKOPF. 


Computational  Geometry,  Algorithms  and  Applications. 
Springer. 1997 (capítulo 7)

OKABE  A.,  BOOTS  B.,  SUGIHARA  K.  Spatial  Tessellations: 


Concepts  and  Applicaions  of  Voronoi  Diagrams.  John  Wiley 
and Sons. 1992 (capítulos 2 y 4)

Anda mungkin juga menyukai