geometría computacional: envoltura convexa
DESCRIPTION
Estudiaremos el problema de computar la envoltura convexa de un conjunto finito P de n puntos en el plano. La EC es el único polígono convexo cuyos vértices son puntos de P y que contiene todos los puntos de P.TRANSCRIPT
Convexidad y Envoltura Convexa.
Un conjunto es convexo si para todo par de puntos p, q S tenemos que pq S.
p
q
non-convex
q
p
convex
p
q
non-convex
q
p
convex
Geometría Computacional
Convexidad y Envoltura Convexa.
Un conjunto es convexo si para todo par de puntos p, q S tenemos que pq S.
La envoltura convexa de un conjunto S es el mínimo conjunto convexo que contiene a S.
Otra definición es: la intersección de todos los convexos que contienen al conjunto S.
S
p
q
non-convex
q
p
convex
p
q
non-convex
q
p
convex
Geometría Computacional
EC(S
Convexidad y Envoltura Convexa.
Un conjunto es convexo si para todo par de puntos p, q S tenemos que pq S.
S
p
q
non-convex
q
p
convex
p
q
non-convex
q
p
convex
Geometría Computacional
La envoltura convexa de un conjunto S es el mínimo conjunto convexo que contiene a S.
Otra definición es: la intersección de todos los convexos que contienen al conjunto S.
Algoritmo Fuerza Bruta EC
• Descripción:
– Por cada par de puntos construiremos el segmento que los conecta y la línea soporte.
– Buscamos todos los segmentos cuyas líneas soportes dividen el plano, tal que en una mitad del plano se encuentran el resto de los puntos.
– Construir la envoltura convexa con esos segmentos
Geometría Computacional
Algoritmo Fuerza Bruta EC
• Descripción:
– Por cada par de puntos construiremos el segmento que los conecta y la línea soporte.
– Buscamos todos los segmentos cuyas líneas soportes dividen el plano, tal que en una mitad del plano se encuentran el resto de los puntos.
– Construir la envoltura convexa con esos segmentos
Geometría Computacional
Algoritmo Fuerza Bruta EC
• Descripción:
– Por cada par de puntos construiremos el segmento que los conecta y la línea soporte.
– Buscamos todos los segmentos cuyas líneas soportes dividen el plano, tal que en una mitad del plano se encuentran el resto de los puntos.
– Construir la envoltura convexa con esos segmentos
Geometría Computacional
Algoritmo Fuerza Bruta EC
• Análisis de complejidad:
– Todos los pares:
– Chequear todos los puntos por cada par : O(n)
– Total: O(n3)
2(1)( ) ( ) ()2 2
n nnO O On
Geometría Computacional
Algoritmo Fuerza Bruta EC(P)
Entrada: Conjunto P de puntos en el plano.
Salida: Una lista L que contiene los vértices de EC(P)
en sentido horario.
E<--0
Para cada par ordenado(p,q), p q hacer
valid<--true
Para cada r, r p q hacer
Si r está a la izquierda de línea directiva de
p a q.
entonces valid<-- false
Si valid
entonces adicionar la arista dirigida pq en E.
Dado el conjunto E de aristas construir una lista L de
vértices de EC(P), ordenada en sentido horario.
Geometría Computacional
Posibles pifias
Casos degenerados –3 puntos colineales. Pudieran afectar la corrección del algoritmo. Segmentos AB, BC y AC pudieran ser incluidos en la envoltura convexa.
Problemas numéricos – pudieran acarrear que ninguno de los tres segmentos pertenezcan a la envoltura.
A
B
C
Geometría Computacional
Algoritmo incremental EC
Se ordenan todos los puntos por la x-coordenada.
Se computa de manera separada la envoltura superior y la envoltura inferior.
Se concatenan los resultados.
Geometría Computacional
Envoltura Convexa Superior
Geometría Computacional
Invariante: Se van adicionando los puntos según su coordenada en x,garantizando computar la envoltura superior hasta dicho punto una vez que se inserte.
Idea geométrica: tres ptosconsecutivos de la ECS giran siempre a la derecha
Envoltura Convexa Superior
Geometría Computacional
Orden por las x-coordenadas
x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11
Envoltura Convexa Superior
Geometría Computacional
x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11
S
p1p2
Iniciamos con los dos primeros ptos.
Envoltura Convexa Superior
Geometría Computacional
x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11
p2
S
p1
Asumimos que: la ECS de dos ptos es el segmento de recta que los une.
Envoltura Convexa Superior
Geometría Computacional
x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11
p2
S
p1p3
Adicionamos p3 ycomprobamos si , p1 p2 p3
giran a la derecha ?
Envoltura Convexa Superior
Geometría Computacional
Punto a eliminar
x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11
p2
S
p1p3
Envoltura Convexa Superior
Geometría Computacional
x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11
S
p1
p3
Asumimos que: la ECS de dos ptos es el segmento de recta que los une.
Envoltura Convexa Superior
Geometría Computacional
x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11
p3
S
p1p6
p4
p5
Envoltura Convexa Superior
Geometría Computacional
x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11
p3
S
p1
p6
p4
p5
Envoltura Convexa Superior
Geometría Computacional
x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11
p2
S
p1
p4
p5
p6
p7
Envoltura Convexa Superior
Geometría Computacional
x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11
Punto a eliminar
p2
S
p1
p4
p5
p6
p7
Envoltura Convexa Superior
Geometría Computacional
x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11
p2
S
p1
p4
p5
p7
Envoltura Convexa Superior
Geometría Computacional
Punto a eliminar
x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11
p2
S
p1
p4
p5
p7
Envoltura Convexa Superior
Geometría Computacional
Punto a eliminar
x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11
p2
S
p1
p4
p7
Envoltura Convexa Superior
Geometría Computacional
x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11
p3
S
p1
p7
p8
p9
Envoltura Convexa Superior
Geometría Computacional
Punto a eliminar
x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11
p3
S
p1
p7
p8
p9
Envoltura Convexa Superior
Geometría Computacional
x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11
p3
S
p1
p7
p9
p10
Envoltura Convexa Superior
Geometría Computacional
Punto a eliminar
x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11
p3
S
p1
p7
p9
p10
Envoltura Convexa Superior
Geometría Computacional
x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11
p3
S
p1
p7
p10
Envoltura Convexa Superior
Geometría Computacional
x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11
p3
S
p1
p7
p10
Envoltura Convexa Superior
Geometría Computacional
x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11
p3
S
p1
p7
p10
p11
Envoltura Convexa Superior
Geometría Computacional
x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11
p3
S
p1
p7
p10
p11
Envoltura Convexa Inferior
Geometría Computacional
x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11
Punto a eliminar
p10
S
p11p9
Envoltura Convexa Inferior
Geometría Computacional
x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11
Punto a eliminar
S
p11
p9
p8
Algoritmo Incremental EC(P)
Entrada: Un conjunto P de puntos en el plano.
Salida: Una lista L que contiene los vértices de EC(P) en el sentido horario.
Ordenar los puntos por la x-coordenada, resultando
p1, ..., pn.
//Computo de la envoltura superior
Insertar p1 y p2 en la lista Lsup, con p1 como 1er punto
Para i <-- 3 hasta n hacer
adición de pi en Lsup
Mientrás |Lsup| > 2 & los últimos 3 ptos en Lsup no formen giro a la derecha hacer
Eliminar el pto medio de los últimos 3 ptos de Lsup
Geometría Computacional
//Cómputo de la envoltura inferior
Insertar pn y pn-1 en la lista Linf, con pn como 1er pto
para i <-- n-2 hasta 1 hacer
adición de pi en Linf
Mientrás |Linf| >2 & y los últimos 3 ptos en Linf no
formen giro a la derecha hacer
Eliminar pto medio de los últimos 3 ptos de Linf
// Cómputo de la envoltura
Eliminar el 1er y el último pto de Linf de modo que no
se duplique en Lsub y Linf.
Concatenar Linf a Lsub, denominado el resultado como L
Retornar L
Geometría Computacional
Posibles pifias
A
B
C
No hay giro
derecho
Geometría Computacional
Casos degenerados 3 puntos colineales. Pudieran
afectar la corrección del algoritmo. Segmentos AB, BCy AC pudieran ser incluidos en la envoltura convexa.
3 puntos con igual
x-coordenada .
Análisis de complejidad
Teorema:
La envoltura convexa de un conjunto de n puntos en el plano puede ser computada en un tiempo O(nlog n).
Geometría Computacional
Algorithm Speed Discovered By
Brute Force O(n4) [Anon, the dark ages]
Gift Wrapping O(nh) [Chand & Kapur, 1970]
Graham Scan O(n log n) [Graham, 1972]
Jarvis March O(nh) [Jarvis, 1973]
QuickHull O(nh) [Eddy, 1977], [Bykat, 1978]
Divide-and-Conquer O(n log n) [Preparata & Hong, 1977]
Monotone Chain O(n log n) [Andrew, 1979]
Incremental O(n log n) [Kallay, 1984]
Marriage-before-Conquest O(n log h) [Kirkpatrick & Seidel, 1986]
Algoritmos de EC