Vous êtes sur la page 1sur 90

GEOMETRIA COMPUTACIONAL

Notas del curso 98/99

Gregoria Blanco Viejo

Departamento de Matematica Aplicada


Escuela Universitaria de Informatica
Universidad Politecnica de Madrid
Indice de Materias

Indice i

Prologo iii

Agradecimientos v

1 Introduccion a la Geometra Computacional 1


1.1 Que es la Geometra Computacional? . . . . . . . . . . . . . . . . . . . . . 1
1.2 Algunas aplicaciones de la Geometra Computacional. . . . . . . . . . . . . 5
1.2.1 Fuentes bibliogracas . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.3 Terminologa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3.1 Familias notables de polgonos . . . . . . . . . . . . . . . . . . . . . 12
1.3.2 Area signada de un triangulo . . . . . . . . . . . . . . . . . . . . . . 15
1.3.3 Lecturas complementarias . . . . . . . . . . . . . . . . . . . . . . . . 17

2 Cierre convexo 19
2.1 Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.2 Cierre convexo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.3 Algoritmos para calcular envolventes convexas . . . . . . . . . . . . . . . . . 23
2.3.1 Marcha de Jarvis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.3.2 Scan de Graham . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.4 Complejidad de un problema . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.5 Lecturas complementarias recomendadas . . . . . . . . . . . . . . . . . . . . 34

3 Cierre convexo de un polgono 35


3.1 Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.2 Cierre convexo de un polgono . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.3 Algoritmos de Lee y Melkman . . . . . . . . . . . . . . . . . . . . . . . . . . 39

i
ii INDICE DE MATERIAS

3.3.1 Algoritmo de Lee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39


3.3.2 Algoritmo de Melkman . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.4 Referencias y lecturas complementarias recomendadas . . . . . . . . . . . . 45

4 Diametro y calibres 47
4.1 Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.2 Diametro de una nube de puntos . . . . . . . . . . . . . . . . . . . . . . . . 47
4.3 Diametro de un polgono convexo . . . . . . . . . . . . . . . . . . . . . . . . 48
4.3.1 Numero de parejas de antpodas de un convexo . . . . . . . . . . . . 50
4.3.2 Calculo de las parejas de antpodas . . . . . . . . . . . . . . . . . . . 53
4.3.3 Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.4 Otras aplicaciones de la rotacion de calibres . . . . . . . . . . . . . . . . . . 59
4.4.1 Anchura de una nube de puntos . . . . . . . . . . . . . . . . . . . . 59
4.4.2 Rectangulo de area mnima que contiene a una nube . . . . . . . . . 62
4.5 Referencias y lecturas complementarias . . . . . . . . . . . . . . . . . . . . . 66

5 Triangulaciones 67
5.1 Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.2 Problema de la galera de arte . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.3 Triangulacion de un polgono . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.3.1 Grafo dual de una triangulacion . . . . . . . . . . . . . . . . . . . . 73
5.4 Algoritmos de triangulacion . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.4.1 Triangulacion de polgonos especiales . . . . . . . . . . . . . . . . . . 76
5.4.2 Algoritmo de Mehlhorn . . . . . . . . . . . . . . . . . . . . . . . . . 79
5.5 Referencias y lecturas complementarias . . . . . . . . . . . . . . . . . . . . . 85
Prologo

Estas notas son el resultado de seis anos de docencia en Geometra Computacional en la


Escuela Universitaria de Informatica de la Universidad Politecnica de Madrid. Recoge
parcialmente el temario de la asignatura de libre eleccion que con este nombre aparece en
el curriculum de Ingeniera Tecnica de Sistemas. No pretende ser mas que unas notas de
clase y una modesta gua en la busqueda bibliograca para los estudiantes a los que va des-
tinado este curso, siempre teniendo en cuenta sus conocimientos previos en matematicas,
algortmica y estructuras de datos.
G. Blanco

iii
iv INDICE DE MATERIAS
Agradecimientos

Quisiera agradecer, en primer lugar, a los estudiantes del curso 98/99, por su labor cons-
tante en la caza de imprecisiones y erratas, y por su indomable rebelda ante la terrible
frase esto es obvio. Al profesor Gregorio Hernandez Penalver por su paciente lectura, sus
nas sugerencias y sus acertadas crticas, siempre constructivas. Y por ultimo, al profesor
Jesus Garca Lopez de Lacalle el apoyo constante y los sabios consejos que suele brindarme
en la revision de cuanto material elaboro.
G. Blanco

v
Tema 1

Introduccion a la Geometra
Computacional

1.1 Que es la Geometra Computacional?


La Geometra Computacional es una disciplina que se ocupa del diseno y analisis de al-
goritmos que resuelven problemas geometricos. En ella concurren elementos puramente
matematicos con cuestiones y herramientas propias de la informatica. Se desprende por
tanto, que es un campo bastante reciente (20 30 anos). Sin embargo, sus antecedentes
pueden encontrarse en la Grecia Clasica, hace 2600 anos, donde los problemas geometricos
que se planteaban los matematicos de la epoca eran abordados desde el punto de vista
constructivo, es decir algortmico.
Tomemos en consideracion, por ejemplo, un problema planteado en aquellos tiempos.
Supongamos que tenemos dos granjas A y B en el campo y un camino r que, respectiva-
mente, se pueden representar por los dos puntos y la recta de la gura. Se quiere ir de la
granja A a la granja B para llevar ciertos suministros pero antes hay que pasar por cierto
almacen situado en un punto C del camino. Se trata de encontrar la posicion de C que
minimice la longitud del trayecto, es decir, la suma de las distancias de A a C y de C a B.
B
B
A d2
A d'1 d'2

d1
r
C C'
r
C? d1
d'1
A'

Ilustracion de la prueba de que el camino ACB es mnimo (Teorema de Heron).

Una solucion constructiva consiste en detallar los pasos y calculos que se han realizar
para obtener la posicion de C. En este caso seran:

Paso 1: Hallar el punto simetrico A de A respecto de r.


Paso 2: Trazar el segmento A B.
Paso 3: La interseccion de A B y r es el punto C buscado.

1
2 TEMA 1: INTRODUCCION A LA GEOMETRA COMPUTACIONAL

Y todos los calculos y construcciones pueden realizarse usando solo regla y compas.
Evidentemente, el paso de herramientas de calculo tales como la regla y el compas
utilizadas por los griegos al ordenador electronico digital, supone grandes cambios en el
caracter y en el planteamiento de los problemas geometricos que se estudian. El ordenador
aporta la capacidad de manejar un numero grande de datos (elementos geometricos) y
la rapidez en el calculo. De hecho, son caractersticas habituales en los problemas que se
abordan en Geometra Computacional el tratamiento de objetos geometricos relativamente
simples: puntos, polgonos, segmentos, rectas, etc. pero en un gran numero de ellos.
Por ejemplo, consideremos el problema, en cierto modo recuerda al anterior, de situar
el almacen entre n granjas pero ahora de manera que se minimice la distancia entre el
almacen y la granja mas lejana. Si se representan las granjas como puntos en el plano, el
problema se traduce en terminos geometricos en como encontrar el crculo (en particular
su centro que es lo que nos interesa) de area mnima (o radio mnimo) que contenga a
todos los puntos.

Crculo de area mnima que contiene una nube de puntos.

Frecuentemente se tiene que un mismo problema puede resolverse mediante distintos


algoritmos y es preciso establecer criterios que nos permita decidir cual es mejor. En
general se atiende a razones de economa en cuanto al numero de operaciones que necesita
el algoritmo para resolver el problema. La complejidad de un algoritmo no es sino una
medida del coste que supone su ejecucion tanto en tiempo (o numero de operaciones
elementales que ha de realizar) como en espacio (o unidades de memoria requeridas para
almacenar y manipular los datos a lo largo de la ejecucion) y vendra dada en funcion del
numero de datos de entrada.
El estudio de la complejidad de un algoritmo puede llevarse a cabo principalmente bajo
dos puntos de vista:

Complejidad en el peor de los casos.

Complejidad en media (o esperada).

La primera consiste en medir la complejidad del algoritmo atendiendo a su ejecucion


cuando trata los datos del problema en el caso mas desfavorable, entendiendose por desfa-
vorable el mas costoso.
La segunda consiste en medir la complejidad haciendo un promedio entre todos los
casos (favorables y no favorables) atendiendo a la probabilidad de que aparezcan como
entrada. Para ello se supone que los datos de entrada vienen dados conforme a cierta
distribucion de probabilidad y se estudia cual es el tiempo esperado de ejecucion.
1.1. QUE ES LA GEOMETRA COMPUTACIONAL? 3

Si n es el tamano del conjunto de datos de entrada de un determinado algoritmo, sus


complejidades en tiempo y en espacio son funciones positivas de n y, en cuanto a su analisis,
se esta especialmente interesado en su comportamiento asintotico, es decir, en saber como
se comportan para valores grandes de n.
La notacion que utilizaremos en el estudio asintotico de estas funciones es la estandar
propuesta por Knuth:
Si f (n) y g(n) dos funciones positivas se dira que

1. f es o grande de g y se notara f (n) = O(g(n)) si existen una constante C > 0 y


un numero natural n0 > 0 tales que

f (n) < Cg(n) n n0

2. f es omega de g y se notara f (n) = (g(n)) si g(n) = O(f (n))

3. f es theta de g y se notara f (n) = (g(n)) si f (n) = O(g(n)) y f (n) = (g(n)).

Observese que

f (n)
Si lim = L IR entonces, si L = 0, f (n) = (g(n)), y si L = 0, f (n) = O(g(n)).
g(n)
La igualdad en esta notacion (por ejemplo f (n) = O(g(n))) no es simetrica y para
evitar confusiones en algunos libros se sustituye por el smbolo . Hecha esta
aclaracion, conamos en que tal confusion no se produzca.

Queda por determinar que se entiende por elemental en cuanto al tipo de opera-
ciones que se pueden realizar a lo largo de un algoritmo. Evidentemente es una cuestion
que depende directamente de cuan sosticada sea la maquina de calculo a utilizar. Para
ilustrarlo consideremos por ejemplo el siguiente problema:

Dado un segmento AB y un punto C, trasladar el segmento hasta que C sea uno de


sus extremos.

C
B

Traslacion de un segmento con regla y compas.

Supongamos en primer lugar que disponemos para su resolucion de una regla (ilimitada
y sin graduar) y un compas, y consideremos en segundo lugar que en vez de tener el compas
4 TEMA 1: INTRODUCCION A LA GEOMETRA COMPUTACIONAL

usual tenemos uno con la propiedad de que al levantarlo del papel colapsa, es decir, es
incapaz de mantener la abertura en el aire. Dependiendo de las operaciones basicas o
primitivas que estas herramientas nos permiten podemos obtener sendos algoritmos para
resolver el problema. Evidentemente el numero de pasos necesarios en uno o en otro sera
menor cuanto mas potentes sean las maquinas.
Algoritmo 1: (Regla y compas usual)
Paso 1: Pinchando el compas en A y abriendolo hasta B tomar la longitud del segmento
AB.
Paso 2: Trazar una circunferencia de centro C y radio AB.
Paso 3: Tomar la longitud del segmento AC.
Paso 4: Hallar la interseccion D entre la circunferencia del paso 2 y la que tiene por centro
B y radio la longitud del segmento AC.
Paso 5: Trazar el segmento CD.

Algoritmo 2: (Regla y compas colapsante)


Paso 1: Trazar el segmento BC.
Paso 2: Trazar la circunferencia con centro B y radio la longitud de BC.
Paso 3: Trazar la circunferencia con centro C y radio la longitud de BC.
Paso 4: Trazar la recta que pasa por los dos puntos de interseccion entre las dos circun-
ferencias anteriores y llamar M (el punto medio del segmento BC) a la inter-
seccion entre esta recta y el segmento BC.
Paso 5: Trazar la recta que pasa por M y A.
Paso 6: Trazar la circunferencia con centro M y radio la longitud de M A y llamar D a
la interseccion de esa circunferencia y la recta del paso 5.
Paso 7: Trazar el segmento CD.

Otro ejemplo podemos encontrarlo en uno de los tres problemas clasicos griegos que
consista en la triseccion del angulo, es decir dado un angulo cualquiera dar un algoritmo
que permita dividirlo en tres partes iguales. Este problema quedo abierto hasta el siglo
pasado en que se demostro que no era posible resolverlo con las maquinas de calculo
propuestas: regla y compas. La razon basicamente esta en que para poderlo resolver es
preciso calcular la raz cubica de 3, y la extraccion de races cubicas de numeros no es una
operacion que pueda resolverse con regla y compas. Los numeros que se pueden construir
con regla y compas son aquellos que se obtienen de intersecar rectas y circunferencias,
es decir de resolver ecuaciones de primer y segundo grado (normalmente con coecientes
racionales), por tanto nunca aparecen races cubicas de numeros racionales.
Todo esto nos conduce a la necesidad de especicar el tipo de operaciones primitivas
que nos estan permitidas por la maquina. A dicha descripcion o especicacion junto con
el coste que requiere cada una de las operaciones se denomina modelo de computacion. El
mas popular en Geometra Computacional es el modelo RAM (random access machine) y
sus primitivas son:
1.2. ALGUNAS APLICACIONES DE LA GEOMETRA COMPUTACIONAL. 5

Operaciones aritmeticas (suma, resta, producto y division).

Comparacion entre numeros reales (=, <, >).

Acceso a memoria.

A menudo se utiliza otro modelo RAM mas potente en el que se admiten tambien como
primitivas el calculo de logaritmos, races k-esimas, o funciones trigonometricas.
En cuanto al coste en tiempo de las operaciones, supondremos que cada una puede
ejecutarse en una unidad de tiempo y en cuanto al coste de espacio, supondremos que un
numero real es almacenado en una posicion de memoria que ocupa una unidad.

1.2 Algunas aplicaciones de la Geometra Computa-


cional.
Uno de los aspectos mas interesantes de la Geometra Computacional es la gran aplica-
bilidad de sus resultados.
Tal y como se explica en [NH], el signicado del termino computacion se ha expandido
notoriamente desde la introduccion de los ordenadores, hara ahora unos cincuenta anos.
Atendiendo a los objetos que procesan, destacan tres tipos de aplicaciones de los orde-
nadores. La primera generacion va a ser la de los calculos numericos, aplicados sobre todo
a problemas cientcos y tecnicos. La segunda, propiciada por necesidades mas comerciales
y administrativas, incorporaba largas listas de datos (por ejemplo alfabeticos), con vistas
a como leer, almacenar, modicar, seleccionar, e imprimir esos datos.
Todo esto naturalmente pervive, y con fuerza, pero vivimos una tercera generacion de
aplicaciones dominada por el procesamiento de informacion geometrica y graca, presente
en areas tan diversas como son la medicina, la cartografa, el control de robots o el diseno
artstico. La Geometra Computacional ha emergido, ciertamente, por la necesidad de dar
respuesta a esta nueva y creciente demanda.
Se podra decir que las aplicaciones van a preceder la disciplina, y ahora que esta tiene
ya un nucleo teorico solidamente constitudo, como sus vertientes practicas corresponden
a tecnologa de maxima vanguardia, la demanda de resultados continua con la misma
fuerza y exigencia que al principio. Por eso diremos que, en Geometra Computacional,
las aplicaciones tienen un protagonismo esencial.
Dentro de los campos de aplicacion mas directamente relacionados con la disciplina
destacaremos la Informatica Graca, el Diseno y Fabricacion Asistida por Ordenador
(CAD/CAM), la Caracterizacion y Reconocimiento Automatico de Formas (Pattern Recog-
nition), el Diseno VLSI, la vision Articial, la Cartografa y la Robotica.
A continuacion mostramos algunos problemas particulares que se plantean en algu-
nas de estas areas, y en las que se han realizado contribuciones (en algunos casos, muy
importantes) por parte de la Geometra.
6 TEMA 1: INTRODUCCION A LA GEOMETRA COMPUTACIONAL

Gracos por Ordenador

Lo que se entiende hoy por Gracos por Ordenador (o Informatica Graca), pese a ser
una rama de Informatica que tambien se ocupa de los fenomenos geometricos desde el punto
de vista del calculo, es un area bien distinta de la Geometra Computacional. Mientras
que esta se ocupa de proporcionar los fundamentos teoricos involucrando el estudio de
algoritmos y de estructuras de datos para hacer calculos geometricos, la Informatica Graca
se ocupa del desarrollo practico del software, hardware y algoritmos necesarios para crear
gracos en la pantalla del ordenador.
Sin embargo, ambas tienen algunas tecnicas similares (otras muy distintas), y sin duda
alguna, se inuencian mutuamente. Desde el ambito de los informatica graca se dan a
conocer problemas practicos a la comunidad de estudiosos de la Geometra Computacional,
y la Geometra Computacional aporta algoritmos rapidos que los resuelven. Se espera
que la Geometra Computacional haga grandes mejoras a los algoritmos estandar usados
en gracos por ordenador. La Geometra Computacional tambien proporciona nuevas
maneras de pensar los problemas a los programadores de gracos.
Una cuestion muy importante en informatica graca es la representacion realista de
escenas complejas. Uno de los requisitos es la eliminacion de lneas y supercies ocultas a
partir de un modelo tridimensional. Las primeras soluciones razonablemente satisfactorias
van a iniciar areas importantes de investigacion dentro de la geometra computacional,
concretamente los problemas de interseccion. Los resultados de estas investigaciones han
dado nuevas aplicaciones en informatica graca. De modo que hay una interaccion continua
en este problema como en otros muchos otros.

Ocultacion de lneas.

Otros problemas fundamentales que aparecen en Gracos son: el trazado de rayos, la


aproximacion de contornos mediante poligonales y la triangulacion de polgonos. En todos
ellos la Geometra Computacional ha realizado recientemente contribuciones signicativas.
Por ejemplo consideremos lo siguiente.

A D

C C

(a) Cuatro camaras colocadas en A, B , C y D bastan para vigilar esta galera.


(b) Region visible por la camara C .
1.2. ALGUNAS APLICACIONES DE LA GEOMETRA COMPUTACIONAL. 7

En una habitacion poligonal (galera de arte) en el plano se colocan cuatro camaras de


manera que se pueda vigilar con ellas toda la sala. Si se esta interesado en averiguar cual
es la region que es visible por una sola camara esto es equivalente a eliminar las porciones
del polgono que quedan ocultas. Uno de los algoritmos estandar usado para resolver este
problema de lneas ocultas en el plano es el debido a Freeman y Loutrel hace mas de diez
anos antes de lo que se atribuye como el nacimiento de la Geometra Computacional. Dicho
algoritmo corre en tiempo O(n2 ) donde n es el numero de lados del polgono. Utilizando
tecnicas desarrolladas para el diseno de algoritmos en Geometra Computacional, ElGindy
y Avis consiguieron un algoritmo para este problema que corre en tiempo (optimo) O(n),
cuando n es grande esto supone una mejora sustancial en la velocidad de ejecucion.

Fabricacion industrial

Veamos algunos ejemplos en este campo.

Modelado por inyeccion.


Una de las tecnicas utilizadas en la fabricacion industrial de objetos consiste en utilizar
moldes en los que se inyectan ciertos materiales lquidos que al solidicar dan lugar al objeto
requerido con la forma imprimida por el molde. Durante la inyeccion del lquido, el molde
es colocado en una posicion favorable de manera que no aparezcan defectos en la supercie
tales comos burbujas de aire y se garantice un llenado completo. Dos de los problemas
que surgen en este contexto son: dado un objeto tridimensional como molde , establecer si
existe una orientacion que permite el llenado del molde usando solo un punto de inyeccion
y determinar una orientacion que permita el llenado mas completo. Habitualmente en la
practica se sigue un proceso de prueba y error utilizando ciertas tecnicas intuitivas.

Punto de inyeccin

Gravedad

Modelado por inyeccion.

Para intentar evitar este tipo de proceso de prueba y error, se han estudiado los aspectos
geometricos y computacionales del modelado por inyeccion y se han disenado algoritmos
ecientes para resolver estos problemas cuando el molde es un polgono en el plano y para
cuando el molde es de cierta clase de poliedros en el espacio.

Estereolitografa.
Otra tecnica de fabricacion de objetos es la denominada estereolitografa. Consiste en
un tanque de plastico lquido fotosolidicable, una mesa controlada por ordenador cuyo
8 TEMA 1: INTRODUCCION A LA GEOMETRA COMPUTACIONAL

soporte puede ser movido hacia arriba y hacia abajo dentro del tanque, y un laser por
encima del tanque que puede iluminar la supercie del lquido y puede moverse en un
plano horizontal. El sistema funciona de la siguiente manera: al principio la mesa esta
justo bajo la supercie del plastico y el laser es controlado para moverse de manera que la
luz incida sobre la supercie del plastico y dibuje la seccion base del objeto a construir.
Cuando la luz del laser entra en contacto con el plastico, este solidica y as se forma la
primera seccion del objeto y queda sobre la mesa. En el siguiente paso, la mesa es bajada
una pequena cantidad y el laser dibuja la siguiente seccion del objeto. La luz del laser
penetra en el lquido lo justo para que esta seccion quede soldada a la obtenida en el paso
anterior. Este proceso es repetido hasta que el objeto quede formado completamente.
El problema que aqu aparece es el de decidir si el diseno de un objeto tridimensional
es o no factible para un sistema CAD/CAM desarrollado y patentado por 3D Systems of
Sylmar, CA que emplea este proceso de estereolitografa.
A este respecto, se ha obtenido una caracterizacion de los objetos poliedricos que pueden
ser construidos usando esta tecnica, y tambien se han disenado algoritmos ecientes para
determinar cuando un objeto poliedrico es factible o no.

