Está en la página 1de 4

Grafo de visibilidad

Dado un conjunto de obstáculos con forma poligonal


en el plano euclidiano se dice que el grafo de
visibilidad es aquel grafo en el cual cada nodo
representa un vértice de los polígonos y las aristas son
las conexiones visibles entre tales vértices. Esto quiere
decir que para cada arista en el grafo de visibilidad
definida por y , el segmento de recta que conecta
los vértices correspondientes en el plano no se
interseca con ningún polígono (obstáculo).1 ​
Grafo de visibilidad, los nodos representan los
vértices y las aristas unen vértices visibles entre

Índice
Creación del grafo de visibilidad
Segmentos visibles desde un punto
Verificando vértices visibles
Complejidad
Extensiones
Referencias

Creación del grafo de visibilidad


El algoritmo CalcularGrafoVisibilidad consiste en
recorrer los vértices de todos los polígonos y a partir
de cada uno determinar que vértices son visibles2 ​
.

Algoritmo CalcularGrafoVisibilidad(S)

// Conjunto de polígonos disjuntos


← // Crear un grafo vacío
← // Todos los vértices
de los polígonos se agregan como nodos
for in

← Algoritmo de visibilidad de segmentos utilizando


for in una semirrecta para procesar los vértices en
// Se generan sentido antihorario
aristas con todos los vértices
visibes

return
Segmentos visibles desde un punto

El algoritmo para determinar que vértices son visibles


recibe como entrada un punto y un conjunto de
polígonos disjuntos los cuales son tratados como
segmentos de recta, cabe señalar que los polígonos
deben ser simples ya que en caso contrario los
segmentos de recta se interesectarían entre sí
dificultando mantener su estado.
El algoritmo
VisibleVertices se basa en la idea de utilizar una
semirrecta de barrido con origen en el vértice de
entrada y desplazarla en el orden inverso de las
manecillas del reloj para procesar todos los vértices de
los polígonos. El estado de los segmentos procesados
Cuando se procesa un segmento visible pueden
se almacena en un árbol binario balanceado el cual
existir segmentos que queden ocultos, dichos
ayuda a decidir que segmento es visible. Para insertar
segmentos pueden ser almacenados en un árbol a
en el árbol se puede utilizar el sentido de los
fin de conocer el siguiente segmento visible.
segmentos orientándolos de su punto inicial al final y
recorrer el árbol verificando si un segmento está a la
izquierda o a la derecha de otro.

Árbol binario con los segmentos de recta.


Algoritmo VisibleVertices(S,p)

// Conjunto de polígonos disjuntos


// Punto de referencia que no está dentro de algún polígono
← Ordenar los vértices de los polígonos en sentido antihorario con respecto al punto y una semirrecta
de pendiente 0.
← // Árbol balanceado donde se almacenarán los segmentos
← // lista con los vértices visibles
Insertar en todos los segmentos que se intersequen con la semirrecta de origen p y pendiente 0.
segmentoVisible ← Obtener el elemento más a la izquierda de

for in

if

Agregar a
← semirrecta que tiene origen en y pasa por
Insertar en las aristas incidentes en que se encuentren del lado izquierdo de //
Aquellas que se encuentran en el sentido de barrido de la recta
Eliminar de las aristas que se encuentran del lado derecho de // Aquellas que ya han
sido procesadas
segmentoVisible ← Obtener el elemento más a la izquierda de

return

Verificando vértices visibles

En un algoritmo como el anterior que únicamente trate con segmentos sería suficiente con verificar si el
segmento cuyo vértice está siendo procesado se interseca con el segmento que se encuentra más a la
izquierda del árbol (el segmento más a la izquierda en el árbol es el segmento visible actualmente de
acuerdo a la línea de barrido).
Debido a que se trata con polígonos se deben hacer otras consideraciones,
además el punto pertenece a un polígono el cual obstaculiza también la línea de visión del vértice, el
algoritmo presentado a continuación únicamente toma en cuenta la segunda consideración.

Algoritmo Visible( )

// Vértice de un polígono
// Punto de referencia
// Segmento de recta que es visible en la posición actual de la semirrecta de barrido
if el segmento interesecta el polígono al cual pertenece

return false

if el segmento interesecta al segmento visible

return false

else

return true

Complejidad

El algoritmo que calcula el grafo de visibilidad procesa los vértices de los polígonos de entrada y para
cada uno de ellos ejecuta el algoritmo VerticesVisibles.
El algoritmo VerticesVisibles realiza un preprocesamiento sobre los vértices al ordenarlos lo cual se puede
realizar en .Posteriormente recorre nuevamente los vértices de los polígonos almacenando y
removiendo cada arista como máximo una vez del árbol, las operaciones insertar, eliminar y obtener el
elemento más a la izquierda toman . La verificación de vértice visible puede ser realizada en tiempo
constante.

Debido al ordenamiento y al procesamiento de los vértices con el árbol la complejidad del algoritmo
VerticesVisibles es y ya que este se invoca veces, entonces la complejidad del algoritmo
CalcularGrafoVisibilidad es .

Extensiones

Cuando los obstáculos son barras de diferentes alturas ordenados en una línea, pueden ser entendidos como
una serie temporal. El concepto de grafo de visibilidad se emplea así con el fin de representar la estructura
de una serie temporal.3 ​

Referencias
1. O'Rourke, Joseph (1998). Computational Geometry in C (en inglés). Cambridge, UK:
Cambridge University Press.
2. de Berg, Mark (2000). Computational geometry (en inglés). Berlin: Springer.
3. «Lacasa et al., From time series to complex networks: the visibility graph, PNAS 105, 13
(2008)» (http://www.pnas.org/content/105/13/4972).

Obtenido de «https://es.wikipedia.org/w/index.php?title=Grafo_de_visibilidad&oldid=144577856»

Esta página se editó por última vez el 4 jul 2022 a las 19:39.

El texto está disponible bajo la Licencia Creative Commons Atribución Compartir Igual 3.0;
pueden aplicarse
cláusulas adicionales. Al usar este sitio, usted acepta nuestros términos de uso y nuestra política de privacidad.
Wikipedia® es una marca registrada de la Fundación Wikimedia, Inc., una organización sin ánimo de lucro.

También podría gustarte