Anda di halaman 1dari 21

Geometría

Computacional
Tema 2: La Envolvente Convexa
y Triangulación de Polígonos

Tema 2: La Envolvente Convexa y


Triangulación de Polígonos
z La Envolvente Convexa
z Graham’s Scan
z La marcha de Jarvis
z Algoritmo Incremental
z Método Divide y Vencerás
z Triangulación de Polígonos
z Triangulación de polígonos monótonos
z Partición de un polígono en componentes
monótonas
Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de
Polígonos
3

La Envolvente Convexa (I)


¾ Problema muy estudiado
en los más diversos
ámbitos.
z Conjunto convexo del
plano: Aquél que
verifica que el segmento
que une a dos
cualesquiera de sus
puntos está totalmente
contenido en él.

Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de


Polígonos

La Envolvente Convexa (II)


z Definición 1: El menor conjunto
convexo que contiene a dicho
conjunto.
z Definición 2: Unión de todos
los triángulos determinados por
dicho conjunto de puntos.
z Propiedad:
z Un punto q∈S pertenece a la
envolvente convexa de S,
q∈CH(S), si es posible trazar una
recta pasando por dicho punto de
forma que todo el conjunto S’, S’
= S – {q} quede a un lado de
dicha recta.

Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de


Polígonos
5

La Envolvente Convexa (III)


z Algunos algoritmos propuestos:
z Graham, 1972; Θ(nlogn)
z Divide y vencerás; Θ(nlogn)
z Preparata y Shamos, 1985: Quickhull
z “La Marcha de Jarvis”, 1973; O(n2)
z Cota: Ω(nlogn).

Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de


Polígonos

La Envolvente Convexa (IV)


z Ejemplo de resolución.
z Cálculo de la envolvente convexa ≈ calcular todo
el conjunto de puntos extremos de una nube.
z Punto extremo:
a) Es posible trazar una línea recta a través de él que
deja el resto de puntos a un lado.
b) Si y sólo si está dentro de algún posible triángulo
cuyos vértices son cualesquiera de los puntos de la
nube original.
z O(n3) ⇒ O(n4) >> Ω(nlogn)

Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de


Polígonos
7

La Envolvente Convexa (V)


• Ejemplo: Explotación
petrolífera, productos
A y B en distinta
proporción.
– Aplicación de la
envolvente convexa:
– Se representan las
mezclas como puntos
en el plano:
• e1 = A10%B35%,
• e2 = A16%B20%,
• e3 = A7%B15%
⇒ ef = A13%B22%

Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de


Polígonos

Graham’s Scan
z Ordenación angular de puntos, p0, p1, …,
pn-1.
z Tomar triángulos elegidos según el orden
anterior.
z Si el triángulo abc tiene área positiva, b puede
ser tenido en cuenta como punto probable de la
envolvente, si no, b se descarta.

Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de


Polígonos
9
Graham’s Scan - Pila (LIFO,
Last In First Out)
z Operaciones de manejo de Pila:
z PilaCrea( a: TipoPila ) → Crea una pila vacía.
z PilaPush( a: TipoPila, d: TipoDato ) → Mete el
elemento “d” en la pila “a”.
z PilaPop( a: TipoPila ): TipoDato → Saca y
devuelve el primer elemento.
z PilaTope( a: TipoPila ): TipoDato → Devuelve
pero no saca el primer elemento.
z PilaDestruye( a: TipoPila ) → Destruye la pila,
eliminando todos sus elementos.
Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de
Polígonos

10

Graham’s Scan – Algoritmo (I)


ALGORITMO GRAHAM (VAR P: TipoNubePuntos, n:
entero, VAR Env: TipoPila)
ENTRADA : La nube de puntos P de tamaño n
SALIDA : La envolvente convexa de P, CH(P)
VARIABLES:
min : Entero // mantiene el índice del punto con
menor ordenada
t : Entero // sirve para sacar y meter datos en
la pila
i : Entero // recorre todos los elementos de P

Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de


Polígonos
11

Graham’s Scan – Algoritmo (II)


