Algoritmo de Fortune
Algoritmo de Fortune
Algoritmo de Fortune
3.1. INTRODUCCIN.
Un Diagrama de Voronoi de un conjunto de puntos en el plano, no es ms que la subdivisin del mismo en regiones formadas por los lugares ms prximos a cada uno de los puntos. De los Diagramas de Voronoi ya hablaba Descartes cuando afirmaba que el sistema solar estaba formado
por vrtices, pero fueron Dirichlet, Voronoi y hiessen los que profundi!aron en el estudio de estos diagramas. "l siguiente grfico muestra un diagrama de Voronoi de una nube de puntos#
$on muchas las utilidades de los Diagramas de Voronoi entre las que podemos citar# % &osicionamiento de torretas en telefon'a mvil. (a regin de Voronoi de cada una de las torretas determinar'a qu) tel)fonos deber'an reali!ar la conexin a trav)s de la misma. % *ontrol a)reo. "l Diagrama de Voronoi de cada centro de control, determinar'a la !ona de espacio a)reo a controlar por dicha estacin. % Distribucin de servicios p+blicos ,hospitales, centros comerciales...-. (a ubicacin de dichos establecimientos .deber'a ser. ,al menos tericamente- la que tenga la mayor rea de regin de Voronoi con respecto al resto de establecimientos del mismo tipo, para as' aumentar la hipot)tica clientela. *omo comentario a este +ltimo caso, podr'amos reali!ar una serie de modificaciones al planteamiento# pensemos en el caso de la ubicacin de hospitales. / un determinado enfermo siempre le interesar'a acudir al hospital ms cercano a su domicilio seg+n la distancia eucl'dea. &ara saber a cual acudir no tend'a ms que mirar el Diagrama de Voronoi de los puntos que indican la posicin de los hospitales y comprobar en que regin se encuentra su casa. /hora bien, tambi)n podr'a ser interesante considerar a ciertos hospitales como ms cercanos si tienen, por ejemplo, mejor acceso ,autopista...- o si tienen un mayor n+mero de camas. "n este caso cada uno de los puntos ,hospitales en nuestro caso- puede tener asignado un determinado .peso., con lo que el Diagrama de Voronoi de la nube de hospitales podr'a cambiar notablemente al llevarse una mayor !ona de influencia ,cercan'a- el hospital con ms peso. 0ui! un ejemplo grfico ilustre mejor esta idea#
"l hospital h al tener un peso mayor, arrebata a los puntos ms cercanos, !onas que seg+n la distancia eucl'dea estar'an ms prximas a ellos. (a l'neas finas muestran el Diagrama de Voronoi del conjunto de puntos sin peso y la !ona ms gruesa ser'a la resultante de asignar un hipot)tico peso a h. Variedades sobre los Diagramas de Voronoi aparecen utili!ando m)tricas distintas a la eucl'dea. 1o es el objeto de este rabajo de 2in de *arrera en tratar estos Diagramas, existiendo abundante bibliograf'a sobre el tema. 1os centraremos pues, en los Diagramas de Voronoi en el plano y utili!aremos la distancia com+n, la distancia eucl'dea. / parte de las mencionadas utilidades de estos diagramas podemos citar# el posicionamiento de bra!os robticos, posicionamiento de torretas de visin de !onas forestales para el control de fuegos... *omen!aremos despu)s de esta introduccin con los conceptos tericos de los Diagramas de Voronoi.
$ea P 3 4p1,p2,...,pn5 un conjunto de n puntos distintos en el plano. Definimos el diagrama de Voronoi de P como la subdivisin del plano en n regiones, cada una correspondiente a un punto de P, cumpliendo, que un punto q pertenece a la regin correspondiente al punto pisi y solamente si dist(q,pi) < dist(q,pj) para cada punto pj P, con j distinto de i. Denotamos el diagrama de Voronoi de P como Vor(P). (a regin correspondiente al punto pi es llamada V(pi). 6bservemos por un momento la estructura de una +nica regin de Voronoi. &ara dos puntos p y q en el plano definimos el bisector de p y q como el bisector perpendicular del segmento pq. "ste bisector divide el plano en dos semiplanos. Denotamos el semiplano que contiene a p como h(p,q) y al semiplano que contiene a q como h(q,p). $e puede observar que r pertenece a h(p,q) si y solamente si dist(r,p) < dist(r,q). &odemos obtener de aqu' las siguientes observaciones#
3.2.1. Observaciones
3.2.1.1. Observacin 1
"sto es, V(pi) es la interseccin de n78 semiplanos y por tanto una regin poligonal convexa con como mximo n78 vertices y n78 lados. "s decir, que la regin de Voronoi de un determinado punto, consistir en la interseccin de todos los semiplanos h(pi,pj). 6bviamente )ste no ser'a un algoritmo eficiente para el clculo del Diagrama de Voronoi de la nube de puntos completa ya que habr'a que repetir el proceso para los n puntos de la nube.
3.2.1.2. Observacin 2
$i todos los puntos de P son colineales, entonces Vor(P) ,Diagrama de Voronoi de P- estar formada por n78 lineas paralelas y n regiones.
3.2.1.3. Observacin 3
Un Diagrama de Voronoi de una nube de puntos en el plano tiene a lo sumo 9n7: v)rtices y ;n7< lados. (a demostracin de )sta y otras propiedades pueden encontrarse en la bibliograf'a que se lista al final de este trabajo.
3.2.1.4. Observacin 4
&ara un conjunto de puntos P del plano, un punto q es v)rtice del Diagrama de Voronoi de P si y solamente si el c'rculo vac'o de mayor tama=o con centro en q contiene tres o ms puntos de P sobre su circunferencia. "n el siguiente grfico se muestra el Diagrama de Voronoi de los puntos p8, p9 y p;, se puede observar
que el punto q es v)rtice del Diagrama de Voronoi ya que la circunferencia mayor vac'a contiene precisamente a los tres puntos.
3.3.2. &isin
Vamos a reali!ar una primera justificacin grfica del mecanismo que utili!a el algoritmo de 2ortune para generar el Diagrama de Voronoi de un conjunto de puntos en el plano. &artimos de un conjunto S de n puntos en el plano x-y, cumpli)ndose de no existen cuatro puntos cocirculares. *reamos para cada punto un cono opaco, id)ntico a todos los dems, creciendo hacia el eje z.
$eg+n esto y observando el grfico anterior podemos afirmar# % Dos conos intersectan en una hip)rbola que cae en un plano vertical al x-y. % 6bservando desde arriba ,por encima del plano x-y-, la interseccin entre dos conos es una l'nea recta. % "sta l'nea es la mediatri! en dos dimensiones de los dos puntos. % 1o todos los puntos de esta l'nea son visibles, ya que pueden ser ocultados por el crecimiento de otros conos. De todo esto se puede deducir que, proyectando la interseccin visible de todos los conos sobre el plano x-y se obtiene el diagrama de Voronoi del conjunto de puntos. Vemamos ahora el mecanismo de barrido de este algoritmo# &artimos de un plano de barrido que se mueve de i!quierda a derecha sobre el plano x-y con un ngulo de inclinacin igual al de los conos, seg+n se muestra en el siguiente grfico#
"l plano de barrido intersecta con el plano x-y en lo que llamamos l'nea de barrido. (a interseccin del plano de barrido con el cono proyectada sobre el plano x-y es una parbola con foco en el punto p ,seg+n el grfico- y directri! la l'nea de barrido. $i hacemos ahora hacemos tambi)n opaco el plano de barrido podemos observar# % "l plano de barrido oculta los conos que nacen a la derecha de la l'nea de barrido. % (os conos visibles que todav'a no han sido totalmente barridos por el plano de barrido proyectarn sobre el plano x7y un conjunto de parbolas apuntando hacia la i!quierda, con ejes paralelos y distintas anchuras. "n el siguiente grfico podemos observar la proyeccin en el eje x-y#
(a frontera de la unin de todas las parbolas es lo que se denomina frente p r !"li#o o l$ne de pl y . &odemos observar que hacia la derecha de la l'nea de barrido el plano de barrido al ser opaco oculta todos los conos y bloquea su visin desde abajo, en cambio hacia la i!quierda el plano de barrido cae por encima de uno o ms conos y por tanto no bloquea sus vistas desde abajo.
$i observamos por debajo del plano x7y# % *ada arco del frente p r !"li#o cae en una regin de Voronoi. % *ada punto de corte entre dos arcos consecutivos del frente p r !"li#o cae en uno de los lados del Diagrama de Voronoi.
&odemos afirmar que cada punto de un lado del Diagrama de Voronoi, ser un punto de corte entre dos arcos consecutivos del frente parablico, en alg+n momento, durante el proceso de barrido. "s decir, estamos construyendo el Diagrama de Voronoi. "n la evolucin del frente parablico surgen dos tipos de eventos que trataremos a continuacin# % "ventos de &unto ,$ite "vents% "ventos de *'rculo ,*ircle "vents-
3.3.2.1. Even#os $e P%n#o ,Si#e Even#s*uando la l'nea de barrido pasa justamente por encima de un punto, una parbola degenerada ,ancho >- se une al frente p r !"li#o, esta parbola parte una arco existente en el frente parablico en dos. (a evolucin posterior de esta parbola durante el proceso de barrido dar lugar a un nuevo lado del Diagrama de Voronoi. "l siguiente grfico muestra la evolucin en la creacin de un lado de Voronoi#
"n la figura 8 la l'nea de barrido no ha llegado al punto, en la 9 justamente est sobre el punto, se crea la parbola degenerada que divide en dos uno de los arcos del frente parablico y en la figura ; ha pasado la l'nea y se observa la evolucin del nuevo lado del Diagrama Voronoi. (lamaremos pues, e%ento de p&nto (site e%ent) cuando la l'nea de barrido pasa justamente por encima de uno de los puntos de la nube. "ste es el +nico modo de a=adir un nuevo arco al frente parablico y provoca la aparicin de un nuevo lado del Diagrama de Voronoi.
3.3.2.2. Even#os $e C.rc%)o ,Circ)e Even#sVeamos ahora que ocurre cuando una arco va decreciendo en el frente parablico hasta convertirse en un punto y desaparecer de dicho frente. Vemoslo con un grfico#
"n la figura 8 se observa que /8, /9 y /; son tres arcos consecutivos del frente parablico correspondientes a los puntos p8, p9 y p; respectivamente. "l arco /9 se va estrechando debido al crecimiento de /8 y /9. "n la figura 9 se observa justo el momento en el que el arco /9 abandona el frente parablico formando un punto de corte entre /8 y /; que hemos llamado &, & es equidistante de p8, p9 y p;, es decir, es el centro de la circunferencia que pasa por p8, p9 y p;. /l mismo tiempo esta circunferencia es tangente a la l'nea de barrido en un punto que hemos llamado ?, justamente este punto es lo que llamaremos e%ento de #$r#&lo (#ir#le e%ent). *uando la l'nea de barrido est sobre este punto ,'se est generando un v)rtice del Diagrama de Voronoi y a partir de este momento comien!a a crecer a partir de )l un nuevo lado del Diagrama de Voronoi, tal y como se puede apreciar en la figura ;.
Un #ir#le e%ent es la +nica forma de que un arco abandone el frente parablico. (a cuestin ahora es# despu)s de esta primera aproximacin grfica, @qu) estructuras de datos optimas debo utili!arA y @qu) partes del frente parablico debo guardar durante el proceso de barrido para conseguir finalmente el Diagrama de Voronoi de la nube de puntos inicialA. &ara ello comen!aremos, ahora s', con los conceptos tericos necesarios para contestar a estas preguntas.
ambi)n vimos en la visin grfica del algoritmo, que la +nica forma de que un arco abandone el frente
parablico es la aparicin de un ,ir#le +%ent, que formar'a un v)rtice del Diagrama de Voronoi y a partir de ese momento un nuevo lado del Diagrama de Voronoi comen!ar'a a crecer. Bientras que todos los Site +%ents son conocidos al comien!o del barrido, durante el mismo, aparecern nuevos ,ir#le +%ents y otros sern eliminados al no poderse producir en la posicin actual de la l'nea de barrido. (a idea es, mantener el frente parablico en los puntos evento, actuali!ado estructuras ptimas para el manejo de dichos eventos. Veamos las estructuras de datos que nos pueden ser +tiles.
*ada hoja mantiene un puntero al nodo de la cola de eventos que representa el ,ir#le +%ent que har que este arco desapare!ca del frente parablico. /dems en cada nodo interno se almacena otro puntero al lado de Voronoi que est generando el punto de corte que representa.
DIAGRAMA_VORONOI (P)
Entrada: P := {p1,...,pn} un conjunto de n puntos en el plano. Salida: El Diagrama de Voronoi Vor(P) dentro de un rectngulo en una estructura DCEL. 1. Inicializar la cola de eventos Q con todos los Site Events. 2. mientras Q no est vacio 3. hacer Considerar el evento con mayor coordenada y de Q. 4. si el evento es un Site Event del punto pi 5. entonces T !T! "#ITE"EVE$T %pi& 6. en caso contrario T !T! "CI C'E"EVE$T%pl&( donde pl es el punto ms )ajo del c*rculo +ue causa el evento. . Eliminar el evento de Q. !. 'os nodos internos presentes todav*a en T %,r)ol )inario& pertenecen a los medios-lados in.initos del Diagrama de Voronoi. Calcular un rectngulo +ue contenga todos los vrtices del Diagrama de Voronoi en su interior(unindole los medios-lados in.initos( modi.icando la estructura DCEL apropiadamente.
1os han surgido dos nuevos procedimientos# % E/ /EF$G "F"V"1 ,pi% E/ /EF*GE*("F"V"1 ,plVemoslos detenidamente# TRATAR5SITE5E&ENT ,pi Huscar en - ,Crbol de b+squeda- el arco que cae verticalmente sobre pi, y borrar todos los ,ir#le +%ents que involucran a de la cola .. Eeempla!ar la hoja de - que representa a por un subrbol con tres hojas. "n la hoja central almacenaremos el nuevo punto pi y en las otras dos hojas almacenaremos el pj que originalmente estaba almacenado con . /lmacenamos las tuplas Ipj,piJ y Ipi,pjJ que representan los nuevos puntos de corte de los dos nuevos nodos internos. Eeali!ar operaciones de rebalanceado de - si es necesario. *rear nuevos registros en la estructura del Diagrama de Voronoi ,/,+0- para los dos nuevos medios7lados. *hequear las tripletas de arcos consecutivos que involucren uno de los tres nuevos arcos. Gnsertar el correspondiente ,ir#le +%ent solamente si el c'rculo intersecta la l'nea de barrido y el ,ir#le +%ent no estaba ya en .. TRATAR5CIRCLE5E&ENT,pl Huscar en - ,Crbol de b+squeda- el arco que cae verticalmente sobre pl, que es el va a desaparecer, y borrar todos los ,ir#le +%ents que involucran a de la cola .. Horrar la hoja que representa a de -. /ctuali!ar las tuplas que representan los puntos de corte en los nodos internos. Eeali!ar operaciones de rebalanceado de - si es necesario. /=adir el centro del c'rculo que causa el evento como un registro v)rtice en la estructura del Diagrama de Voronoi ,/,+0- y crear dos nuevos medios7lados correspondientes al nuevo punto de corte del Diagrama de Voronoi. *olocar los punteros entre ellos adecuadamente. *hequear las nuevas tripletas de arcos consecutivos que surgen debido a la desaparicin del arco . Gnsertar el correspondiente ,ir#le +%ent en . solamente si el c'rculo intersecta la l'nea de barrido y el ,ir#le +%ent no estaba ya en ..
(as operaciones primitivas sobre el rbol de b+squeda - y la cola de eventos ., tales como, insertar o borrar un elemento toman O(log n) tiempo cada una. (as operaciones primitivas en las estructura /,+0 toman tiempo constante. &ara tratar un evento, reali!amos un n+mero constante de dichas operaciones primitivas, por tanto gastamos O(log n) tiempo en procesar un evento. 6bviamente tenemos n Site +%ents. "n cuanto a los ,ir#le +%ents observamos que cada uno que es procesado define un v)rtice del Diagrama de Voronoi y que las falsas alarmas son borradas de . antes de ser procesadas. "sts falsas alarmas son creadas y borradas mientras se procesa un evento real, empleando un tiempo despreciable con respecto al tiempo de proceso del evento. De esta forma el n+mero mximo de ,ir#le +%ents a procesar es de 2n-1. De todas estas apreciaciones es sencillo deducir la complejidad anteriormente afirmada.