Computational Geometry - 1 · 2016-09-14 · • Con esto podemos generar una nueva definición...

27
Dr. Antonio Marín Hernández Centro de Investigación en Inteligencia Artificial Universidad Veracruzana [email protected] www.uv.mx/anmarin Geometría Computacional •Introducción •Intersección de segmentos de rectas •Triangulación de polígonos •Diagramas de Voronoi •Triangulación de Delaunay •Envolventes Convexos •Visibilidad •Medidas de forma Contenido

Transcript of Computational Geometry - 1 · 2016-09-14 · • Con esto podemos generar una nueva definición...

Page 1: Computational Geometry - 1 · 2016-09-14 · • Con esto podemos generar una nueva definición para el envolvente convexo de un conjunto fínito de puntos en el plano • Es el único

Dr. Antonio Marín Hernández

Centro de Investigación en Inteligencia Artificial Universidad Veracruzana

[email protected] www.uv.mx/anmarin

Geometría Computacional

• Introducción • Intersección de segmentos de rectas • Triangulación de polígonos • Diagramas de Voronoi • Triangulación de Delaunay • Envolventes Convexos • Visibilidad • Medidas de forma • …

Contenido

Page 2: Computational Geometry - 1 · 2016-09-14 · • Con esto podemos generar una nueva definición para el envolvente convexo de un conjunto fínito de puntos en el plano • Es el único

•  Requieren ir al baño urgentemente en un parque de diversiones

•  ¿Cuál es el baño más cercano? •  Si, se tiene un mapa, se podría localizar el

baño más cercano.

Introducción

•  Sería bueno sí, dicho mapa se muestra como una subdivisión del parque en regiones para las cuales estuviera indicado el baño más cercano a cada región.

•  ¿Cómo deberían ser estas regiones? •  ¿Cómo se calculan?

Introducción

Page 3: Computational Geometry - 1 · 2016-09-14 · • Con esto podemos generar una nueva definición para el envolvente convexo de un conjunto fínito de puntos en el plano • Es el único

•  Este mapa se puede describir con un concepto fundamental de la geometría

•  El diagrama de Voronoi.

Introducción

•  Los diagramas de Voronoi, pueden ser usados para: – Modelar áres de comercio en ciudades, – Para guiar robots – Para describir y simular el crecimiento de

cristales – Etc.

Introducción

Page 4: Computational Geometry - 1 · 2016-09-14 · • Con esto podemos generar una nueva definición para el envolvente convexo de un conjunto fínito de puntos en el plano • Es el único

•  Calcular un estructura geométrica como el diagrama de Voronoi requiere de algoritmos de geometría computacional

Introducción

•  Suponga que, ha localizado el baño más cercano

•  Con ayuda del mapa se puede encontrar la ruta más cercana, sin tener que pasar por encima de jardineras, muros, etc.

•  Programar un robot que haga lo mismo no es una tarea nada fácil

Introducción

Page 5: Computational Geometry - 1 · 2016-09-14 · • Con esto podemos generar una nueva definición para el envolvente convexo de un conjunto fínito de puntos en el plano • Es el único

•  Nuevamente, el problema es puramente geométrico.

•  Dada una colección de obstáculos geométricos, se requiere encontrar la conexión más corta entre dos puntos, evitando colisiones

•  Solucionar este problema se llama Planificación de movimientos

Introducción

Introducción

Page 6: Computational Geometry - 1 · 2016-09-14 · • Con esto podemos generar una nueva definición para el envolvente convexo de un conjunto fínito de puntos en el plano • Es el único

•  Tercer ejemplo: Suponga que no tiene un mapa sino dos.

•  Uno incluyendo la descripción de las atracciones y edificios del parque, incluyendo los baños; y otro que incluye los caminos del parque.

•  Planificar los movimientos para llegar al baño, requiere la combinación de estos mapas.

Introducción

•  Es decir, se tiene que combinar la información proveniente de dos mapas.

•  Esta operación es básica en los sistemas de información geográfica (GIS) ‏

•  Esto implica localizar los objetos de un mapa en el otro, calcular las intersecciones de varias características, etc.

Introducción

Page 7: Computational Geometry - 1 · 2016-09-14 · • Con esto podemos generar una nueva definición para el envolvente convexo de un conjunto fínito de puntos en el plano • Es el único

•  Estos tres ejemplos muestran problemas que requieren de algoritmos geométricos diseñados cuidadosamente.

•  La geometría computacional emerge en los 70's para tratar con este tipo de problemas geométricos.

Introducción

•  Podemos definir a la Geometría Computacional como el estudio sistemático de algoritmos y estructuras de datos para objetos geométricos enfocados a algoritmos exactos asintóticamente rápidos.

Introducción