Lser

L
A
T
S

Formacion de un objeto mediante tecnicas estereolitogracas.

Robotica

Una de las principales aplicaciones de Geometra Computacional tiene que ver con
problemas de robotica. Mencionemos aqu dos de ellos: la planicacion de movimientos y
el ensamblaje automatico.
En el primero, el problema tpico involucra un robot, generalmente modelizado como
un punto, un disco, o un polgono en dos dimensiones, o bien como un poliedro en tres
dimensiones que ha de moverse en el espacio entre una coleccion de obstaculos. Aqu,
1.2. ALGUNAS APLICACIONES DE LA GEOMETRA COMPUTACIONAL. 9

una de las preguntas usuales es puede moverse el robot desde un punto A a otro B sin
colisionar con los obstaculos? Si es as, se debera encontrar la trayectoria mas corta.

B B

A A
Localizacion de una trayectoria libre de colisiones.

El ensamblaje automatico es un caso especial de problema de planicacion de movimien-


tos en el que consideramos una coleccion de objetos y nos preguntamos si puede ser sepa-
rada en partes o unir en una conguracion determinada y si es as, que tipo de movimientos
(giros, traslaciones, etc.) garantizan esa respuesta. Una pregunta tpica es si una coleccion
de objetos pueden ser separados moviendo solo un objeto cada vez y solo una vez. Esto
siempre es cierto para objetos convexos en el plano (no lo es en el espacio) y la gura
muestra un ejemplo de conguracion de objetos que solo se puede separar moviendo si-
multaneamente dos de las tres piezas que la componen.

1.2.1 Fuentes bibliogracas


[AG] B. Asberg, G. Blanco, P. Bose, J. Garca Lopez, M. Overmars, G. Toussaint, G.
Wilfong, B. Zhu: Feasibility of Design in Stereolithography. LNSC 761.
[Bo] P. Bose: Geometric and Computational Aspects of Injection Molding. Pro. Third
International Conf. on CAD and Computer Graphics, Agosto 1993, Beijing, China,
pp. 237 - 242.
[Bo] P. Bose: Geometric and Computational Aspects of Manufacturing Process. Tesis
doctoral, T. R. no 95-02, School of Computer Science, McGill University, Montreal
(Canada).
[H] F. Hurtado: La Geometria Computacional una geometria del nostre temps. Informe
Tecnico del Dep. de Matematica Aplicada II, U.P.C.
[NH] J. Nievergelt, K. Hinrichs: Algorithms & Data Structures. Prentice Hall, 1993.
[PS] F. Preparata, I. Shamos: Computational Geometry. An Introduction. Springer Ver-
lag, 1985.
[To] G. Toussaint: Scanning the Issue. Proceedings of the IEE, vol. 80, no 9, Septiembre
1992.
10 TEMA 1: INTRODUCCION A LA GEOMETRA COMPUTACIONAL

1.3 Terminologa
A continuacion introduciremos algunos de los elementos basicos en Geometra Computa-
cional. Tal y como se ha visto en las secciones anteriores, el objetivo es resolver problemas
geometricos desde el punto de vista algortmico. Y por tanto, se esta especialmente intere-
sado en objetos geometricos susceptibles de tratamiento computacional, es decir aquellos
que admitan una descripcion nita.
Salvo raras excepciones nos limitaremos a la geometra del plano, aunque muchas de
las deniciones y resultados que veremos pueden extenderse de manera natural al espacio.
El elemento geometrico mas sencillo es el punto, que en el plano vendra dado por un
par ordenado de numeros reales, generalmente sus coordenadas cartesianas. La recta que
pasa por dos puntos, p, q, es el lugar geometrico de los puntos

x = p +
/
pq IR .

El rayo que emana de p y pasa por q es la semirrecta de puntos

x = p +
/
pq 0.

El segmento de extremos p y q es el conjunto

pq = {p +
/
pq 0 1} = {(1 )p + q / 0 1}.

q q q
p p p

Recta, rayo, segmento.

Un conjunto ordenado de n puntos distintos en el plano (v1 , v2 , . . . , vn ) determina una


(cadena) poligonal que es la union de los segmentos v1 v2 , v2 v3 , . . . , vn1 vn . A estos seg-
mentos se les llama lados y a sus extremos vertices de la poligonal. Lados adyacentes en
una poligonal son aquellos que son consecutivos en la lista ordenada de segmentos anterior.
Una poligonal simple es aquella en la que dos lados, si se cortan, lo hacen exactamente
en uno de sus extremos y ademas son adyacentes.

v6 v7 v12 v8
v2 v13 v9 v4
v3 v3
v11 v1 v7
v4
v5 v2
v1 v5 v10
v8 v6
(a) (b)

(a) Cadena poligonal (no simple). (b) Poligonal simple.


1.3. TERMINOLOGA 11

Una poligonal cerrada determinada por (v1 , v2 , . . . , vn ) es la union de segmentos


v1 v2 , v2 v3 , . . . , vn1 vn , vn v1 .
Una poligonal cerrada simple determina una curva de Jordan1 que divide al plano en
tres regiones: una interior a la curva, otra exterior, y la propia curva. Se llama polgono
al conjunto de puntos de la region interior junto con los puntos de la poligonal cerrada.
El interior del polgono P , Int(P ), es el conjunto de puntos de la region interior. La
frontera del polgono, F r(P ) o P , es el conjunto de puntos de la poligonal cerrada
simple. Y el exterior del polgono, Ext(P ), es el conjunto de puntos de la region exterior.

v11 v7 v6 Ext(P)
v10
v9
v8
v1 v2 Int(P)
v5
v3 Fr(P)
v4

Poligonal cerrada simple y division del plano que origina.

Un polgono queda perfectamente determinado por el conjunto de sus vertices ordena-


dos segun aparecen al recorrer su frontera, y una orientacion que nos permita conocer
donde queda su interior al recorrer su frontera. As, si recorremos la frontera en sentido
horario dejaremos el interior a nuestra derecha, en cambio si la recorremos en sentido an-
tihorario lo dejaremos a la izquierda. Caben pues dos orientaciones posibles para recorrer
la frontera: la negativa (horaria) y la positiva (antihoraria).

v11 v7 v6 v11 v7 v6
v10 v10
v9 v9
v8 v8
v1 v2 v1 v2
v5 v5
v3 v3
v4 v4
(a) (b)

(v1 , v2 , . . . , v11 ) describe a P con orientacion positiva (a), y (v1 , v11 , v10 , . . . , v2 ) lo hace con
orientacion negativa (b).

Salvo que se indique lo contrario, supondremos siempre que un polgono viene dado
por una lista cclica con sus vertices ordenados con orientacion positiva. Y la notaremos
simplemente (v1 , v2 , . . . , vn ), entendiendo que el siguiente a vn es v1 . La estructura de datos
mas adecuada para representarla es la lista circular doblemente enlazada.
1
Curva cerrada sin autointersecciones.
12 TEMA 1: INTRODUCCION A LA GEOMETRA COMPUTACIONAL

1.3.1 Familias notables de polgonos

En la practica se ha comprobado que determinados algoritmos que se ejecutan sobre


polgonos tienen un mejor rendimiento, en cuanto a velocidad, si el polgono de entrada
tiene ciertas buenas propiedades. Otras veces, los problemas reales involucran polgonos
con caractersticas especiales y resulta mas facil encontrar algoritmos que resuelvan esos
problemas para dichos polgonos que para polgonos generales.
A continuacion veremos algunos tipos especiales de polgonos.
Un polgono P es convexo si para todo x, y P el segmento xy P .

y y

x x

(a) (b)
(a) Polgono convexo. (b) Polgono no convexo: x e y no se ven.

Esta propiedad de contener al segmento que une dos puntos admite una interpretacion
curiosa en terminos de visibilidad: x, y P se ven interiormente si xy P , o lo que
es lo mismo, xy Ext(P ) = . Analogamente se dice que se ven exteriormente si
xy Int(P ) = .
Un polgono P es estrellado si existe un punto x P tal que para todo y P el
segmento xy P .
Es decir, existe un punto en P que ve interiormente a todo el polgono.

x x

x
(a) (b)

(a) Polgonos estrellados. (b) Polgonos no estrellados.

El nucleo de un polgono P , ker(P ), es el conjunto de puntos de P que ven interior-


mente a P .
De modo que, en terminos del nucleo,

P es convexo si, y solo si, ker(P ) = P , y

P es estrellado si, y solo si, ker(P ) = .


1.3. TERMINOLOGA 13

Estrellados y sus respectivos nucleos (mas sombreados).

Si uno de los vertices del polgono esta en el nucleo, entonces se dice que es un abanico.
Un polgono debilmente visible desde un lado es aquel en el que hay un lado l del
polgono tal que para cada punto y del polgono existe un punto x l que ve interiormente
a y.

l x x' x''

Todo punto de P se ve desde algun punto de l, en particular desde x, x o x .

En terminos de iluminacion se interpreta de la siguiente manera. Para iluminar el


interior de un polgono estrellado basta colocar una bombilla en un punto de su nucleo, y
para un debilmente visible desde un lado, bastara con colocar una barra uorescente a lo
largo del lado l.
Un polgono P debilmente visible desde el exterior, se abreviara DVE, es aquel
en el que para todo x F r(P ) existe un rayo r que emana de x tal que r Int(P ) = .
La interpretacion en terminos de visibilidad o vigilancia es la siguiente. Supongamos
que el polgono representa una fortaleza y un guardia patrulla a lo largo del muro exterior
(la frontera). Ser DVE signica que en cada posicion de su recorrido siempre hay una
direccion en la que se ve el horizonte.

(a) (b)

(a) Polgono DVE. (b) Polgono no DVE: desde x no se ve el horizonte en ninguna direccion.

En terminos de iluminacion, consideremos una circunferencia sucientemente grande


para que contenga totalmente al polgono. Para iluminar el muro exterior de la fortaleza (o
14 TEMA 1: INTRODUCCION A LA GEOMETRA COMPUTACIONAL

edicio de interes turstico) basta con colocar un uorescente circular sobre la circunferencia
anterior.
Un polgono P se dice que es monotono respecto de una direccion D si toda recta r
ortogonal a la recta D verica que

o bien
rP =
un intervalo cerrado en r (Obs.: un punto lo es).

D D

r4 r3 r2 r1

P monotono respecto a D.

D
r r'

P no monotono respecto a D. Tanto r como r interseca a P en mas de un intervalo.

Se dice que P es monotono, si lo es respecto de alguna direccion.


Tambien puede darse una denicion alternativa atendiendo solo a la frontera de P : un
polgono es monotono cuando su frontera se puede descomponer en dos cadenas monotonas
respecto a la misma direccion. Entendiendo por cadena poligonal monotona respecto a D
si cualquier recta ortogonal a D que interseca a la cadena lo hace en un punto o en un
lado.

D D

r4 r3 r2 r1 r

(a) (b)

(a) Cadena monotona respecto a D. (b) Cadena no monotona respecto a D.


1.3. TERMINOLOGA 15

1.3.2 Area signada de un triangulo


Consideremos tres puntos en el plano p1 = (x1 , y1 ), p2 = (x2 , y2 ), p3 = (x3 , y3 ). El area del
triangulo que determinan (vease la gura) viene dado por
1
Area = |p1 p2 | |p1 p3 | sen
2

p3 p1 p p1 p3 p3
2


k j p1 p2
p1
p2
i

Ahora bien, |p1 p2 | |p1 p3 | sen = 12 


p
1 p2 p1 p3 , es decir, es el modulo del producto


vectorial de
p
1 p2 y p1 p3 . Recordando que, si i , j , y k son los vectores de la base
canonica en el espacio entonces

 



    
i j k   x x y y   
  x2 x1 y2 y1 
p
p
pp = 

 2
x2 x1 y2 y1 0  =  x x y y
1 2 1
 k = 
  k
1 2 1 3
  3 1 3 1  x3 x1 y3 y1
 

x3 x1 y3 y1 0 

Y usando de nuevo las propiedades de los determinantes


   
  
1 0 0  1 1 1 
 x2 x1 y2 y1    
    
  = x1 x2 x1 x3 x1
  = x1 x2 x3 

 x3 x1 y3 y1  





y1 y2 y1 y 3 y 1 y1 y2 y 3 

Por tanto  
1 1 1  



p1 p2 p1 p3 = x1 x2 x3  k



y1 y 2 y 3 

Y el area del triangulo:


 
 1 1 1 
1 

Area = abs  x1 x2 x3 
2 
 y 1 y2 y3 

 
1 1 1  

 
Sin embargo, nos vamos a jar en el determinante x1 x2 x3 . Su signo es el del 

y1 y2 y 3  
vector
p
1 p2 p1 p3 y por tanto se rige por la conocida regla del sacacorchos. Aqu nos va
a servir para determinar la orientacion del triangulo p1 p2 p3 .
16 TEMA 1: INTRODUCCION A LA GEOMETRA COMPUTACIONAL

p1 p p1 p3 p2
2 p3

p1
k j p1 k j p3
p2
p1 p p1 p3
2
i i

Se dene el area signada del triangulo p1 p2 p3 como


 
1 1 1 
1 

(p1 , p2 , p3 ) = x1 x2 x3 

2  

y1 y 2 y3 

Segun lo visto anteriormente, (p1 , p2 , p3 ) > 0 signica que la lista (p1 , p2 , p3 ) describe
la frontera del triangulo con orientacion positiva y en cambio si (p1 , p2 , p3 ) < 0, lo hara
con orientacion negativa.

2.1 Aplicaciones del area signada

En realidad el calculo de areas signadas tiene tantas y tan variadas aplicaciones que casi
puede considerarse como una operacion primitiva en Geometra Computacional. Veamos
aqu las mas elementales y sobre las que se basaran todas las demas aplicaciones.

Localizacion de un punto respecto de una recta. Si consideramos la recta que


pasa por los puntos p1 y p2 y queremos saber donde se encuentra un tercer punto
q basta calcular el area signada (p1 , p2 , q). Si es positiva, q esta en el semiplano
izquierdo determinado por la recta orientada segun p
1 p2 . Si es negativa, esta en el
derecho, y si es cero esta en la recta.

q''
p2
p1 q'

(p1 , p2 , q) > 0, (p1 , p2 , q  ) < 0 y (p1 , p2 , q  ) = 0

Comparacion de un angulo con . Para comparar con un angulo dermi-


nado por dos segmentos, no es preciso calcular previamente dicho angulo, si no que
basta calcular un area signada. La siguiente gura muestra como reducir el pro-
blema al caso anterior. La ventaja de hacerlo as radica en que se sustituye el uso
de funciones trigonometricas que, ademas de ser mas complejas, generalmente dan
soluciones aproximadas, por el uso de operaciones elementales: sumas, productos,
divisiones y restas, que pueden realizarse de manera exacta.
1.3. TERMINOLOGA 17

p3



p2
p1

Clasicar vertices en un polgono. Un vertice de un polgono se dice que es


convexo cuando el angulo interior que determinan los dos lados concurrentes en el
es menor o igual que , y un vertice concavo es aquel que no es convexo.

v7 v5 v4
v8
v3
v9 v6
v10
v1 v2

Los vertices solidos son convexos, los huecos concavos.

Si el polgono P viene determinado por la lista de sus vertices (v1 , . . . , vn ) con


orientacion positiva, el signo de (vi1 , vi , vi+1 ) determina que tipo de vertice es
vi . Si es mayor o igual a cero es convexo y si es menor que cero concavo. Si la
orientacion de P fuese negativa las desigualdades simplemente se invertiran.

1.3.3 Lecturas complementarias


Captulos 1,2,3 y 4 del libro Introduction to Algorithms de T. H. CORMEN, C. E.
LEISERSON, y R. L. RIVEST.

Captulo 1 del libro Computational Geometry. Algorithms and Applications de M.


BERG, M. KREVELD, M. OVERMARS, y O. SCHWARZKOPF.
Tema 2

Cierre convexo

2.1 Introduccion

Quiza uno de los ejemplos mas reveladores de la utilidad de la estructura geometrica que
se introduce en este tema es el siguiente. Supongamos que tenemos n puntos en el plano
dados por sus coordenadas y queremos encontrar la mayor distancia determinada por dos
de ellos.

(a) Puntos que dan la maxima distancia. (b) Envolvente convexa.

Desde luego, hay una solucion inmediata que se deriva de la nitud del conjunto: para
cada dos puntos se halla la distancia que determinan y de todos los valores obtenidos nos
quedamos con el mayor.
  El coste operativo de esta solucion sera O(n2 ) ya que el numero de
n n(n1)
posibles pares es 2 = 2 . Aparte del alto coste, que como veremos es sustancialmente
mejorable, hay una objecion de fondo que puede hacerse a este algoritmo y es que no utiliza
la geometra del problema: lo mismo podra aplicarse a cacular el maximo valor de los
elementos de una matriz n n. Y sin embargo, pueden explotarse propiedades geometricas
como que la mayor distancia no se puede dar entre puntos cualesquiera sino entre puntos
exteriores de la nube, o de manera mas precisa: entre vertices de la envolvente convexa.
Este objeto geometrico admite una denicion intuitiva muy facil de entender: supon-
gamos que tenemos en cada uno de los puntos del conjunto un clavo y los rodeamos con
una goma elastica que al soltar se cine a los clavos. Ese resultado nal es la envolvente
convexa de la nube de puntos. Y utilizando esto, tal y como veremos en el tema 4, puede
encontrarse un algoritmo optimo que resuelve nuestro problema en tiempo O(n log n). Es
decir que sobre una nube de mil puntos el primer algoritmo requerira un numero de
operaciones del orden de un millon mientras que con el segundo sera del orden de unos
miles. Una rebaja bastante drastica que se acentua mas cuantos mas puntos haya en la
nube.

19
20 TEMA 2: CIERRE CONVEXO

2.2 Cierre convexo


Denicion 2.2.1 Un conjunto de puntos A en el espacio afn IRd se dice que es convexo
si para todo x, y A, el segmento xy A.

Ejemplos 2.2.1

1. En el plano son convexos:


(a) Un punto, una recta, una semirrecta, un segmento, un semiplano, el plano.
(b) Tambien un crculo, un polgono convexo, la region superior delimitada por el
grafo de una funcion convexa, por ejemplo f (x) = x2 (una parabola), etc.

(a) Convexos en el plano. (b) No convexos.

2. No lo son en cambio: una circunferencia, un par de puntos, etc.


3. En el espacio tridimensional son convexos: los planos, los semiespacios, los poliedros
convexos, las bolas (esferas macizas), la region superior delimitada por el grafo de
una funcion convexa, por ejemplo f (x, y) = x2 + y 2 (un paraboloide de revolucion),
etc.

(a) Convexos en el espacio. (b) No convexos.

Proposicion 2.2.2 Si A y B son convexos entonces A B es convexo. Y en general la


interseccion de una familia (nita o no) de convexos es un convexo.

Dem: Sean x, y AB. El segmento xy esta contenido en A porque en particular x, y A


y porque A es convexo. Por el mismo razonamiento xy B, luego xy A B.
QED
2.2. CIERRE CONVEXO 21

Denicion 2.2.3 El cierre convexo de un conjunto S es el menor convexo que contiene


a S. Lo notaremos CH(S) (del ingles convex hull).

La existencia del cierre convexo de cualquier conjunto S IRd viene garantizada por
la siguiente proposicion.

Proposicion 2.2.4 CH(S) = C, donde C = {C convexo /S C}.
CC

Dem: En primer lugar hay que observar queC = ya que IRd C (es un convexo que
contiene a S). Por la proposicion anterior, C es un conjunto convexo, por su propia
CC
denicion
 contiene a S, y ademas cualquier convexo D que contenga a S obviamente
C D porque D C. Luego es el menor convexo que contiene a S.
CC

QED
Estamos especialmente interesados en estudiar que ocurre cuando el conjunto S esta
formado por un numero nito de puntos en el plano.

Denicion 2.2.5 Dado un conjunto S en el plano y un punto p S, se dice que una recta
que pasa por p es soporte de S si todos los puntos de S quedan en uno de los semiplanos
cerrados1 que dicha recta determina.

r
2
S
r
3

r
1

Las rectas r1 y r2 son soporte de S pero r3 no.

Proposicion 2.2.6 Si P es un polgono convexo cuyos vertices son puntos de S, entonces


P CH(S).

Dem: Sean q1 , q2 , . . . , qm los vertices de P . Como, para todo i, qi S CH(S) y CH(S)


convexo, todos los lados de P estan contenidos en CH(S), es decir, P CH(S). Para
comprobar nalmente que todo punto y P esta en CH(S), consideramos el segmento
q1 x, con x P , que contiene a y (ver la siguiente gura). Como los extremos estan en
CH(S) y este es convexo, q1 x CH(S) y en particular y CH(S).
QED
1
El semiplano junto con la recta.
22 TEMA 2: CIERRE CONVEXO

q q
5 4

P x
q y
6 q
3

q q
1
2

Ilustracion de la prueba.

Proposicion 2.2.7 Si S es un conjunto de n de puntos entonces CH(S) es el polgono


convexo que contiene a S y cuyos vertices son puntos de S. Este podra degenerar en un
solo punto, si n = 1, o en un segmento, si todos estan alineados.