INICIO {GRAHAM}
min ← PuntoMenorOrdenada(P, n)
OrdenarAngularmente(P, n , min)
PilaCrea( Env )
PilaPush( Env, P[ n – 1 ] )
PilaPush( Env, P[ 0 ] )
i ← 1
MIENTRAS i <= n – 1 REPETIR
t ← PilaPop( Env )
SI Izquierda( PilaTope ( Env ), t, P[ i ] )
ENTONCES
PilaPush( Env, t )
PilaPush( Env, i )
i ← i + 1
FIN_SI
FIN_MIENTRAS
FIN

Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de


Polígonos

12
Graham’s Scan – Algoritmo
(III)
z Ordenación de los puntos: O(nlogn).
z Proceso de Graham, en el peor de los casos:
2n – 3 operaciones.
z Graham’s scan trabaja en tiempo óptimo
O(nlogn).

Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de


Polígonos
13

La marcha de Jarvis
z El segmento l, definido por dos
puntos de la nube de puntos,
es un eje de la envolvente
convexa sií todos los puntos de
la envolvente convexa están a
un lado de ésta.
z Primera aproximación: O(n2).
z Idea de Jarvis: Si pipj es una
arista perteneciente a la
envolvente convexa, la
siguiente arista la encontramos
partiendo de pj en tiempo lineal.

Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de


Polígonos

14
La marcha de Jarvis –
Algoritmo (I)
PROCEDIMIENTO MarchaJarvis (VAR P: TipoNubePuntos, n: Entero,
VAR Env: ListaPuntos)
ENTRADA : La nube P de tamaño n
SALIDA : La lista Env con los puntos de la envolvente
VARIABLES:
p0, p1, p2 : Entero // tres puntos de la envolvente
INICIO
p0 ← MinimoPunto( P , n )
p1 ← p0
REPETIR
ListaPonerFinal( Env , p1 )
p2 ← Siguiente_en_Jarvis( P , n , p1 )
p1 ← p2
HASTA p2 = p0
FIN

Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de


Polígonos
15
La marcha de Jarvis –
Algoritmo (II)
FUNCION Siguiente_en_Jarvis (VAR P:
TipoNubePuntos, n: Entero, p: TipoPunto ):
TipoPunto
ENTRADA : La nube P de tamaño n y el punto p sobre
el que parte la búsqueda
SALIDA : el punto siguiente en la marcha de Jarvis
VARIABLES:
minang : Real // menor ángulo encontrado con
respecto a p
i : Entero // variable contadora del bucle
ang : Real // ángulo calculado en cada iteración
pmin : Entero // índice del punto que forma el
ángulo "pmin"

Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de


Polígonos

16
La marcha de Jarvis –
Algoritmo (III)
INICIO {Siguiente_en_Jarvis}
minang ← 2 * Pi
PARA i ← 0 HASTA n – 1 REPETIR
SI P[ i ] < > p
ENTONCES
ang ← Angulo( p , P[ i ] )
SI ang < minang
ENTONCES
minang ← ang
pmin ← P[ i ]
FIN_SI
FIN_SI
FIN_PARA
DEVOLVER( pmin )
FIN

Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de


Polígonos
17
La marcha de Jarvis –
Algoritmo (IV)
z Cada barrido angular: O(n)
z Si la envolvente tiene k puntos, O(n·k)
- Mejor de los casos: Envolvente triangular ≈ O(n).
- Peor caso: Todos los puntos en la envolvente ≈
O(n2).

Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de


Polígonos

18

Algoritmo Incremental (I)


z Supone el problema
resuelto para tamaño
n y en cada paso se
añade un nuevo punto
para resolver n+1.
z P: p0, p1, …, pn-1
- Tomamos el triángulo
p0, p1, p2.
- Añadimos un vértice
más, p3.
- …

Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de


Polígonos
19

Algoritmo Incremental (II)


z Caso general: Para añadir
cada nuevo punto pi+1 basta
con lanzar tangentes
(superior e inferior) desde
dicho punto hasta el polígono
convexo obtenido en el paso
anterior:
• Siempre ocurre que el punto
más bajo de tangencia pi es
tal que q está a la izquierda
de pi-1pi pero a la derecha
de pipi+1.
• El punto pj será el punto de
mayor tangencia si q está a
la derecha de pj-1pj pero a la
izquierda de pjpj+1.
Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de
Polígonos