Page 8: Computational Geometry - 1 · 2016-09-14 · • Con esto podemos generar una nueva definición para el envolvente convexo de un conjunto fínito de puntos en el plano • Es el único

•  Los algoritmos de geometría computacional tienen un amplio rango de aplicaciones. – Robótica – Gráficas por computadora – CAD/CAM – GIS – etc.

Introducción

•  El envolvente convexo (Convex Hull) •  Las buenas soluciones a problemas

algorítmicos de naturaleza geométrica están mayormente basados en dos ingredientes: – Entendimiento de las propiedades

geométricas del problema – La aplicación correcta de las técnicas

algorítmicas y estructuras de datos

Introducción

Page 9: Computational Geometry - 1 · 2016-09-14 · • Con esto podemos generar una nueva definición para el envolvente convexo de un conjunto fínito de puntos en el plano • Es el único

•  Si no entienden la geometría del problema, aun con todos los algoritmos del mundo no podrán resolver el problema eficientemente.

•  Por otro lado, aun cuando se entienda la geometría del problema, es muy díficil resolverlo eficientemente sino se tienen las técnicas algorítmicas correctas

Introducción

•  Comenzaremos estudiante uno de los primeros problemas estudiados por la geometría computacional

•  El cálculo planar del envolvente convexo

Introducción

Page 10: Computational Geometry - 1 · 2016-09-14 · • Con esto podemos generar una nueva definición para el envolvente convexo de un conjunto fínito de puntos en el plano • Es el único

•  Un subconjunto de S del plano es llamado convexo sí y solo sí, para cualquier par de puntos p,q ∈ S el segmento de línea pq esta completamente contenido en S.

•  El envolvente convexo CH(S) de un conjunto S es el conjunto convexo más pequeño que contiene a S.

Introducción

•  Para ser más precisos, es la intersección de todos los subconjuntos que contienen a S.

•  Calcularemos el envolvente convexo para un conjunto finito P de n puntos en el plano

Introducción

Page 11: Computational Geometry - 1 · 2016-09-14 · • Con esto podemos generar una nueva definición para el envolvente convexo de un conjunto fínito de puntos en el plano • Es el único

•  Podemos suponer que los n están puntos fijos en el plano y entonces se puede ajustar una banda elástica alrededor

•  El área de la banda elástica será el envolvente convexo

Introducción

Introducción

Page 12: Computational Geometry - 1 · 2016-09-14 · • Con esto podemos generar una nueva definición para el envolvente convexo de un conjunto fínito de puntos en el plano • Es el único

•  Con esto podemos generar una nueva definición para el envolvente convexo de un conjunto fínito de puntos en el plano

•  Es el único polígono convexo cuyos vertices son puntos de P y estan contenidos todos los puntos de P

•  Habría que probar rigurosamente que esta bien definido, es decir que el polígono es único

Introducción

•  ¿Cómo se calcula el envolvente convexo? •  ¿Qué siginifca calcular el envolvente

convexo? •  Como se ha visto, el envolvente convexo

es un polígono convexo •  Una manera natural de representar un

polígono es listando sus vertices en algún sentido (manecillas del reloj)

Introducción

Page 13: Computational Geometry - 1 · 2016-09-14 · • Con esto podemos generar una nueva definición para el envolvente convexo de un conjunto fínito de puntos en el plano • Es el único

•  El problema que se quiere resolver es el siguiente: – Dado un conjunto P={p1,p2,..,pn} de puntos en

el plano, calcular la lista que contiene los puntos de P que son vertices del CH(P) listado en orden.

Introducción

p1 p5

p2 p3

p6 p9

p7

p8

p4

p4, p5, p6, p9, p7, p8

Introducción

Page 14: Computational Geometry - 1 · 2016-09-14 · • Con esto podemos generar una nueva definición para el envolvente convexo de un conjunto fínito de puntos en el plano • Es el único

•  La primera definición no es de mucha ayuda para el diseño del algoritmo para calcular el envolvente convexo –  Intersección de todos los conjuntos convexos

que contienen a P •  La observación de que CH(P) es un

polígono convexo es más útil

Introducción

•  Veamos ¿cuáles son los bordes de CH(P)?

•  Ambos puntos finales p y q de un borde son puntos de P

•  Si la dirigimos la línea a través de p y q tal que el CH(P) quede a la derecha, entonces todos los puntos de P deben estar a la derecha de esta línea.

Introducción

Page 15: Computational Geometry - 1 · 2016-09-14 · • Con esto podemos generar una nueva definición para el envolvente convexo de un conjunto fínito de puntos en el plano • Es el único

q

p

Introducción

•  Al revés se cumple también •  Si todos los puntos de P | {p,q} caen a la