Dem: Si P es un polgono convexo cuyos vertices son puntos de S y que contiene a S,


entonces:

CH(S) P , porque P es un convexo que contiene a S, y

P CH(S), porque P esta en las condiciones de la proposicion anterior.

Luego P = CH(S).
QED
En la practica, un polgono convexo viene determinado por su frontera. En el caso del
cierre convexo de S, a su frontera se denomina envolvente convexa. Si bien, abusando
de notacion, tambien la notaremos CH(S).
A continuacion veremos una serie de caracterizaciones de un polgono convexo en
terminos de lo que le ocurre a su frontera.

Teorema 2.2.8 (Caracterizaciones) Sea P un polgono que supondremos descrito me-


diante su frontera orientada positivamente.

1. P es convexo toda recta que pase por dos vertices consecutivos deja a P en el
semiplano de la izquierda (con la orientacion inducida en la recta por P ).

2. P es convexo toda recta que pase por dos vertices consecutivos deja al siguiente
vertice de P en el semiplano de la izquierda.

3. P es convexo todo angulo interior en cada vertice de P es menor o igual que .

4. P es convexo todo vertice admite una recta soporte de P que pasa por el.
2.3. ALGORITMOS PARA CALCULAR ENVOLVENTES CONVEXAS 23

v6 v5 v6 v5

v4
v1 v1

v3 v3
v2 v2 v4

v6 v5 v6 v5
< >
> v4
v1 < v1
> <
< v3 v3
v2 v2 v4

v6 v5 v6 v5

v4
v1 v1

v3 v3
v2 v2 v4

Ilustracion del teorema.

Todo este estudio nos servira para disenar algoritmos que hallen la envolvente convexa
de un conjunto.

2.3 Algoritmos para calcular envolventes convexas


Comenzamos con un algoritmo que viene sugerido por el hecho de que los lados de la
envolvente convexa son segmentos de rectas soporte de S. Consiste pues en lo siguiente:
Para cada par de puntos de S, se comprueba si todos los demas estan en un mismo
semiplano de los dos que determina la recta que pasa por ellos. Si es as, determinan un
lado de la envolvente y sino no. Examinando exhaustivamente todos los pares obtenemos
todos los lados de la envolvente. Sin embargo, el conjunto de lados en s mismo no describe
la envolvente, sino que habra que ordenarlos para que aparecieran tal y como lo hacen al
recorrer la frontera. Esto se puede hacer facilmente teniendo en cuenta que un polgono
24 TEMA 2: CIERRE CONVEXO

convexo es, en particular, un abanico desde cualquiera de sus vertices y por tanto todos
los demas aparecen en la frontera ordenados angularmente respecto
 a el. En denitiva el
n
coste total sera: O(n) para cada par de puntos, como hay 2 pares, encontrar el conjunto
de vertices costara O(n3 ). Despues ordenarlos sera en el peor de los casos O(n log n).
Por tanto, este algoritmo, que podramos llamar de fuerza bruta, halla la envolvente en
tiempo O(n3 ).

A continuacion veremos otros algoritmos mas renados. Conviene advertir que todos
ellos estan descritos suponiendo que en S no hay tres puntos alineados. Esto sera sim-
plemente una restriccion inicial que evitara que los detalles acerca de como resolver esos
casos oscurezcan las ideas principales de los algoritmos. Despues se indicara como tratar
esas situaciones alla donde afecten.

2.3.1 Marcha de Jarvis

El siguiente algoritmo tambien esta basado en localizacion de puntos de S que admiten


rectas soporte del conjunto. La diferencia esencial es que la busqueda esta mejor organi-
zada. Ahora, en cada paso, partiendo de un vertice conocido de la envolvente se busca
otro vertice que con el determine una recta soporte de S.

Marcha de Jarvis: (Descripcion geometrica del algoritmo)

Paso 0 : Encontrar un vertice de la envolvente convexa. Lo llamaremos v1 y a la recta


soporte que pasa por el, r1 . Basta tomar el punto de S con abscisa mnima, la
recta vertical que pasa por el es soporte de S.

Paso 1 : Girar, en torno a v1 , la recta r1 en sentido positivo hasta que toque el primer punto
de S que encuentre en su recorrido: sera el siguiente vertice de la envolvente que
llamaremos v2 . A la recta que pasa por v1 y v2 la llamaremos r2 .

En general, y hasta que volvamos a encontrarnos con v1 :

Paso i : Girar, en torno a vi , la recta ri en sentido positivo hasta que toque el primer
punto de S que encuentre en su recorrido. Llamemos vi+1 a ese punto, y ri+1 a la
recta que pasa por vi y vi+1 .

Final: Devolver la lista cclica con los puntos as obtenidos, C = (v1 , v2 , . . . , vk ). Es la


envolvente convexa con orientacion positiva.
2.3. ALGORITMOS PARA CALCULAR ENVOLVENTES CONVEXAS 25

v1 v1

v2

v1 v1

v2 v2 v4
v3 v3

v7 v6

v1
v5

v2 v4
v3

Interpretacion geometrica de la marcha de Jarvis.

La correccion del algoritmo se deriva de los siguientes hechos:

En cada paso i, (1 i k), se mantiene como invariante que el vertice vi es un


vertice de la envolvente convexa y que la recta ri es soporte de S.

Por tanto, la lista cclica resultante C = (v1 , . . . , vk ) satisface que la recta (orientada)
que pasa por dos vertices consecutivos vi vi+1 , que no es otra que ri+1 , deja a S a su
izquierda. En consecuencia, C es la frontera de un polgono convexo con vertices en
S y que contiene a S, luego C = CH(S).

Para analizar mejor la complejidad vamos a considerar una descripcion mas detallada
del algoritmo.

Marcha de Jarvis: (De nuevo)

Entrada: Lista con los puntos de S: S = (p1 , . . . , pn ).

Salida: Lista cclica con los vertices de la envolvente convexa de S: C = (v1 , . . . , vk ).


26 TEMA 2: CIERRE CONVEXO

Paso 0 : Encontrar el punto de S con abscisa mnima, si hubiera mas de uno, el de


menor ordenada: sera v1 que insertaremos en C inicialmente vaca.
Paso i : Localizar en S el punto de menor angulo positivo respecto a vi y el rayo que
emana de vi con la direccion
v
i1 vi , si i = 1, y si i = 1, el rayo vertical que
emana de v1 en la direccionde . Ese punto sera vi+1 que si vi+1 = v1 ,
insertaremos en C y continuamos, y en caso contrario hemos acabado.

Estudio de la complejidad:

Localizar el mnimo entre n valores puede hacerse en tiempo O(n).


Para cada i, localizar el menor angularmente entre un total de n 1 valores, tambien
puede hacerse en tiempo O(n).

Por tanto el tiempo total requerido es O(n k) donde k es el numero de vertices en la


envolvente convexa, que en el peor de los casos es n y por tanto la complejidad del algoritmo
en el peor de los casos es O(n2 ).
Sin embargo, si el numero de vertices en la envolvente es relativamente pequeno respecto
de n, el algoritmo es realmente interesante. Tiene ademas otro interes teorico anadido y
es que, para disenar un buen algoritmo que calcule envolventes convexas de puntos en el
espacio, pueden extenderse las mismas ideas utilizadas en la marcha de Jarvis, en cambio,
esto no puede hacerse con otros de los algoritmos que veremos a continuacion, aunque sean
mas ecientes que la marcha de Jarvis.
En cuanto a la complejidad en espacio, claramente es O(n).
Por ultimo, cabe observar un par de detalles en cuanto al paso iesimo del algoritmo:

1. Para encontrar el mnimo angular no es preciso hallar ningun angulo: el calculo


puede hacerse usando solo areas signadas. En efecto, como la recta ri es soporte en
vi , todos los puntos de S quedan a la izquierda, y por tanto el angulo que forma cada
punto esta en el rango (0, ]. Por tanto para comparar dos angulos, los determinados
por pj y pk respectivamente (vease la gura), basta calcular un area signada pues

(
v
i pk , ri ) < (vi pj , ri ) (vi , pk , pj ) > 0

pj
pk

vi ri

Comparacion de angulos con areas signadas.

2. La otra cuestion es que pasa si en el paso iesimo, cuando buscamos el siguiente


vertice de la envolvente convexa vi+1 , hay varios puntos (alineados) que dan el menor
orden angular. Pues simplemente, de todos ellos nos quedamos con el que este mas
alejado de vi .
2.3. ALGORITMOS PARA CALCULAR ENVOLVENTES CONVEXAS 27

2.3.2 Scan de Graham

El siguiente algoritmo, as como todas sus variantes, esta basado fundamentalmente en dos
ideas acerca de un polgono convexo.
La primera tiene que ver con la secuencia de los vertices que describen su frontera. Las
condiciones para que un polgono sea convexo son tan fuertes que supone que esa secuencia
tenga propiedades muy especiales. Por ejemplo, un polgono convexo en particular es un
polgono estrellado y por tanto respecto a un punto del nucleo (que puede ser cualquiera
del polgono) los vertices aparecen ordenados angularmente en la secuencia. O tambien
como el polgono es monotono respecto de cualquier direccion, en particular respecto del
eje OX, su frontera puede descomponerse en dos cadenas monotonas respecto de OX y en
cada una de ellas, los vertices estan ordenados por abscisas.
La segunda idea simplemente es que todos los vertices de un convexo son convexos.
As, en los siguientes algoritmos se pueden apreciar dos pasos:

1. Ordenacion. Consiste en ordenar los puntos de S de modo que se obtenga una lista
cclica L con todos los puntos de S de manera que describe un polgono especial:
estrellado o monotono.

2. Scan. Consiste en comprobar que en L cada punto forme con sus dos adyacentes en
L un angulo menor que . Si alguno no lo cumple se elimina y as se va depurando
L hasta que la lista resultante satisfaga esa condicion.

Algoritmo de Graham:

Entrada: Lista con los puntos (en posicion general) de S: S = (p1 , . . . , pn ).

Salida: Lista cclica doblemente enlazada con los vertices de la envolvente convexa
de S: C = (v1 , . . . , vk ).
Paso 1: Encontrar el punto de S con abscisa mnima, si hubiera mas de uno, el de
menor ordenada: sera v1 que insertaremos en C inicialmente vaca.
Paso 2: Ordenar angularmente el resto de puntos de S respecto a v1 y en sentido
positivo respecto al rayo vertical que emana de el en direccion a . Sea
L = (v1 , v2 , . . . , vn ) el resultado.
Paso 3: Insertar en C, originalmente vaca, v1 y v2 . Hacer q = v2 .
Paso 4: (Scan) Desde i = 3 hasta n, hacer
1. p = ant(q) (anterior en C).
2. Mientras (p, q, vi ) 0,
(a) Borrar q de C.
(b) Actualizar q = p y p = ant(q).
3. Insertar vi en C y actualizar q = vi .
28 TEMA 2: CIERRE CONVEXO

v11
v11
v9
v9
v10
v8 v10
v7 v8 v7
v1
v1
v6
v6
v5 < ?
v3 v5
v3
v2 v4 v2 v4

v11 v11 v11


v9 v9 v9
v10 v10 v10
v8 v7 v8 v7 v8 v7
v1 v1 v1
v6 v6 v6
< ? < ? < ?
v5 v3 v5 v3 v5
v3
v2 v4 v2 v4 v2 v4

v11 v11 v11


v9 v9 v9
v10 v10 v10
v8 v7 v8 v7 v8 v7
v6 v6 v1 v6
v1
< ?
v1 < ? > >
v5
< ? v5
v3 v5 v3 v3 >
v2 v4 v2 v4 v2 v4
v11 v11 v11
v9 v9 v9
v10
v10 v10
v8 v7 v8 >
v7 v7
v1 v6 v1 v6 v1 < ? v8 v6
< ? < ?
v5 v5
v3 v5 v3
v3
v2 v4 v2 v4 v2 v4

v11 v11 v11


v9 v9 v9
v10 v10 < ? v10
< ?
v8 v7 v8 v7 v8 v7
v1 v6 v1 v6 v1 v6

v5 v5 v5
v3 v3 v3
v2 v4 v2 v4 v2 v4

Ilustracion del algoritmo de Graham.


2.3. ALGORITMOS PARA CALCULAR ENVOLVENTES CONVEXAS 29

Nota: Conviene observar que con la ordenacion angular respecto de v1 , tanto v2 como vn
son vertices de la envolvente. Esto se ha tenido en cuenta en esta descripcion del algoritmo,
concretamente para que la funcion ant(q) en C este siempre bien denida y para ahorrarnos
la comprobacion de que el angulo formado en vn con su anterior en C y con v1 es menor
que . La ventaja que esto supone solo es de limpieza de codigo.

Correccion del algoritmo: Veamos que:

- Los puntos que elimina el algoritmo no son vertices del cierre convexo. En efecto,
como los puntos estan ordenados angularmente respecto a v1 , cuando se elimina vi
es porque el area signada (vj , vi , vk ) 0, donde vj y vk son respectivamente puntos
menor y mayor angularmente que vi respecto a v1 . Eso signica que vi esta en el
triangulo que determinan v1 , vj , vk y por tanto no es vertice del cierre convexo de S.

vk
v1
vi

vj

vi no esta en la envolvente.

- Al nalizar el algoritmo, C contiene los vertices de la envolvente convexa de S, orde-


nados con orientacion positiva. En primer lugar, observemos que C es un subconjunto
ordenado de la lista de puntos ordenados angularmente respecto a v1 (con orientacion
positiva), por lo tanto, C describe la frontera de un polgono (estrellado desde v1 )
con orientacion positiva y cuyos vertices son puntos de S. Por otro lado, el bucle
principal se ocupaba de mantener invariante la siguiente propiedad: cualesquiera tres
puntos consecutivos en C: qj1 , qj , qj+1 , satisfacen que (qj1 , qj , qj+1 ) > 0 es decir
que qj es un vertice convexo. Luego C es un polgono con todos sus vertices convexos,
y por tanto, C es convexo. Para concluir que C = CH(S) solo queda justicar que
S C. Supongamos que al nal del algoritmo se han eliminado m puntos de L,
(m 0). Fijemonos en el estado de la lista cada vez que se elimina uno de ellos.
Es decir, partimos de la lista L0 = L y consideramos, cada vez que se produzca una
eliminacion en el algoritmo de un punto v, la lista Li = Li1 v. Cada una de
estas listas, L0 , L1 , . . . , Lm1 = C, describe la frontera de un polgono estrellado (los
vertices se mantienen ordenados angularmente respecto a v1 ). Ademas, al pasar de
una lista a otra borrando un vertice, tal y como muestra la gura anterior, da lugar
a otro estrellado mayor, es decir que, vistas como polgonos, Li1 Li , para todo
1 i m 1. Por tanto se verica que: S L0 L1 . . . Lm1 = C. Y como
C es convexo, contiene a S y sus vertices son puntos de S, es CH(S).

Analisis de la complejidad: El paso 1 cuesta O(n) y el 2, O(n log n). En cuanto al


scan, podemos analizarlo de la siguiente manera: partiendo de la lista (v1 , v2 , v3 , . . . , vn ), a
cada vertice vi , (i > 1), se le aplica un test de area signada con sus vecinos para averiguar
30 TEMA 2: CIERRE CONVEXO

si los tres forman en vi un angulo menor que . Luego, por lo pronto, tenemos n 1
calculos de areas signadas. Sin embargo, puede que sobre el mismo vertice vi , tengamos
que aplicar de nuevo el mismo test porque sus vecinos han cambiado. Esto sucede cada
vez que se borra un vertice de la lista porque el test de area signada aplicado sobre el
salio negativo y aparecen ahora consecutivos en la lista puntos que antes no lo eran. En
denitiva, se revisita un vertice para aplicarle de nuevo el test si, y solo si, previamente ha
sido borrado otro, y por tanto, globalmente, el numero total de revisitaciones de vertices
esta acotado superiormente por el numero de vertices que se han borrado. Como mucho
se pueden borrar n 3, luego el numero maximo de test de areas signadas que se aplica
a lo largo del algoritmo es 2n 4. Por tanto el coste total de las operaciones aritmeticas
es O(n). Las otras operaciones sobre estructuras de datos pueden realizarse cada una en
tiempo constante, por ejemplo si se utiliza una pila para representar C, ademas, cada vez
que se trata un punto vi se realiza un numero constante de operaciones. El numero total de
veces que se tratan vertices es O(n), luego el coste total del scan es O(n) y el del algoritmo
es O(n log n).
En cuanto al espacio requerido es O(n).
Nota: Veamos por ultimo como modicar el algoritmo para que funcione incluso aunque
en S haya mas de dos puntos alineados. Basta con que en el paso de ordenacion angular,
cuando hay varios puntos con el mismo angulo, podemos olvidarnos de todos los inter-
medios y quedarnos solo con el mas alejado a v1 , porque seguro que no son vertices de
la envolvente. De las demas alineaciones que pueden presentarse, aquellas en las que no
interviene v1 , se ocupa el algoritmo tal y como esta tratandolas correctamente.
La ordenacion angular no es estrictamente necesaria. A continuacion veremos un par
de variantes del algoritmo de Graham que utilizan otro tipo de ordenacion mas sencillo.

Variante del algoritmo de Graham:

Entrada: Lista con los puntos de S: S = (p1 , . . . , pn ).

Salida: Lista cclica doblemente enlazada C con los vertices de la envolvente convexa
de S orientada positivamente.

Paso 1: Ordenar lexicogracamente los puntos de S obteniendo la lista L.


Paso 2: Aplicar el scan a L y obtener C1 , que es cadena inferior de la envolvente
convexa.
Paso 3: Invertir el orden en L obteniendo L y aplicar de nuevo el scan ahora a L
y obtener C2 , que es cadena superior de la envolvente convexa.
Paso 4: Concatenar C1 y C2 adecuadamente (eliminando las repeticiones de los ex-
tremos) para obtener la lista C con los vertices de CH(S).
2.3. ALGORITMOS PARA CALCULAR ENVOLVENTES CONVEXAS 31

v5 v5
v7 v7
v4 v4
v1 v6 v9 v1 v6 v9
v11 v2 v11
v2 v10
v10
C1
v3 v8 v3 v8

v5 v5
v7 C v7
v4 C2 v4
v1 v6 v9 v1 v6 v9
v2 v11 v2 v11
v10 v10

v3 v8 v3 v8

Ilustracion del algoritmo: resultado de cada paso.

Otra variante mas debida a Akl-Toussaint. Basicamente es lo mismo pero, antes de


ordenar, localiza los puntos extremales: los de abscisa mnima y maxima, y los de ordenada
mnima y maxima. Estos puntos determinan un convexo contenido en el cierre que, en
principio, sera un cuadrilatero aunque dependiendo cuantos puntos extremales tenga S
podra ser desde un segmento hasta un octogono (vease la gura).

D
A

A
C C

B B

G F
A

H E
D
A

B
B C

Depuracion de puntos en el algoritmo de Akl-Toussaint.


32 TEMA 2: CIERRE CONVEXO

Lo primero que hace es eliminar los puntos de S que estan en el interior de ese convexo:
seguro que estos no determinan la envolvente convexa. Con los que quedan, se continua
con los pasos del algoritmo anterior.
Por ejemplo, si nos centramos con el caso del cuadrilatero de la gura, hallaramos

cuatro listas: L1 con los puntos de S que esten a la derecha de AB, es decir los p S tales
que (A, B, p) 0; L2 con los p S tales que (B, C, p) 0; L3 con los p S tales que
(C, D, p) 0 y L4 con los p S tales que (D, A, p) 0. A continuacion, los puntos
de cada lista se ordenan lexicogracamente (x < y) en orden creciente los de L1 y L2 y en
orden decreciente L3 y L3 . Sobre cada lista ordenada se aplica el scan y se obtienen cuatro
subcadenas de la envolvente convexa que concatenandolas adecuadamente dan CH(S).
La complejidad en el peor de los casos de este algoritmo sigue siendo O(n log n) pues,
hallar los puntos extremales cuesta O(n) y para cada punto de S averiguar si esta en
un cuadrilatero convexo puede hacerse en tiempo constante (son cuatro areas signadas).
De modo que el paso adicional dado en este algoritmo es O(n) y por tanto no supone,
asintoticamente, ningun coste adicional. El coste total del algoritmo se reducira consi-
derablemente si fruto de esa operacion inicial eliminamos gran parte de los puntos. Sera
el caso cuando los puntos estuvieran uniformente distribuidos en el plano, por ejemplo.
Sin embargo, tambien puede ocurrir que no se elimine ninguno y estamos igual que en el
algoritmo anterior. El interes de este algoritmo esta en que en media es bastante eciente.

2.4 Complejidad de un problema


En la seccion anterior hemos visto varios algoritmos que resuelven el problema de dados
n puntos en el plano encontrar su envolvente convexa. Se ha ido reduciendo la comple-
jidad hasta O(n log n) y la pregunta natural es: cabe esperar que haya algoritmos mas
ecientes?, es posible reducir mas la complejidad a fuerza de ingenio o, por el contrario,
es inutil seguir buscando en esa direccion porque la propia naturaleza del problema y el
modelo de computacion impide que existan algoritmos mas ecientes?

Denicion 2.4.1 Sea P un problema acerca de un conjunto de datos de tamano n.

Se dice que la funcion f (n) es una cota superior de P, si existe un algoritmo A


que resuelve P y tiene complejidad TA (n) = O(f (n)).