20

Algoritmo Incremental - Cálculo de los


dos puntos tangentes, pi y pj
PROCEDIMIENTO PuntosTangentes (VAR P: TipoPoligono, n: Entero, q: TipoPunto, VAR
pt: ARRAY( 2 ) de ENTEROS)
ENTRADA : La nube P de tamaño n; el punto q desde el que se lanzan tangentes
hacia P
SALIDA : La pareja de puntos pt
VARIABLES:
j : Entero // el índice para pt
i : Entero // variable contadora del bucle
INICIO
j ← 0
PARA i ← 0 HASTA n – 1 REPETIR
SI XOR( IzquierdaOSobre( p[i – 1], p[i], q ),
IzquierdaOSobre( p[i], p[i + 1], q ) )
ENTONCES
pt [j] ← P[i]
j ← j +1
FIN_SI
FIN_PARA
FIN

Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de


Polígonos
21
Algoritmo Incremental –
Consideraciones
z Orden de ejecución:
1. La operación de ordenación con coste O(nlogn).
2. Cada uno de los n – 3 puntos que añaden
necesitan calcular las dos tangentes, operación
lineal en el peor de los casos.
z Aunque se puede mejorar, en el peor de los
casos tiene un tiempo de O(n2).

Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de


Polígonos

22

Método Divide y Vencerás (I)


z Partimos de una nube de puntos que se
dividirá en dos mitades A y B de tamaño
similar.
z Se continúa dividiendo hasta llegar al caso
base de una nube de tamaño reducido que
puede resolverse fácilmente.
z Se deshace el proceso uniendo los polígonos
convexos. Para ello es necesario calcular
dos tangentes, superior e inferior.

Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de


Polígonos
23

Método Divide y Vencerás (II)


z Ejemplo:

Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de


Polígonos

24
Método Divide y Vencerás –
Algoritmos (I)
PROCEDIMIENTO Envolvente_DyV(VAR P : TipoNubePuntos, i, j :
Entero, VAR E: TipoCtoPuntos )
ENTRADA : La porción comprendida entre i y j de l a nube de
puntos P
SALIDA : La envolvente convexa de dicha porción de dicha nube
VARIABLES
E1,E2 : TipoCtoPuntos // Las envolventes convexas en
situaciones intermedias
INICIO
SI j – i < 3
ENTONCES E ← P
SINO
Envolvente_DyV( P, i , ( i + j )/2, E1)
Envolvente_DyV( P, ( i + j )/2 + 1, j, E2)
MezclarEnvolventes( E1, E2 , j – i +1, E)
FIN_SI
FIN
Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de
Polígonos
25
Método Divide y Vencerás –
Algoritmos (II)
PROCEDIMIENTO MezclarEnvolventes( VAR EI, ED:
TipoCtoPuntos, n : Entero, VAR E:
TipoCtoPuntos )
ENTRADA : EI y ED, envolventes convexas de
tamaños n y m
SALIDA : La envolvente convexa E
INICIO
MenorTangente( EI, ED, n, m, a, b )
MayorTangente( EI, ED, n, m, c, d )
E ← EI – {a + 1, …, c – 1} + ED – {d + 1, …,
b – 1}
FIN

Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de


Polígonos

26
Método Divide y Vencerás –
Algoritmos (III)
PROCEDIMIENTO MenorTangente (EI, ED: TipoCtoPuntos, n, m, a, b : Entero )
ENTRADA : EI de tamaño n y ED de tamaño m
SALIDA : el segmento formado por a y b
INICIO
a ← MasDecha ( EI , n )
b ← MasIzda (ED, m)
REPETIR
aa ← a
bb ← n
MIENTRAS NO (TangenteMenor( EI, n, a, b ) ) REPETIR
a ← (a – 1 + n ) mod n
FIN_MIENTRAS
MIENTRAS NO (TangenteMenor( ED, m, a, b ) ) REPETIR
b ← (b +1) mod n
FIN_MIENTRAS
HASTA ( aa=a AND bb=b )
FIN

Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de