derecha de la línea dirigida que pasa por p y q entonces el segmento pq es un borde del CH(P)

Introducción

Page 16: Computational Geometry - 1 · 2016-09-14 · • Con esto podemos generar una nueva definición para el envolvente convexo de un conjunto fínito de puntos en el plano • Es el único

•  Algoritmo SLOWCONVEXHULL(P): •  Entrada:

–  Un conjunto P de puntos en el plano •  Salida:

–  Una lista L conteniendo los vertices de CH(P) en sentido de las manecillas del reloj

Introducción

•  E = 0 •  Para todos los pares ordenados (p,q) ∈ P x P con p ≠ q

–  Hacer valid = true •  Para todos los puntos r ∈ P r ≠ q y r ≠ q •  sí r cae a la izquierda de la línea dirigida de p a q

entonces valid = false •  Sí valid entonces añadir el borde dirigido pq a E •  Para el conjunto de bordes construir la lista L de vertices

de CH(P) ordenados en favor de las manecillas del reloj

Introducción

Page 17: Computational Geometry - 1 · 2016-09-14 · • Con esto podemos generar una nueva definición para el envolvente convexo de un conjunto fínito de puntos en el plano • Es el único

•  ¿Cómo probar sí un punto esta a la derecha o a la izquierda de un segmento dirigido de recta?

•  ¿Cómo ordenar los segmentos de recta correspondientes al envolvente convexo?

R1: Cálculo del determinante R2: Ordenamiento considerando las

características de los segmentos (cada punto se repite dos veces, uno como inicio de un segmento y otra como fin de otro)

Introducción

•  Ordenamiento de los segmentos en L O(n2) •  Se puede mejorar O(n log n) Complejidad del método SlowConvexHull

–  Se necesita verificar n2 - n pares de puntos –  Para cada par se observan n - 2 puntos –  O(n3) -> DEMASIADO LENTO

El problema radica en que solo se transcribió la geometría del problema en un algoritmo de fuerza bruta

Introducción

Page 18: Computational Geometry - 1 · 2016-09-14 · • Con esto podemos generar una nueva definición para el envolvente convexo de un conjunto fínito de puntos en el plano • Es el único

•  Otras observaciones: – Poco cuidado al definir cuando un par de

puntos p y q definen un borde del CH(P) – Un punto puede estar sobre la línea que

definen estos dos puntos – Se le llama un caso degenerado o

degeneración – Aunque inicialmente ignorados, estas

situaciones se presentan con facilidad

Introducción

Algoritmo correcto en presencia de degeneraciones

•  Un borde dirigido pq es un borde del CH(P), sí y solo sí, todos los puntos r ∈ P están estrictamente a la derecha de la línea dirigida que pasa a través de p y q, ó están en el segmento abierto pq – Asumimos que no hay puntos coincidentes

Introducción

Page 19: Computational Geometry - 1 · 2016-09-14 · • Con esto podemos generar una nueva definición para el envolvente convexo de un conjunto fínito de puntos en el plano • Es el único

Introducción

Puntos muy cercanos •  Para tres puntos casi colineales, es

posible que por error de redondeo, para cada segmento de línea entre estos se encuentre que todos los puntos están a la derecha ó

•  Que ninguno cumpla con esta situación.

Introducción

Page 20: Computational Geometry - 1 · 2016-09-14 · • Con esto podemos generar una nueva definición para el envolvente convexo de un conjunto fínito de puntos en el plano • Es el único

Introducción

•  A pesar de que se probo que el algoritmo fuera correcto y que manejara los casos especiales, no es robusto.

•  Pequeños errores en los cálculos pueden hacer que falle de maneras inesperadas

•  El problema es que se asumió que los cálculos con números reales son exactos.

Introducción

Page 21: Computational Geometry - 1 · 2016-09-14 · • Con esto podemos generar una nueva definición para el envolvente convexo de un conjunto fínito de puntos en el plano • Es el único

Algoritmo incremental •  Se añadirán los puntos en P de uno en uno,

actualizando la solución después de cada adición.

•  Estos puntos se añadirán bajo un orden: de izquierda a derecha

•  Por lo tanto será necesario ordenarlos inicialmente con respecto a su coordenada ‘x’, obteniéndose así la secuencia {p1,… ,pn}

Algoritmo incremental •  Se calcularán inicialmente los bordes del

CH(P) en la parte superior, la cual va desde el punto más a la izquierda p1 hasta el punto más a la derecha pn (a favor de las manecillas del reloj)

•  En segundo lugar se calculará la parte restante, la parte inferior.

Introducción

Page 22: Computational Geometry - 1 · 2016-09-14 · • Con esto podemos generar una nueva definición para el envolvente convexo de un conjunto fínito de puntos en el plano • Es el único

Introducción