Y se dice que f (n) es una cota inferior de P, si todo algoritmo A que resuelva P
tiene complejidad TA (n) = (f (n)).

Se dice que la complejidad de P es (f (n)) si f (n) es una cota superior e inferior


del problema. Si un algoritmo A que resuelve P tiene complejidad TA (n) = O(f (n)),
se dice que es optimo.

Por ejemplo, el problema de ordenar n numeros reales tiene complejidad (n log n), y
el algoritmo divide y venceras que lo resuelve es optimo.
2.4. COMPLEJIDAD DE UN PROBLEMA 33

El encontrar cotas inferiores a un problema suele ser una cuestion delicada y frecuente-
mente se utiliza la siguiente estrategia:
Supongamos que tenemos dos problemas P1 y P2 (ambos sobre n datos de entrada),
de manera que de uno de ellos, P1 , conocemos una cota inferior f (n) y ademas sabemos
reducirlo al problema P2 en tiempo g(n), con g(n)  f (n) 2 . Esto quiere decir que
somos capaces de transformar en tiempo g(n) la entrada del problema P1 en la entrada
del problema P2 y, tambien, la solucion de P2 en una solucion para P1 . Esta situacion se
nota as
P1 g(n) P2
De modo que si consideramos cualquier algoritmo A que resuelva P2 , podemos construir un
algoritmo B que resuelva P1 , primero realizando la transformacion citada y luego utilizando
A para resolver P2 . El coste de este algoritmo sera TB (n) = g(n) + TA (n).
Como conocemos una cota inferior de P1 , sabemos que, necesariamente, TB (n) =
(f (n)). Es decir, existe C > 0 tal que TB (n) = g(n) + TA (n) C f (n). Como
g(n)  f (n)), entonces TA (n) = (f (n)). Y por tanto f (n) tambien es una cota inferior
de P2 .
Veamoslo aplicado al problema concreto que nos ocupa.

Teorema 2.4.2 El problema de encontrar la envolvente convexa de n puntos en el plano


se reduce en tiempo lineal al problema de ordenar n numeros reales. Es decir,

Ordenar n Envolvente convexa

Dem:
Sea A un algoritmo que, dado un conjunto S de n puntos en el plano, calcula su
envolvente convexa. A partir de el construimos un algoritmo B que ordene un conjunto de
n numeros reales, de la siguiente manera.

Entrada: El conjunto N = {x1 , . . . , xn } de numeros reales.

Salida: Lista con los numeros ordenados: (x(1) , . . . , x(n) ) de menor a mayor3 .
Paso 1: Considerar los puntos del plano pi = (xi , x2i ) para todo i = 1..n. Son puntos
que estan en la parabola y = x2 y como esta curva es la frontera de un
conjunto convexo, en la envolvente convexa de S = {p1 , . . . , pn } aparecen
todos como vertices. Ver gura.
Paso 2: Aplicar el algoritmo B para hallar CH(S). Este devolvera la lista cclica con
los vertices de la envolvente con orientacion positiva: L = (p(1) , . . . , p(n) ).
Paso 3: Localizar en L el punto de menor abscisa y rotar los elementos en L hasta
que aparezca como primer elemento. Supongamos que de entrada es p(1) .
Paso 4: Proyectar los puntos de L, en ese orden, sobre el eje OX: (x(1) , . . . , x(n) )
es la lista ordenada buscada.
2
El smbolo  se lee mucho menor y signica que lim fg(n)
(n) = 0.
3
representa una permutacion de los ndices. En el ejemplo de la gura: (1) = 5, (2) = 2, (3) = 6,
(4) = 1, (5) = 3, (6) = 4.
34 TEMA 2: CIERRE CONVEXO
y=x 2

p
4

p5

p
3
p
2
p
p 1
6

x5 x2 x6 x1 x3 x4

Transformacion del problema.

El tiempo de ejecucion de A sera: (n) para el paso 1 mas el tiempo de ejecucion de


B, TB (n), mas (n) que se tarda en encontrar el mnimo y la rotacion de L as como la
proyeccion, hace un total de: TA (n) = (n) + TB (n).
Como la complejidad del problema de ordenacion es (n log n), TA (n) = (n log n).
Ademas, como n  n log n, necesariamente TB (n) = (n log n).
QED

Corolario 2.4.3 La complejidad del problema de calcular la envolvente convexa de n pun-


tos en el plano es (n log n).

En consecuencia todos los algoritmos que la calculen en tiempo O(n log n), (Graham,
Akl-Toussaint, etc.), son optimos.

2.5 Lecturas complementarias recomendadas


Captulo 35, seccion 35.3, del libro Introduction to Algorithms de T. H. CORMEN,
C. E. LEISERSON, y R. L. RIVEST.

Captulo 3 del libro Computational Geometry in C de J. OROURKE.

Captulo 1 del libro Computational Geometry. Algorithms and Applications de M.


BERG, M. KREVELD, M. OVERMARS, y O. SCHWARZKOPF.

Algunos apartados del captulo 3 del libro Computational Geometry. An Introduc-


tion de F. PREPARATA, M. I. SHAMOS.
Tema 3

Cierre convexo de un polgono

3.1 Introduccion
En este tema abordaremos el calculo eciente de la envolvente convexa de un polgono
simple. Tal y como cabe suponer, el cierre convexo de un polgono coincide con el de sus
vertices, por lo que resulta inmediato reducirlo al problema del tema anterior, pagando
por su calculo, eso s, un tiempo O(n log n) si el polgono tiene n vertices.

Envolvente convexa del polgono P.

La cuestion fundamental que motiva el estudio de este problema es ver si se puede usar
la estructura que presentan ahora los datos para mejorar los algoritmos. El hecho de que
el conjunto de puntos vengan dados de modo que denen la frontera de un polgono simple
va a permitir reducir la complejidad de O(n log n) a O(n).

3.2 Cierre convexo de un polgono


Proposicion 3.2.1 Si P es un polgono y S es el conjunto de sus vertices, entonces

CH(P ) = CH(S).

Dem: Probemos cada una de las siguientes inclusiones:


CH(S) CH(P ) Se tiene que S P CH(P ) y como CH(P ) es un conjunto
convexo y ademas contiene a S, entonces CH(S) CH(P ).
CH(P ) CH(S) CH(S) es un conjunto convexo por tanto contiene a todo segmento
determinado por dos puntos de el. En particular a todos los lados
de P . Luego P CH(S). Y si un polgono contiene a la frontera
de otro, lo contiene totalmente, luego P CH(S). Por ultimo,
como CH(S) es un convexo que contiene a P , necesariamente
debe contener a CH(P ). QED

35
36 TEMA 3: CIERRE CONVEXO DE UN POLGONO

Este resultado conduce a un algoritmo trivial que consiste en quedarnos con el conjunto
de vertices y hallar su cierre convexo como en el tema anterior. Pero la idea es intentar
aprovechar el que la entrada no es una nube de puntos arbitraria sino la lista de vertices
de un polgono, para poder rebajar la cota superior del problema de O(n log n) a O(n). Y,
en efecto, esto se puede hacer.
Una primera aproximacion es revisar atentamente el algoritmo de Graham que calcula
el cierre convexo de una nube de puntos S. Consta de dos pasos, la ordenacion de los
puntos, y el scan. El proceso de ordenacion angular puede entenderse como la obtencion
de una poligonizacion estrellada de la nube de puntos.
El segundo paso, el scan, actua sobre la lista ordenada de puntos, es decir sobre el
polgono construdo, comprobando que, en cada vertice, el angulo interior es menor que
y en caso contrario toma las medidas oportunas de modo que, al nal, en la lista resultante
el angulo interior en cada vertice sea menor que .
A la vista de esto, resulta sumamente tentador, ahora que tenemos un polgono P al
que hay que calcular el cierre convexo, olvidarse del paso de ordenacion, que es el mas
costoso, y aplicar directamente el paso de scan, que es lineal. Quedara como sigue.

Algoritmo de Graham

Paso 1: Localizar en P el punto xmin , con el orden lexicograco, y hacerlo el primero de


la lista de vertices de P . Es decir, supongamos que v1 es xmin .
Paso 2: Aplicar a P el scan. En detalle sera:

1. Inicializar C conteniendo el punto v1 .


2. (Scan) Desde i = 2 hasta n, hacer
(a) Anadir vi a C.
(b) Hacer q = vi y p = ant(q) (anterior en C).
(c) Mientras (p, q, vi+1 ) 0 y p = v1 , (Obs.: vn+1 = v1 )
Borrar q de C.
Actualizar q = p y p = ant(q) (anterior en C).
(d) Si (p, q, vi+1 ) 0 y p = v1 , entonces borrar q de C.

Paso 3: Devolver C.

v21 v20 v16


v15
v19 v17
v14
v23 v22 v12 v13
v18
v1
v3 v5 v6 v11 v10 v9
v4
v2
v7 v8

Algoritmo de Graham aplicado a un polgono.


3.2. CIERRE CONVEXO DE UN POLGONO 37

Sin embargo, este algoritmo tan sencillo no calcula correctamente el cierre convexo de
todos los polgonos simples, tal y como se puede observar en la siguiente gura.

v5 v5
v4 v4
v8
v8
v1 v1
v6
v7 v7

v2 v3 v2 v3

Resultado de aplicar el scan a otro polgono. No es la envolvente convexa pues ni siquiera es un polgono.

Como para ciertas familias especiales de polgonos (estrellados y monotonos, por ejem-
plo), s va bien, por un lado convendra determinar para que familias de polgonos este
sencillo algoritmo funciona correctamente, y por otro lado queda pendiente encontrar un
algoritmo valido para todo tipo de polgono simple.
El siguiente resultado da respuesta a la primera de las cuestiones.

Proposicion 3.2.2 Si P es un polgono DVE entonces el algoritmo de Graham anterior


calcula correctamente CH(P ).

Dem: Por induccion sobre el numero de vertices de P .

- Para n = 3, el polgono en cuestion es un triangulo y el algoritmo no borra ningun


vertice y devuelve la lista original, que en efecto es CH(P ).
- Supongamos que el algoritmo funciona correctamente para todo polgono DVE con
m vertices, (3 m < n). Sea P un polgono DVE con n vertices que identicaremos
con la lista ordenada de sus vertices (con orientacion positiva), (v1 , . . . , vn ), y supon-
dremos que v1 ya es xmin . Tal y como se observa en el algoritmo, en el transcurso del
paso 2, en la lista C se introducen todos los vertices de P (paso 2(a)) y se borran
algunos de ellos. Consideremos la lista L = (v1 , . . . , vn ) y analicemos sobre ella los
cambios (eliminacion de vertices) que se producen durante el scan.
Si en el paso 2, nunca se borran vertices signica que P es convexo ya que todos
sus angulos internos son menores que . El algoritmo devuelve P que coincide
con CH(P ).
En otro caso, sea vk el primer vertice de P que el algoritmo debe borrar porque
 (vk1 , vk , vk+1 ) > .

v1
vk

vk-1 vk+1

vk es el primer vertice que borra el scan.


38 TEMA 3: CIERRE CONVEXO DE UN POLGONO

Consideremos la lista L = L vk = (v1 , . . . , vk1 , vk+1 , . . . , vn ).


Si L no fuera una poligonal simple, entonces habra dos lados que se interse-
can. Observese que L tiene los lados de P salvo vk1 vk y vk vk+1 que han sido
sustituidos por el segmento vk1 vk+1 . Por tanto, dicha interseccion solo puede
darse entre el lado nuevo vk1 vk+1 , y algun otro lado l de P .
Ese lado l ha de estar en la cadena poligonal (vk+1 , . . . , vn ) (vease la gura) y
como P es DVE, para que el vertice vk+1 pueda ver el exterior necesariamente
l ha de ser el lado vk+1 vk+2 tal y como aparece en la gura (b).

v1 v1
vk vk vk+1
vk+2
vk-1 l vk+1 vk-1

(a) (b)
P vk no es un polgono simple. Pero (a) es incompatible con que P sea DVE.
Si esto fuera as, entonces en el siguiente paso por el bucle del scan habra que
eliminar vk+1 ya que (vk1 , vk+1 , vk+2 ) = 0. Y en cualquiera de los casos o bien
L o bien L = L vk+1 , es una poligonal cerrada simple.
Ademas el polgono P  que representan tambien es DVE. En efecto, sea x P 
o bien es un punto de P , o bien esta en el segmento vk1 vk+1 . En el primer
caso es obvio que ve el exterior y en el segundo, si en cualquier direccion x
no ve el exterior signica que todo rayo que emane de x interseca el interior
de P  en particular, partiendo del rayo que pasa por vk1 y girandolo en torno
a x en sentido positivo hasta el que pasa por vk+1 , todos los rayos barridos
intersecan el interior de P  que en este caso coincidiran con puntos del interior
de P (Int(P  )=Int(P vk1 vk vk+1 )). Pero en ese caso, vease la gura, el punto
vk no vera el exterior en P y es imposible porque P es DVE.

v1
vk

x
vk-1 vk+1

P vk no es DVE, luego P tampoco.


En denitiva, cuando el algoritmo altera por primera vez la lista original L que
describe la frontera de un DVE con n vertices, lo hace eliminando un vertice
pero la lista resultante L (o L en caso de alineacion de vertices) describe de
nuevo un DVE, con menos vertices y a partir de aqu el algoritmo hara lo
mismo que si partiera de L . De modo que como por hipotesis de induccion el
algoritmo funciona correctamente sobre polgonos DVE con menos de n vertices,
devolvera CH(P  ) que coincide con CH(P ). QED
3.3. ALGORITMOS DE LEE Y MELKMAN 39

3.3 Algoritmos de Lee y Melkman


El problema que presenta el algoritmo de Graham visto en la seccion anterior, es que
realiza un analisis local de los vertices: se ocupa de garantizar que en la poligonal cerrada
que devuelve todos los vertices son convexos, sin embargo no hay garanta de que esa
secuencia ordenada de vertices describa la frontera de un polgono simple. A continuacion
veremos dos algoritmos que, si bien usan tambien el scan para comprobar que lo que
se devuelve nalmente es una secuencia de vertices convexos, ademas vigilan que dena
un polgono simple. Ambos algoritmos calculan en tiempo lineal el cierre convexo de un
polgono simple.
El primero de ellos es el de Lee y basicamente consiste en aplicar el scan de Graham
pero manteniendo una referencia que nos permita advertir cuando estamos examinando
vertices que caen en los bolsillos del polgono (vease la gura) ya que estos son los que
pueden acarrear problemas en el algoritmo de Graham.

B5 B1 B5 B1
P
B4 B2 B4 B2
B3 B3

Los bolsillos de P son los polgonos B1 , B2 , B3 y B4 .

El segundo algoritmo es el de Melkman. Se trata de un algoritmo incremental que, en


principio, calcula el cierre convexo de una poligonal simple. Por supuesto tambien puede
aplicarse a un polgono ya que es un caso particular de poligonal.

3.3.1 Algoritmo de Lee


Sea P un polgono simple orientado positivamente. Los vertices mnimo y maximo de
P con el orden lexicograco sobre sus coordenadas descomponen P en dos subcadenas
poligonales L1 (de xmin a xmax ) y L2 (de xmax a xmin ), y tambien a la envolvente convexa
de P en C1 y C2 que llamaremos respectivamente envolvente convexa inferior y envolvente
convexa superior de P .
El algoritmo de Lee halla por separado C1 a partir de L1 y C2 a partir de L2 , y nalmente
las concatena. As pues, examinemos solo como calcula C1 .
Supongamos que L1 = (p1 , ...pM ) con p1 = xmin y pM = xmax . Sabemos que p1 es el
primer vertice de C1 y que pM sera el ultimo. Consideremos la recta que pasa por esos
dos puntos. Sea pj el primer vertice de L1 que cae por debajo de esa recta, evidentemente
ninguno de los vertices (si es que hay alguno) comprendidos entre p1 y pj son vertices de
la envolvente convexa de P , por tanto el primer candidato a seguir a p1 en C1 es pj .
Sean q1 = p1 , q2 = pj , y la lista Q = (q1 , q2 ). Esta lista Q posiblemente se vera
incrementada o modicada a lo largo del proceso conforme encontremos nuevos candidatos
40 TEMA 3: CIERRE CONVEXO DE UN POLGONO

o desechemos alguno de los ya considerados. Sea como fuere, Q describe una poligonal
simple que satisface dos propiedades que deseamos mantener invariantes:

1) todos los vertices de Q {pM } son convexos, y

2) si se prolongan indenidamente el primer y el ultimo lado de esta poligonal, todos


los vertices de P ya tratados quedan a la izquierda de esta poligonal generalizada.

En el momento en que nos hallamos esto es trivial: la poligonal generalizada consiste


en la recta que pasa por q1 y q2 y todos los vertices de P desde p1 hasta pj estan a la
izquierda de esta recta (con la orientacion inducida por la de P ).

p
q=p M
1 1 P

q
2
q
q i
i-1

Cadena poligonal Q generalizada al prolongar su primer y ultimo lado.

Supongamos que en un momento dado del proceso, Q tiene i elementos, (q1 , q2 , ...qi ), y
supongamos que qi = pk . Si pk+1 = pM entonces C1 = (q1 , q2 , ...qi , pM ). Si no es as, la
simplicidad del polgono obliga a que pk+1 este en una de las regiones marcadas en la gura
siguiente.
La region 2 es el semiplano derecho de la recta (orientada) que pasa por qi1 y qi . La
region 1 no existe en el caso de que qi1 = pk1 . Las regiones 3 y 4 estan denidas en
funcion de la posicion de pk1 respecto al segmento orientado qi
pM . Si esta a su derecha,
la region 3 es la interseccion de los semiplanos izquierdos de q
i1 i y de pk1 qi , y no existe
q
region 4. En cambio si esta al izquierda, como en la gura, la region 3 es la interseccion
del semiplano izquierdo de q
i1 qi y el derecho de qi pM , y la region 4 es la interseccion de
los semiplanos izquierdos de qi
p
M y de pk1 qi .

p
M
P
4
3
1
q
q 2 i
i-1

Maximo de regiones posibles donde localizar pk+1 .

La forma de proceder en cada caso es la siguiente:

1. Si pk+1 esta en la region 3, sera el siguiente elemento de Q, es decir qi+1 = pk+1 . Y al


hacer esto se siguen manteniendo las propiedades de Q.
3.3. ALGORITMOS DE LEE Y MELKMAN 41

2. Si esta en la region 2, tambien anadiremos a Q este punto pero al hacerlo quiza ya


no todos los vertices de Q sean convexos de modo que lo que hay que hacer es borrar
los vertices no convexos de Q, siguiendo el mismo proceso de borrado que en el scan.
3. Si pk+1 esta en la region 1, consideramos el primer vertice p de P posterior a pk+1
que abandone esta region. Por la simplicidad de P , p ha de estar en la region 2 y se
procede como corresponde a esta region.
4. Si pk+1 esta en la region 4, consideramos el primer vertice p de P posterior a pk+1
que abandone esta region. De nuevo gracias a la simplicidad de P , p ha de estar en
la region 2 o en la 3, y en cada caso se procede como corresponde a dicha region.

p p
P M P M

4 4
1 3 1 3
p
k+1
q =p
q =p q i k
q 2 i k
i-1 2 p
i-1 k+1

p p
P M
P M
4 p
1 p
k+1
p k-1 3 4 3
k+1 1 p
k-1 p
q =p
q i k q =p
2 i k
i-1 p q 2
i-1

A continuacion detallamos el algoritmo de Lee para calcular la envolvente convexa


inferior. De manera totalmente analoga se calculara la superior y a partir de ambas la
envolvente convexa.

Algoritmo de Lee

Entrada: Un polgono simple P con orientacion positiva de n vertices (en posicion


general) dados en una lista cclica.
Salida: Lista doblemente enlazada C con los vertices de la envolvente convexa inferior
de P .
Paso 1: Localizar en P los puntos xmin y xmax (puntos mnimo y maximo con el
orden lexicograco de P ).
Paso 2: Crear la lista doblemente enlazada L con los vertices de la subcadena poli-
gonal de P que va de xmin a xmax , incluidos ambos puntos.
Paso 3: Inicializar C conteniendo al punto q0 . Este es un punto articial que consi-
deramos para simplicar las siguientes instrucciones y que luego eliminare-
mos. Tal punto se construye a partir de las coordenadas de xmin , sumando
una unidad a su ordenada. (Para la envolvente superior se obtiene a partir
de xmax restando a su ordenada una unidad).
42 TEMA 3: CIERRE CONVEXO DE UN POLGONO

Paso 4: Comenzar con u := q0 . (En adelante u representara el anterior a q en L.)


Paso 5: Hacer q := xmin y anadirlo a C. Hacer p := q.
Paso 6: Mientras p = xmax repetir:
1. Hacer p := POST(q, L)
2. Si (ANT(q, C), q, p) 0, entonces
Si (u, q, p) < 0, (p esta en la reg. 1)
Hacer x := ANT(q, C), e y := q.
En otro caso,
Hacer x := q, e y := xmax . (por si p esta en la reg. 4)
Mientras (x, y, p) 0, hacer p := POST(p, L).
3. Mientras (ANT(q, C), q, p) 0 (p esta en 2 o en 3)
Borrar q de C y hacer q := ANT(q, C).
4. Anadir p a C haciendo u := ANT(p, L) y q := p.
Paso 7: Acabar devolviendo C (previa eliminacion de q0 ).

3.3.2 Algoritmo de Melkman


