840 likes | 1.09k Views
Tema 1. Envolvente convexa Parte 1: Algoritmos. Definiciones. Un conjunto es convexo si el segmento uniendo cualquiera dos de sus puntos está contenido en él. Definiciones. Envolvente convexa de un conjunto: menor convexo que lo contiene.
E N D
Tema 1 Envolvente convexaParte 1: Algoritmos
Definiciones Un conjunto es convexo si el segmento uniendo cualquiera dos de sus puntos está contenido en él.
Definiciones Envolvente convexa de un conjunto: menor convexo que lo contiene. O, equivalentemente, la intersección de todos los convexos que contienen al conjunto.
Considere todos los conjuntos convexos que lo contienen y elija el menor de todos ellos.
Pero, ningún ordenador puede manejar infinitos conjuntos....
Observación 1: La envolvente convexa es un polígono convexo con vértices en puntos del conjunto. Observación 2: Describir la secuencia en orden de los vértices es describir la envolvente. Observación 3: Selección ordenada de subconjuntos.
Definiciones Aplicaciones: • Lo interesante suele ocurrir dentro de la envolvente. • Es más fácil (rápido) mover un convexo.
Algoritmos: Puntos extremos Sea S un conjunto de n puntos. Punto extremo de S: no está contenido en ningún triángulo con vértices en puntos de S.
Algoritmos: Puntos extremos Sea S un conjunto de n puntos. Punto extremo de S: no está contenido en ningún triángulo con vértices en puntos de S.
Algoritmos: Puntos extremos Los puntos extremos son los vértices de la envolvente convexa. ¿Cuánto nos cuesta encontrar todos los puntos extremos?
Algoritmos: Puntos extremos Para cada punto de S, comprobar si está dentro de algún triángulo con vértices puntos de S: • SÍ: No es vértice de la envolvente. • NO: Es vértice de la envolvente convexa. n puntos, O(n3) triángulos, O(n4) operaciones. Para cada punto de S comprobar si está dentro de algún triángulo.
Algoritmos: Puntos extremos También podemos buscar las aristas extremas (unen dos puntos de S y dejan a todo el conjunto a un mismo lado de la recta que definen). O(n2) pares, O(n) por comprobación O(n3)operaciones. Para cada par de puntos de S ver si la arista es extrema.
Algoritmos: Puntos extremos Inciso: ¿Cómo sabemos si • un punto está dentro de un triángulo, o si • un punto está a un lado u otro de una recta? Mediante un determinante
Algoritmos: Puntos extremos ¿A qué lado de la recta PQ está R? Q A partir de sus coordenadas construimos el determinante p1 p2 1 |A|= q1 q2 1 r1 r2 1 P R Interpretación geométrica: Vamos de P a Q, y luego de Q a R. Si: • |A|>0: Giro a la izquierda. • |A|<0: Giro a la derecha.
Algoritmos: Puntos extremos ¿M está dentro o fuera del triángulo? Q M Si al recorrer el triángulo (en el sentido de las agujas del reloj) hacemos 3 giros a la derecha, entonces M está en el interior. P R ¡Ojo! esto sólo vale para convexos .
Algoritmos: Quickhull Punto Norte (mayor coordenada y) Este Oeste Sur
Algoritmos: Quickhull Los puntos en el rectángulo definido por estos cuatro puntos no son vértices de la envolvente.
Algoritmos: Quickhull Buscamos el punto más alejado a cada uno de los segmentos y lo incorporamos.
Algoritmos: Quickhull Buscamos el punto más alejado a cada uno de los segmentos y lo incorporamos.
Algoritmos: Quickhull Repetimos el proceso en cada nuevo segmento hasta completar la envolvente.
Algoritmos: Quickhull En el peor de los casos necesitaremos O(n2)operaciones.
Algoritmos: Marcha de Jarvis Buscamos el punto Sur y a partir de él giramos una semirrecta
Algoritmos: Marcha de Jarvis Buscamos el punto Sur y a partir de él giramos una semirrecta hasta encontrar el siguiente punto de la envolvente.
Algoritmos: Marcha de Jarvis Repetimos el proceso hasta volver al punto de partida.
Algoritmos: Marcha de Jarvis Repetimos el proceso hasta volver al punto de partida.
Algoritmos: Marcha de Jarvis Coste: Buscar el siguiente punto: O(n) Hay que repetirlo n veces en el peor de los casos. Número de operaciones: O(n2)
Algoritmos: Marcha de Jarvis En realidad el tiempo de ejecución es: O(nh), siendo h el número de puntos de la envolvente. Es un algoritmo output sensitive.
Algoritmos: Scan de Graham 1.- Escogemos un punto cualquiera.
Algoritmos: Scan de Graham 1.- Escogemos un punto cualquiera.
Algoritmos: Scan de Graham 1.- Escogemos un punto cualquiera.2.- Ordenamos los demás puntos angularmente con respecto a dicho punto.
2 1 4 3 13 5 6 11 10 7 9 12 8 Algoritmos: Scan de Graham 1.- Escogemos un punto cualquiera.2.- Ordenamos los demás puntos angularmente con respecto a dicho punto:L
2 1 4 3 13 5 6 11 10 7 9 12 8 Algoritmos: Scan de Graham 1.- Escogemos un punto cualquiera.2.- Ordenamos los demás puntos angularmente con respecto a dicho punto:L3.- A los tres primeros puntos les ponemos las etiquetas I M F
2 1 4 3 13 5 6 11 10 7 9 12 8 Algoritmos: Scan de Graham 1.- Escogemos un punto cualquiera.2.- Ordenamos los demás puntos angularmente con respecto a dicho punto:L3.- A los tres primeros puntos les ponemos las etiquetas I M F M I F
2 1 4 3 13 5 6 11 10 7 9 12 8 Algoritmos: Scan de Graham 1.- Escogemos un punto cualquiera.2.- Ordenamos los demás puntos angularmente con respecto a dicho punto:L3.- A los tres primeros puntos les ponemos las etiquetas I M F4.-Si el ángulo IMF es positivo I=siguiente(I)M=siguiente(M)F=siguiente(F) M I F
2 1 4 3 13 5 6 11 10 7 9 12 8 Algoritmos: Scan de Graham 1.- Escogemos un punto cualquiera.2.- Ordenamos los demás puntos angularmente con respecto a dicho punto:L3.- A los tres primeros puntos les ponemos las etiquetas I M F4.-Si el ángulo IMF es positivo I=siguiente(I)M=siguiente(M)F=siguiente(F) I F M
Algoritmos: Scan de Graham 1.- Escogemos un punto cualquiera.2.- Ordenamos los demás puntos angularmente con respecto a dicho punto:L3.- A los tres primeros puntos les ponemos las etiquetas I M F4.-Si el ángulo IMF es positivo I=siguiente(I)M=siguiente(M)F=siguiente(F) Si IMF es negativo: borramos M de LI=anterior(I)M=IF=F I 2 F M 1 4 3 13 5 6 11 10 7 9 12 8
Algoritmos: Scan de Graham 1.- Escogemos un punto cualquiera.2.- Ordenamos los demás puntos angularmente con respecto a dicho punto:L3.- A los tres primeros puntos les ponemos las etiquetas I M F4.-Si el ángulo IMF es positivo I=siguiente(I)M=siguiente(M)F=siguiente(F) Si IMF es negativo: borramos M de LI=anterior(I)M=IF=F M 2 I F 1 4 3 13 5 6 11 10 7 9 12 8
Algoritmos: Scan de Graham 1.- Escogemos un punto cualquiera.2.- Ordenamos los demás puntos angularmente con respecto a dicho punto:L3.- A los tres primeros puntos les ponemos las etiquetas I M F4.-Si el ángulo IMF es positivo I=siguiente(I)M=siguiente(M)F=siguiente(F) Si IMF es negativo: borramos M de LI=anterior(I)M=IF=F I 2 M 1 4 3 F 13 5 6 11 10 7 9 12 8
Algoritmos: Scan de Graham 1.- Escogemos un punto cualquiera.2.- Ordenamos los demás puntos angularmente con respecto a dicho punto:L3.- A los tres primeros puntos les ponemos las etiquetas I M F4.-Si el ángulo IMF es positivo I=siguiente(I)M=siguiente(M)F=siguiente(F) Si IMF es negativo: borramos M de LI=anterior(I)M=IF=F 2 I 1 4 3 M F 13 5 6 11 10 7 9 12 8
Algoritmos: Scan de Graham 1.- Escogemos un punto cualquiera.2.- Ordenamos los demás puntos angularmente con respecto a dicho punto:L3.- A los tres primeros puntos les ponemos las etiquetas I M F4.-Si el ángulo IMF es positivo I=siguiente(I)M=siguiente(M)F=siguiente(F) Si IMF es negativo: borramos M de LI=anterior(I)M=IF=F 2 1 4 3 I M 13 5 6 11 F 10 7 9 12 8
Algoritmos: Scan de Graham 1.- Escogemos un punto cualquiera.2.- Ordenamos los demás puntos angularmente con respecto a dicho punto:L3.- A los tres primeros puntos les ponemos las etiquetas I M F4.-Si el ángulo IMF es positivo I=siguiente(I)M=siguiente(M)F=siguiente(F) Si IMF es negativo: borramos M de LI=anterior(I)M=IF=F 2 1 4 3 I M 13 5 6 11 F 10 7 9 12 8
Algoritmos: Scan de Graham 1.- Escogemos un punto cualquiera.2.- Ordenamos los demás puntos angularmente con respecto a dicho punto:L3.- A los tres primeros puntos les ponemos las etiquetas I M F4.-Si el ángulo IMF es positivo I=siguiente(I)M=siguiente(M)F=siguiente(F) Si IMF es negativo: borramos M de LI=anterior(I)M=IF=F 2 I 1 4 3 M 13 5 6 11 F 10 7 9 12 8
Algoritmos: Scan de Graham 1.- Escogemos un punto cualquiera.2.- Ordenamos los demás puntos angularmente con respecto a dicho punto:L3.- A los tres primeros puntos les ponemos las etiquetas I M F4.-Si el ángulo IMF es positivo I=siguiente(I)M=siguiente(M)F=siguiente(F) Si IMF es negativo: borramos M de LI=anterior(I)M=IF=F 2 1 4 3 I 13 5 6 11 M 10 7 9 12 F 8
Algoritmos: Scan de Graham 1.- Escogemos un punto cualquiera.2.- Ordenamos los demás puntos angularmente con respecto a dicho punto:L3.- A los tres primeros puntos les ponemos las etiquetas I M F4.-Si el ángulo IMF es positivo I=siguiente(I)M=siguiente(M)F=siguiente(F) Si IMF es negativo: borramos M de LI=anterior(I)M=IF=F 2 1 4 3 13 5 6 11 I F 10 7 9 12 M 8
Algoritmos: Scan de Graham 1.- Escogemos un punto cualquiera.2.- Ordenamos los demás puntos angularmente con respecto a dicho punto:L3.- A los tres primeros puntos les ponemos las etiquetas I M F4.-Si el ángulo IMF es positivo I=siguiente(I)M=siguiente(M)F=siguiente(F) Si IMF es negativo: borramos M de LI=anterior(I)M=IF=F 2 1 4 3 13 5 6 11 F M 10 7 9 12 I 8
Algoritmos: Scan de Graham 1.- Escogemos un punto cualquiera.2.- Ordenamos los demás puntos angularmente con respecto a dicho punto:L3.- A los tres primeros puntos les ponemos las etiquetas I M F4.-Si el ángulo IMF es positivo I=siguiente(I)M=siguiente(M)F=siguiente(F) Si IMF es negativo: borramos M de LI=anterior(I)M=IF=F 2 1 4 3 13 5 6 11 F M 10 7 9 12 I 8
Algoritmos: Scan de Graham 1.- Escogemos un punto cualquiera.2.- Ordenamos los demás puntos angularmente con respecto a dicho punto:L3.- A los tres primeros puntos les ponemos las etiquetas I M F4.-Si el ángulo IMF es positivo I=siguiente(I)M=siguiente(M)F=siguiente(F) Si IMF es negativo: borramos M de LI=anterior(I)M=IF=F 2 1 4 3 13 5 6 11 I F 10 7 9 12 M 8
Algoritmos: Scan de Graham 1.- Escogemos un punto cualquiera.2.- Ordenamos los demás puntos angularmente con respecto a dicho punto:L3.- A los tres primeros puntos les ponemos las etiquetas I M F4.-Si el ángulo IMF es positivo I=siguiente(I)M=siguiente(M)F=siguiente(F) Si IMF es negativo: borramos M de LI=anterior(I)M=IF=F 2 1 4 3 13 5 F 6 11 10 M 7 9 12 I 8