Upper Hull

lower Hull

Algoritmo incremental •  El paso principal en este algoritmo es la

actualización del envolvente superior cuando añadimos un nuevo punto pi.

•  Es decir, dado el envolvente superior por p1,… ,pi-1, calcularlo ahora para p1,… ,pi.

Introducción

Page 23: Computational Geometry - 1 · 2016-09-14 · • Con esto podemos generar una nueva definición para el envolvente convexo de un conjunto fínito de puntos en el plano • Es el único

Algoritmo incremental •  Al recorrer en sentido de las manecillas

del reloj el borde de un polígono cualquiera, cuando se llega a un vértice se realiza un giro (izquierda o derecha).

•  Para un polígono convexo todos los giros serán a la derecha.

Introducción

Introducción

Page 24: Computational Geometry - 1 · 2016-09-14 · • Con esto podemos generar una nueva definición para el envolvente convexo de un conjunto fínito de puntos en el plano • Es el único

Algoritmo incremental •  Sea Lupper la lista de vértices del envolvente superior en

orden de izquierda a derecha. •  Inicialmente se agrega pi a Lupper. Ya que pi es el punto

más a la derecha de todos los incluidos. •  Después, se verifica si los últimos tres puntos en Lupper

realizan un giro a la derecha. –  Si es el caso se continua con –  Sino, se borra el punto intermedio, y se verifica nuevamente si

los últimos tres puntos realizan una vuelta a la derecha, y se continua verificando hasta que los últimos tres puntos que hagan una vuelta a derecha o queden solo dos puntos.

Introducción

pi

Introducción

Page 25: Computational Geometry - 1 · 2016-09-14 · • Con esto podemos generar una nueva definición para el envolvente convexo de un conjunto fínito de puntos en el plano • Es el único

Algoritmo incremental •  Ordenar los puntos por su coordenada x •  Poner los puntos p1 y p2 en Lupper •  Para i desde 3 y hasta n, hacer: •  Agregar pi a Lupper •  Mientras Lupper contenga más de

dos puntos y los último tres hagan no hagan un giro a la derecha hacer:

•  Borrar el punto medio de los últimos tres puntos en Lupper

Introducción

Algoritmo incremental •  Poner los puntos pn y pn-1 en la lista Llower. •  Para i desde n - 2 y hasta 1, hacer: •  Agregar pi a Llower •  Mientras Llower contenga más de dos puntos y los

último tres hagan no hagan un giro a la derecha hacer:

•  Borrar el punto medio de los últimos tres puntos en Llower

•  Borrar los puntos pn y p1 de la lista Llower para evitar duplicados.

•  Juntar las listas Lupper y Llower en L

Introducción

Page 26: Computational Geometry - 1 · 2016-09-14 · • Con esto podemos generar una nueva definición para el envolvente convexo de un conjunto fínito de puntos en el plano • Es el único

Algoritmo incremental •  Nuevamente echando un vistazo podemos darnos

cuenta de que nuestro algoritmo no es correcto •  No mencionamos pero asumimos que ningún punto

tiene la misma coordenada ‘x’, pero se puede solucionar ordenando también con respecto a la coordenada ‘y’

•  ¿Qué pasa si los tres puntos caen sobre la misma recta? •  En este caso el punto intermedio no debería estar en el

CH(P). Puntos colineales deben ser tratados como si hicieran un giro a la izquierda.

•  Debe usarse una condición que haga TRUE si se realiza un giro a la derecha y FALSE sino.

Introducción

Algoritmo incremental •  En presencia de errores de redondeo puede

pasar que un punto sea borrado si que lo debiera ser o lo contrario.

•  La integridad estructural del algoritmo permanece si daño.

•  Otro problema puede ser con puntos muy cercanos con los cuales puede ser mal interpretado un giro.

•  No se puede esperar algoritmos exactos si usamos aritmética inexacta.

Introducción

Page 27: Computational Geometry - 1 · 2016-09-14 · • Con esto podemos generar una nueva definición para el envolvente convexo de un conjunto fínito de puntos en el plano • Es el único

Degeneraciones y robustez •  El desarrollo de algoritmos geométricos

comúnmente se hace en tres fases. –  En la primera fase, se ignora todo lo que pueda

afectar el entendimiento de los conceptos geométricos que se quieren tratar.

–  En la segunda fase, se ajusta el algoritmo diseñado anteriormente para incluir la presencia de degeneraciones.

–  La tercera es la implementación. Pensar en las operaciones primitivas necesarias.

•  Suponemos que se usa aritmética exacta.

Introducción

Dr. Antonio Marín Hernández

Centro de Investigación en Inteligencia Artificial Universidad Veracruzana

[email protected] www.uv.mx/anmarin

Geometría Computacional