Sea P = (p1 , p2 , , pn ) una cadena poligonal simple. El algoritmo de Melkman para
calcular su envolvente convexa procede de manera que para cada i, se tiene el cierre
convexo Ci de los i 1 primeros vertices de P , es decir, Ci = CH({p1 , . . . , pi1 }) y se trata
de calcular la envolvente convexa de Ci {pi }.
Esto se reduce a realizar dos operaciones bien diferenciadas:

1. Averiguar si pi Ci .

2. En caso de que no sea as, pi sera vertice de la nueva envolvente convexa y habra
que obtener Ci+1 sustituyendo cierta subcadena poligonal de la frontera de Ci por el
vertice pi . Vease la gura.

pi

Ci

Actualizacion de la envolvente convexa al anadir un nuevo punto.

La operacion de averiguar la posicion de un punto respecto a un polgono convexo,


puede realizarse muy facilmente con el calculo de areas signadas, una por cada lado del
convexo.
3.3. ALGORITMOS DE LEE Y MELKMAN 43

Para la segunda operacion, hay que trazar las rectas que pasan por pi y son soporte
del convexo, los vertices que quedan en el sector angular determinado por esas dos rectas
son los que hay que sustituir por pi en la nueva envolvente. Esto puede hacerse de manera
inmediata en tiempo lineal en el numero de vertices del convexo.
De modo que la complejidad para este algoritmo incremental, en el peor de los casos,
sera T (i) = T (i 1) + O(i 1), para cada i, y entonces T (n) = O(n2 ).
En todo lo comentado no se ha hecho ningun uso de que los puntos no vienen dados
de cualquier manera sino formando una poligonal simple. El algoritmo aprovecha esas
propiedades geometricas para reducir el tiempo de la operacion 1 a O(1) y la operacion
2 a un tiempo proporcional al numero de vertices que elimina, ni . De esta manera la
complejidad para cada i sera T (i) = T (i 1) + O(ni ), y por tanto
 n 

T (n) = O ni = O(n)
i=1

ya que el numero de vertices eliminados en total es a lo mas n 3. Veamos como se


consigue.
Supongamos que ademas de Ci tenemos el punto q que es el ultimo vertice tratado de
P que es vertice de Ci . Sea p el vertice de P que sigue a q en P . Entonces averiguar la
posicion relativa de p respecto al polgono Ci equivale a averiguar la posicion relativa de
P respecto a la region Rq , que es la interseccion de los semiplanos determinados por las
rectas que pasan por q y, respectivamente, su anterior y su posterior en Ci , y que contienen
a Ci .
/ Rq entonces p
En efecto, resulta evidente que si p / Ci . Y la razon de por que si
p Rq necesariamente ha de estar en el polgono Ci , radica en que P es una poligonal
simple, vease la siguiente gura.

Rq Rq

p p

q q

Ci Ci

El lado qp de P no puede atravesar el polgono Ci porque si no P no sera simple.

Esto signica que para saber si p esta en Ci , basta con el calculo de dos areas signadas
(tiempo constante).
Supongamos ahora que p esta dentro del polgono convexo Ci , y sea p el primer vertice
de P , posterior a p en la cadena poligonal, que queda fuera de Ci , o lo que es equivalente
gracias de nuevo a la simplicidad de P , fuera de Rq . Necesariamente este vertice, sale
atravesando uno de los lados adyacentes a q en Ci (vease la siguiente gura). Observese
que el cierre convexo de todos los puntos tratados de P sigue siendo Ci hasta que llega
p y entonces la forma de proceder es la misma que si directamente p estuviera fuera de
44 TEMA 3: CIERRE CONVEXO DE UN POLGONO

Ci , y es la siguiente. Tomando como referencia en Ci el vertice q, avanzamos primero en


una direccion y luego en la opuesta, comprobando uno a uno los vertices que encontramos
hasta encontrar los dos vertices que determinan sendas rectas soporte de Ci que pasan por
p . Avanzando en cada una de esas direcciones a partir, en ambos casos de q, cada vertice
o es el vertice deseado o es uno de los que quedan en la cadena de Ci que hay que eliminar.
De modo que este proceso se puede organizar de la siguiente manera: si C es la lista con
los vertices de Ci , sustituimos en ella el vertice q por la secuencia q, p , q. A continuacion
aplicamos el scan de Graham partiendo de p primero en una direccion y luego en la otra
de modo que si un vertice no es convexo entonces se elimina.

Rq >
<
p' < p'
q Ci q
p

Ci

p' p'
Ci q < Ci+1

<
>

Ilustracion de como el algoritmo de Melkman obtiene Ci+1 de Ci .

Algoritmo de Melkman

Entrada: P cadena poligonal simple de n ( 3) vertices en posicion general dados


en una lista o en una pila P = (p1 , p2 , , pn ) con la funcion MIN(P ) que en tiempo
constante da su primer elemento y lo borra de P .

Salida: Lista cclica doblemente enlazada C con los vertices del cierre convexo de P .
Esta estructura debe soportar las siguientes funciones en tiempo constante: dado un
elemento v de C,

1. Hallar su anterior y su posterior en C (ANT(v, C) y POST(v, C) respectiva-


mente).
2. Borrarlo de C.
3. Insertar un elemento tras v en C.
Paso 1: Inicializar C = .
Hacer p1 := MIN(P ) e introducirlo en C.
3.4. REFERENCIAS Y LECTURAS COMPLEMENTARIAS RECOMENDADAS 45

Hacer p2 := MIN(P ) e introducirlo en C al nal.


Hacer q := MIN(P ) e introducirlo en C al nal.
Hacer O := (p1 , p2 , q) (su signo determina la orientacion de C).
Paso 2: Mientras P = repetir:
1. Hacer p := MIN(P ).
2. Mientras p Rq , hacer p := MIN(P ).
3. Hacer s := q y t := ANT(s, C).
4. Mientras O (t, s, p) 0.
5. Hacer s := t y t := ANT(s, C).
6. Insertar p en C tras s.
7. Hacer s := POST(p, C) y t := POST(s, C).
8. Mientras O (s, t, p) 0
9. Borrar s de C. Hacer s := t y t := POST(s, C).
10. Hacer q := p.
Paso 3: Acabar devolviendo C.

Nota: La region Rq es la interseccion de dos semiplanos: los que respectivamente deter-


minan la recta que pasa por q y ANT(q, C) y la recta que pasa por q y POST(q, C),
y que contienen a C. As pues, p Rq si y, solo si, O (q, POST(q, C), p) 0 y
O (ANT(q, C), q, p) 0.
Evidentemente, este algoritmo tambien es valido si P es un polgono simple en vez
de una poligonal. Si ademas esta orientado positivamente, tomamos como inicio de la
poligonal vertice anterior a xmin en P , por ejemplo, y podemos olvidarnos del valor de O
ya que sera positivo.

3.4 Referencias y lecturas complementarias recomen-


dadas
Apartado 1.4 del captulo 4 del libro Computational Geometry. An Introduction
de F. PREPARATA, M. I. SHAMOS.

G. TOUSSAINT, D. AVIS: On a Convex Hull Algorithm for Polygons and its Ap-
plication to Triangulation Problems Geometry. Pattern Recognition Vol. 15. No.
1, pp.2329, 1982.

R. L. GRAHAM, F. F. YAO: Finding the Convex Hull of a Simple Polygon. Jour-


nal of Algorithms No. 4, pp.324331, 1983.

A. A. MELKMAN: On-line construction of the convex hull of simple polyline. Ben


Gurion University of the Negev, Beer Sheva, Israel.
Tema 4

Diametro y calibres

4.1 Introduccion
En este tema vamos a resolver de manera eciente el problema de encontrar la mayor
distancia entre dos puntos de una nube. La tecnica que utilizaremos se denomina rotacion
de calibres, y es una herramienta que puede aplicarse para resolver otro tipo de problemas,
como por ejemplo, el de encontrar la anchura de un polgono convexo, hallar el rectangulo
de area mnima que contiene a una nube de puntos, etc.

4.2 Diametro de una nube de puntos


Denicion 4.2.1 El diametro de un conjunto de n puntos S = {p1 , p2 , . . . , pn } es la mayor
distancia entre dos de ellos. Esto es,
diam(S) = max d(pi , pj )
1i,jn

El diametro de la nube es la longitud del segmento de la gura.

De manera inmediata surge un primer algoritmo para calcular tal valor.

Algoritmo fuerza bruta

1. Para cada par de puntos pi , pj de S, (1 i < j n), hallar d(pi , pj ).


2. Tomar el mayor de los valores obtenidos.
 
n
Como el numero de pares de puntos es , la complejidad en tiempo de este algoritmo
  2
es T (n) = C n 2
= O(n ). Y el objetivo es utilizar las propiedades geometricas del
2
problema para obtener algoritmos mas ecientes y rebajar as la complejidad.

47
48 TEMA 4: DIAMETRO Y CALIBRES

Proposicion 4.2.2 El diametro de S se alcanza en vertices del CH(S).

Dem: Sean p, q S dos puntos donde se realiza el diametro de S, es decir, tales que
diam(S) = d(p, q). Entonces, el crculo de centro p y radio d(p, q) debe contener a S,
pues si algun punto q  de S quedara fuera entonces d(p, q  ) > d(p, q) = diam(S), lo cual
es absurdo. Por la misma razon, S tambien esta contenido en el crculo de centro q y
radio d(p, q). Por tanto, S esta en la interseccion de ambos crculos, region a la que nos
referiremos como luna, vease la gura.

rq

p
q

rp

La zona sobreada es la luna y contiene a S.

Consideremos ahora la recta rp (respectivamente rq ) que pasa por p (resp. por q) y es


ortogonal al segmento pq. La recta rp es tangente a la luna en p y por tanto es soporte
de S en p. En consecuencia p es un punto de la envolvente convexa y ademas debe ser un
vertice.
Resumiendo, si en el par p, q se realiza el diametro, entonces p y q son vertices de la
envolvente convexa de S.
QED
En consecuencia, para hallar el diametro de S basta considerar los vertices de su envol-
vente convexa. Sin embargo, aplicar el algoritmo de fuerza bruta al conjunto de vertices
de la envolvente, tampoco mejora la eciencia. Notese que en el peor caso todos los puntos
de S estan en la envolvente convexa.
Por lo tanto, la clave para obtener una mejora algortmica utilizando el hecho de que
el diametro de S se alcanza en los vertices de CH(S), no esta en una posible reduccion del
numero de elementos del nuevo conjunto a considerar, sino en la estructura de polgono
convexo que este posee.
En denitiva, dada la nube de puntos S hallamos su envolvente convexa CH(S) y a
partir de aqu consideramos el problema de encontrar el diametro de un polgono convexo.

4.3 Diametro de un polgono convexo


Sea P un polgono convexo de n vertices. El diametro de P se dene de manera analoga

diam(P ) = max{d(p, q) / p, q P }.
4.3. DIAMETRO DE UN POLGONO CONVEXO 49

Proposicion 4.3.1 diam(P ) = diam({vertices de P }).

Dem: El mismo argumento de la demostracion de la proposicion 4.2.2. sirve para P .


QED

Denicion 4.3.2 Se dice que dos vertices p, q de P son antpodas si existen dos rectas
paralelas distintas que pasan por sendos puntos y son soporte de P .

v6 v6
v5 v5
v7 v7
v4 v4

v3 v3
v1 v1
v2 v2

(a) v3 y v7 son antpodas pero v1 y v7 no. (b) Todas las parejas de antpodas de P.

Proposicion 4.3.3 diam(P ) = d(p, q) p y q son antpodas.

Dem: Recordando la demostracion de la proposicion 4.2.2, basta observar que las rectas
rp y rq son ambas ortogonales a una dada, y por tanto son paralelas. Ademas son distintas
pues la distancia entre ambas es d(p, q) > 0.
QED
Por tanto para hallar diam(P ) no es preciso considerar todo par de vertices posible sino
solo aquellos formados por antpodas. Esto nos conduce ya a un bosquejo de algoritmo
para resolver el problema

Algoritmo:

1. Hallar todos los pares de antpodas de P .

2. Hallar la distancia entre los puntos de cada par.

3. Quedarse con el mayor valor.

Si notamos con N el numero de parejas de antpodas de P , el tiempo de ejecucion


de los pasos dos y tres es claramente lineal en N . Y por tanto, la complejidad de este
algoritmo, vendra dado por el tiempo que cueste encontrar todos los pares de antpodas
mas O(N ):
T (n) = t1 (n) + t2 (n) + t3 (n) = t1 (n) + O(N )

Cuanto vale N ? y cuanto cuesta encontrar los N pares? son las preguntas que
quedan pendientes y que intentaremos dar respuesta en lo que sigue.
50 TEMA 4: DIAMETRO Y CALIBRES

4.3.1 Numero de parejas de antpodas de un convexo


Resolvamos primero este problema combinatorio de encontrar cuantos pares de antpodas
tiene un polgono convexo P de n lados.
Consideremos un vertice cualquiera de P , p. El haz de rectas soporte de P en p viene
determinado por las rectas que pasan por p y sus vertices adyacentes: q y q  .

r'
q'
p
P

La zona sombreada es el haz de rectas soporte de P en p. Para cada una de esas rectas hay otra paralela a
ella que tambien es soporte.

Los vertices antpodas de p han de admitir rectas soporte de P paralelas a alguna de


estas. Y recprocamente, para cada recta soporte r en p, hay (al menos) un antpoda de p
con recta soporte paralela a r: desplacese paralelamente a r en el semiplano que contiene
a P una recta que inicialmente esta sobre r y despues es secante a P hasta que es tangente
a P . En esa posicion, la recta r contiene un vertice de P , y este es antpoda de p, o bien
un lado de P cuyos extremos son vertices antpodas de p.
De este modo se pueden obtener todos los antpodas a un vertice dado: para cada recta
r soporte en el considerar la recta r (= r) paralela a r que es soporte de P . Estas rectas
determinan un par de antpodas, o dos, segun el numero de vertices de P que haya en la
recta r .
Como hay un numero innito de rectas soporte en un vertice dado y el numero de pares
de antpodas es nito, evidentemente varias rectas determinan el mismo par de antpodas.
Veamos como estan estos distribuidos sobre P .
Con afan de conseguir una mayor claridad, dividiremos el analisis de la situacion en
dos casos: primero que P no tenga lados paralelos, y segundo que tenga lados paralelos.
En este segundo caso, dada la convexidad de P , un lado de P puede tener a lo mas otro
lado paralelo a el en P y por tanto hablaremos de parejas de lados paralelos.

1.1 P no tiene lados paralelos

Supongamos que P esta descrito con orientacion positiva, y tomemos el vertice p1 . El


haz de rectas soporte de P en p1 viene determinado por las rectas que pasan por p1 y
4.3. DIAMETRO DE UN POLGONO CONVEXO 51

sus vertices adyacentes: p2 y pn . Visto de otro modo, la recta que pasa por p1 y pn es la
primera recta soporte en p1 y girando esta recta en sentido positivo en torno a p1 hasta
la posicion de la recta que pasa por p1 y p2 , que sera la ultima, obtenemos todas las
posibles rectas soporte de P en p1 . Los vertices antpodas de p1 han de admitir rectas
soporte de P paralelas a alguna de estas.
Consideremos la recta l1 que pasa por pn y p1 , y sea l1 la recta paralela a l soporte de
P . Como P no tiene lados paralelos, l solo contiene a un vertice de P : pk . Analogamente,
consideramos el antpoda a p1 asociado a la recta l2 que pasa por p1 y p2 : pj . Notese que
pj es posterior a pk en P con la orientacion positiva yendo desde p1 a pn , es decir que
j k.

l2
p l1
n l
2
p
1

p
j
P

p
2
l
1
p
k

Localizacion del primero y el ultimo vertice antpoda de p1 : pk y pj . Ademas, todo vertice antpoda de p1
ha de estar comprendido entre pk y pj .

Fijemonos en la cadena poligonal que va de pk a pj : C1 = (pk , pk+1 , . . . , pj ). Se verica


que todos los vertices de esa cadena son antpodas de p1 , y que fuera de esa cadena no hay
mas vertices antpodas de p1 .
Por tanto los vertices antpodas a uno dado aparecen consecutivamente en P , esto es,
forman una cadena. As, nos referiremos a C1 como la cadena de vertices antpodas de p1 .
Y el conjunto de todos los pares de antpodas en los que interviene p1 es {(p1 , p) / p C1 }.
Para el vertice p2 su cadena de antpodas C2 se halla de la misma manera. Y una
observacion importante es que dicha cadena comienza en el vertice pj que es el ultimo de
la cadena de p1 .
Consideremos para cada vertice pi con 1 i k sus respectivas cadenas de antpodas:
C1 , C2 , . . . , Ck1 , Ck . Entonces se verica que para todo i {1, . . . , k 1},

1. Ci Ci+1 es un punto: el ultimo de Ci y el primero de Ci+1 .

2. El ultimo elemento de Ci es anterior a p1 .

Consideremos la division de P en dos subcadenas poligonales: P1 = (p1 , p2 , . . . , pk1 )


y P2 = (pk , pk+1 , . . . , pn ). El ultimo elemento de la cadena Ck esta en P1 (notese que en
particular p1 es antpoda de pk ). Sea Ck = Ck P2 .
52 TEMA 4: DIAMETRO Y CALIBRES

Lema 4.3.4 Todo par de antpodas de P esta formado por un vertice de P1 y otro de P2 .

Lema 4.3.5 Si N1 = |C1 |, N2 = |C2 |, . . . , Nk1 = |Ck1 | y Nk = |Ck |, entonces N =


N1 + N2 + + Nk .

Lema 4.3.6 P2 = C1 C2 . . . Ck1 Ck (union conjuntista de sus vertices).

Teorema 4.3.7 Para un polgono convexo P de n vertices sin lados paralelos N = n.

Dem:
N = N1 + N2 + Nk1 + Nk = |C1 | + |C2 | + + |Ck1 | + Ck | =

= |C1 C2 Ck1 Ck | + |C1 C2 | + |C2 C3 | + |C3 C4 | + + |Ck1 Ck | =


     

= |P2 | + k1 =

= n (k 1) + k 1 = n
QED

1.2 P tiene n pares de lados paralelos

El estudio realizado para el caso anterior es igualmente valido para este caso solo que
ahora, las cadenas de antpodas para dos vertices consecutivos pi , pi+1 pueden tener como
interseccion dos puntos en vez de uno. Esto ocurre si, y solo si, hay en P un lado paralelo
a pi pi+1 , ver gura.

p
p i
i+1

Ci+1
Ci

Las cadenas Ci y Ci+1 comparten dos puntos: los dos ultimos de Ci que son los dos primeros de Ci+1 .

De modo que hay que tener esto en cuenta a la hora de calcular N corrigiendo en el
calculo realizado en el apartado anterior de la siguiente manera.
N = N1 + + Nk = |P2 | + (k 1) + n = n (k 1) + (k 1) + n = n + n

Por tanto el resultado general es el siguiente.


Teorema 4.3.8 Para un polgono convexo P de n vertices N = n+n , siendo n el numero
de parejas de lados paralelos de P .
Como el numero de parejas de lados paralelos en un convexo de n lados, n , verica que
n n
n , entonces N = O(n).
2 2
4.3. DIAMETRO DE UN POLGONO CONVEXO 53

4.3.2 Calculo de las parejas de antpodas


Queda pendiente saber cuanto cuesta encontrar esas N parejas de antpodas y como ha-
cerlo. La respuesta es que no mucho y que el metodo para encontrarlos ya esta inventado.
Pensemos en el convexo P como una tuerca un poco irregular. Para hallar su diametro, los
mecanicos lo que hacen es usar un calibre como el de la gura y, en una vuelta de calibre,
determinan cual es la mayor abertura del calibre.

Matematicamente, esta herramienta mecanica vendra modelizado por un par de rectas


paralelas que dejan al polgono en la banda que determinan, es decir, para cada recta el
polgono queda en el semiplano en el que esta la otra recta. Y ademas queremos que esas
rectas sean soporte del polgono.
Para un polgono P siempre hay un par de rectas con esas cararactersticas muy facil
de hallar: basta considerar las rectas verticales que pasan respectivamente por los vertices
de abscisa mnima y abscisa maxima. Para encontrar ahora otro par basta rotar ambas
rectas el mismo angulo, y en el mismo sentido, cada una en torno al punto de apoyo sobre
el polgono. As se consigue que sigan siendo rectas paralelas pero para que ademas sean
soporte de P hay que vigilar el tamano del angulo de giro y, en caso de que hubiera mas
de un punto de apoyo de P para alguna de esas rectas, decidir en torno a cual se gira.
Para resolver todo eso, comenzaremos dando a cada una de las rectas soporte paralelas
una orientacion distinta. Por ejemplo a la recta vertical que pasa por xmin la orientacion
del eje OY y la otra la del eje OY + . A cada una de estas rectas orientadas las llamaremos
calibre. Si sobre alguna de estas rectas hubiera mas de un vertice de P consideraramos
como centro de giro el ultimo en la direccion del calibre. Esos puntos de apoyo de los
calibres seran la primera pareja de antpodas.
A continuacion giramos los calibres para detectar otra pareja. El angulo de giro de los
calibres para que el resultado sea de nuevo un par de rectas soporte viene limitado por la
frontera de P . Como P es convexo tan solo hay que vigilar el lado adyacente al vertice
de apoyo de cada calibre. Por tanto, el angulo que han de girar ambas rectas para que
las resultantes sean tambien soporte de P viene determinado por el menor de los angulos
que forman cada uno de los calibres con el lado adyacente a su vertice de apoyo en P ,
tomando el angulo en sentido positivo respecto de la direccion del calibre. Observese que
al girar ese angulo al menos uno de los calibres se apoya en un lado de P : aquel que
54 TEMA 4: DIAMETRO Y CALIBRES

