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.
10
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).
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.
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
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
18
20
22
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
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
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.
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
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
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
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
z Vértice mezcla
36
Partición de un Polígono en
Componentes Monótonas (IV)
z Tipos de vértices:
z Vértice regular
38
40
Geometría
Computacional
Tema 2: La Envolvente Convexa
y Triangulación de Polígonos