Polígonos
27
Método Divide y Vencerás –
Algoritmos (IV)
z Para saber si ab es tangente a un polígono,

z El tiempo de ejecución del algoritmo DyV


depende del comportamiento de la función
de mezcla. Si ésta puede realizarse en un
tiempo lineal, el algoritmo tiene orden
O(nlogn).
Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de
Polígonos

28

Triangulación de Polígonos
z Objetivo: Triangular polígonos en O(nlogn).
z Polígonos monótonos.
z Definición: Aquél que, recorrido con una línea horizontal
que barre hacia abajo, sólo encuentra dos intersecciones
como máximo del polígono con dicha recta.
z Si no hay aristas horizontales, el polígono es estrictamente
monótono.
Intuitivamente hablando, no tiene cúspides interiores.
z Ventaja: al bajar la línea horizontal y cruzar un vértice, se
sabe que su diagonal irá a un punto visible desde dicho
vértice.
z Idea: Bajar paulatinamente, trazando diagonales.

Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de


Polígonos
29
Triangulación de polígonos
monótonos
z Ejemplo:

Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de


Polígonos

30

Triangulación de polígonos
monótonos – Algoritmo O(nlogn) (I)
ALGORITMO TriangulacionMonotona
ENTRADA : El polígono S de tamaño n
SALIDA : El conjunto de Diagonales que triangulan el
polígono
INICIO
Ordenar( S, n, p ) {de mayor a menor ordenada (a igual ordenada,
primero la de menor abcisa}
ListaCrea( l )
listaCrea( Diagonales )
ListaMeteFinal( l, p[ 0 ] )
ListaMeteFinal( l, p[ 1 ] )
PARA j ← 2 HASTA n – 1 REPETIR
(*)
FIN_PARA
FIN

Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de


Polígonos
31

Triangulación de polígonos
monótonos – Algoritmo O(nlogn) (II)
PARA j ← 2 HASTA n – 1 REPETIR (*)
SI Adyacente( ListaInicio( l ), p[ j ] ) AND NOT
Adyacente( ListaFinal( l ), p[ j ] )
ENTONCES
v ← ListaSacaInicio( l )
MIENTRAS (NOT ListaVacia( l ) ) REPETIR
v ← ListaSacaInicio( l )
ListaMeteFinal( Diagonales, v, p[ j ] )
FIN_MIENTRAS
ListaMeteFinal( l, v )
ListaMeteFinal( l, p[ j ] )
SINO
(**)
FIN_SI
FIN_PARA

Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de


Polígonos

32

Triangulación de polígonos
monótonos – Algoritmo O(nlogn) (III)
(**) SI Adyacente( ListaFinal( l ), p[ j ] ) AND NOT
Adyacente( ListaInicio( l ), p[ j ] )
ENTONCES
v ← ListaSacaFinal( l )
x ← FinalLista( l )
MIENTRAS ( Angulo( p[ j , v, x ) < Pi ) REPETIR
ListaMeteFinal( Diagonales, x, p[ j ] )
v ← ListaFinalSaca( l )
SI NOT ListaVacia( l )
ENTONCES x ← ListaFinal( l )
FIN_MIENTRAS
ListaMeteFinal( l, v )
ListaMeteFinal( l, p[ j ] )
SINO
v ← ListaSacaInicio( l )
MIENTRAS NOT ( ListaVacia( l ) )
v ← ListaSacaInicio( l )
ListaMeteFinal( Diagonales, p[ j ], v )
FIN_MIENTRAS
FIN_SI

Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de


Polígonos
33
Partición de un Polígono en
Componentes Monótonas (I)
z Polígono y-monótono: ∀h horizontal, la
intersección con h es conexa, i.e., es un
punto o el vacío.
z Polígono x-monótono: Análogo.

Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de


Polígonos

34
Partición de un Polígono en
Componentes Monótonas (II)
z Tipos de vértices:
z Vértice comienzo

z Vértice final

Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de


Polígonos
35
Partición de un Polígono en
Componentes Monótonas (III)
z Tipos de vértices:
z Vértice partición

z Vértice mezcla

Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de


Polígonos

36
Partición de un Polígono en
Componentes Monótonas (IV)
z Tipos de vértices:
z Vértice regular

Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de


Polígonos
37
Partición de un Polígono en
Componentes Monótonas (V)
z Proceso:
z Mediante la técnica de “línea de barrido”, encontraremos los
vértices que rompen la monotonía, los de partición y los de
mezcla.
z Estructuras de datos implicadas:
z P: Array con los vértices del polígono, ordenados en sentido
antihorario.
z Q: Array con los índices de P ordenados de mayor a menor
ordenada (a igual ordenada, primero el de menor abcisa).
z T: Estructura de datos con tiempo de acceso logarítmico,
almacenará los ejes ei, siendo ei = vivi+1. Ordenados de izquierda
a derecha por la coordenada x.
z Ayu: Array para almacenar el vértice candidato para unir los
vértices de partición y mezcla.
z D: Resultado, conjunto de diagonales obtenidas.

Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de


Polígonos

38

Partición de un Polígono en Componentes


Monótonas – Algoritmo O(nlogn) (I)
PROCEDIMIENTO HacerMonotono (VAR P: TipoPoligono;
VAR D: TipoLista )
ENTRADA: El polígono P de tamaño n
SALIDA : El conjunto D de diagonales
INICIO
Ordenar_Y( P, n, Q)
InicializarLista( T )
InicializarLista( D )
Para k ← 0 hasta n – 1 Repetir
i ← Q( k )
(*)
FIN

Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de


Polígonos
39

Partición de un Polígono en Componentes


Monótonas – Algoritmo O(nlogn) (II)
(*) EN CASO DE QUE TipoVertice( P, i ) SEA
0 : (* Comienzo *)
ListaInsertarOrdenado( T, i, P)
Ayu( i ) ← i
1 : (* Final *)
Si TipoVertice( P, Ayu( i – 1 ) ) = 2
Entonces InsertarLista( D, {i – Ayu( i – 1 )} )
ListaEliminar( T, i – 1 )
(**)
FIN_CASE

Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de


Polígonos

40

Partición de un Polígono en Componentes


Monótonas – Algoritmo O(nlogn) (III)
(*) EN CASO DE QUE TipoVertice( P, i ) SEA
(**)
2 : (* Mezcla *)
Si TipoVertice( P, Ayu( i – 1 ) ) = 2
Entonces ListaInsertar( D, {i – Ayu( i – 1 )} )
ListaEliminar( T, i – 1 )
j ← ListaBuscarIzdo( T, i )
Si TipoVertice( P, Ayu( j ) ) = 2
Entonces ListaInsertar( D, {i – Ayu( j )} )
Ayu( j ) ← i
3 : (* Partición *)
j ← ListaBuscarIzdo( T, i )
ListaInsertar( D, {i – Ayu( j )} )
Ayu( j ) ← i
ListaInsertarOrdenado( T, i, P )
Ayu( i ) ← I
(***)
FIN_CASE

Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de


Polígonos
41

Partición de un Polígono en Componentes


Monótonas – Algoritmo O(nlogn) (IV)
(*) EN CASO DE QUE TipoVertice( P, i ) SEA
(***)
4 : (* Regular *)
Si InteriorDecha( P, i )
Entonces Si TipoVertice( P, Ayu( i – 1 ) ) = 2
Entonces ListaInsertar( D, {i - Ayu( i – 1 )} )
ListaBorrar( T, i – 1 )
ListaInsertarOrdenado(T, i, P)
Ayu( i ) ← i
Sino
j ← ListaBuscarIzdo( T, i )
Si TipoVertice( P, Ayu( j ) ) = 2
Entonces ListaInsertar( D, {i - Ayu( j )} )
Ayu( j ) ← i
FIN_SI
FIN_CASE

Geometría Computacional – Tema 2: La Envolvente Convexa y Triangulación de


Polígonos

Geometría
Computacional
Tema 2: La Envolvente Convexa
y Triangulación de Polígonos

Anda mungkin juga menyukai