daba el angulo mnimo. Ese calibre girara ahora entorno al nuevo vertice encontrado y ese
vertice junto con el otro en el que se apoya el otro calibre determinan una nueva pareja de
vertices antpodas. Si los dos angulos examinados son iguales una vez girados los calibres,
ambos quedan apoyados sobre lados paralelos de P y entonces hay tres parejas nuevas de
antpodas. Vease la gura.

C2 C2 C2
q

p
q q
p
p
C1
C1 C1

(a) < (b) < (c) =

C2
q q q
C2

C2

p
p
C1
p
C1 C1

(d) < (e) < (f) <

C2

C1

Ilustracion del algoritmo de girar calibres para calcular todos los pares de antpodas de un polgono
convexo.

De esta manera girando los calibres y recopilando todas las parejas de antpodas que
encontremos conseguiremos todas las posibles. La pregunta natural que surge ahora es:
hasta cuando hay que girar para tener la seguridad que tenerlas todas? La respuesta es
facil: hasta que comiencen a repetirse. Esto ocurre cuando ambos calibres han girado un
4.3. DIAMETRO DE UN POLGONO CONVEXO 55

angulo total de a lo mas , es decir, se han invertido las posiciones iniciales de los calibres
y se apoyan sobre la pareja inicial de antpodas.
Algoritmo de girar calibres. (Descripcion geometrica)
A lo largo del algoritmo llamaremos C1 y C2 al par de calibres que rotan, p y q los
vertices de P donde respectivamente se apoyan y respecto de los cuales giran.
Paso 1: Localizar en P los puntos mnimo y maximo con orden lexicograco: xmin y xmax .
Paso 2: Inicializar p := xmin , q := xmax y los calibres C1 con la recta vertical que pasa por
p con la direccion OY y C2 con recta vertical que pasa por q y direccion OY + .

Paso 3: Mientras el par (p, q) = (xmax , xmin ) repetir:


Guardar el par de antpodas (p, q).
Considerar los angulos , formado por C1 con el lado pSIG(p) de P , y ,
formado por C2 y qSIG(q).
Si < , girar ambos calibres un angulo y cambiar el punto de giro de C1
haciendo p := SIG(p).
Si > , girar ambos calibres un angulo y cambiar el punto de giro de C2
haciendo q := SIG(q).
Si = , girar ambos calibres ese angulo, guardar los pares de antpodas
(p, SIG(q)), (SIG(p), q) y cambiar tanto el punto de giro de C1 como el de
C2 haciendo p := SIG(p) y q := SIG(q).

En la practica no es preciso hallar el valor de ningun angulo sino que la comparacion


entre y puede realizarse simplemente utilizando calculos de areas signadas tal y como
muestra la gura.
x

SIG(q)
p p p
q SIG(p) q SIG(p)

(a) (b) (c)



< (p, SIG(p), x) < 0, donde x = p + qSIG(q).

A continuacion damos una descripcion un poco mas detallada del algoritmo en la que
se tiene en cuenta esto.

Algoritmo de girar calibres


Entrada: Lista cclica P con los n vertices de un polgono convexo en orientacion
positiva.
56 TEMA 4: DIAMETRO Y CALIBRES

Salida: Lista Q con las parejas de antpodas de P .


Paso 1: Hacer Q := .
Paso 2: Localizar en P los puntos mnimo y maximo con orden lexicograco: xmin
y xmax .
Paso 3: Hacer p := xmin y q := xmax .

Paso 4: Mientras q = xmin o p = xmax repetir:


Introducir en Q el par (p, q).

Hacer x := p + qSIG(q) = p + SIG(q) q.
Si (p, SIG(p), x) < 0, hacer p := SIG(p).
Si (p, SIG(p), x) > 0, hacer q := SIG(q).
Si (p, SIG(p), x) = 0, anadir a Q los pares: (p, SIG(q)), (SIG(p), q)
y hacer p := SIG(p) y q := SIG(q).
Paso 5: Acabar devolviendo Q.

Estudio de la complejidad:

El polgono convexo P ha de estar representado en una estructura que soporte la


funcion SIG, que para cada elemento v de P , SIG(v) de, en tiempo constante, el
elemento siguiente a v en P .

El paso 2 cuesta O(n). Los pasos 1,3 y 5 trivialmente O(1).

El bucle del paso 4, tiene un cuerpo con unas instrucciones que pueden ejecutarse
en tiempo constante. Por lo tanto el coste de este paso es del orden del numero de
veces que se ejecuta el bucle que es exactamente n n veces, donde n es el numero
de pares de lados paralelos de P . Para llegar a ese resultado basta observar que cada
vez que se ejecuta el bucle se avanza, o bien en p, o bien en q, o bien en ambos si
surge un par de lados paralelos. Los detalles se dejan como ejercicio. En denitiva
el paso 4 cuesta O(n).

Luego el algoritmo de girar calibres para encontrar todos las parejas de antpodas de un
convexo es O(n).

Estudio de la correccion: La correccion del algoritmo se deduce del hecho, muy facil
de comprobar, de que cuando para ha calculado exactamente n + n parejas de antpodas
distintas. La unica cuestion que a estas alturas queda por justicar es el que el algoritmo
acaba. En efecto, la condicion de parada del algoritmo es que aparezca de nuevo el par
de antpodas inicial. Observese que si en P no hay lados paralelos, y por tanto siempre
sera = , cada par de antpodas que halla el bucle es comparado con el par inicial, con
lo cual tenemos la garanta de que va a parar en cuanto aparezca. Sin embargo, cuando
aparece un par de lados paralelos, el algoritmo halla dos parejas de antpodas que guarda
4.3. DIAMETRO DE UN POLGONO CONVEXO 57

sin comprobar si alguno de ellos es la pareja inicial. As que en principio existe el riesgo
de pasar de largo la condicion de parada y proseguir indenidamente. De modo que lo que
hay que comprobar es que eso nunca se puede dar.
La situacion de peligro sera la siguiente: se tiene que = y uno de los pares,
(p, SIG(q)) o ( SIG(p), q) es el par crtico (xmax , xmin ). Ya que cuando se llega a esta
situacion el par (p, q) donde se apoyan ahora los calibres ha sido contrastado con el par
crtico y dado por bueno, necesariamente xmax = SIG(p) y xmin = q, o bien xmax = p
y xmin = SIG(q) (vease la gura). Si esto es as entonces p y SIG(p) tienen la misma
abscisa: la maxima de todos los vertices de P , y q y SIG(q) tambien, en este caso la
mnima. Notese que ninguna de estas dos situaciones se pueden dar porque los puntos xmin
y xmax son respectivamente los vertices menor y mayor de P con el orden lexicograco.

SIG(p) xmax SIG(p)


q xmin q
p p
SIG(q ) xmax
C2 C2 SIG(q) xmin
C1 C2
C1 C1
(a) (b) (c)
(a) Pares introducidos sin comprobar. Esto tiene problemas si (b) xmax = SIG(p) y xmin = q , o (c)
xmax = p y xmin = SIG(q). Ambos casos son imposibles por la eleccion de xmin y xmax .

4.3.3 Conclusiones
Resumiendo los resultados obtenidos a modo de minuta tenemos lo siguiente.

1. Coste de calcular el diametro de un polgono convexo P de n lados:

(a) Calcular todos los pares de antpodas de P . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . O(n)


(b) Calcular la distancia entre vertices de cada par . . . . . . . . . . . . . . . . . . . . . . . . . O(n)
(c) Calcular el mayor valor de esas distancias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . O(n)
(d) Total: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . O(n)

2. Coste de calcular el diametro de una nube S de n puntos:

(a) Calcular el CH(S) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . O(n log n)


(b) Calcular el diam(CH(S)) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . O(n)
(c) Total: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . O(n log n)

Por tanto, y centrandonos de nuevo en el problema con el que comenzamos el tema,


n log n es una cota superior del problema de encontrar el diametro de una nube de n
puntos ya que existe un algoritmo con esa complejidad que lo resuelve. Ademas, tal y
como veremos a continuacion, n log n tambien es cota inferior del problema y por tanto se
concluye los siguientes resultados acerca del problema que da por concluido su estudio.
58 TEMA 4: DIAMETRO Y CALIBRES

Teorema 4.3.9 Hallar el diametro de una nube de n puntos tiene complejidad (n log n).

Corolario 4.3.10 Cualquier algoritmo de complejidad O(n log n) que resuelva el problema
es optimo.

3.1 Cota inferior del problema

Como suele ser habitual para encontrar una cota inferior a nuestro problema, la estrategia
a seguir es reducir, utilizando un bajo coste, otro problema cuya complejidad se conoce
al problema que nos ocupa. Hay ciertos problemas que se consideran clasicos, como el
de ordenacion de n numeros o como el de interseccion de conjuntos de n numeros que
enunciaremos a continuacion, de los que se sabe que su complejidad es (n log n) y que se
pueden utilizar para estos nes.
Dados dos conjuntos de numeros, A = {a1 , . . . , an } y B = {b1 , . . . , bn }, averiguar si
A B = .

Teorema 4.3.11 El test de interseccion de conjuntos de n numeros n al calculo del


diametro de una nube de n puntos.

Dem: Dados los conjuntos de numeros A = {a1 , . . . , an } y B = {b1 , . . . , bn }, consideremos


en el plano las rectas que pasan por el origen de coordenadas y tienen por pendiente cada
uno de esos numeros. Es decir, las rectas de ecuacion y = ak x para todo k {1, . . . , n} y
las de ecuacion y = bk x para todo k {1, . . . , n}. Consideremos tambien la circunferencia
unidad centrada en el origen de coordenadas.
Para cada k {1, . . . , n}, sean pk el punto de abscisa positiva que es interseccion de la
recta y = ak x con la circunferencia, y qk el punto de abscisa negativa que es interseccion
de la recta y = bk x con la circunferencia. Vease la gura.

y=a k x

p
k

y=bk x qk

Resultado de la transformacion.

En una circunferencia la maxima distancia entre dos de sus puntos se alcanza en puntos
diametralmente situados siendo la distancia entre ellos el diametro de la circunferencia.
En el caso concreto de los puntos p1 , . . . , pn , q1 , . . . , qn construidos, si hay dos que estan
4.4. OTRAS APLICACIONES DE LA ROTACION DE CALIBRES 59

diametralmente situados signica que proceden de la misma recta o lo que es lo mismo,


que A y B tienen (al menos) un elemento comun.
Por lo tanto, A B = diam({p1 , ..., pn , q1 , ..., qn }) = 2.
Y el problema de la interseccion de A y B se reduce al problema de calcular el diametro
de un conjunto de 2n puntos en el plano en tiempo O(n), que es el coste de calcular las
intersecciones de las 2n rectas con la circunferencia.
QED

Teorema 4.3.12 El problema de hallar el diametro de una nube de n puntos es (n log n).

Dem: Sea A un algoritmo tal que, dada una nube de puntos en el plano devuelve el valor
de su diametro.
Consideremos el siguiente algoritmo que resuelve el problema de decision enunciado
anteriormente sobre la interseccion no vaca de dos conjuntos de n numeros A y B.
Algoritmo B:

Paso 1: Para cada elemento ak de A, hallar el punto de abscisa positiva pk que es


interseccion de y = ak x y la circunferencia unidad. Obtener de manera analoga
para cada bk de B el punto qk de abscisa negativa que es interseccion de y = bk x
y la circunferencia unidad.
Sea S = {p1 , ..., pn , q1 , ..., qn }.
Paso 2: Utilizar el algoritmo A para hallar el diametro de S.
Paso 3: Si diam(S) = 2, A y B no tienen elementos comunes y, en otro caso s.

El coste de este algoritmo es TB (n) = C n + TA (2n) = (n log n). De lo que se deduce


que TA (2n) = (n log n). QED

4.4 Otras aplicaciones de la rotacion de calibres


Para concluir el tema veamos como aplicar el metodo de girar calibres para hallar otras
magnitudes y objetos geometricos.

4.4.1 Anchura de una nube de puntos


Denicion 4.4.1 La anchura de una nube de puntos es la menor distancia entre rectas
soporte paralelas.

A la region del plano comprendida entre dos rectas paralelas la llamaremos banda y
llamaremos recta borde de la banda a cada una de las rectas que la denen. Si una
banda esta determinada por un par de rectas soporte a un conjunto dado la llamaremos
banda soporte del conjunto.
60 TEMA 4: DIAMETRO Y CALIBRES

Resulta evidente que la anchura de una nube de puntos coincide con la anchura de su
cierre convexo. Por tanto nos ocuparemos de la anchura de un polgono convexo.
Este concepto puede interpretarse de la siguiente manera. Supongamos que tenemos
sol de medioda, es decir, suponemos que los rayos caen sobre la tierra perpendicular-
mente. Supongamos que tenemos suspendido en el aire un polgono convexo en un plano
perpendicular a la supercie terrestre, vease la siguiente gura. La sombra que produce
el polgono es un segmento en el suelo. Si giramos el polgono, la longitud de la sombra
aumentara y disminuira. La mayor longitud que se obtendra es la mayor distancia entre
los vertices del polgono, es decir su diametro. La menor es su anchura.

Interpretacion solar del diametro y la anchura de un convexo.

Dado que las bandas se apoyan en parejas de antpodas, podra considerarse un algo-
ritmo que use el metodo de girar calibres visto anteriormente. Sin embargo, es importante
resaltar que la anchura de un polgono convexo no es la menor de las distancias entre
vertices antpodas sino la menor distancia entre las rectas soporte en parejas de antpodas
(observese que en principio hay innitas). De modo que si se quiere utilizar el algoritmo
de rotar calibres hay que adaptarlo adecuadamente para que calcule la anchura.

Proposicion 4.4.2 Al menos una de las rectas borde de la banda soporte en la que se
alcanza la anchura de un polgono convexo, contiene un lado del polgono.

Dem: La clave de la demostracion esta en que la funcion anchura aplicada a las bandas
que se apoyan en dos puntos p y q es una funcion unimodal1 con maximo en la banda
ortogonal al segmento pq y valor la distancia entre estos puntos.

d(p,q) y=f()
f()
p
q
0
2

La anchura de las bandas determinadas por p y q es una funcion del angulo : f () = d(p, q) sen()
para todo [0, ].
1
Con un unico maximo local.
4.4. OTRAS APLICACIONES DE LA ROTACION DE CALIBRES 61

Entonces, si consideramos la banda que realiza la anchura de S con puntos de contacto


p y q, y si suponemos que las rectas no contienen ningun lado del cierre convexo, entonces
se puede girar dicha banda en ambos sentidos y tener nuevas bandas soportes apoyadas
en los mismos puntos. La idea es que siempre hay un angulo y un sentido de giro que
permite mejorar la anchura de la banda original, es decir, disminuirla, lo cual contradice
su minimalidad. Veamos como.
Para cada punto de contacto, p y q, consideramos los angulos que forman las respectivas
rectas soporte de la banda con los lados del cierre convexo adyacentes a esos puntos. Sea
el menor de esos cuatro angulos. Por hipotesis = 0, y si giramos la banda esta
cantidad tanto en sentido positivo como negativo tendremos otra banda soporte en los
mismos puntos. Entonces,

1. Si la banda original es ortogonal al segmento pq, girar en cualquier sentido disminuye


la anchura.

2. Si la banda original no es ortogonal al segmento pq, girar un angulo en sentido de


alejamiento de la banda ortogonal disminuye la anchura.

1
2
q
p
1 2

Si la banda que da la anchura de P no se apoya en ningun lado, se pueden girar las rectas en una de las
dos direcciones de modo que disminuye la anchura de la banda.

QED
De este resultado se desprende que, si el polgono P tiene n lados, solo hay que consid-
erar n candidatos para detectar la banda soporte mas estrecha: para cada lado l de P la
banda que dene la recta que lo contiene y la recta paralela que es soporte. Esta segunda
recta se apoya en un vertice (o en dos si es un lado paralelo a l) q que es antpoda de los
dos extremos de l. La anchura de esta banda es la altura del triangulo de base l y vertice
opuesto q.

Calculo con calibres de la anchura de un convexo

Entrada: Lista cclica P con los n vertices de un polgono convexo en orientacion


positiva.

Salida: Valor de la anchura de P , A.


Paso 1: Inicializar A := .
Paso 2: Localizar en P los puntos mnimo y maximo con orden lexicograco: xmin
y xmax .
62 TEMA 4: DIAMETRO Y CALIBRES

Paso 3: Hacer p := xmin y q := xmax .

Paso 4: Mientras q = xmin o p = xmax repetir:



Hacer x := p + qSIG(q) = p + SIG(q) q.
Si (p, SIG(p), x) < 0,
2 |(p, SIG(p), q)|
1. Hallar A := .
d(p, SIG(p))
2. Hacer A := min(A, A ) y p := SIG(p).
Si (p, SIG(p), x) > 0,
2 |(q, SIG(q), p)|
1. Hallar A := .
d(q, SIG(q))
2. Hacer A := min(A, A ) y q := SIG(q).
Si (p, SIG(p), x) = 0,
2 |(q, SIG(q), p)|
1. Hallar A := .
d(q, SIG(q))
2. Hacer A := min(A, A ), p := SIG(p) y q := SIG(q).
Paso 5: Acabar devolviendo A.

La complejidad de este algoritmo es O(n).

4.4.2 Rectangulo de area mnima que contiene a una nube


Consideremos ahora el problema de encontrar el rectangulo de area mnima que contiene
a una nube de puntos.
De nuevo podemos reducir esta busqueda a la del rectangulo de menor area que contiene
a su cierre convexo ya que tal rectangulo es un convexo que contiene a la nube y por tanto
ha de contener a su cierre convexo.
As pues, sea P un polgono convexo de n lados y se quiere hallar ecientemente el
rectangulo de menor area R que lo contiene. Desde luego la solucion no tiene por que ser
unica.
Una primera observacion es que necesariamente R ha de apoyar cada uno de sus lados
en un vertice de P . Si algun lado l de R no se apoya, se puede desplazar paralelamente
l hacia P y se obtiene otro rectangulo de menor area que R y que contiene a P . Eso
contradice el que R sea el de menor area conteniendo a P .
Por tanto, cada par de lados opuestos de R se apoya en un par de vertices antpodas
de P . Este dato es importante pues nos sugiere el uso del metodo de rotacion de calibres.
En esta ocasion, en vez de usar un par de calibres, habra que usar dos: un par ortogonal
a otro, as se obtendran los cuatro vertices de apoyo del rectangulo. Sin embargo, es facil
observar que cuatro puntos no bastan para determinar un rectangulo: hay innitos que se
apoyan en ellos.
4.4. OTRAS APLICACIONES DE LA ROTACION DE CALIBRES 63

C1 q C4
4

q
3
q
1

C2 q C3
2

La siguiente proposicion permite zanjar la cuestion.

Proposicion 4.4.3 El rectangulo de menor area que contiene a un polgono convexo se


apoya en uno de los lados del polgono.

Dem: La idea, al igual que para la anchura, es que si ningun lado del rectangulo se apoya
en un lado del convexo, entonces hay libertad suciente para girar cada lado del rectangulo
sobre su punto de apoyo en P y obtener otro rectangulo de area menor contradiciendo la
hipotesis.
La prueba consiste pues en justicar que siempre hay un angulo y una direccion de giro
en la que se disminuye el area.
Como al n y al cabo el area del rectangulo es el producto de las anchuras de las bandas
que determinan sus lados, un primer intento sera disminuir una de estas cantidades tal
y como se hizo en el apartado anterior. Sin embargo, ambas magnitudes van ligadas y, a
veces, disminuir una supone aumentar la otra con lo que no esta claro que disminuya el
producto de ambas. Vease la gura.
q R
4

q1

1 q
3
q
2

Para disminuir la altura habra que girar en sentido negativo un pequeno angulo pero en esa direccion
aumenta la base.

En este caso, consideramos los angulos 1 y 2 marcados en la gura anterior. El area


de R sera:
A(R) = d(q1 , q3 )d(q2 , q4 ) sin(1 ) cos(2 )
El rectangulo R que se obtiene girando cada lado un angulo (positivo o negativo) es:

A(R ) = d(q1 , q3 )d(q2 , q4 ) sin(1 ) cos(2 ) con 1 [0, ], 2 [ , ].
2 2

Podemos considerar esto como una funcion de , g() = A(R ). Observese que g(0) =
A(R), y se trata de averiguar como tomar (pequeno) para que g decrezca localmente.
64 TEMA 4: DIAMETRO Y CALIBRES

q q R
4 R 4

q1 q1 R'

2 2

1 q 1 q
3 3
q q
2 2

Si R no se apoya en un lado un pequeno giro en una de las dos direcciones puede dar otro rectangulo
menor.

3
g  () = d(q1 , q3 )d(q2 , q4 ) cos(1 + 2 2) con 1 + 2 ( , )
2 2

g (0) = d(q1 , q3 )d(q2 , q4 ) cos(1 + 2 )

Si 1 + 2 > , entonces g  (0) > 0. En este caso: tomando < 0, g() < g(0).
2

Si 1 + 2 < , entonces g  (0) < 0. En este caso: tomando > 0, g() < g(0).
2

Si 1 + 2 = , entonces g  (0) = 0 y g  (0) < 0 (0 es maximo local de g). En este
2
caso: tomando = 0, g() < g(0).
QED
Como consecuencia de este resultado se observa que basta considerar n candidatos:
para cada lado de P el unico rectangulo circunscrito que se apoya en el.
Tomemos dos pares de calibres orientados como muestra la gura. Los puntos de apoyo
determinan una cuaterna (q1 , q2 , q3 , q4 ) con qi , qi+2 antpodas para i {1, 2}.
Una observacion interesante es que cuando los calibres han girado un angulo total de

, (C4 se situa donde inicialmente estaba C1 y donde corresponda todos los demas), ya
2
se han apoyado en todos los lados de P y por tanto ya se ha pasado por el rectangulo de
menor area.
Todo este estudio nos conduce al siguiente algoritmo.

Area del rectangulo de area mnima que contiene a un convexo


Entrada: Lista cclica P con los n vertices de un polgono convexo en orientacion
positiva.
Salida: Valor del area del rectangulo de menor area que contiene a P , M .
Paso 1: Localizar en P los puntos de abscisa mnima, maxima, ordenada mnima y
ordenada maxima. Inicializar la posicion de los calibres C1 , C2 , C3 , C4 sobre
ellos como muestra la primera gura.
q1 := xmin q3 := xmax
Paso 2: Inicializar . (Si sobre alguno de los calibres hubiera
q2 := ymin q4 := xmax
mas de un vertice se elige el ultimo en la direccion del calibre).
4.4. OTRAS APLICACIONES DE LA ROTACION DE CALIBRES 65

Paso 3: Inicializar M := .

Paso 4: Mientras la cuaterna (q1 , q2 , q3 , q4 ) = (ymin , xmax , ymax , xmin ) repetir:



Hallar = min{ (Ci , qi SIG(qi )) / i = 1, 2, 3, 4}
Actualizar las posiciones de los calibres girandolos .

Supuesto que =  (Cj , qj SIG(qj )),
1. Hallar el area, M  , del rectangulo que se apoya en q1 , q2 , q3 , q4 y
sobre el lado qj SIG(qj ).
2. Actualizar M := min(M, M  ).
3. Hacer qj := SIG(qj ).
Paso 5: Acabar devolviendo M . (Si ademas se desea el rectangulo, la modicacion
es muy sencilla).

La complejidad de este algoritmo es O(n). Por tanto, en tiempo O(n log n) se puede
obtener un rectangulo de area mnima que contiene a una nube de n puntos.
Para concluir apuntamos como realizar el calculo efectivo del area del rectangulo y de
la comparacion entre angulos que se lleva a cabo en el algoritmo.

Area del rectangulo Supongamos que el lado apoyado es qj SIG(qj ), vease la siguiente
gura.

q
j+2
q
j+1

q
j-1 SIG(q )
j
q
j

Considerese la suma de los ndices modulo 4.



Consideremos el vector
u = qj SIG(qj ) = (u1 , u2 ) y sea u el vector ortogonal a

u de
coordenadas (u2 , u1 ). Entonces,



<

u ,
qj1q
j+1 > < u , qj qj+2 >
Area = .
 u 2

Determinacion del mnimo angulo El menor angulo entre los cuatro que forman cada
calibre con el lado siguiente del polgono puede hallarse sin calcular dichos angulos. Vease
la siguiente gura.
66 TEMA 4: DIAMETRO Y CALIBRES

C4 q C3 OY
4
u2
u3
q OX
q 3 q x3
1 u4 1
x1
u1 x4 x2
C2
C1 q C1
2
(a) (b) (c)
Reduccion de todos los angulos a un solo cuadrante.


Para cada i {1, 2, 3, 4} consideramos los vectores
ui = qi SIG(qi ) y ui que es el vector
resultante de girar

ui un angulo 2 . Con ellos construimos los siguientes puntos:

x1 = SIG(q1 ) x3 = q1

u 3



x2 = q1 u2 x4 = q1 + u4

Estos puntos estan en un cuadrante y nuestro problema se reduce a averiguar cual es


el menor angulo que forman estos puntos con el calibre C1 . Esto se puede hacer facilmente
con tests de areas signadas.

4.5 Referencias y lecturas complementarias


Apartado 2.3 del captulo 4 del libro Computational Geometry. An Introduction
de F. PREPARATA, M. I. SHAMOS.

Solving Geometric Probems with the Rotating Calipers de G. T. Toussaint, Pro-


ceedings of IEE MELECON 83.
Tema 5

Triangulaciones

5.1 Introduccion
La triangulacion es una de las herramientas basicas no solo en geometra computacional
sino en ambitos tan diversos como en reconocimiento de formas, gracos por ordenador,
sistemas de informacion geograca, cartografa, diseno asistido por ordenador, modelado
de solidos, etc.
Por citar algun ejemplo concreto, recordemos que una tecnica muy habitual en calculo
numerico es la interpolacion lineal a trozos de funciones con objeto de aproximarlas. Si
se trata de una funcion de una variable, y se conoce cuanto vale en ciertos puntos de
su dominio, x1 , x2 , . . . , xm , como en la recta real estos puntos estan ordenados, los seg-
mentos rectos de la funcion interpoladora quedan perfectamente determinados por cada
par de puntos consecutivos. Pensemos ahora en la situacion analoga para aproximar una
funcion de dos variables. Se conoce el valor de la funcion en varios puntos del plano
(x1 , y1 ), (x2 , y2 ), . . . , (xm , ym ) y se trata de interpolar linealmente a trozos la funcion en
esos puntos. Los trozos ahora son porciones de planos en el espacio y la pregunta es
como determinar cada uno de esos trozos. La respuesta mas natural es que esos trozos
sean triangulos, as, lo que viene a sustituir al orden en la recta real en este caso es la
triangulacion de la nube de puntos, vease la gura.

z
y

y
x
x

Aproximacion lineal de funciones de una y dos variables.

Determinar la posicion de un determinado punto respecto a un polgono parece un


problema mucho mas simple si este esta triangulado ya que los triangulos son polgonos
mucho mas manejables. En general, descomponer polgonos complicados en otros mas
simples y con buenas propiedades, suele ser a menudo un recurso poderoso para resolver
ecientemente ciertos problemas como los de localizacion, visibilidad, reconocimiento de

67
68 TEMA 5: TRIANGULACIONES

formas, calculo de trayectorias mnimas y sin colision, etc. De ah que surja la necesidad
de averiguar si tales descomposiciones se pueden llevar a cabo y, si es as, como calcularlas.
Este tema se centra en el estudio de la triangulacion de polgonos simples. Se estable-
ceran las deniciones y los resultados basicos relativos a este tipo de triangulacion, as
como algunos algoritmos para calcularla ecientemente. Como motivacion haremos una
pequena incursion en problemas de visibilidad y galeras de arte y veremos como aplicar
las triangulaciones en su resolucion.

5.2 Problema de la galera de arte


Imaginemonos por un instante que el plano de una galera de arte viene representado por
un polgono simple y es preciso vigilar su interior colocando guardias en sus vertices.

Vigilando (iluminando) una galera de arte.

Se trata de averiguar cuantos guardias son sucientes para vigilar totalmente el polgono
y donde colocarlos. Por supuesto que colocando un guardia en cada vertice el polgono
estara vigilado, pero se trata de optimizar la vigilancia. Esta optimizacion puede enfocarse
de distintas maneras.
Una consistira en, dado un polgono simple, encontrar el menor numero de guardias
que se necesita para vigilar su interior, y su ubicacion. Este es un problema sumamente
complicado, de hecho esta catalogado entre los problemas computacionalmente intratables
(NP-duro).
Otra manera de enfocar el problema de optimizacion, mas asequible, consistira en
encontrar el numero de guardias que siempre son sucientes para vigilar todo polgono de
n lados, y que en algunas ocasiones es necesario, es decir, que existen polgonos de n lados
que requieren exactamente ese numero de guardias.
Este problema se ha venido llamando problema de la galera de arte y fue propuesto por
V. Klee en 1973. Dos anos mas tarde V. Chvatal lo resolvio. A continuacion enunciamos el
teorema que recoge el resultado obtenido, si bien hemos preferido mostrar aqu la elegante
demostracion dada posteriormente por S. Fisk.
 
n
Teorema 5.2.1 (Teorema de la galera de arte) guardias colocados en vertices
3
son siempre sucientes y ocasionalmente son necesarios, para vigilar el interior de cualquier
polgono simple de n lados.
5.2. PROBLEMA DE LA GALERA DE ARTE 69

Dem: Esta demostracion es constructiva ya que proporciona un metodo para colocar


dichos guardias. En ella se echa mano de ciertas herramientas (triangulacion de polgonos,
tricoloreado de grafos, etc.) abusando, quiza un poco, de la intuicion para dar por sentado
que esto se puede hacer. Aceptemoslas como ciertas de momento, la siguiente seccion del
tema se ocupara de probar estos detalles.

Suciencia: En primer lugar, triangulemos el interior del polgono P . Vease la siguiente


gura. Esta triangulacion puede verse como un grafo cuyos nodos son los vertices de P y
cuyas aristas son los lados de P junto con todos los segmentos anadidos para triangular.
Este grafo se puede tricolorear, es decir, se puede asignar a cada vertice uno de los tres
colores disponibles, de modo que no haya dos vertices del mismo color adyacentes en el
grafo. Consideremos una tricoloracion de la triangulacion. Sea ni el numero de vertices de
P coloreados con el color i, para cada i {1, 2, 3}.

Triangulacion del polgono y su tricoloreado.

Evidentemente n = n1 + n2 + n3 , y como todo triangulo tiene un vertice de cada color y


todo punto de P esta en alguno de los triangulos, colocando guardias en todos los vertices
de un mismo color, P esta totalmente vigilado. Elijamos pues el color menos utilizado.
Entonces n 3 min(n1 , n2 , n3 ), de donde

 
n
min(n1 , n2 , n3 )
3

 
n
Y por tanto, guardias son siempre sucientes.
3
 
Necesidad: Vamos a construir, para cada n 3, un polgono que requiera n
guardias
  3
para ser vigilado. Sea k = n3 , entonces consideramos el peine con k puas que muestra
la gura. El vertice extremo de la pua solo puede vigilarse colocando un guardia sobre el
o sobre alguno de sus dos vertices adyacentes. En cualquier caso el guardia que se coloque
para vigilar una pua no puede aprovecharse para ademas vigilar otra, por tanto hace falta
un guardia por cada pua, es decir k.
70 TEMA 5: TRIANGULACIONES

k
{
(a) (b) (c)

(a) n = 3k , (b) n = 3k + 1 (c) n = 3k + 2


QED
A raz de este resultado surgieron, y siguen surgiendo, multitud de problemas relaciona-
dos con la visibilidad, vigilancia e iluminacion que globalmente se denominan problemas
de galeras de arte. Suelen aparecer al considerar variantes en las condiciones del problema
de la galera de arte. Por ejemplo, que pasa si eliminamos la restriccion de que los guardias
hayan de estar situados en los vertices y les permitimos que esten colocados en el interior.
O por que no, en vez de estar jos, les permitimos que patrullen a lo largo de un lado. O
bien, el polgono lo interpretamos como una fortaleza y queremos vigilar el exterior; o si
lo interpretamos como una prision, hay que vigilar tanto el interior como el exterior, etc.
Las posibilidades se multiplican si junto a esas variantes, se considera el estudio de
casos especiales de polgonos, por ejemplo los ortogonales, que son aquellos cuyos lados
son paralelos a los ejes coordenados. O se vara el tipo de visibilidad, por ejemplo en
vez de lineal, circular. Esto es, dos puntos x e y interiores a P se ven circularmente si
existe un arco de circunferencia totalmente contenido en P que los conecta. Este tipo de
visibilidad resulta muy interesante sobre todo si se interpreta en terminos de movimiento
sin colision. Por ejemplo, si x e y se ven linealmente, es decir el segmento recto xy esta
contenido en P , signica que se puede ir de x a y en lnea recta. Si no se ven linealmente
pero s circularmente signica que realizando un giro s se puede ir de x a y.

Polgono ortogonal.

5.3 Triangulacion de un polgono


Denicion 5.3.1 Dado un polgono simple P de n vertices, una triangulacion interior
de P es una subdivision de P en regiones triangulares de interiores disjuntos cuyos vertices
son exclusivamente vertices de P .
5.3. TRIANGULACION DE UN POLGONO 71

Dos vertices u y v de P determinan una diagonal interna de P si el segmento abierto


uv esta contenido en el interior de P .

En una triangulacion de P los lados de cada triangulo son o bien lados de P o bien
diagonales internas.

Proposicion 5.3.2 Todo polgono de n > 3 vertices admite una diagonal interna.

Dem: Sea u un vertice convexo de P (por ejemplo xmin ), y sean v y w sus vertices adya-
centes.

w w
u u P
P y

v v

Localizacion de una diagonal interna.

1. Si el triangulo t = vuw no contiene ningun vertice de P salvo v, u, w, entonces vw


es una diagonal interna de P ya que cualquier lado de P que intersecara a vw tendra
uno de sus extremos en dicho triangulo.
2. En otro caso, de todos los vertices de P {u, v, w} contenidos en t, vease la gura,
sea y el que mas dista del segmento vw (uno de ellos si hubiera varios). Entonces uy
es una diagonal interna de P ya que si hubiera un lado de P que intersecara a uy
necesariamente tendra uno de sus extremos en t y dicho vertice distara de vw mas
que y lo cual es absurdo. QED

Corolario 5.3.3 Todo polgono simple admite una triangulacion.

Dem: Por induccion sobre el numero de vertices del polgono.

- Para n = 3, P es el unico triangulo de la triangulacion T de P .


- Supongamoslo cierto para todo polgono con m vertices, con 3 m < n, y sea P
un polgono con n vertices. Como n > 3, el teorema anterior garantiza la existencia
de una diagonal interna uw de P . Sean P1 y P2 los subpolgonos resultantes de
dividir P cortandolo por esa diagonal. El numero de vertices de cada uno de esos
polgonos satisfacen 3 n1 , n2 < n, luego por hipotesis de induccion admiten sendas
triangulaciones T1 y T2 . Entonces T = T1 T2 es una triangulacion de P . QED

Si identicamos una triangulacion de P , con el conjunto de sus diagonales internas


(lo haremos siempre que se trate de hallarla), la demostracion anterior proporciona un
algoritmo para triangular P a base de ir introduciendo recursivamente diagonales internas.
72 TEMA 5: TRIANGULACIONES

Triangulacion por insercion de diagonales

1. Si n = 3, devolver como T (conjunto de diagonales de la triangulacion).

2. Si n > 3,

(a) Encontrar una diagonal interna vw de P .


(b) Dividir P en dos polgonos P1 , P2 cortandolo por vw.
(c) Obtener recursivamente T1 y T2 , y devolver T1 T2 {vw}.

Complejidad:

Tiempo: T (n) = T (n1 ) + T (n2 ) + O(n) donde n1 = |P1 |, n2 = |P2 |, n = |P | y


n1 + n2 = n + 2.
Como en el peor de los casos n1 o n2 es n 1, T (n) = O(n2 ).

Espacio: S(n) = O(n + d) donde d es el numero de diagonales internas de T (P ).

La pregunta clave ahora es cuantas diagonales internas tiene una triangulacion de un


polgono de n lados. Acaso depende de como sea el polgono, o mas bien del metodo
utilizado para triangularlo. El siguiente resultado despeja toda duda a este respecto.

Teorema 5.3.4 Toda triangulacion de un polgono de n vertices tiene n 2 triangulos y


n 3 diagonales internas.

Dem: Por induccion sobre n:

- Para n = 3, P es un triangulo, solo tiene una triangulacion con n 2 = 1 triangulo


y n 3 = 0 diagonales internas.

- Supongamoslo cierto para todo polgono de m vertices, 3 m < n. Sea P un


polgono con n vertices y T una triangulacion de P . Como n > 3, la triangulacion
debera contener al menos una diagonal interna vw que divide a P en dos polgonos
P1 y P2 , de tamanos n1 , n2 respectivamente, con n1 + n2 = n + 2 y 3 n1 , n2 < n.
Tambien divide a T en las respectivas triangulaciones de estos polgonos, T1 y T2 .
Por hipotesis de induccion, Ti consta de ni 2 triangulos y ni 2 diagonales internas,
para cada i. Evidentemente T1 y T2 no tienen en comun ningun triangulo y ninguna
diagonal interna, luego el numero de triangulos de T es (n1 2)+(n2 2) = n+24 =
n2 y el numero de diagonales internas de T es (n1 3)+(n2 3)+1 = n+25 = n3.
QED
Puesto que el tamano de una triangulacion (numero de triangulos y de diagonales inter-
nas) viene determinado a priori por el numero de vertices del polgono, resulta razonable
preguntarse cuanta libertad queda para obtener una triangulacion.
El numero de triangulaciones distintas que admite un polgono de n vertices oscila
entre una como en los polgonos vela, vease la siguiente gura, y el numero de Catalan
5.3. TRIANGULACION DE UN POLGONO 73
 
1 2n 4
cn2 = que es el numero de triangulaciones de un polgono convexo. Es facil
n1 n2
observar que el numero de triangulaciones esta estrechamente relacionado con el numero
de vertices concavos que tiene P y con el modo en que estos estan distribuidos.

(a) (b)
Polgonos extremales en cuanto al numero de triangulaciones distintas que admite: (a) solo admite una, y
(b) el convexo de n vertices que admite cn2 (no estan dibujadas todas).

5.3.1 Grafo dual de una triangulacion


Una triangulacion T de un polgono P es un grafo plano cuyos vertices o nodos son los
vertices de P y las aristas, los lados de P junto con las diagonales internas de T . Como
veremos, este grafo tiene propiedades muy interesantes de las que carece, por ejemplo, la
triangulacion de una nube de puntos.
El grafo dual de este grafo es aquel cuyos vertices representan los triangulos de T y la
adyacencia entre triangulos viene dada por la vecindad, es decir por compartir un lado.

Triangulacion de un polgono y su grafo dual (en gris).

Teorema 5.3.5 El grafo dual de la triangulacion de un polgono simple es un arbol.

Dem: Basta ver que es un grafo acclico y que la diferencia entre el numero de aristas y el
de nodos es uno. Lo segundo es inmediato de comprobar ya que tiene tantos nodos como
triangulos: n 2 y tantas aristas como diagonales internas hay en la triangulacion: n 3.
En cuanto a lo primero, un ciclo en el dual de una triangulacion de un polgono simple
es imposible (notese que en en el dual de una triangulacion de una nube de puntos s
es posible, vease la siguiente gura). En efecto, si t1 , t2 , . . . , tk , t1 (k 3), fuera un ciclo,
signicara que podemos ir de un triangulo al consecutivo en el ciclo atravesando diagonales
74 TEMA 5: TRIANGULACIONES

internas. Esto implica que necesariamente hay un vertice del polgono en el interior del
mismo lo cual es absurdo.

Triangulacion de una nube de puntos. Ni es tricoloreable ni su grafo dual un arbol.

QED

Denicion 5.3.6 En un polgono se denomina oreja a un vertice convexo cuyos vertices


adyacentes determinan una diagonal interna del polgono. Por extension tambien se llama
oreja en una triangulacion del polgono, al triangulo en el que dos de sus lados son lados
del polgono y el otro no.

(a) Orejas de un polgono. (b) Orejas de una triangulacion.

Observese que las orejas en una triangulacion son nodos de grado uno en el arbol dual,
es decir, son las hojas. Como todo arbol con mas de un nodo tiene al menos dos hojas,
se concluye que para un polgono con mas de 3 vertices toda triangulacion suya tiene al
menos dos orejas.
Como aplicacion de este hecho tenemos, por un lado, un algoritmo para triangular P
cortando inductivamente orejas, y por otro lado, veremos que la triangulacion de un
polgono simple, vista como un grafo, se puede tricolorear.

Triangulacion cortando orejas

1. Si n = 3, devolver como T .

2. Si n > 3,

(a) Encontrar un vertice oreja u en P .


(b) Cortar esa oreja, es decir considerar el polgono P  = P u
(c) Obtener recursivamente T  triangulacion de P  , y devolver T  {vw}, siendo v
y w los vertices adyacentes a u en P .
5.4. ALGORITMOS DE TRIANGULACION 75

Complejidad:

Tiempo: T (n) = T (n1)+t1 (n) donde t1 (n) es el tiempo de localizar en un polgono


de n vertices una oreja.

La complejidad de este algoritmo viene claramente marcada por el tiempo que se


tarde en encontrar una oreja. El metodo de fuerza bruta consistira en hacer, para
cada vertice convexo de P , el test que averigua en tiempo O(n) si sus vertices adya-
centes determinan una diagonal interna, y parar cuando el test sea positivo para al-
guno de ellos. As, en el peor de los casos, t1 (n) = O(n2 ). De modo que T (n) = O(n3 ).
Sin embargo hay metodos mas depurados que permiten encontrar una oreja en tiempo
t1 (n) = O(n), con lo que se obtendra que T (n) = O(n2 ).

Espacio: Como el numero de diagonales internas d = n 3 entonces S(n) = O(n).

Teorema 5.3.7 Toda triangulacion de un polgono simple, vista como un grafo, se puede
tricolorear.

Dem: Por induccion sobre el numero de vertices del polgono.

- Para n = 3 la triangulacion consiste en un triangulo y basta con colorear un vertice


de cada color.

- Supongamoslo cierto para todo polgono con n 3 vertices. Sea P un polgono con
n + 1 vertices y T una de sus triangulaciones. Como n + 1 > 3, T tiene una oreja.
Sea u el vertice oreja de P asociado a esa oreja de T . Si eliminamos de T el triangulo
oreja, obtenemos una triangulacion T  del polgono P  = P u obtenido al cortar a
P la oreja u.
Como P  tiene n vertices, por hipotesis de induccion toda triangulacion suya se puede
tricolorear. En particular T  . Consideremos una de esas tricoloraciones. Si v y w
son los vertices adyacentes a u en P , estos han recibido sendos colores distintos en
la coloracion de T  . Asignamos a u el tercer color y ya tenemos tricoloreado el grafo
T.

QED
Hasta aqu los algoritmos vistos tienen mas interes teorico que practico debido a su
alto coste. Es el momento de ver algunos realmente ecientes.

5.4 Algoritmos de triangulacion


Durante mucho tiempo ha sido objeto de deseo probar que un polgono simple se puede
triangular en tiempo lineal. Muchos fueron los intentos, algunos fallidos, otros obtuvieron
resultados parciales pero en cualquier caso la disciplina se enriquecio enormemente con la
gran dosis de trabajo e imaginacion vertidos sobre el problema y que ha dado lugar, por
el camino, a multiples resultados sobre cuestiones muy diversas.
76 TEMA 5: TRIANGULACIONES

Desde el punto de vista teorico, la cuestion se zanjo cuando en 1991 B. Chazelle obtuvo
un algoritmo lineal. Sin embargo es un algoritmo muy complicado que aun no se ha
conseguido implementar. De modo que desde el punto de vista practico la brecha sigue
abierta.
A continuacion daremos unos cuantos algoritmos de triangulacion. Todos ellos muy
asequibles. Los primeros son optimos pero solo son validos para tipos muy especiales
de polgonos. Por ultimo veremos un algoritmo que si bien no es optimo es sencillo de
implementar y es valido para todo tipo de polgono simple.

5.4.1 Triangulacion de polgonos especiales

Veamos como triangular en tiempo lineal ciertas familias de polgonos.


Los mas faciles de triangular son, evidentemente, los convexos. Si P = (v1 , v2 , . . . , vn )
es un convexo, queda triangulado al anadir las diagonales internas: v1 vk , para todo k
{3, . . . , n 1}.
Los siguientes que analizaremos seran los abanicos. Si P no es convexo pero tiene un
vertice v1 que ve a todos los demas entonces la situacion queda igual que antes. Conviene
observar aqu que en lo que sigue supondremos que en P no hay tres vertices alineados,
si no fuera as la situacion no es nada grave pero habra que cambiar ligeramente como
calcular diagonales, vease por ejemplo en la gura como se arreglara en este caso.

v10 v10
v11 v11 v7
v9 v9
v7 v6
v8 v8 v6

v1 v1
v5 v5

v2 v3 v4 v2 v3 v4

Triangulacion de un abanico desde v1 : (a) con vertices en posicion general, (b) con alineacion de vertices.

El siguiente problema de triangulacion sera el de los polgonos debilmente visibles


desde un lado. Antes de abordarlo, conviene recordar lo que ocurra cuando aplicabamos
en el tema 3 el algoritmo de Graham para hallar el cierre convexo de un polgono debilmente
visible desde el exterior. Para este tipo de polgonos, sus bolsillos son polgonos debilmente
visibles desde un lado: la tapa del bolsillo. Al aplicar el algoritmo de Graham sobre los
vertices del bolsillo, todos los vertices salvo los dos de la tapa daban negativo el test y eso
signicaba que haba que borrarlos (vease la gura). Como se puede observar, resulta que
este proceso puede aprovecharse para triangular interiormente el bolsillo.
5.4. ALGORITMOS DE TRIANGULACION 77

Los bolsillos de un DVE son polgonos debilmente visibles desde un lado y el scan de Graham los triangula.

Esto parece proporcionar un metodo para triangular en tiempo lineal un polgono


debilmente visible desde un lado. Y as es en la mayora de los casos, es decir cuando se
trata de uno de estos bolsillos, pero vayamos con cuidado porque, si bien es cierto que
todo bolsillo de un DVE es un polgono debilmente visible desde un lado, el recproco no
es cierto en general. Vease la gura.

vk vj vk vj
v1 v2 v1 v2
vk+1 vk+1
vj-1 vj-1

Polgono debilmente visible desde el lado v1 v2 . Se descompone en dos abanicos y un polgono tipo
bolsillo de un DVE.

Esta situacion se tiene cuando el lado desde el que se ve a todo el polgono no es un lado de
su cierre convexo. En ese caso lo que procede es descomponer P en a lo mas tres polgonos
de la siguiente manera. Supongamos que P esta orientado positivamente y v1 v2 es el lado
en cuestion. Consideremos la recta que contiene ese lado con la orientacion inducida por
la de P . Si hay vertices en el semiplano de la derecha, estos se encuentran formando una
o dos cadenas unidas a sendos extremos del lado v1 v2 . Vease la gura.
Consideremos los polgonos P1 = (v1 , vk , vk+1 , vk+2 , . . . , vn ), P2 = (v2 , v3 , . . . , vj1 , vj ) y
P3 = (v1 , v2 , vj , vj+1 , . . . , vk1 , vk ).
Como P es debilmente visible desde v1 v2 , los polgonos P1 y P2 , caso de existir, han de
ser abanicos desde v1 y v2 respectivamente, y su triangulacion es trivial. El otro polgono
P3 es un debilmente visible desde un lado, v1 v2 , que tambien es lado de su cierre convexo.
Luego se puede considerar un bolsillo de un polgono debilmente visible desde el exterior
y triangularlo como tal aplicando adecuadamente el algoritmo de Graham.
De modo que si tenemos un polgono debilmente visible desde un lado y conocemos ese
lado, podemos triangularlo en tiempo lineal en el numero de vertices.
Utilizaremos este resultado para triangular otros tipos de polgonos a base de descom-
ponerlos en subpolgonos debilmente visibles desde un lado.
78 TEMA 5: TRIANGULACIONES

Por ejemplo, supongamos que P es estrellado y q es un punto de su nucleo. Si q es


un vertice o esta en un lado, ya sabemos como triangularlo pues se tratara de un abanico
o de un debilmente visible desde el lado en que se encuentra. As que supongamos que q
esta en el interior de P . Desde un vertice cualquiera, pongamos v1 , lanzamos un rayo que
pase por q. Supongamos que entre v1 y q no hay mas vertices de P en ese rayo, o en caso
contrario nos jamos en el ultimo antes de llegar a q y razonamos con el como si fuera
v1 . Este rayo incidira en un punto x de la frontera de P , vease la gura. Dividamos P ,
cortandolo por el segmento v1 x, en dos subpolgonos P1 y P2 , ambos debilmente visibles
desde el lado v1 x ya que contiene a q. Triangulemos estos polgonos obteniendo T1 y T2 .

v1 v1
q q x
x

Estrellado desde q y su descomposicion en dos debilmente visibles desde el lado v1 x.

Si x es un vertice de P , entonces v1 x es una diagonal interna, de modo que T =


T1 T2 {v1 x}.
Si x no es un vertice de P , es lo que se llama un punto de Steiner, esto es, un
vertice cticio anadido para descomponer P , entonces habra que trabajar un poco mas.
De T1 T2 {v1 x} no son validas aquellas diagonales que tengan como extremo a x.
Tomemoslas todas ellas y ordenemoslas angularmente respecto de x. Los vertices de P
extremos de esas diagonales as ordenados forman, junto con los vertices vk y vk+1 que
determinan el lado de P donde se encuentra x, un polgono P3 = (vk , vk+1 , u1 , u2 , . . . , um )
debilmente visible desde el lado vk vk+1 ya que todos sus vertices son visibles desde x. De
modo que T = T1 T2 T3 {u1 x, u2 x, . . . , um x}.

vk+1
v1 u1
q x x
u2 u3
u4 vk

Estrellado desde q y su descomposicion en dos debilmente visibles desde un lado con punto de Steiner x.
Obtencion del debilmente visible desde vk vk+1 .

La triangulacion de los polgonos P1 , P2 y P3 se efectua en tiempo lineal. El unico punto


conictivo sera la ordenacion angular de u1 , . . . , um respecto de x, pero esta ordenacion es
el orden de aparicion en P .
5.4. ALGORITMOS DE TRIANGULACION 79

Supongamos ahora que P es un polgono monotono, por ejemplo respecto al eje OX.
Consideremos la descomposicion de P en dos cadenas monotonas C1 y C2 , cuyos primer y
ultimo elemento son respectivamente xmin y xmax para ambas. Mezclemos lexicogracamente
los vertices de ambas cadenas obteniendo una lista L.

Las diagonales mas gruesas descomponen P en polgonos DVL.

Si u y v dos vertices (distintos de xmin y xmax ) consecutivos en L y pertenecen a distintas


cadenas entonces determinan una diagonal interna. Si cortamos P por esas diagonales
obtenemos una descomposicion de P en subpolgonos debilmente visibles desde un lado.
Si no hubiera ninguna de esas diagonales es que xmin xmax es un lado de P y este, ademas
de ser monotono, es debilmente visible desde ese lado.
En cualquier caso, la triangulacion de un polgono monotono se reduce en tiempo lineal
a triangular polgonos debilmente visibles desde un lado.

5.4.2 Algoritmo de Mehlhorn


Veamos por n un algoritmo valido para todo polgono simple. Si bien su complejidad no
es lineal sino O(n log n).
Se trata de un algoritmo de barrido de izquierda a derecha con una recta vertical. Por
tanto supondremos que P no tiene lados verticales. Las posiciones de parada de dicha
recta para la actualizacion de su lectura y el calculo de diagonales de la triangulacion,
corresponderan a los vertices del polgono P .
Dependiendo de la posicion de los lados adyacentes a un vertice p de P respecto a la
recta vertical L que pasa por p podemos clasicar a p en inicio, si ambos lados estan a la
derecha de L, n si ambos estan a la izquierda y codo si uno esta a la izquierda y otro a la
derecha (vease la gura). La forma de proceder sera distinta segun el tipo de vertice en el
que se detiene la recta de barrido.

L L L

p es inicio p es fin p es codo


80 TEMA 5: TRIANGULACIONES

La idea clave del algoritmo consiste en lo siguiente. Toda recta vertical corta a un
polgono simple en un numero par de lados. Estas intersecciones determinan un numero
impar de intervalos en la recta, unos dentro y otros fuera del polgono (vease la gura).

"fuera" "dentro"

Un intervalo [l, l ] de tipo dentro en la recta L tiene asociada una cadena poligonal
de vertices consecutivos en P yendo del extremo izquierdo del lado l al del lado l. Si
suponemos que esa parte del polgono ya ha sido triangulada, es decir, ya se han tenido
en cuenta todas las diagonales de la triangulacion cuyos extremos estan a la izquierda de
L se trata de ver que nuevas diagonales se obtienen al considerar un nuevo vertice p, el
correspondiente a una posicion posterior de parada de la recta de barrido, si cae en ese
intervalo (vease la gura).

"dentro"

Notese que en ese caso las posibles diagonales a anadir seran aquellas entre p y los
vertices de la cadena poligonal mas proximos a la recta actual de barrido. Estos vertices
forman una cadena convexa C que convendra mantener asociada al intervalo [l, l ]. Por
razones de eciencia en la comprobacion de que diagonales se pueden formar entre p y los
vertices de C conviene destacar en C el vertice vd mas a la derecha. De este modo, el
primer candidato a ser diagonal sera pvd (y de hecho lo sera salvo si es un lado de P ) y
avanzando en ambas direcciones de C se pueden obtener todas las diagonales posibles en
tiempo lineal en el numero de diagonales encontradas en C .
5.4. ALGORITMOS DE TRIANGULACION 81

l'
vk

vk-1
C p
P
v2 vd
v
1 l

Algoritmo de triangulacion de Mehlhorn


Entrada: El polgono P vendra dado con orientacion positiva mediante una lista cclica
con sus n vertices. En tiempo O(n) puede preprocesarse esta informacion de manera que
el acceso de cada vertice a sus lados adyacentes sea constante y el de cada lado de P a sus
vertices extremos tambien.
Salida: La triangulacion vendra descrita por la lista de sus diagonales internas T .
Estructuras de datos:

- Las posiciones de parada de la recta de barrido pueden almacenarse en una cola


prioritaria X.

- La lectura de la recta de barrido L puede implementarse en un arbol AVL cuyos


nodos corresponden a intervalos ordenados segun su aparicion sobre la recta vertical
del momento, etiquetados como dentro o fuera (segun si tienen un puntero a la
cadena convexa C o a NIL respectivamente).

- Una cadena convexa C asociada a un intervalo dentro puede implementarse en una


lista doblemente enlazada. Su entrada sera por la posicion de vd .

Paso 1: Inicializar T con la lista vaca y L con el intervalo [, ] etiquetado como


fuera.
Paso 2: Etiquetar cada vertice de P con el tipo inicio, nal o codo segun su condicion.
Paso 3: Inicializar X con los vertices de P ordenados lexicogracamente (x < y).
Paso 4: Mientras X = , extraer su mnimo: p
Caso 1: p es inicio

1. Localizar en L el intervalo [l, l ] que contiene a p.


2. Caso 1.1: [l, l ] es de tipo fuera.
82 TEMA 5: TRIANGULACIONES

l'
l2
p
l1
P
l

- Actualizar L borrando [l, l ] e insertando los intervalos:


[l, l1 ] etiquetado como fuera,
[l1 , l2 ] etiquetado como dentro con C = (p) siendo su vd = p, y
[l2 , l ] etiquetado como fuera.
3. Caso 1.2: [l, l ] es de tipo dentro con C = (v1 , . . . , vd , . . . , vk ) como cadena
convexa asociada.

l' l'
l2 l2
p
C p C vd
vd l1 l1

l P l P

L L

- Anadir a T la diagonal pvd .


- Avanzar en C en ambas direcciones a partir de vd anadiendo a T la diag-
onal pv hasta que (p, v, v  ) 0, en sentido ascendente, y (p, v, v  ) 0
en sentido descendente, donde v  es el siguiente a v en la direccion de
avance.
Sean vj1 y vj2 los vertices primero y ultimo de C tales que pvj1 y pvj2 son
diagonales.
- Actualizar L borrando [l, l ] e insertando los intervalos:
[l, l1 ] etiquetado como dentro con C = (v1 , . . . , vj1 , p) siendo su vd = p,
[l1 , l2 ] etiquetado como fuera, y
[l2 , l ] etiquetado como dentro con C  = (p, vj2 , . . . , vk ) siendo su vd = p.
Caso 2: p es codo
1. Si l1 es el lado adyacente a p de extremo a la izquierda de p, localizar en L los
dos intervalos en los que l1 aparece como extremo: [l1 , l ] y [l, l1 ]. Supongamos
que es [l, l1 ] el que esta etiquetado como dentro (el otro caso es simetrico)
con cadena asociada C = (v1 , . . . , vd , . . . , vk ).
5.4. ALGORITMOS DE TRIANGULACION 83

l' l'

l1 l2 l1 l2
C vd p C vd p
l P l P

L L

2. Si pvd no es un lado de P , anadirlo a T como diagonal.


3. Avanzar en C en ambas direcciones a partir de vd anadiendo a T la diagonal
pv hasta que, en una direccion, sea un lado de P , y en la otra (p, v, v  ) 0,
si es en sentido descendente como en la gura, o (p, v, v  ) 0 si es en sentido
ascendente. (De nuevo v  es el siguiente a v en la direccion de avance.)
Sean vj1 y vj2 los vertices primero y ultimo de C tales que pvj1 y pvj2 son
diagonales. Notese que si existen, vj2 = vk1 .
4. Actualizar L borrando [l, l1 ] y [l1 , l ] e insertando los intervalos:
[l, l2 ] etiquetado como dentro con C = (v1 , . . . , vj1 , p) siendo su vd = p, y
[l2 , l ] etiquetado como fuera.

Caso 3: p es n

1. Localizar en L el intervalo [l1 , l2 ] determinado por sus lados adyacentes.


2. Caso 3.1: [l1 , l2 ] es de tipo dentro con C = (v1 , . . . , vd , . . . , vk ) como cadena
convexa asociada.

l' l'
l2 l2
C p C p
l1 P l1
l P
l

L L

- Anadir a T las diagonales pvi , para todo i desde 2 hasta k 1.


- Actualizar L borrando [l1 , l2 ], [l, l1 ], [l2 , l ] e insertando [l, l ] etiquetado
como fuera.
3. Caso 3.2: [l1 , l2 ] es de tipo fuera.
84 TEMA 5: TRIANGULACIONES

l' l'
C' C'
v'd
l2 l2
p p
l1 l1
vd P P
C l C l

L L

Entonces los intervalos predecesor y sucesor en L de [l1 , l2 ] seran:


[l, l1 ] etiquetado como dentro con C = (v1 , . . . , vd , . . . , vk ) y
[l2 , l ] etiquetado como dentro con C  = (v1 , . . . , vd , . . . , vk  ).
- Si pvd no es un lado de P , anadir a T las diagonales pvi , i {2, . . . , d}.
- Avanzar en C en direccion descendente a partir de vd anadiendo a T la
diagonal pv hasta que (p, v, v  ) 0, donde v  es el siguiente a v en la
direccion de avance. Sea vj el ultimo vertice tal que pvj es diagonal.
- Si pvd no es un lado de P , anadir a T las diagonales pvi , i {d, . . . , k 
1}.
- Avanzar en C  en direccion ascendente a partir de vd anadiendo a T la
diagonal pv  hasta que (p, v  , v  ) 0, donde v  es el siguiente a v  en
la direccion de avance. Sea vj  el ultimo vertice tal que pvj  es diagonal.
- Actualizar L borrando [l, l1 ], [l1 , l2 ] y [l2 , l ] e insertando:
[l, l ] etiquetado como dentro con C = (v1 , . . . , vj  , p, vj , . . . , vk ) siendo
su vd = p.

Analisis de la complejidad

Tiempo:

Paso 1: O(1)
Paso 2: O(n) ya que para determinar el tipo de cada vertice basta comparar su
abscisa con la de sus vertices adyacentes en P , que es tiempo constante.
Paso 3: Evidentemente es O(n log n).
Paso 4:
1. Extraer el mnimo de X es O(1).
2. Para cada caso de los considerados por el algoritmo, se realizan operaciones
de localizacion, borrado e insercion de un numero constante de intervalos
en un AVL. Estas operaciones sabemos que son logartmicas en el numero
de nodos del AVL, en el peor de los casos O(log n). Ademas se detectan
ciertas diagonales de T . Gracias a la referencia que mantenemos con el
vertice vd el acceso al primer candidato de diagonal pvd es constante, y
5.5. REFERENCIAS Y LECTURAS COMPLEMENTARIAS 85

a partir de ah avanzamos en ambas direcciones de la cadena convexa C


mientras encontramos diagonales. Detectar si pv es diagonal o no consiste
basicamente en calcular un area signada. En consecuencia, el tratamiento
de cada caso cuesta O(log n + no de diagonales halladas en ese caso).
3. Como hay n puntos en X, el tiempo total para el paso 4 es O(n log n+|T |) =
O(n log n + n 3) = O(n log n)
Por tanto, el tiempo total de ejecucion del algoritmo de Mehlhorn, en el peor
de los casos, es O(n log n).

Espacio: lineal ya que el tamano de cada una de las estructuras utilizadas, L, X, C,


y T tienen en el peor de los casos O(n) elementos.

Un caso particular: polgonos monotonos. Si P es un polgono monotono respecto


del eje OX, el algoritmo de Mehlhorn cuesta O(n). Basta notar que P se descompone en
dos cadenas de vertices ordenados lexicogracamente. Luego el paso 3 del algoritmo puede
reducirse a una mezcla de listas ordenadas que en tiempo O(n) da la lista ordenada de
todos los vertices de P . Ademas, las operaciones tpicas del AVL cuestan una cantidad
constante ya que el numero de intervalos (nodos) que contiene en cada momento es tres.

Polgono triangulado mediante el algoritmo de Mehlhorn.

5.5 Referencias y lecturas complementarias


Captulo 4 del libro Computational Geometry. Algorithms and Applications, de
M. de BERG, M. van KREVELD, M. OVERMARS y O. SCHWARZKOPF.

Art Gallery Theorems and Algorithms, de J. OROURKE. Oxford University Press,


NY, 1987.

Recent results in art galleries, de T. SHERMER. Proc. IEEE, No. 80, pp 1384
1399, septiembre, 1992.

Slicing an ear in linear time, de H. ELGINDY, H. EVERETT y G. TOUSSAINT.


Technical Report, McGill University, Montreal.
86 TEMA 5: TRIANGULACIONES

On a convex hull algorithm for polygons and its application to triangulation prob-
lems, de G. TOUSSAINT y D. AVIS. Pattern Recognition, Vol. 15, pp. 2329,
1982.

Captulos 1 y 2 del libro Computational Geometry in C, de J. OROURKE. Cam-


bridge University Press, 1994.

Captulo VIII, apdo. 4 del libro Data Structures and Algorithms 3: Multidimensional
Searching and Computational Geometry, de K. MEHLHORN. SpringerVerlag, 1984.