Está en la página 1de 73

GEOMETRA COMPUTACIONAL

I. T. TOPOGRAFA
LIDIA ORTEGA ALVARADO
JAN 2003
ltima modicacin: 2-06-2003
ndice general
1. Introduccin a la Geometra Computacional 4
1.1. Historia de la Geometra Computacional . . . . . . . . . . . . . . . . . . . . . 4
1.2. Eciencia de los algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3. Operaciones bsicas en Geometra Computacional . . . . . . . . . . . . . . . . 7
1.3.1. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3.2. Algunos tipos de datos simples . . . . . . . . . . . . . . . . . . . . . . 8
1.3.3. Clculo del rea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3.4. Interseccin de segmentos . . . . . . . . . . . . . . . . . . . . . . . . 11
1.3.5. Clculo de diagonales . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.3.6. Un ejemplo completo: triangulacin de un polgono . . . . . . . . . . . 15
1.4. Estructuras de Datos y Algoritmos . . . . . . . . . . . . . . . . . . . . . . . . 16
1.4.1. Introduccin a las estructuras de datos . . . . . . . . . . . . . . . . . . 16
1.5. Algunos mtodos de programacin utilizados en G. C. . . . . . . . . . . . . . 18
1.5.1. Mtodo incremental . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.5.1.1. Lnea de barrido . . . . . . . . . . . . . . . . . . . . . . . . 19
1.5.2. Divide y Vencers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2. La envolvente convexa y triangulacin de polgonos 21
2.1. La envolvente convexa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.1.1. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.1.2. Un ejemplo de resolucin . . . . . . . . . . . . . . . . . . . . . . . . 22
2.1.3. Grahams scan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.1.4. La marcha de Jarvis . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.1.5. Algoritmo Incremental . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.1.6. Mtodo Divide y Vencers . . . . . . . . . . . . . . . . . . . . . . . . 28
2.2. Triangulacin de polgonos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.2.1. Polgonos montonos . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.2.2. Particin de un polgono en componentes montonas . . . . . . . . . . 33
3. Intersecciones 36
3.1. Interseccin de polgonos convexos . . . . . . . . . . . . . . . . . . . . . . . 36
3.2. Interseccin de segmentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2
ndice general
4. Localizacin de puntos y diagramas de Voronoi 44
4.1. Punto en polgono . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.2. Diagramas de Voronoi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.2.1. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.2.2. Denicin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.2.3. Elementos del diagrama de Voronoi . . . . . . . . . . . . . . . . . . . 47
4.2.4. Propiedades de diagrama de Voronoi . . . . . . . . . . . . . . . . . . . 47
4.3. Triangulacin de Delaunay . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.3.1. Denicin y propiedades . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.4. Mtodos de construccin del diagrama de Voronoi . . . . . . . . . . . . . . . . 50
4.4.1. Mtodo Incremental . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.4.2. Mtodo Divide y Vencers . . . . . . . . . . . . . . . . . . . . . . . . 50
4.5. Problemas que resuelve el diagrama de Voronoi o la triangulacin de Delaunay 52
4.5.1. Problemas de proximidad . . . . . . . . . . . . . . . . . . . . . . . . 53
4.5.2. Interpolacin espacial . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5. Aplicaciones a los Sistemas de Informacin Geogrcos 55
5.1. Modelos de representacin de terrenos . . . . . . . . . . . . . . . . . . . . . . 55
5.1.1. El grid regular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5.1.2. Las lneas de contorno . . . . . . . . . . . . . . . . . . . . . . . . . . 56
5.1.3. La triangulacin irregular del modelo de Red (TIN) . . . . . . . . . . . 56
5.1.4. Modelos jerrquicos . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.2. Acceso a TINs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.2.1. Recorrido de un TIN . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
5.2.2. Acceso eciente a TIN. . . . . . . . . . . . . . . . . . . . . . . . . . . 59
5.3. Conversin entre modelos de terrenos . . . . . . . . . . . . . . . . . . . . . . 60
5.3.1. De muestreo de puntos a TIN. . . . . . . . . . . . . . . . . . . . . . . 61
5.3.2. De Grid a TIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.3.3. De lneas de contorno a TIN . . . . . . . . . . . . . . . . . . . . . . . 64
5.4. Computacin matemticas en terrenos . . . . . . . . . . . . . . . . . . . . . . 64
5.4.1. Sumar y restar terrenos . . . . . . . . . . . . . . . . . . . . . . . . . . 64
5.5. Computar lneas de contorno . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.5.1. Computacin directa de lneas de contorno . . . . . . . . . . . . . . . 65
5.5.2. Preprocesamiento para lneas de contorno. . . . . . . . . . . . . . . . . 66
5.6. Caractersticas topogrcas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.6.1. Puntos en terrenos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.6.2. Valles y Sierras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.6.3. Curvaturas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.6.4. Informacin de drenaje . . . . . . . . . . . . . . . . . . . . . . . . . . 70
3
1 Introduccin a la Geometra Computacional
1.1. Historia de la Geometra Computacional
La Geometra fue estudiada desde la antigua Grecia y Egipto. Constituan una herramienta muy
importante para resolver problemas prcticos. El primer algoritmo que pueda considerarse com-
pleto es la construccin Eucldea, porque fue el primero que satiszo todos los requerimientos:
es correcto, no ambiguo y tiene un nal. Este algoritmo adems da una coleccin de instruccio-
nes y reglas, posee un conjunto de primitivas asociadas.
Ya en 1902 se describi un conjunto de pasos para contar como realizar sobre papel una serie
de primitivas Eucldeas. Se hablaba por entonces ya del trmino complejidad, no computacional
pero s de dicultad para medir la complicacin de su realizacin. Se puede decir que fue una
aproximacin a lo que entendemos hoy por complejidad temporal. No se hablaba del problema
en funcin del conjunto de entrada, pero s intentaban reducirse el nmero de pasos a realizar
para resolver un problema. Poco a poco se fueron dando cuenta de que todo problema posee un
esfuerzo mnimo de realizacin, lo que nosotros llamamos complejidad del algoritmo.
Ya en 1672 se demostr que cualquier construccin que pudiera realizarse slo con regla y
comps podra hacerse usando slo comps. El concepto de lnea se ampli pasando a ser el
lugar geomtrico compuesto por la unin de los puntos de corte de dos arcos realizados con un
comps.
La Geometra ha tenido momentos de especial realce, por ejemplo el crecimiento del anlisis
real, la Geometra mtrica y la teora de la convexidad, han supuesto las herramientas mate-
mticas para el diseo de algoritmos rpidos. Por un lado la distancia es un tema esencial en
conceptos geomtricos y la teora de la convexidad es analizada para obtener propiedades glo-
bales.
La Geometra Algortmica est basada en caracterizaciones de objetos geomtricos en trminos
de propiedades de subconjuntos nitos. Un tratamiento algortmico implica eliminar el trmino
innito. Hoy da la Geometra Computacional se utiliza como herramienta bsica, no slo en
disciplinas inmediatamente relacionadas con la Geometra. A partir de nales de los aos 60
y 70, el incremento del uso de las computadoras en investigacin y desarrollo, propicia usar
estas mquinas para resolver problemas clsicos que siempre fueron resueltos a base de reglas y
comps.
Pero la memoria de las mquinas y el tiempo de ejecucin de stas, la mayora de las veces
compartido, exigi de pronto el conseguir mtodos que no slo funcionaran, sino que intentaran
optimizar al mximo dos recuerdos muy importantes, sobre todo por aquel entonces: la memoria
4
1 Introduccin a la Geometra Computacional
y el tiempo de CPU. Hoy por hoy a pesar de utilizar mquinas ms potentes, tambin se plantea
en muchas ocasiones incrementar el nmero de datos a procesar, por lo que hoy sigue siendo un
problema a resolver.
Algunas aplicaciones donde la Geometra Computacional es necesaria es la Informtica Grca,
Robtica, Sistemas de Informacin Geogrcos, etc. El trmino nace en 1975 por Shamos y
desde entonces los trabajos y los estudios en esta disciplina han ido creciendo de forma espec-
tacular.
1.2. Eciencia de los algoritmos
Existen distintas formas de medir algoritmos o de clasicarlos. Un algoritmo fcil de entender,
codicar y depurar es preferible a otro que realice lo mismo pero que no cumpla estas caracte-
rsticas. Algo similar ocurre con respecto a la eciencia; un algoritmo es eciente cuando usa
adecuadamente los recursos del ordenador y lo hace con la mayor rapidez posible. Los recursos
son siempre referidos al tiempo de ejecucin y al tiempo de CPU que necesita para ejecutarse.
Para optar por escribir un tipo de algoritmo que cumpla con las especicaciones anteriores tam-
bin es necesario saber cuantas veces va a ejecutarse dicho algoritmo y con qu cantidad de
datos. As, un algoritmo poco eciente con pocos datos es preferible utilizarlo a otro que nece-
site gran cantidad de tiempo en disearse. Por el contrario es benecioso en muchas ocasiones
realizar un buen diseo a pesar de utilizar gran cantidad de esfuerzo y emplear estructuras de
datos complejas, si se consigue nalmente un mtodo de resolucin que realice buenos tiempos
de ejecucin para entradas grandes de datos. Por otra parte, cuando nuestro algoritmo pretende
resolver un problema clsico, como puede ser en Geometra Computacional, se da por supuesto
que tiene que ser eciente con grantes cantidades de datos y adems hay que suponer que dicho
algoritmo va a ser ampliamente utilizado.
Por tanto, nuestro propsito es no slo entender y utilizar algoritmos que funcionen en Geometra
Computacional sino que tambin sean ecientes. Para medir dicha eciencia, hay que tener en
cuenta ciertos parmetros:
Dependencia de los datos de entrada del programa.
Calidad del cdigo que genera el compilador en el programa objeto.
Las instrucciones y arquitectura de las computadoras.
Tiempo de ejecucin de dicho programa.
Como entrar en detalles de compiladores diferentes y de distintas arquitecturas es muy amplio y
adems es absolutamente cambiante, basta decir que cuanto ms rpido mejor. Lo que haremos
ser estudiar los algoritmos en funcin de la entrada, bsicamente de su tamao, y adems en la
complejidad o tiempo que emplea el algoritmo para su ejecucin. Obviamente un algoritmo, o
5
1 Introduccin a la Geometra Computacional
programa puesto que se est ejecutando, va a ser ms rpido si tiene que procesar diez datos que
si tiene que realizar lo mismo con una entrada de tamao cien.
Vamos a denominar T(n) al tiempo de ejecucin de un programa con tamao n. Para no espe-
cicar el tiempo en segundos, puesto que depende excesivamente de la mquina empleada, se
usar una funcin expresada en trminos de n. Por ejemplo, T(n) = cn
2
, siendo c una constante.
En muchas ocasiones es necesario referirse al tiempo de ejecucin esperado del algoritmo en
el peor de los casos para una entrada de tamao n. De esta forma se puede acotar el problema
con una cota superior que nos permita conocer el margen en el que nos podemos mover. El caso
medio tambin puede ser interesante en casos donde se conozca que el peor caso se produce con
una probabilidad muy pequea.
Cuando decimos que el tiempo de ejecucin T(n) de un programa es O(n
2
) signica que existen
constantes enteras positivas c tales que T(n) cn
2
. Por tanto es lo que llamamos cota superior
que nos identica el peor caso. En el caso genrico decimos que T(n) es O( f (n)).
Tambin existen cotas inferiores para hablar del tiempo de ejecucin. Es una cota inferior o lo
que es lo mismo: el algoritmo se ejecutar al menos en el tiempo que la funcin g(n) indica. Se
dice que T(n) es (g(n)) cuando existe una constante c tal que T(n) cg(n).
Cuanto menor sea la representacin grca de la funcin f (n), ms rpido se ejecutar el algo-
ritmo para un conjunto de entrada de tamao dado. Pero esto no siempre es verdadero para todo
n, es decir, en ocasiones el tiempo de ejecucin se reere a grandes cantidades de informacin y
por tanto, n tiende a innito. As O(n
2
) es mejor que O(n
3
); O(n) es mejor que O(n
2
) pero peor
que O(nlogn). Por ejemplo un programa con tiempo O(100n) es ms lento para n menor que 20
que otro que se ejecute en tiempo O(5n
2
). En algoritmos tpicos de Geometra Computacional
lo que se busca sobre todo son ejecuciones en tiempo lineal O(n), o en O(nlogn).
A menos que un algoritmo tenga una velocidad de crecimiento baja, O(n) o O(nlogn), un creci-
miento modesto en la rapidez de la computadora no inuir gran cosa en el tamao del problema.
A pesar de todo lo expuesto anteriormente, si un algoritmo va a ser utilizado pocas veces, el costo
de escritura de una algoritmo eciente puede que no merezca la pena. Tampoco es necesario
si siempre va a recibir un conjunto de entrada pequeo. En algunas ocasiones un algoritmo
puede permitirse el lujo de ser algo ms lento si a cambio es ms didctico. Por otro lado, si
la eciencia a nivel de tiempo en CPU implica un alto coste en cantidad de almacenamiento o
porque se encuentre en dispositivos de memoria masiva. Por ltimo, en algoritmos numricos es
tan importante la precisin de los clculos como la eciencia de stos.
Para calcular la eciencia de un algoritmo hay que tener en cuenta ciertos casos:
Si T
1
(n) y T
2
(n) son tiempos de ejecucin de dos fragmentos de programa, el tiempo total
ser de T
1
(n)+T
2
(n). Sin embargo, se considera nicamente el ms lento de los dos y el
tiempo de ejecucin vendr dado por tanto por O(max( f (n), g(n)) , siendo O( f (n)) el
tiempo para T
1
(n) y O(g(n)) para T
2
(n). Tambin existen simplicaciones, por ejemplo,
O(c f (n)) se considera siempre O( f (n)).
Una asignacin u operacin aritmtica suele considerarse con tiempo O(1).
6
1 Introduccin a la Geometra Computacional
En las proposiciones condicionales, la parte de la condicin suele considerarse tiempo
constante si no necesita realizar llamadas a otras funciones. El tiempo global de esta ins-
truccin se toma de nuevo como el mayor de las dos partes que la forman, parte then o
parte else.
En un ciclo se suele determinar por el nmero de iteraciones multiplicadas por el orden
del conjunto de instrucciones del cuerpo del bucle. Si tenemos dos bucles de n ciclos, uno
dentro de otro, se considera tiempo cuadrtico (suponiendo que el cuerpo del bucle tuviera
un tiempo contante).
Cuando se hacen llamadas a procedimientos no recursivos, se suman todos los tiempos de eje-
cucin segn las pautas anteriores, pero en procesos recursivos se trabaja de forma distinta.
Supongamos la siguiente funcin:
T(n) =

c +T(n1) si n > 1
d si n 1
Para n > 2, tenemos que T(n) = c +T(n 1). El trmino T(n 1) se sustituye por n 1:
T(n 1) = c +T(n 2), sustituyendo tenemos que T(n) = c +c +T(n 2). Siguiendo este
proceso hasta el trmino i entonces T(n) = ic+T(ni). Cuando i = n1, T(n) = nc+T(1) =
nc

= O(n).
En el siguiente ejemplo tenemos a un algoritmo recursivo. Para el caso general, n >1, el proceso
divide el problema en dos mitades de aproximadamente el mismo tamao. Cuando ste proceso
de divisin termina necesita un tiempo lineal para unir los resultados de las dos mitades. Este
mtodo es muy habitual en los problemas resueltos con el mtodo Divide y Vencers.
T(n) =

2T(n/2) +c
2
n si n > 1
d si n 1
Para n > 2 tenemos que T(n/2) = 2T(n/4) +c
2
n/2, sustituyendo en T(n),
T(n) = 2(2T(n/2
2
) +c
2
n/2) +c
2
n = 2
2
T(n/2
2
) +2c
2
n
T(n) = 2
i
T(n/2
i
) +ic
2
n. Debe existir un k tal que 2
k
n; k = log
2
n.
T(n) = nT(n/n) +kc
2
n = nT(1) +c
2
nlog
2
n = n+nlog
2
n O(nlogn).
1.3. Operaciones bsicas en Geometra Computacional
En este apartado entraremos en contacto con mtodos para la resolucin de algunos de los pro-
blemas ms elementales en Geometra. Nos servir igualmente para recordar conceptos a nivel
computacional. Los algoritmos aparecern mayormente escritos en lenguaje Pascal, a no ser que
alguno de ellos aparezca, no por razones prcticas sino didcticas.
7
1 Introduccin a la Geometra Computacional
1.3.1. Introduccin
A nivel de tratamiento de la informacin, en Geometra Computacional es clara la preferencia
por los tipos de datos enteros, lo que se denomina aritmtica entera. La razn es obvia, el or-
denador debe transformar todo dato de la recta real en un tipo de dato de una computadora que
tiene un espacio nito de almacenamiento. Los datos enteros s garantizan su transformacin
ntegra a un tipo de dato almacenado en memoria, siempre que ste sea menor que una valor
dado. Sin embargo, los datos reales o en coma otante pierden casi siempre cierta precisin al
ser guardados. Cuando una variable de tipo real nace en la ejecucin de un programa y a su vez
es utilizada como entrada para crear otras nuevas, este proceso repetido puede hacer que el dato
se aleje del valor correcto. Por esta razn, y siempre que sea posible, es preferible hacer uso de
la aritmtica entera. Por ejemplo, para saber si dos segmentos intersectan basta utilizar aritmti-
ca entera, sin embargo si queremos saber exactamente el lugar de interseccin, s era necesario
realizar algn clculo en coma otante.
1.3.2. Algunos tipos de datos simples
Los datos geomtricos, a la hora de ser procesados por un ordenador, son reemplazados por
lo que denominamos tipos de datos. Muchos conceptos tpicamente matemticos se denominan
de forma anloga cuando se representan internamente, as usamos el concepto de variable o
de constante. Los tipos de datos identican el tipo de cada una de estas posibles variables o
constantes. Los tipos de datos que cualquier lenguaje de programacin soporta cubren el espectro
ms habitual, sin embargo, los de tipo geomtrico deben ser denidos explcitamente por el
programador.
En este curso utilizaremos varios de estos tipos de datos. Por ejemplo, el tipo de dato TipoPunto,
TipoPoligono, etc. En las clases de prcticas se denirn muchos de ellos, ahora identicaremos
los anteriores en Pascal para poder trabajar con ellos a lo largo de este tema:
t ype Ti poPunto=ar r ay [ 0 . . 1 ] of i nt eger ;
Ti poPol i gono = ar r ay [ 0 . . TAM_MAX] of Ti poPunto ;
Por simplicidad computacional, se emplea un array con dos posiciones para un punto, identi-
cando la posicin 0 para guardar el valor de la x y la posicin 1 para el de la y. Cuando se dice
que un polgono es un array de puntos, realmente tenemos una matriz bidimensional con un total
de dos columnas, igualmente fcil de manejar computacionalmente.
1.3.3. Clculo del rea
Una de las operaciones ms elementales en Geometra es el clculo del rea de un tringulo, sea
del tipo que sea. El mtodo para realizar este clculo no es otro que la resolucin de un determi-
nante 3x3, aunque no es objetivo de esta asignatura el clculo matemtico correspondiente.
8
1 Introduccin a la Geometra Computacional
El algoritmo escrito en pseudocdigo aparece a continuacin. Por razones argumentadas ante-
riormente, se opta por trabajar siempre con aritmtica entera. La funcin AreaTriangulo2 evitar
la divisin por dos y calcular el doble del rea del tringulo, por lo hay que tener en cuenta que
para obtener el valor real del rea ser necesario hacer la divisin correspondiente.
f unct i on Ar eaTr i angul o2 ( var a , b , c : Ti poPunto ) : r eal ;
begi n
Ar eaTr i angul o2 : = ( a[ 0] b[1] a[ 1] b [ 0 ] +
b[ 0] c[1] b[ 1] c [ 0 ] +
c [ 0] a[1] c [ 1] a [ 0 ] ) ;
end ;
El resultado de este clculo ser positivo siempre que los vrtices abc sean recorridos en orden
inverso a las agujas del reloj. En caso contrario el valor ser igualmente vlido y medir el rea,
pero tendr el signo negativo.
El clculo del rea de un polgono convexo es bien sencillo, basta con calcular el rea de todos
los tringulos que se pueden formar lanzando diagonales desde cualquier vrtice, hasta el resto
de los vrtices del polgono convexo.
Si el polgono no es convexo, el rea puede calcularse sumando las reas de los tringulos resul-
tantes o incluso restando los de aquellos que no tengan supercie, como en el siguiente ejemplo:
El rea del polgono puede calcularse de dos modos:
area(abd) +area(bcd)
area(abc) area(adc)
9
1 Introduccin a la Geometra Computacional
Este mismo principio puede extenderse a cualquier polgono, indistintamente del tipo y nme-
ro de vrtices que tuviera. Veamos el siguiente ejemplo: se ha elegido un punto cualquiera p,
interior o exterior al polgono y se han trazado diagonales a todos sus vrtices. Los vrtices de
ste han sido enumerados del o al n1 en orden inverso a las agujas del reloj. Este dato es muy
importante, porque va a ser siempre el mecanismo utilizado para numerar los vrtices cuando
trabajemos con polgonos. El nmero de tringulos obtenidos ser de n1, siempre partiendo
del punto p y siguiendo con dos vrtices sucesivos del modo siguiente:
El tringulo p01 se traza en sentido inverso a las agujas del reloj, lo que implicar siempre que
el rea de dicho tringulo es positiva. Se ha sealado utilizando un smbolo + cuando el clculo
se realiza en el sentido antihorario y con cuando el rea es negativa. Cuando el recorrido de
los vrtices del tringulo siempre en la forma pv
i
v
i+1
, sea en sentido horario, por ejemplo el
tringulo p67, el rea correspondiente se resta. El resultado nal, como podemos observar en
la gura, es que todas las reas de los tringulos no contenidas en el interior del polgonos son
sumadas y restadas una vez con resultado igual a cero, es decir, el resultado nalmente es el
deseado.
Por tanto, podemos hacer uso de la funcin AreaTriangulo2 tantas veces como tringulos se
vayan formando con el proceso anterior, sumando unas veces las reas y otras restndose auto-
mticamente segn sea la salida de dicha funcin. Como de cada tringulo se calcula el doble de
su rea, nalmente ser necesario dividir por dos el resultado nal.
Como el punto P puede ser cualquier punto, sea interior o no al polgono, podemos optar por
tomar al punto del polgono s
0
, o lo que es lo mismo computacionalmente, a s[0]. El resultado
lo podemos escribir a continuacin:
f unct i on AreaPol i gono2 ( var S: Ti poPol i gono ; n : i nt eger ) : r eal ;
var suma : r eal ;
i : i nt eger ;
begi n
suma : = 0 ;
f or i : =1 t o n1 do
suma : = suma + Ar eaTr i angul o2 ( S[ 0 ] , S[ i ] , S[ i +1] ) ;
AreaPol i gono2 : = suma;
end ;
10
1 Introduccin a la Geometra Computacional
1.3.4. Interseccin de segmentos
Una de las operaciones elementales en Geometra Computacional es la interseccin de segmen-
tos, clculo vlido para otros muchos problemas. Sin embargo, y siguiendo con la dinmica
de trabajar siempre que sea posible con aritmtica de enteros, el algoritmo de interseccin de
segmentos va utilizar otra serie de subrutinas necesarias.
Si recordamos una de las propiedades de la funcin del clculo del rea del tringulo, el resultado
es positivo si la lectura ordenada de los vrtices nos da un recorrido antihorario. Esta propiedad
puede ser til para determinar si un punto c est a la izquierda del segmento ab. Observemos la
siguiente gura:
El tringulo imaginario abc se dibuja en orden inverso a la agujas del reloj, lo que automtica-
mente nos est indicando que el punto c est a la izquierda de ab. Es necesario observar que
no es lo mismo el segmento ab que el segmento ba computacionalmente hablando. El rea del
tringulo bac es negativa porque el punto c est a la derecha del segmento ba. El subprograma
correspondiente nicamente necesita realizar una llamada a la funcin AreaTriangulo2 ante-
riormente vista. Aprovechamos un clculo en principio de distinta ndole, para determinar la
posicin de un punto con respecto a un segmento.
f unct i on I zqui er da ( a , b , c : Ti poPunto ) : Bool ean ;
begi n
I zqui er da : =( Ar eaTr i angul o2( a , b , c ) ) >0;
end ;
No es difcil entender que este mismo principio sirve para determinar si el punto c est justa-
mente a la derecha (la funcin anterior nos devuelve un valor f alse) o si el rea del tringulo
abc es igual a cero, lo que indica que los tres puntos son colineales:
11
1 Introduccin a la Geometra Computacional
El cdigo de la funcin Colineal sera el siguiente:
f unct i on Col i neal ( a , b , c : Ti poPunto ) : Bool ean ;
begi n
Col i neal : = Ar eaTr i angul o2( a , b , c ) =0;
end ;
Debemos insistir en que el cdigo anterior da por supuesto que todos los clculos se realizan
nicamente utilizando aritmtica de enteros. No quiere decir sto que no pueda migrarse dicho
cdigo a operaciones en coma otante, pero en ese caso jams debera realizarse una operacin
como esta i f a = 0 ...., puesto que no siempre el valor que nosotros consideramos como cero (o
cualquier otro valor concreto) lo entienda as un tipo de dato en coma otante. Para solventar este
problema es ms conveniente establecer un margen de error permitido, y operar as: i f abs(a) <
0,001 ..., o lo que es lo mismo, si el valor absoluto de la variable real a es menor que un valor
prximo a cero.
Para saber si dos segmentos ab y cd intersectan, deberamos saber si:
1. no son colineales
2. si d est a la izquierda de ab y c est a la derecha (o al revs) y adems
3. si a est a la derecha de cd y b lo est a la izquierda (o al revs)
Nos podemos dar cuenta en la gura de que si no se cumple algunas de estas premisas no
tenemos garanta de que ambos segmentos intersecten.
El cdigo debe tener en cuenta todos los casos citados anteriormente. La operacin vlida para
implementar el al revs, es la operacin XOR(a, b) cuya tabla de verdad da el valor verdadero
cuando a y b son distintos.
FUNCTION I nt ersect aSegment o ( a , b , c , d : Ti poPunto ) : Bool ean ;
BEGIN
i f ( Col i neal ( a , b , c ) OR Col i neal ( a , b , d ) OR
12
1 Introduccin a la Geometra Computacional
Col i neal ( c , d , a ) OR Col i neal ( c , d , b ) )
t hen I nt ersect aSegment o : = f al se
el se I nt ersect aSegment o : =
(XOR( I zqui er da ( a , b , c ) , I zqui er da ( a , b , d ) ) AND
XOR( I zqui er da ( c , d , a) , I zqui er da ( c , d , b ) ) ) ;
END;
El inconveniente del mtodo es la redundancia. Ahora realizaremos una nueva versin del algo-
ritmo utilizando la primitiva Entre, que ser capaz de saber si un punto c est o no en el segmento
ab. Para ellos veremos si la coordenada x de c cae en el intervalo determinado por la coordenada
x de a y b. Lo mismo debe hacerse para la ordenada.
FUNCTION Ent r e ( a , b , c : Ti poPunto ) : Bool ean ;
BEGIN
i f ( Not Col i neal ( a , b , c ) )
t hen Ent r e : = f al se
el se i f a[ 0] < > b [ 0 ]
t hen a[ 0] <=b [ 0 ] AND c [ 0] <=b [ 0 ] OR a[ 0] >=c [ 0 ] AND c [ 0] >=b [ 0]
el se a[ 1] <=c [ 1 ] AND c [ 1] <=b [ 1 ] OR a[ 1] >=c [ 1 ] AND c [ 1] >=b [ 1 ] ;
END;
Esta versin del algoritmo adems cuenta con al ventaja de poder trabajar con las intersecciones
de forma propia o impropia. Una interseccin impropia ocurre cuando un extremo de uno de
los segmentos est justo en en alguna posicin del otro. La siguiente funcin en Pascal detecta
primero si existe la posibilidad de colinealidad con la funcin Entre. Posteriormente hace el
mismo proceso que IntersectaSegmento.
f unct i on I nt er secI mpr opi a ( a , b , c , d : Ti poPunto ) : Bool ean ;
begi n
i f ( Ent r e ( a , b , c ) OR Ent r e ( a , b , d ) OR Ent r e ( c , d , a ) OR Ent r e ( c , d , b ) )
t hen I nt er secI mpr opi a : = t r ue
el se I nt er secI mpr opi a : = ( I zqui er da ( a , b , c ) XOR I zqui er da ( a , b , d ) )
and ( I zqui er da ( c , d , a ) XOR I zqui er da ( c , d , b ) ) ;
end ;
1.3.5. Clculo de diagonales
El clculo de una diagonal tiene como objetivo la triangulacin de polgonos. Una diagonal es
aquel segmento que une dos vrtices del polgono de forma que no intersecte con ningn otro
eje de dicho polgono y adems sea interno al polgono.
13
1 Introduccin a la Geometra Computacional
Para saber si existe o no interseccin puede utilizarse el proceso anterior, pero para saber si es
o no interno necesitamos realizar un procesamiento adicional. Este clculo puede realizarse en
tiempo constante porque si una diagonal es interior a un polgono P en su vecindario (vrtices
prximos), tambin lo es para todo el polgono, no siendo necesario un procesamiento completo
del polgono P.
Diremos que un segmento s es interno a P si y slo si es interno al cono cuyo vrtice es v
i
y
cuyos lados pasan a travs de v
i1
y v
i+1
. Existen dos casos, el caso convexo en el que el resto
del polgono est en la parte de menor ngulo y el caso cncavo en cuyo caso el ngulo es mayor
que . La siguiente funcin determina si el vector que une los vrtices i y j del polgono P es
interior o no al polgono.
FUNCTION DentroCono ( i , j : I nt eger ; var P: Ti poPol i gono ; n : I nt eger )
: Bool ean ;
VAR imas1 , imenos1 : I nt eger ;
begi n
imas1 : = ( i +1)mod n ;
imenos1 : = ( i 1+n ) mod n ;
i f ( I zqui er daOsobre( P[ imenos1 ] , P[ i ] , P[ imas1 ] ) ) { caso convexo }
t hen DentroCono : = I zqui er da (P[ i ] , P[ j ] , P[ imenos1 ] ) and
I zqui er da ( P[ j ] , P[ i ] , P[ imas1 ] )
el se DentroCono : = not I zqui er daOsobre( P[ i ] , P[ j ] , P[ imas1 ] ) and
I zqui er daOsobre( P[ j ] , P[ i ] , P[ imenos1 ] ) ;
end ;
Vemos en la gura siguiente los dos casos comentados anteriormente. El caso convexo ocurre
cuando el vrtice v
i+1
est a la izquierda del eje trazado por v
i1
v
i
. En este caso, lo vemos en la
gura de la izquierda, para que se trate de un eje interno debe ocurrir que v
i1
est a la izquierda
de v
i
v
j
y que v
i+1
lo est a la izquierda. El caso cncavo aparece a la derecha.
Por tanto, una diagonal es aquel segmento interior que est dentro del polgono. Pero el segmento
i j es una diagonal si no intersecta con ninguna otro de las aristas del polgono. Este clculo
necesita forzosamente un tiempo de ejecucin lineal. La funcin Diagonal_IE se encargar de
realizar este chequeo, y que ser invocado por la funcin Diagonal cuyo cdigo resulta bastante
evidente: el segmento i j es una diagonal del polgono P de tamao n si es interior y adems no
intersecta con ninguna arista.
14
1 Introduccin a la Geometra Computacional
FUNCTION Di agonal _I E ( i , j , n : I nt eger ; var P: Ti poPol i gono ) : Bool ean ;
var
k , kmas1: I nt eger ;
begi n
f or k : =0 t o n do
begi n
Di agonal _I E : = t r ue ;
kmas1 : = ( k+1)mod n ;
i f NOT ( ( k= i ) OR ( kmas1= i ) OR ( k= j ) OR ( kmas1= j ) )
t hen i f I nt er secI mpr opi a (P[ i ] , P[ j ] , p [ k ] , p [ kmas1 ] )
t hen Di agonal _I E : = f al se ;
end ;
end ;
FUNCTION Di agonal ( i , j , n : I nt eger ; var P: Ti poPol i gono ) : Bool ean ;
begi n
Di agonal : = ( DentroCono( i , j , P, n ) AND Di agonal _I E( i , j , n , P) ) ;
end ;
1.3.6. Un ejemplo completo: triangulacin de un polgono
La triangulacin de polgonos es un clculo muy importante en muchas aplicaciones de Geo-
metra Computacional. Permite, aparte de otras muchas aplicaciones, dividir un polgono con
posible cierta complejidad, en un conjunto de tringulos fciles de procesar.
Veremos que el siguiente mtodo puede ser perfectamente vlido para lograr la triangulacin
de cualquier polgono P de tamao n. Sin embargo, y a pesar de su simpleza, su utilizacin no
es aconsejable y por ello no se ha implementado en un leguaje de programacin. Vemos que
es un mtodo recursivo porque se llama a s mismo. La llamada recursiva se realiza cuando se
localiza una diagonal, y como en ese momento el nmero de vrtices a procesar es uno menos,
puesto que el vrtice i
1
queda aislado al encontrarse la diagonal ii
2
. La funcin EliminaVertice
se encargara de este operacin, dejando cada vez que se llama un polgono ms pequeo.
PROCEDIMIENTO Tr i angul ar ( P: Ti poPol i gono ; n : Ent ero )
INICIO
SI ( n>3)
THEN PARA ( i < 0 HASTA n CON INCR+1 REPETIR)
i 1 < ( i +1) mod n
i 2 < ( i +2) mod n
SI ( Di agonal ( i , i 2 , n , P) )
ENTONCES Pi nt ar ( P[ i ] , P[ i 2 ] )
El i mi naVer t i ce ( i 1 , P, n)
Tr i angul ar ( P, n1)
FIN_SI
FIN_PARA
15
1 Introduccin a la Geometra Computacional
FIN_SI
FIN
La razn por la que este algoritmo no es desde luego nada interesente es por su tiempo de
ejecucin. El algoritmo trabaja en O(n
3
) porque realiza un total n3 llamadas recursivas y cada
una de ellas, en el peor de los casos, necesita un tiempo cuadrtico (la funcin diagonal es lineal,
as como la ejecucin completa del bucle).
Como veremos a lo largo de este curso, para valores de n elevados, este algoritmo resulta eviden-
temente lento, y en Geometra Computacional todos los problemas cuyas soluciones inmediatas
sean susceptibles de mejora, son estudiados. Como veremos en sucesivos captulos, cualquier
polgono puede ser triangulado en tiempo O(nlogn).
1.4. Estructuras de Datos y Algoritmos
Los algoritmos geomtricos, al igual que los desarrollados para otras disciplinas, debern com-
binar adecuadamente junto con su conjunto de sentencias, a las estructuras de datos correctas
para conseguir el objetivo nal, obtener programas ecientes.
1.4.1. Introduccin a las estructuras de datos
El estudio de las estructuras de datos y los mtodos para la organizacin de dichos datos es uno
de los aspectos clsicos ms importantes para construir algoritmos ecientes. Los programas tra-
bajan con informacin que permanece en memoria principal o en algn dispositivo de memoria
secundaria. La organizacin que se le da a dichos datos es lo que denominamos estructuras de
datos.
La mayora de las estructuras de datos pueden verse como contenedores que mantienen infor-
macin de un determinado tipo con un cierto orden. El acceso y manejo de los datos en un
contenedor se realiza a travs de un localizador. Dependiendo de la estructura del contenedor,
el localizador proporcionar un modo de acceso a los datos, por ejemplo, un ndice de un array
o un puntero. Una estructura de datos adems de proporcionar un modo de acceso, tambin de-
ber llevar asociado un conjunto de operadores, como insertar un nuevo dato, actualizar uno ya
existente o eliminar algn otro. Las caractersticas de una estructura de datos va en relacin al
orden de ejecucin de sus operaciones y a los requerimientos de espacio. En cualquier caso, la
estructura de datos ms idnea depender siempre del problema que se pretenda resolver.
Un tipo de dato es una coleccin de objetos a la que se le da una representacin matemtica.
Un tipo de dato abstracto o TDA es un tipo de dato, ms un conjunto de operaciones que lo
manejan. Las estructuras de datos pueden considerarse como implementaciones concretas de
tipos de datos abstractos. Los TDAs (notacin anglosajona) han evolucionado hasta convertirse
en clases de objetos. Lo que inicialmente se concibi como un concepto matemtico que se
16
1 Introduccin a la Geometra Computacional
adapt a la sintaxis de los lenguajes de programacin tradicionales, se ha ido convirtiendo en
una nueva losofa de programacin con los nuevos lenguajes orientados a objetos.
Existen multitudes de estructuras de datos ampliamente documentadas en la bibliografa. En este
apartado repasaremos algunas de las estructuras de datos usadas en el curso.
Dependiendo de la organizacin interna y del modo de acceso a los datos, existen dos tipos
fundamentales de contenedores, los contenedores secuenciales o secuencias y los asociativos.
Una secuencia es un contenedor que almacena los elementos con un orden lineal determinado,
realizando el acceso a la informacin indicando la posicin donde se localiza el dato. Por el
contrario un contenedor asociativo, independientemente de su organizacin interna, permite el
acceso por clave.
Contenedores secuenciales
Las secuencias ms usuales son las listas enlazadas y los arrays. Las primeras forman una su-
cesin de nodos o elementos informativos unidos unos a otros mediante punteros. El tiempo de
acceso es lineal, aunque normalmente el acceso a los puntos extremos es constante. Los arrays
son contenedores implcitos con acceso directo. Esta ventaja de acceso en tiempo constante se ve
mermada por poseer menor exibilidad. Por ejemplo, la operacin de insercin de un elemento
en posiciones intermedias es de orden lineal. Sobre cualquiera de los contenedores secuenciales
anteriormente citados puede construirse estructuras de datos muy conocidas y empleadas, las
pilas (LIFO) o las colas (FIFO). Cualquiera de ellas implementada sobre una lista puede con-
siderarse como una estructura de datos dinmica. Esta consideracin tambin puede realizarse
sobre arrays dinmicos.
Contenedores asociativos
Los contenedores asociativos poseen una losofa de manejo y una estructura interna totalmente
diferente a las secuencias. La diferencia fundamental es que el acceso a la informacin se realiza
siempre utilizando una clave y no una posicin, que puede identicar o no de forma unvoca al
dato. Las operaciones fundamentales son de insercin, actualizacin, borrado y bsqueda por
dicha clave.
La organizacin interna de los datos depende del tipo de contenedor asocitivo, por rbol o por
tabla hash. Los primeros mantienen un rbol binario de bsqueda o Inorden, manteniendo una
relacin de orden entre nodos padre e hijos. Normalmente, todo nodo padre es mayor que su hijo
izquierdo pero menor o igual que su hijo derecho. El tiempo de acceso en este tipo de estructuras
permite eliminar en cada consulta la mitad del grueso de la informacin, siempre que todas las
ramas del rbol permanezcan a la misma altura. Estas estructuras de datos garantizan bsquedas
en O(logn).
Las estructuras de datos consideradas de carcter general son ampliamente utilizadas en Geome-
tra Computacional, pero existen otros aspectos como son la naturaleza espacial de los objetos
17
1 Introduccin a la Geometra Computacional
geomtricos o sus propiedades estructurales que requieren del manejo de estructuras de datos
ms especcas para construir algoritmos ecientes.
La eleccin de un tipo de estructura de datos o de otro va a depender del tipo de objetivo que se
persiga: captura de informacin estructural, acceso a los datos o actualizacin eciente de stos,
optimizacin del espacio requerido o del nmero de operaciones de E/S. En otras ocasiones, las
estructuras de datos se eligen segn la asociacin de objetos geomtricos que representen.
1.5. Algunos mtodos de programacin utilizados en G. C.
La Geometra Computacional, en contraste con la disciplina clsica basada en proporcionar
teoremas matemticos, enfatiza los aspectos computacionales de los problemas y atiende a las
propiedades geomtricas para encontrar algoritmos ecientes.
Que un problema geomtrico tenga solucin dentro de la Geometra Computacional no basta en
muchas ocasiones, se desea adems que la solucin se encuentre en un tiempo ptimo. Exis-
ten una serie de tcnicas y paradigmas de programacin que vienen siendo muy habituales no
slo en el campo de la Geometra Computacional. Algunos de estos mtodos como el divide y
vencers ya haban proporcionado la solucin ptima a problemas como la ordenacin, en otras
ocasiones los mtodos de resolucin estn ntimamente relacionados con las capacidades de la
propia Geometra.
A continuacin daremos un repaso a los paradigmas de programacin ms empleados dentro de
la Geometra Computacional.
1.5.1. Mtodo incremental
ste puede ser considerado como uno de los mtodos ms simples e intuitivos, tambin conocido
como el mtodo iterativo. La idea sobre la que trabaja este mtodo consiste en construir la
solucin de modo iterativo, considerando que la entrada se produce de modo incremental. Para
cada una de las nuevas entradas, el problema se resuelve convenientemente.
Supongamos que se pretende procesar una nube de n puntos en el plano S, para resolver cualquier
problema Prob(S) bajo esta tcnica. En muchas ocasiones S deber estar ordenada bajo algn
criterio con coste O(nlogn). El algoritmo trabaja siempre de forma similar. Inicialmente Prob
se resuelve de forma trivial para {s
0
, s
1
, ..., s
k1
}, los primeros k puntos de S. Posteriormente y
uno a uno, se resolver Prob(S
i
) para el resto de s
i
S, i = {k, ..., n 1} tal y como indica el
Algoritmo 1, obtiendo nalmente Prob(S).
Si en un problema de tamao n, el coste de insertar un nuevo dato es O(n), entonces el tiempo
global del algoritmo ser de O(n
2
). Pero si aadir un nuevo elemento a la solucin parcial del
problema tiene coste constante o logartmico, el algoritmo nal se procesar en O(nlogn), la
misma cota impuesta por el algoritmo de ordenacin.
18
1 Introduccin a la Geometra Computacional
Algorithm 1 Incremental-generalizado.
Entrada: El conjunto S de tamao n.
Salida: Prob(S)
INICIO
1. Ordenar S obteniendo S ={s
0
, ..., s
n1
}
2. Construir Prob(S
k1
) en tiempo constante
3. Para i k HASTA n1 HACER
a) Construir Prob(S
i
)
FIN_Para
FIN
1.5.1.1. Lnea de barrido
Esta estrategia es una particularizacin del mtodo incremental, considerndose vlida para
problemas en dos dimensiones cuando el conjunto de entrada se produce en un cierto orden. La
solucin de la mayora de estos problemas puede ser incremental, de hecho, la implementacin
de este paradigma sigue las mismas premisas que las dadas para el mtodo incremental citado
anteriormente.
El mtodo supone que una lnea horizontal (o vertical) recorre el plano de arriba hacia abajo (o
en sentido contrario). Cada vez que dicha lnea encuentra un tem (un punto, una lnea, etc) lo
procesa modicando el conjunto de estructuras que datos que participen en la construccin de
dicho algoritmo. La validez de esta tcnica est basada en la observacin de que la parte que
queda por encima o por debajo de la lnea de barrido se ha construido correctamente.
Por ejemplo en el problema de interseccin de segmentos, cuando la lnea encuentra un nuevo
segmento, se realizar una insercin en alguna estructura de datos capaz de mantenerlos ordena-
dos de izquierda a derecha (en el caso de que la lnea de barrido sea horizontal). Normalmente
se escogen estructuras de datos con tiempos de actualizacin y de acceso logartmico. Si el
procesamiento de dichos objetos geomtricos es constante, como es el caso de la interseccin de
dos segmentos, pueden trabarse con tiempos del orden de O(nlogn).
Esta tcnica es empleada para diferentes problemas como la interseccin de segmentos, particin
de polgonos en subdivisiones montonas, interseccin de semiplanos, el diagrama de Voronoi
y triangulacin de Delaunay, los mtodos de Jarvis y Graham para el clculo de la envolvente
convexa, la tcnica de localizacin de los puntos ms lejanos, y otros ms. Existen tcnicas
anlogas para dimensiones mayores.
1.5.2. Divide y Vencers
Esta tcnica clsica de programacin es vlida para resolver de forma eciente problemas ge-
omtricos. Normalmente se basa en la sucesiva divisin en partes iguales del problema original,
19
1 Introduccin a la Geometra Computacional
hasta conseguir que ste posea un tamao lo sucientemente pequeo como para poder resol-
verse fcilmente. Llegado a un punto en que la divisin deja de tener sentido, los problemas se
van resolviendo recursivamente y combinando sus soluciones para obtener la solucin nal. El
mtodo ms eciente de ordenacin, el quicksort, est basado en este paradigma.
El Algoritmo 2 resume los pasos empleados para resolver el problema Prob(S) partiendo del
conjunto de datos S y realizando sucesivas divisiones por dos. Para que el algoritmo se considere
eciente se espera que el Paso 3.a) que divide el problema en subproblemas y el Paso 3.c) que
combina las soluciones parciales, se realice en tiempo lineal. El segundo ejemplo de ecuacin
de recurrencia de la Seccin 1.2 corresponde al mtodo Divide y Vencers.
Algorithm 2 DyV_Generalizado
Entrada: El conjunto ordenado S ={s
0
,s
2
,...s
n1
}.
Salida: Prob(S)
INICIO
1. SI n k
2. ENTONCES resolver Prob(S
k1
)
3. SINO
a) Dividir S en dos subconjuntos S
1
y S
2
del mismo tamao
b) Procesar Prob(S
1
) y Prob(S
2
) de forma recursiva
c) Unir Prob(S
1
) y Prob(S
2
) para obtener Prob(S)
FIN_SI
FIN
Esta tcnica es ampliamente utilizada y sirve de base para construir algoritmos aleatorios. Puede
emplearse para construir la envolvente convexa, el diagrama de Voronoi, etc.
20
2 La envolvente convexa y triangulacin de
polgonos
2.1. La envolvente convexa
2.1.1. Introduccin
El clculo de la envolvente convexa de un conjunto de puntos en espacios eucldeos ha sido
sin duda uno de los problemas a la vez ms bsicos y ms ampliamente estudiados a lo largo
de la historia de la Geometra Computacional. Adems, los campos en los que ha resultado un
clculo til sorprenden por lo aparentemente poco relacionados con las matemticas en general
y la geometra en particular.
S
Un conjunto convexo del plano se dene como el conjunto que verica que el segmento que une
a dos cualesquiera de sus puntos est totalmente contenido en l. Evidentemente, esta denicin
puede ser aplicada en cualquier espacio eucldeo n-dimensional. La idea de conjunto convexo
nos lleva inmediatamente a la de envolvente convexa, considerando a sta como el menor con-
junto convexo que contiene a dicho conjunto. Este concepto es fcil de entender en cierto modo
si consideramos a la envolvente convexa de un conjunto de puntos en el plano, como la forma
que adquirira una goma elstica envolviendo a todos los puntos del conjunto que estn jos so-
bre el plano. De nuevo esta idea es extensible intuitivamente a otras dimensiones, y puede servir
de partida para construir algoritmos simples para el clculo de la envolvente convexa.
Pero exiten otras deniciones vlidas: la envolvente convexa de un conjunto de puntos en el
plano es la unin de todos los tringulos determinados por dicho conjunto de puntos.
El estudio de la envolvente convexa en dos dimensiones ha sido objeto de especial inters. Exis-
ten una serie de caractersticas asociadas a los puntos que forman parte de la envolvente convexa
en el plano y que han servido igualmente para denirla y construirla. Un punto q S pertenece
a la envolvente convexa de S, q CH(S), si es posible trazar una recta pasando por dicho punto
de forma que todo el conjunto S

, S

= S{q} quede a un lado de dicha recta.


21
2 La envolvente convexa y triangulacin de polgonos
Como se ha indicado con anterioridad, el clculo de la envolvente convexa ha sido aplicado
ampliamente a disciplinas en ocasiones ajenas a la Geometra Computacional y en espacios
distintos de dos dimensiones. Tal es el caso del reconocimiento de patrones, procesamiento de
imgenes, etc.
Los algoritmos propuestos para este problema son realmente numerosos. Sin duda es uno de
los planteamientos de la Geometra Computacional que ms soluciones ha conseguido. Desde
incluso antes del nacimiento ocial de esta disciplina se conoce el trabajo de Graham en el ao
1972. Se han propuesto estrategias siguiendo los paradigmas ms empleados como el mtodo
incremental y el divide y vencers. Todos estos algoritmos construyen la envolvente convexa
en tiempo (nlogn). El mtodo propuesto por Preparata y Shamos en 1985 fue denominado
Quickhull por su similitud con el mtodo de ordenacin Quicksort. Otra propuesta diferente se
di a conocer en 1973 como La marcha de Jarvis. Este mtodo, que estudiaremos en este
curso, posee un tiempo de ejecucin cuadrtico, sin embargo supone un interesante ejemplo
basado en manejo de ngulos del cual partiremos para el tratamiento del diagrama polar. Todos
estos trabajos constituyen el conjunto clsico de algoritmos para la resolucin de la envolvente
convexa, al que habra que aadir otras tcnicas posteriores.
La envolvente convexa posee una cota de (nlogn), es decir, no se puede encontrar una algorit-
mo que trabaje en menor tiempo para todos los casos.
2.1.2. Un ejemplo de resolucin
El problema de encontrar la envolvente convexa de un conjunto de puntos puede ser interesante
porque es equivalente a encontrar todo el conjunto de puntos extremos de dicha nube. Por tanto,
puede denirse como punto extremo a cualquier punto de la envolvente convexa, y todo punto
extremo tiene la propiedad de que es posible trazar una lnea recta a travs de l de modo que el
resto de puntos queden a un lado.
Tambin podemos decir que un punto es extremo si y slo si est dentro de algn posible trin-
gulo cuyos vrtices son cualesquiera de los puntos de la nube original. Pero bajo esta denicin,
necesitaramos procesar O(n
3
) tringulos para cada uno de los n puntos, lo que nos proporcio-
na un mtodo en triempo O(n
4
), lo cual no es eciente teniendo en cuenta que se trata de un
problema (nlogn).
Pero la envolvente convexa posee aplicaciones fuera del mbito de la Geometra. Supongamos
que una explotacin petrolfera extrae diferentes tipos de componentes mezclados en distinta
propocin. Si el objetivo es conseguir los componentes A y B pero en una nueva proporcin,
podemos hacer uso de la envolvente convexa del modo siguiente. Supongamos que partimos de
las mezclas:
e
1
= A
10%
B
35%
, e
2
= A
16%
B
20%
y e
3
= A
7%
B
15%
y queremos obtener e
f
= A
13%
B
22%
. Para
saber si es posible obtener este producto nal e
f
basta con considerar las anteriores mezclas
como puntos del plano, obteniendo el siguiente esquema:
22
2 La envolvente convexa y triangulacin de polgonos
Todo punto que caiga dentro de la envolvente convexa de todas las muestras representadas por
puntos en el plano, indica que puede ser producida. Si por contra, cayera fuera de dicha en-
volvente, la combinacin nal no podra producirse. Este problema sera un problema 3D si
cada mezcla tuviera tres componentes, la solucin sera la contruccin de la envolvente convexa
tridimensional.
2.1.3. Grahams scan
Este es sin duda uno de los algoritmos ms importantes para el clculo de la envolvente convexa,
no nicamente por su simpleza sino tambin por su rapidez.
El proceso realiza primero una ordenacin angular de los puntos. El punto tomado de referencia
para tal n debe ser un punto de la envolvente convexa, por ejemplo el de menor ordenada y al
que llamaremos p
0
. El resto de puntos quedan ordenados de izquierda a derecha obteniendo la
secuencia p
1
, p
2
, ..., p
n1
.
El proceso seguido por Graham toma sucesivamente tringulos elegidos segn el orden conse-
guido tras la ordenacin. Siempre que el tringulo formado abc, posea una supercie positiva, el
vrtice central, es decir, el vrtice b ser tenido en cuenta como probable punto de la envolvente.
Pero cuando dicho rea es negativa, b es descartado denitivamente.
Para comprender dicho algoritmo, ser necesario repasar el concepto de pila. Una pila es un
tipo de dato abstacto (tipo de dato ms operaciones para su manejo) muy restrictivo a la hora de
manejar los datos que almacena. Se construye utilizando una estructura de datos lineal, array o
lista enlazada, sobre la que slo se pueden introducir (push) o sacar elementos (pop) por uno de
sus extremos, lo que se denomina cima o tope de la pila.
Operaci ones de manejo de Pi l a :
Pi l aCr ea ( a : Ti poPi l a) >Crea una pi l a vaca
Pi l aPush ( a : Ti poPi l a , d : Ti poDato) > Mete el el emento " d " en l a pi l a " a"
Pi l aPop ( a : Ti poPi l a ) : Ti poDato > Saca y devuel ve un el emento
Pi l aTope ( a : Ti poPi l a ) : Ti poDato > Devuel ve pero no saca el el emento
23
2 La envolvente convexa y triangulacin de polgonos
Pi l aDest r uye ( a : Ti poPi l a ) > Dest ruye t odos l os el ementos de l a pi l a
ALGORITMO GRAHAM ( VAR P: TipoNubePuntos , n : ent ero , VAR Env : Ti poPi l a )
ENTRADA: La nube de puntos P de tamao n
SALIDA : La envol vent e convexa de P, CH(P)
VARIABLES:
min : Ent ero / / manti ene el ndi ce del punto con menor ordenada
t : Ent ero / / si r ve para sacar y meter dat os en l a pi l a
i : Ent ero / / r ecor r e t odos l os el ementos de P
INICIO
min < PuntoMenorOrdenada( P, n)
OrdenarAngul armente( P, n , min)
Pi l aCr ea ( Env )
Pi l aPush ( Env , P[ n1])
Pi l aPush ( Env , P[ 0 ] )
i < 1
MIENTRAS i < n1 REPETIR
t < Pi l aPop ( Env )
SI I zqui er da ( Pi l aTope ( Env ) , t , P[ i ] )
ENTONCES
Pi l aPush ( Env , t )
Pi l aPush ( Env , i )
i < i +1
SINO t < Pi l aPop ( Env )
FIN_SI
FIN_MIENTRAS
FIN
El orden de ejecucin de este algoritmo viene dado por la necesidad de ordenar los puntos
angularmente. Cualquier ordenacin necesita al menos un tiemo O(nlogn). A este tiempo se le
debe aadir el del proceso ideado por Graham. Para averiguar este tiempo basta con percatarse
que en cada paso un punto es tenido en cuenta o es descartado. En el peor de los casos, cuando
la envolvente convexa es un tringulo, necesitamos del orden de 2n3 operaciones.
Todo lo anterior nos indica que Grahams scan es un algoritmo que trabaja en tiempo ptimo
O(nlogn).
2.1.4. La marcha de Jarvis
La marcha de Jarvis est basada en el siguiente resultado, que sirve de denicin para la envol-
vente convexa:
El segmento l, denido por dos puntos de la nube de puntos, es un eje de la envolvente convexa
sii todos los puntos de la envolvente convexa estn a un lado de sta.
24
2 La envolvente convexa y triangulacin de polgonos
Siguiendo este criterio podramos descubrir para cada punto los n
2
combinaciones posibles, lo
que nos da un fcil pero costoso O(n
3
) algoritmo.
Sin embargo, Jarvis pudo bajar la cota al comprobar que si p
i
p
j
es una arista perteneciente a la
envolvente convexa, la siguiente arista la encontramos partiendo de p
j
en tiempo lineal. Veamos
el siguiente ejemplo:
Partiendo de s
6
, el punto de menor ordenada, alcanzamos a s
5
tras realizar un barrido angular
en sentido antihorario desde la horizontal. El siguiente punto de la envolvente se puede localizar
partiendo de s
5
y haciendo un nuevo barrido angular, localizando as a s
1
.
PROCEDIMIENTO MarchaJarvi s ( VAR P: TipoNubePuntos , n : Entero ,
VAR Env : Li st aPunt os )
ENTRADA: La nube P de tamao n
SALIDA : La l i s t a Env con l os puntos de l a envol vent e
VARIABLES:
p0 , p1 , p2 : Ent ero / / t r es puntos de l a envol vent e
INICIO
p0 < Mi mi noPunto( P, n)
p1 < p0
REPETIR
Li st aPoner Fi nal ( Env , p1)
p2 < Si gui ent e_en_Jar vi s ( P, n , p1)
p1 < p2
HASTA p2=p0
FIN
FUNCION Si gui ent e_en_Jar vi s ( VAR P: TipoNubePuntos , n : Entero ,
p : Ti poPunto ) : Ti poPunto
ENTRADA: La nube P de tamao n y
el punto p sobre el que par t e l a bsqueda
SALIDA : el punto si gui ent e en l a marcha de Jar vi s
VARIABLES:
minang : Real / / menor ngul o encont rado con r espect o a p
i : Ent ero / / var i abl e cont adora del bucl e
25
2 La envolvente convexa y triangulacin de polgonos
ang : Real / / ngul o cal cul ado en cada i t e r ac i n
pmin : Ent ero / / i ndi ce del punto que forma el ngul o " pmin "
INICIO
minang < 2Pi
PARA i < 0 HASTA n1 REPETIR
SI P[ i ] < > p
ENTONCES
ang < Angul o ( p , P[ i ] )
SI ang < minang
ENTONCES
minang < ang
pmin < P[ i ]
FIN_SI
FIN_SI
FIN_PARA
DEVOLVER ( pmim)
FIN
Es fcil de intuir que este proceso tardar en ejecutarse un tiempo proporcional al nmero de
puntos en la envolvente y al tamao de la nube. Cada barrido angular necesita un tiempo de pro-
ceso del orden de O(n) pasos. Si la envolvente nal posee k puntos, el tiempo nal de ejecucin
es del orden de O(nk). En el mejor de los casos el comportamiento puede ser lineal, por ejemplo
si la envolvente es un tringulo. El peor de los casos, sin embargo, se da cuando todos los puntos
estn en la envolvente convexa, convirtindose en un mtodo cuadrtico.
2.1.5. Algoritmo Incremental
La ventaja de unos mtodos con respecto a otros a veces viene dada por su velocidad computa-
cional y otras veces por su fcil extensin a tres dimensiones, lo que habitualmente llamamos
problemas 3D. El mtodo incremental para el clculo de la envolvente convexa es uno de estos
casos.
En todo mtodo incremental se supone que se ha resuelto el problema para un tamao n y que
en cada paso se aade un nuevo punto dando solucin a un problema de tamao n+1.
Para el clculo de la envolvente convexa ordenamos inicialmente los puntos del conjunto P de
izquierda a derecha, por ejemplo, obteniendo el conjunto p
0
, p
1
, ..., p
n1
. Tomamos los tres pri-
meros puntos tras esta ordenacin sabiendo que el polgono que forman p
0
, p
1
, p
2
, un tringulo,
es convexo. El siguiente paso intenta aadir el siguiente punto, p
3
, de modo que se tras nalizar
este paso tengamos la envolvente convexa de los primerso cuatro puntos p
0
, p
1
, p
2
, p
3
.
Para aadir cada nuevo punto p
i+1
basta con lanzar tangentes desde este punto hasta el polgono
convexo obtenido en el paso anterior. Localizaremos dos tangentes, una superior y otra inferior,
como vemos en la siguiente gura:
26
2 La envolvente convexa y triangulacin de polgonos
Siempre ocurre que el punto ms bajo de tangencia es tal que p
i
, es tal que q est a la
izquierda de p
i1
p
i
pero a la derecha de p
i
p
i+1
.
El punto p
j
ser el punto de mayor tangencia si q est a la derecha de p
j1
p
j
pero a la
izquierda de p
j
p
j+1
.
A continuacin aparece el cdigo correspondiente al clculo de los dos puntos tangentes, p
i
y
p
j
.
PROCEDIMIENTO PuntosTangentes ( VAR P: Ti poPol i gono , n : Entero , q : Ti poPunto , VAR pt : ARRAY( 2 ) de ENTEROS)
ENTRADA: La nube P de tamao n ; el punto q desde el que se l anzan t angent es haci a P
SALIDA : La par ej a de puntos pt
VARIABLES:
j : Ent ero / / el ndi ce para pt
i : Ent ero / / var i abl e cont adora del bucl e
INICIO
j < 0
PARA i < 0 HASTA n1 REPETIR
SI XOR ( I zqui er da_sobr e ( p [ i 1] ,p [ i ] , q ) , I zqui er da_sobr e( p [ i ] , p [ i +1] , q ) )
ENTONCES
pt [ j ] < P[ i ]
j < j +1
FIN_SI
FIN_PARA
FIN
El procedimiento PuntosTangentes calcula los puntos resultantes de lanzar tangentes desde el
punto q al polgono P de tamao n obteniendo como resultado los vrtices pt1 y pt2. El algorit-
mo determina que el vrtice p[i] es un punto tangente si recorriendo cada arista del polgono P
dicho vrtice implica un cambio de resultado tras ejecutar la funcin IzquierdaOSobre.
27
2 La envolvente convexa y triangulacin de polgonos
Pero obtener los dos puntos tangentes no implica de ningn modo que el proceso ha nalizado.
El punto q ser parte ahora del nuevo polgono convexo, as como lo sern los puntos pt1 y pt2.
Sin embargo, es posible que algunos otros vrtices del polgono convexo desaparezcan. En el
ejemplo de la gura, la secuencia de vrtices i +1, ..., j 1 claramente desaparece al aadir el
nuevo punto. El resultado nal sera el polgono P = p0, p1, ..., p
i1
, p
i
, q, p
j
, p
j+1
, ..., p
n1
.
El orden de ejecucin del algoritmo es la suma de los siguientes trminos:
1. la operacin de ordenacin con coste O(nlogn)
2. cada uno de los n3 puntos que aaden necesitan calcular las dos tangentes, operacin
que en el peor de los casos es lineal.
Por tanto, y aunque el algoritmo es susceptible de aadir mejoras, necesita en el peor de los
casos un tiempo O(n
2
).
2.1.6. Mtodo Divide y Vencers
Los mtodos divide y vencers siempre trabajan de modo similar. En este caso, partimos de
una nube de puntos ordenada de izquierda a derecha que se divide en dos mitades A y B de
aproximadamente el mismo tamao. Para cada una de estas mitades, continuamos el proceso
de divisin hasta que nalmente el tamao de la nube de puntos es tan pequeo que puede
resolverse el problema fcilmente. Este caso concreto es cuando tenemos tres puntos. Cuando
el problema no pueda dividirse ms, el siguiente paso es unir dos a dos los polgonos convexos
resultantes de la etapa anterior, en un nuevo polgono convexo. El proceso naliza obteniendo la
envolvente convexa de todos los puntos.
Sin embargo, la etapa de unin de dos polgonos convexos en un nico polgono convexo no
es inmediata. Necesitamos calcular dos tangentes que unan dichas envolventes, una tangente
superior y otra inferior.
El mecanismo para conseguir, por ejemplo, la tangente inferior, podemos observarlo en la si-
guiente gura. Se comenzara suponiendo que el segmento que une el punto ms a la derecha
de A y el punto ms a la izquierda de B es una tangente vlida. Como esta suposicin es falsa
para este ejemplo, decidimos bajar vrtices sucesivamente hasta que por n para el polgono A
se localiza una envolvente. En el ejemplo, A2-B5 ya es una tangente para A, sin embargo no lo
es para B. El siguiente paso es hacer exactamente lo mismo pero bajando sucesivos vrtices de
B. El proceso termina cuando para los dos polgonos se encuentra una tangente.
28
2 La envolvente convexa y triangulacin de polgonos
PROCEDIMIENTO Envol vente_DyV ( VAR P: TipoNubePuntos , i , j : Entero , VAR E: Ti poCtoPuntos )
ENTRADA: La por ci n comprendi da ent r e i y j de l a nube de puntos P
SALIDA : La envol vent e convexa de di cha por ci n de di cha nube
VARIABLES E1, E2 : Ti poCtoPuntos / / Las envol vent es convexas en si t uaci ones i nt er medi as
INICIO
SI j i < 3
ENTONCES E < P
SINO
Envol vente_DyV ( P, i , ( i + j ) / 2 , E1)
Envol vente_DyV ( P, ( i + j ) / 2+1 , j , E2)
Mezcl arEnvol vent es ( E1 , E2 , j i +1 , E)
FIN_SI
FIN
PROCEDIMIENTO Mezcl arEnvol vent es ( VAR EI , ED: Ti poCtoPuntos , n : Entero , VAR E: Ti poCtoPuntos )
ENTRADA: EI y ED, envol vent es convexas de tamaos n y m
SALIDA : La envol vent e convexa E
VARIABLES:
INICIO
MenorTangente ( EI , ED, n , m, a , b)
MenorTangente ( EI , ED, n , m, c , d)
E < EI { a +1 , . . . , c 1} + ED { d +1 , . . . , b1}
FIN
PROCEDIMIENTO MenorTangente ( EI , ED: Ti poCtoPuntos , n , m, a , b : Ent ero )
ENTRADA: EI de tamao n y ED de tamao m
SALIDA : el segmento formado por a y b
INICIO
a < MasDecha ( EI , n)
b < MasIzda ( ED, m)
REPETIR
aa < a
bb < n
MIENTRAS NO ( TangenteMenor ( EI , n , a , b ) ) REPETIR
29
2 La envolvente convexa y triangulacin de polgonos
a < ( a1+n ) mod n
FIN_MIENTRAS
MIENTRAS NO ( TangenteMenor ( ED,m, a , b ) ) REPETIR
b < ( b+1) mod n
FIN_MIENTRAS
HASTA ( aa=a AND bb=b)
FIN
Para saber si ab es tangente a un polgono observemos los siguientes grcos: queda como
ejercicio la implementacin de las funciones TangenteMenor y TangenteMayor.
El tiempo de ejecucin de un algoritmo divide y vencers depende en gran medida del compor-
tamiento de la funcin de mezcla de cada pareja de diagramas polares. Cuando sto se realiza en
tiempo lineal, como es este caso, sabemos que contamos con un algoritmo en tiempo O(nlogn)
(ver Seccin 1).
2.2. Triangulacin de polgonos
En el Tema 1 hicimos referencia por primera vez a la triangulacin de polgonos. En esa ocasin
se hizo incapi de la necesidad de encontrar un algoritmo eciente para realizar este clculo,
puesto que el dado en dicho tema posee un tiempo de ejecucin poco eciente.
En esta seccin conseguiremos triangular cualquier tipo de polgono en tiempo ptimo O(nlogn),
para ello sern necesarios dos pasos diferentes: la particin de cualquier polgono en particiones
montonas y la triangulacin de cada una de estas porciones.
2.2.1. Polgonos montonos
Un polgono montono con respecto a la vertical es aquel que si se recorre con una lnea hori-
zontal bajando a lo largo del total del polgono, ocurre que slo encontramos como mximo dos
intersecciones del polgono con dicha recta. Si adems no consideramos la existencia de aristas
horizontales, entonces hablamos de polgono extrictamente montono.
Intuitivamente hablando, un polgono montono ser aquel que no posee cspides interiores,
considerndo al vrtice v
i
como cspide si v
i1
y v
i+1
estn ambos arriba o abajo.
30
2 La envolvente convexa y triangulacin de polgonos
La ventaja de triangular un polgono montono es ms o menos intuitiva: al bajar una lnea
horizontal imaginaria a lo largo de todo el tringulo y encontrarse con el vrtice v
i
, se sabe que su
diagonal ir a un punto visible desde dicho punto. La idea es ir bajando paulatinamente vrtice
a vrtice, bien por la izquierda, bien por la derecha, dibujando diagonales segn el siguiente
algoritmo.
ALGORITMO Tri angul aci onMonot ona
ENTRADA: El pol gono S de tamao n
SALIDA : El conj unt o de Di agonal es que t r i angul an el pol gono
INICIO
Ordenar ( S, n , p)
Li st aCr ea ( l )
l i st aCr ea ( Di agonal es)
Li st aMet eFi nal ( l , p [ 0 ] )
Li st aMet eFi nal ( l , p [ 1 ] )
PARA j < 2 HASTA n1 REPETIR
SI Adyacente ( L i s t a I n i c i o ( l , p [ j ] ) AND NOT Adyacente ( Li s t aFi nal ( l ) , p [ j ] )
ENTONCES
v< Li st aSacaI ni ci o ( l )
MIENTRAS ( NOT Li st aVaci a ( l ) ) REPETIR
v < Li st aSacaI ni ci o ( l )
Li st aMet eFi nal ( Di agonal es , v , p [ j ] )
FIN_MIENTRAS
Li st aMet eFi nal ( l , v )
Li st aMet eFi nal ( l , p [ j ] )
SINO
SI Adyacente ( Li s t aFi nal ( l ) , p [ j ] ) AND NOT Adyacente ( L i s t aI n i c i o ( l ) , p [ j ] )
ENTONCES
v<Li st aSacaFi nal ( l )
x<Fi nal Li s t a ( l )
MIENTRAS ( Angul o ( p [ j ] , v , x ) < Pi ) REPETIR
Li st aMet eFi nal ( Di agonal es , x , p [ j ] )
v < Li st aFi nal Saca ( l )
SI NOT Li st aVaci a ( l )
ENTONCES x<Li s t aFi nal ( l )
FIN_MIENTRAS
Li st aMet eFi nal ( l , v )
Li st aMet eFi nal ( l , p [ j ] )
SINO
v<Li st aSacaI ni ci o ( l )
v<Li st aSacaI ni ci o ( l )
MIENTRAS NOT ( Li st aVaci a ( l ) )
v<Li st aSacaI ni ci o ( l )
Li st aMet eFi nal ( Di agonal es , p [ j ] , v )
FIN_MIENTRAS
FIN_SI
FIN_SI
FIN_PARA
31
2 La envolvente convexa y triangulacin de polgonos
FIN
En la siguiente gura podemos observar el conjunto de diagonales obtenidas tras la ejecucin de
este algoritmo para el polgono montono de ejemplo.
Veamos como funciona el algoritmo en sus primeros pasos para este ejemplo. Al ordenar los
puntos de mayor a menor obtenemos la numeracin que vemos en la gura. Antes de entrar en
el bucle, la lista l = s
0
, s
1
. Al entrar por primera vez en el bucle con j = 2, observamos que s
2
es
adyacente al nal de la lista l (2
a
sentencia condicional) pero el algoritmo no construye an dia-
gonales porque el Angulo(s[2],1,0)> por lo que la lista acaba siendo l =s
0
, s
1
, s
2
. Las siguientes
iteraciones son iguales, hasta que para j = 4 se construyen las diagonales 14, 24, 34. La
idea bsica del algortimo es construir diagonales con el comienzo de la lista l o con el nal de
sta , teniendo en cuenta que slo se unen puntos visibles entre s (ngulo <) y que no son
adyacentes.
El tiempo de ejecucin de este algoritmo es O(nlogn). El proceso de ordenacin de los vrtices
ya posee este orden de ejecucin, por lo que dicho algoritmo no podra ejecutarse en menor tiem-
po. Adems habra que aadir un tiempo lineal, puesto que todas las operaciones del algoritmo,
operaciones con el nal y principio de la lista, el clculo del ngulo, etc., se ejecutan en tiempo
constante. Tan slo nos puede plantear un problema los bucles MIENTRAS, pero sin embargo
aseguramos el tiempo lineal del proceso, puesto que todo vrtice es procesado como mucho dos
veces, uno cuando entra en la lista y otra vez cuando sale de sta.
32
2 La envolvente convexa y triangulacin de polgonos
2.2.2. Particin de un polgono en componentes montonas
La triangulacin de polgonos montonos desde luego deja de tener sentido si no es posible
particionar cualquier tipo de polgono en particiones montonas. En este apartado completa-
mos el proceso de triangulacin eciente de polgonos dando un algoritmo capaz de encontrar
diagonales tales que dividan dicho polgono en particiones montonas.
Consideramos a un polgono y-montono si para cada horizontal h, la interseccin del polgono
con h es conexa, esto es, es un punto o el vaco. La denicin para x-montono es anloga.
Antes de ver el funcionamiento del polgono determinaremos los cinco tipos de vrtices que
podemos encontrar:
Vrtice comienzo: el vrtice v
i
es de comien-
zo si v
i1
y v
i+1
poseen menor ordenada
y su ngulo interior es menor que .
Vrtice nal: el vrtice v
i
es de nal si v
i1
y
v
i+1
poseen mayor ordenada y su ngulo
interior es menor que .
Vrtice Particin: el vrtice v
i
es de particin
si v
i1
y v
i+1
poseen menor ordenada y
su ngulo interior es mayor que .
Vrtice Mezcla: el vrtice v
i
es de mezcla si
v
i1
y v
i+1
poseen mayor ordenada y su
ngulo interior es mayor que .
Vrtice Regular: cualquier otro vrtice no considerado anteriormente.
33
2 La envolvente convexa y triangulacin de polgonos
Utilizaremos la tcnica de lnea de barrido para encontrar las distintas particiones montonas.
La idea ser localizar los vrtices que rompen la monotona, los de particin y los de mezcla.
Desde ellos se lanzarn diagonales, el destino de stos ser tambin un objetivo primordial del
algoritmo.
Las estructuras de datos implicadas son las siguientes:
P: ser un array conteniendo los vrtices del polgono, ordenados como es habitual en sentido
antihorario.
Q: La lnea imaginaria bajando por el plano se encontrara los puntos de P de mayor a menor
ordenada. Para no duplicar los puntos, y sobre todo por ventajas computacionales, Q ser
un vector de tamao n con los ndices de P identicando los puntos ordenados de mayor
a menor ordenada.
T: Se trata de alguna estructura de datos con tiempo de acceso logartmico. Almacenar los
vrtices e
i
, siendo e
i
= v
i
v
i+1
, con excepcin de e
n1
= v
n1
v
0
. El conjunto de ejes se
almacenan por la coordenada x, tanto de izquierda a derecha.
Ayu: Es un array que almacena en todo momento el vrtice candidato para unir a los vrtices
de particin y mezcla. Los valores podrn ir cambiando hasta que se localice el valor
correcto.
D: Mantiene el resultado, es decir, el conjunto de diagonales conseguidas por el algoritmo.
Puede ser un array o una lista.
PROCEDIMIENTO HacerMonotono ( VAR P: Ti poPol i gono ; VAR D: Ti poLi st a )
ENTRADA: El pol gono P de tamao n
SALIDA : El conj unt o D de di agonal es
INICIO
Ordenar_Y ( P, n ,Q)
I n i c i l i z a r L i s t a ( T)
I n i c i a l i z a r L i s t a (D)
Para k< 0 hast a n1 Repet i r
i <Q( k )
34
2 La envolvente convexa y triangulacin de polgonos
EN CASO DE QUE Ti poVer t i ce ( P, i ) SEA
0 : ( Comienzo)
Li st aI nser t ar Or denado ( T, i , P)
Ayu( i ) < i
1: ( Fi nal )
Si Ti poVer t i ce ( P, Ayu( i 1))=2
Entonces I ns er t ar Li s t a ( D, { i Ayu( i 1)})
Li st aEl i mi nar ( T, i 1)
2: ( Mezcl a)
Si Ti poVer t i ce ( P, Ayu( i 1))=2
Entonces Li s t aI ns er t ar ( D, { i Ayu( i 1)})
Li st aEl i mi nar ( T , i 1)
j < Li st aBuscar I zdo ( T , i )
Si Ti poVer t i ce ( P, Ayu( j ) ) =2
Entonces Li s t aI ns er t ar ( D, { i Ayu( j ) } )
Ayu( j ) < i
3: ( Par t i c i n )
j < Li st aBuscar I zdo ( T , i )
Li s t aI ns er t ar ( D, { i Ayu( j ) } )
Ayu( j )< i
Li st aI nser t ar Or denado ( T , i , P)
Ayu( i )<i
4: ( Regul ar )
Si I nt er i or Decha ( P, i )
Entonces
Si Ti poVer t i ce ( P, Ayu( i 1))=2
Entonces Li s t aI ns er t ar ( D, { i Ayu( i 1)})
Li st aBor r ar ( T, i 1)
Li st aI nser t ar Or denado ( T, i , P)
Ayu( i )<i
Si no
j <Li st aBuscar I zdo ( T, i )
Si Ti poVer t i ce ( P, Ayu( j ) ) =2
Entonces Li s t aI ns er t ar ( D, { i Ayu( j ) }
Ayu( j )< i
FIN_SI
FIN_SI
FIN_CASE
FIN
El tiempo de ejecucin del algoritmo anterior es ptimo. La ordenacin de los vrtices puede
realizarse en tiempo O(nlogn). Cada una de las n iteraciones de bucle se ejecuta en tiempo
logartmico, el correspondiente a las operaciones de manejo de la estructura de datos T.
35
3 Intersecciones
La deteccin de intersecciones constituye una de las primitivas geomtricas fundamentales con
muy diversas aplicaciones. En realidad virtual o diseo de circuitos VLSI el manejo de intersec-
ciones es fundamental. Pero existen otras reas de inters ms prximas a la Topografa como
son los Sistemas de Informacin Geogrca. En muchas ocasiones para hacer los mapas ms
manejables y legibles, la informacin que contienen se divide en distintos tipos de mapas, ca-
da uno especializado en carreteras, ciudades, ros y montaas, densidad de poblacin, etc. La
informacin geomtrica subyacente en cada uno de estos mapas tambin puede considerarse
diferente, as una carretera puede ser representada mediante una polilnea y un ncleo urbano
puede serlo mediante conjunto de polgonos. Sin embargo, cuando dos de estos mapas necesi-
tan ser manejados al mismo tiempo (por ejemplo para conocer las carreteras que llegan a una
ciudad), es necesario el manejo de intersecciones entre iguales o diversos objetos geomtricos.
Los problemas que necesitan del procesamiento de intersecciones pueden ser de distinta ndo-
le. En algunas ocasiones no es necesario determinar con exactitud el punto de corte entre dos
elementos geomtricos, nicamente conocer si existe dicha interseccin. Tambin podemos en-
contrar una diferencia sustancial entre manejar un par de lneas o segmentos o hacerlo con un
conjunto de ellos. De hecho, la realidad a veces necesita simular la forma de cualquier lnea
mediante una polilnea o conjunto de segmentos unidos a modo de cadena. La naturaleza de los
objetos tambin puede ser conveniente conocerla a priori, puesto que la interseccin de polgo-
nos convexos cuenta con un orden de ejecucin menor que si se trata de polgonos generales.
3.1. Interseccin de polgonos convexos
El tiempo de ejecucin para conocer la interseccin de dos polgonos cualesquiera es O(nm),
siendo n y m el nmero de ejes de los dos polgonos. El resultado de calcular la interseccin de
dos polgonos cualesquiera podemos verlo en la siguiente gura:
36
3 Intersecciones
Sin embargo, realizar esta operacin con polgonos convexos puede hacerse en tiempo O(n+m).
Existe una propiedad importante para la interseccin de polgonos convexos: la interseccin es
tambin un polgono convexo.
Denominaremos a A y B a los ejes que en cada momento se estn ejecutando. En cada iteracin
se avanza el eje A o el B (siempre en orden inverso a las agujas del reloj) dependiendo de
ciertas reglas de avance. El objetivo es que dichos avances se vayan sincronizando en cuanto a
su velocidad para encontrar todas las intersecciones.
Denominamos a como el punto de la cabecera del vector A, y b el punto de la cabecera de B. Las
reglas de avance harn por ejemplo, que si B apunta hacia la lnea que contiene a A, entonces
avanzamos B para buscar la interseccin con A.
Denominaremos a H(A) como el semiplano cerrado a la izquierda de A y a H(B) como el
semiplano cerrado a la izquierda de H(B). Ocurre que AxB > 0 cuando el giro ms corto de
girar A hacia B es en sentido inverso a las agujas del reloj. Como por regla general los dos
vectores no coincidirn en su inicio, imaginaremos sin embargo que as ocurre para localizar el
giro ms corto. En el siguiente ejemplo, AxB > 0 puesto que observamos que hacemos un giro
en sentido de las agujas del reloj para ir de A hacia B.
Las reglas de avance quedan resumidas en la siguiente tabla:
AXB Condiciones del semiplano Regla de avance
>0 bH(A) A
>0 b/ H(A) B
<0 aH(B) B
<0 b/ H(B) A
El mtodo anteriormente descrito aparece a continuacin. Tambin aparece el pseudocdigo de
otros subalgoritmos llamados por el algoritmo principal.
PROCEDIMIENTO I nt er sect aPol i gonosConvexos ( VAR P,Q: Ti poPol i gono ; n ,m: Ent ero )
ENTRADA: P,Q de tamao n y m
SALIDA:
VARIABLES:
CONSTANTES: Ori gen : ( 0 , 0)
INICIO
37
3 Intersecciones
a<0
b<0
Dentro < 1
REPETIR
a1 < ( a+n1) mod n
b1 < ( b+m1) mod m
Subvect or ( P[ a ] , P[ a1 ] , A)
Subvect or ( Q[ b ] , Q[ b1 ] , B)
ProductoX < Area2 ( Ori gen , A, B)
bHA < IzdaSobre ( P[ a1 ] , P[ a ] ,Q[ b ] )
aHB < IzdaSobre (Q[ b1 ] ,Q[ b ] , P[ a ] )
SI ( I nt er sect a P[ a1 ] , P[ a ] ,Q[ b1 ] ,Q[ b ] , P)
ENTONCES SI Dentro = 1
ENTONCES AvanA < 0
AvanB < 0
FIN_SI
Dentro < Test Dent ro ( aHB)
FIN_SI
SI ( ProductoX >= 0)
ENTONCES SI ( bHA)
ENTONCES a < Avanza ( a , AvanA , n , Dentro , P[ a ] )
SINO b < Avanza ( b , AvanB , m, NOT Dentro , Q[ b ] )
SINO SI ( aHB)
ENTONCES b < Avanza ( b , AvanB, m, NOT Dentro , Q[ b ] )
SINO a < Avanza ( a , AvanA, n , Dentro , P[ a ] )
FIN_SI
HASTA ( AvanA >= n AND AvanB >= m)
SI Dentro = 1
ENTONCES ESCRIBIR " No ha habi do i nt er secci n " ;
FIN
FUNCION Test Dent ro ( H: Ent ero ) : Lgi co
INICIO
SI H < > 0
ENTONCES Test Dent ro < 1
SINO Test Dent ro < 0
FIN
FUCION Avanza ( VAR ab , Avd : Ent ero ; n : Ent ero ; Dentro : Lgi co ; v : Ti poPunto )
INICIO
SI Dentro
ENTONCES Pi nt ar ( v )
FIN_SI
Adv < Adv + 1
ab < ( ab+1) mod n
FIN
38
3 Intersecciones
PROCEDIMIENTO Subvect or ( VAR a , b , c : Ti poPunto )
INICIO
PARA i < 0 HASTA 1 INCR +1 REPETIR
c [ i ] < a [ i ] b [ i ]
FIN_PARA
FIN
En el siguiente ejemplo observamos un ejemplo de polgonos convexos.
En la siguiente tabla observamos el resultado tras aplicar el algoritmo. En la ltima columna
observamos el avance de los ejes. Podemos comprobar que el recorrido conjunto de ambos ejes
permite localizar todas y cada una de las intersecciones existentes.
A B AxB aH(B) bH(A) Avanza
5-0 4-0 >0 F V A
0-1 4-0 <0 V F B
0-1 0-1 >0 F V A
1-2 0-1 >0 F V A
2-3 0-1 <0 V F B
2-3 1-2 >0 F V A
3-4 1-2 <0 V F B
3-4 2-3 >0 V F B
3-4 3-4 >0 V V A
4-5 3-4 >0 V V A
5-0 3-4 >0 V F B
5-0 4-0
3.2. Interseccin de segmentos
La interseccin de segmentos es un clculo muy importante por las repercusiones que tiene a
nivel de intersecciones en el mundo real. Podemos simular una carretera como un conjunto de
39
3 Intersecciones
segmentos. Para saber donde se podra construir un puente podramos computar el conjunto de
intersecciones entre el mapa de carreteras y el mapa de ros. Las operaciones realizadas a bajo
nivel en la aplicacin informtica que lleve a cabo este clculo sern las de intersecciones de
segmentos.
Puede realizarse siempre un algoritmo de fuerza bruta para realizar este clculo utilizando para
ello un tiempo O(n
2
) si supuestamente empleamos un nmero similar de ros y de carreteras.
Como es de imaginar este algoritmo procesara todos los ros con todas las carreteras, y siendo
por tanto poco eciente. Probablemente el nmero de intersecciones sea mucho menor al de
potenciales puntos de interseccin, por lo que podra buscarse un mtodo alternativo que tuvie-
ra por principio el procesar nicamente posibles intersecciones en segmentos que estn cerca,
evitando as clculos innecesarios.
La estrategia a seguir puede ser la de bajar una lnea horizontal L de arriba hacia abajo por el
plano de modo que se vaya tropezando tanto con un tipo de segmentos como del otro. Cada vez
que L se encuentra con un segmento lo almacena en una lista ordenada de izquierda a derecha, y
as sucesivamente con todos y cada uno de los segmentos localizados. Para cada nueva intersec-
cin y borrado en dicha lista se pregunta si la nueva situacin provoca una interseccin, siempre
entre segmentos vecinos de la lista.
Emplear las estructuras de datos correctas en este mtodo es fundamental para la eciencia de
ste.
P: Es un array que contiene el conjunto de segmentos iniciales dispuesto en principio en cual-
quier tipo de orden. El array tiene un tamao de nx4 puntos, siendo cada la los cuatro
puntos que forman un segmento en el orden {x
0
, y
0
, x
1
, y
1
}, siendo siempre el punto (x
0
, y
0
)
el extremo de mayor ordenada.
Q: Es la denominada cola de eventos que almacena el conjunto de vrtices y de puntos inter-
seccin. Mantendr los puntos extremos ordenados de mayor a menor ordenada. Cuando
en dicha lista se inserten dos puntos con la misma ordenada, se considerar primero el de
menor abscisa. Ser preferentemente una lista a un array porque deber permitir insercio-
nes.
T: Estructura de datos que simula el comportamiento de la lnea imaginaria L. Mantendr or-
denados de izquierda a derecha los segmentos que en todo momento vaya atravesando,
eliminado los ya procesados e insertndolos cuando se comienzan a atravesar. Esta estruc-
tura de datos deber permitir inserciones y borrados en tiempo logartmico
1
.
I: Cualquier tipo de estructura de datos que almacene las intersecciones localizadas.
La funcin ManejarEvento es la encargada de procesar cada uno de los nuevos extremos de
la cola de eventos Q. Esta funcin sera llamada por el algoritmo EncontrarIntersecccion tal y
como vemos a continuacin.
1
Por simplicidad, en las prcticas de este curso lo sustituiremos por una lista, aunque no cuente con tiempo de
acceso logartmico.
40
3 Intersecciones
ALGORITMO Encont r ar I nt er secci on
ENTRADA: P, conj unt o de segmentos en el pl ano de tamani o n
SALIDA : Conj unt o I de i nt er secci ones del pl ano
INICIO
Ordenar ( P, n ,Q)
I n i c i a l i z a r ( T)
Tam < n
i < 0
MIENTRAS ( tam>1) REPETIR
Manej arEvento ( P, Q, i , Tam)
FIN_MIENTRAS
FIN
PROCEDIMIENTO Manej arEvento ( VAR P: Ti poConj untoSegmento ; VAR Q: Ar r ay ( 2 , n ) de Ent eros ;
i , Tam: Ent ero ; VAR I nt er secci ones : Ti poConj unt oPuntos ; VAR: Tam: Ent ero )
ENTRADA: P de tamani o n ; Q de tamani o n ; i posi ci n de Q a pr ocesar
SALIDA : I nt er secci ones
INICIO
I n i c i a l i z a r L i s t a (U) ; I n i c i a l i z a r L i s t a ( L ) ; I n i c i a l i z a r L i s t a (C) ;
REPETIR
k < Q( i , 0)
Ti po < Q( i , 1)
EN CASO DE QUE Ti po SEA
1 : Li s t aI ns er t ar (U, k )
0 : Li s t aI ns er t ar (C, k )
1: Li s t aI ns er t ar ( L , k )
FIN_CASE
i < i +1
Tam < Tam 1
HASTA NO ( Igual esCoordenadas (P( k , Ti po ) , P(Q( i , 0) ,Q( i , 1 ) )
SI ( Tamani oLi sa ( U) + Tamani oLi st a (C) + TamaLi sta ( L ) ) > 1
ENTONCES I ns er t ar Li s t a ( I nt er secci ones , k )
FIN_SI
PARA l < 0 HASTA Tamani oLi st a ( L)1
Li st aEl i mi nar ( T , El ement oLi st a( L , l ) )
FIN_PARA
PARA l < 0 HASTA Tamani oLi st a (U) 1
Li s t aI ns er t ar ( T , El ement oLi st a(U, l ) )
FIN_PARA
SI Tamanio(U) + Tamani oLi st a ( C) = 0
ENTONCES
s l < Buscar Li st aI zdo ( T, k )
sr < BuscarDecho ( T, k )
SI I nt er sect a ( P, sl , sr , q)
ENTONCES I nser t ar Or denado ( Q, q , 0 )
Tam < Tam + 1
FIN_SI
41
3 Intersecciones
SINO
SI Tamani oLi st a ( C ) = 0
ENTONCES
s1 < Pr i mer oLi st a ( U)
s l < Buscar Li st aI zdo ( T , s1 )
SI I nt er sect a ( P, s1 , sl , q)
ENTONCES I nser t ar Or denado ( Q, q , 0 )
Tam < Tam +1
FIN_SI
s2 < Pr i mer oLi st a ( U)
sr < BuscarLi st aDecho ( T , s2 )
SI I nt er sect a ( P, s2 , sr , q)
ENTONCES I nser t ar Or denado ( Q, q , 0 )
Tam < Tam +1
FIN_SI
SINO
s l < Pr i mer oLi st a ( C)
sr < Ul t i moLi st a ( C)
I nt er cambi ar Posi ci ones ( T , sl , sr )
FIN_SI
FIN_SI
FIN.
Sin embargo, la funcin de interseccin de segmentos desarrollada en el primer tema no es vlida
para conocer el punto de interseccin entre dos segmentos, slo para saber si dicha interseccin
se produce.
FUNCION I nt er secci on_segment ( VARA a , b , c , d : Ti poPunto ; VAR p : Ti poPunto ) : Lgi co ;
ENTRADA: Los segmentos ab y cd
SALIDA : el punto p s i hay i nt er secci n
INICIO
denomi nador < a [ 0] ( d[1] c [ 1 ] ) + b [ 0] ( c[1] d [ 1] ) +
d [ 0] ( b[1] a [ 1 ] ) + c [ 0] ( a[1] b [ 1 ] )
SI denomi nador = 0. 0
ENTONCES I nt er secci on_segment < f al so
s < (a [ 0] ( d[1] c [ 1 ] ) +
c [ 0] ( a[1] d [ 1 ] ) +
d [ 0] ( c[1] a [ 1 ] ) ) / denomi nador
t < (a [ 0] ( c[1] b [ 1 ] ) +
b [ 0] ( a[1] c [ 1 ] ) +
c [ 0] ( b[1] a [ 1 ] ) ) / denomi nador
p[ 0] < a[ 0] +s ( b[0] a [ 0 ] )
p[ 1] < a[ 1] +s ( b[1] a [ 1 ] )
SI ( ( 0. 0 <= s ) AND ( s <=1. 0) AND ( 0. 0 <= t ) AND ( t <= 1. 0) )
ENTONCES I nt er secci on_segment < verdad
SINO I nt er secci on_segment < f al se
FIN
42
3 Intersecciones
En el siguiente ejemplo vemos un conjunto de segmentos en los cuales podemos encontrar un
conjunto de intersecciones. Hay que tener en cuenta que el algoritmo tambin detecta las inter-
secciones de los segmentos por sus extremos, ya que hay que tener en cuenta que los segmentos
pueden llegar desordenados y sin relacin unos con otros.
43
4 Localizacin de puntos y diagramas de
Voronoi
4.1. Punto en polgono
El problema denominado punto en polgono se presenta cada vez que se pincha el ratn en
pantalla. Si el polgono P sobre el que trabajamos es convexo, el problema puede solucionarse
en tiempo O(logn). Pero el mtodo ms interesante ocurre cuando P no es convexo.
Para este caso utilizamos el siguiente mtodo: si queremos saber si el punto q est dentro o fuera
del polgono P trazamos una lnea en cualquier direccin, por ejemplo utilizando la recta r igual
a y = 0, x 0 y entonces contamos el nmero de intersecciones que se producen. El punto q est
dentro de P si el nmero de intersecciones es impar.
Para hacer ms fcil el clculo y utilizar una recta r vlida para cualquier caso, hacemos coincidir
el punto q con el origen de coordenadas de forma que la r pueda ser simplemente y = 0, para
x 0.
Para conocer el lugar justo de interseccin utilizaremos la siguiente frmula:
y y
i1
= (x x
i1
)(y
i
y
i1
)/(x
i
x
i1
)
trasladamos la idea anterior al siguiente algoritmo en pseudocdigo que realiza el test de inclu-
sin de punto en polgono. El primer conjunto de bucles hace el cambio de origen de coorde-
nadas. En el siguiente se detectan las intersecciones con la recta y = 0, pero slo se tienen en
cuenta los cortes que se producen para x > 0.
44
4 Localizacin de puntos y diagramas de Voronoi
FUNCTION PuntoEnPol i gono ( VAR P: Ti poPol i gono ; q : Ti poPunto ; n : Ent ero ) : Lgi co
ENTRADA: El punto q que est dent r o o no del pol gono P de tamao n
SALIDA : Verdadero s i q est dent r o de P
Fal so en caso cont r ar i o
INICIO
PARA i < 0 HASTA n1 REPETIR
PARA j < 0 HASTA 1 REPETIR
P[ i , j ] < P[ i , j ]q [ j ]
FIN_PARA
FIN_PARA
cr oss < 0
PARA i < 0 HASTA n1 REPETIR
i 1 < ( i +n1) mod n
{ s i exi st e i nt er secci on }
SI ( ( ( P( i , 1) >0 AND P( i 1 , 1) <=0) ) OR
( ( P( i 1 , 1) >0 AND P( i , 1) <= 0 ) ) )
ENTONCES
{ despejamos l a x y hacemos y=0}
x < P( i , 0) P( i 1 ,1) P( i 1 , 0) P( i , 1 ) / ( P( i 1 ,1) P( i , 1 ) )
SI x > 0
ENTONCES cr oss < cr oss + 1
FIN_SI
FIN_SI
FIN_PARA
SI ( cr oss mod 2) = 1
ENTONCES PuntoEnPol i gono < verdad
SINO PuntoEnPol i gono < f al se
FIN.
El tiempo de ejeccin de este test de inclusin es lineal, como claramente indica la bsqueda
exhaustiva de intersecciones de una recta con todas las aristas de un polgono.
4.2. Diagramas de Voronoi
4.2.1. Introduccin
Para conocer de forma intuitiva el concepto de diagrama de Voronoi de un conjunto de puntos
en el espacio, supongamos que asociamos a cada uno de estos puntos generadores el lugar de
los puntos del espacio ms cercano a cada uno de ellos. Veamos un ejemplo a continuacin en
el plano:
45
4 Localizacin de puntos y diagramas de Voronoi
Se conoce el diagrama de Voronoi a partir del ao 1629 y ms tarde en el 1644 por Descartes. La
aplicacin inicial que se le dio fue la contruccin espacial. Sin embargo, se le conoce con dicho
nombre a partir del libro de Voronoi de 1908. Los primeros trabajos al respecto fueron sobre pun-
tos regularmente emplazados en el espacio, por lo que no es de extraar que uno de las primeras
aplicaciones fuera la cristalografa. El resto de aplicaciones se descubrieron posteriormente, el
diagrama de Voronoi y la triangulacin de Delaunay poseen aplicaciones inmediatas en distin-
tas disciplinas como Antropologa, Arqueologa, Astronoma, Biologa, Cartografa, Geometra
Computacional, Ecologa, estudios forestales, Geografa, Geologa, Marketing, Meteorologa,
fsica, siologa, planicacin urbana y regional, etc. Hoy por hoy el nmero de aplicaciones
sigue creciendo.
El concepto del diagrama de Voronoi nace en el siglo XVII y fue estudiado por Descartes, pero
se le conoce con este nombre desde principios del siglo XX. Una de sus aplicaciones iniciales fue
la cristalografa, pero hoy se le conocen mltiples aplicaciones: en Minera, estudios de merca-
do, Sociologa, Cartografa, Antropologa, Arqueologa, Biologa, Ecologa, estudios forestales,
Geografa, Meteorologa, Fsica, Fisiologa, planicacin urbana y regional, etc.
En cristalografa el objetivo es la interpolacin del espacio. En una reserva mineral se hacen
agujeros para tomar muestras. Estos resultaban ser puntos generadores del diagrama de Voronoi
y conocer as el rea de interrelacin entre diversos elementos. En estudios de mercado su utili-
zacin est muy extendida desde los aos cuarenta del siglo XX. Por ejemplo, se puede suponer
que un punto es la localizacin de un determinado negocio o comercio. Las regiones de Voronoi
que se generan pueden suponer el potencial de clientes que tendra abrir dicho negocio en esa
ubicacin pudindose tener en cuenta aspectos como como el rea de inuencia o los medios de
transporte.
El diagrama de Voronoi ha sido utilizado por ejemplo para determinar los puntos estratgicos
donde colocar puntos de observacin para el control de incendios. El terreno es as dividido de
forma que cada punto de control vigile la mitad del espacio hasta el siguiente punto de control.
Sin embargo cuando realmente las aplicaciones del diagrama polar se han extendido ha sido con
la inuencia a partir de los aos setenta de la informtica.
46
4 Localizacin de puntos y diagramas de Voronoi
4.2.2. Denicin
Un diagrama de Voronoi puede considerarse como el resultado de asociar a todas las locali-
zaciones del espacio eucldeo con su miembro ms prximo del conjunto de puntos segn la
distancia eucldea.
Un polgono de Voronoi es un conjunto cerrado cuya frontera consiste en segmentos, semirectas
o lneas innitas que llamaremos ejes de Voronoi. Si dos polgonos comparten algn eje se
dice que son adyacentes. Entonces, dado un conjunto de n puntos en el plano, se considera un
polgono o regin de Voronoi V(p
i
) asociado al punto p
i
como sigue:
V(p
i
) =

x : |p
i
x| |p
j
x|, j = i

El conjunto de regiones asociadas a todos y cada uno de los p


i
anteriores constituye el deno-
miando diagrama de Voronoi:
V ={V(p
1
),V(p
2
), . . . ,V(p
n
)}
4.2.3. Elementos del diagrama de Voronoi
Podemos considerar los siguientes elementos en el diagrama de Voronoi:
p
i
punto generador
e je es el conjunto de segmentos, semirectas o lneas innitas que son frontera de una regin de
Voronoi a otra.
vrtice un punto que comparte ms de dos polgonoos de Voronoi
adyacentes dos regiones se dice que son adyacentes si comparten algn eje.
Los conceptos anteriores son extensibles a tres dimensiones, teniendo en cuenta que ahora las
regiones de Voronoi seran poliedros y los ejes seran polgonos.
4.2.4. Propiedades de diagrama de Voronoi
1. Todas las regiones de Voronoi son convexas o innitas.
2. La unin de todas las regiones de Voronoi es el plano.
3. Un polgono de Voronoi es innito si su generador pertenece a la envolvente convexa.
47
4 Localizacin de puntos y diagramas de Voronoi
4. Para cualquier punto del plano, el punto generador ms cercano es aquel que forma la
regin polar donde dicho punto se encuentra.
5. Si se toma como centro de un crculo cualquier punto del plano y se traza una circunfe-
rencia que pase por un solo punto generador, se dice que dicho punto es interior a una
regin de Voronoi. Pero si toca exactamente a dos puntos generadores, entonces dicho
punto separa exactamente a dos regiones de Voronoi, o lo que es lo mismo, ese punto es
parte de un eje de Voronoi. Pero si se puede dibujar una circunferencia que toque a tres
o ms puntos generadores, entonces hablamos de un vrtice de Voronoi, o lo que es lo
mismo, como el lugar de interseccin de dos ejes de Voronoi.
6. Para cada vrtice de Voronoi, existe un nico crculo centrado en dicho vrtice y que pasa
por tres generadores (o ms en el caso de que existan degeneraciones) y ocurre que dicho
crculo es el mayor de todos los crculos que puede construirse sin que contenga dentro a
otro generador distinto del tomado como centro del crculo.
7. El nmero de vrtices de un diagrama de Voronoi en el plano cumple la siguiente propie-
dad: nvne+n = 1, es decir, el nmero de vrtices menos el nmero de ejes ms el total
de generadores es igual a uno.
8. El nmero de ejes es igual a 3n6, para n generadores.
9. El nmero de vrtices es igual a 2n4, para n generadores.
(Si el vrtice v es un vrtice de Voronoi, el punto p
4
no puede estar ah)
4.3. Triangulacin de Delaunay
La triangulacin de Delaunay posee la caracterstica de ser una teselacin del plano dual al
diagrama de Voronoi. En otras palabras: es posible construir la triangulacin de Delaunay a partir
del diagrama de Voronoi. Para ello basta con unir todos aquellos generadores que compartan un
eje de Voronoi, es decir, los generadores de regiones de Voronoi adyacentes.
nicamente cuando el diagrama de Voronoi es degenerado, el paso anterior no devuelve una
triangulacin sino una pretriangulacin de Delaunay. Sin embargo, la regin resultante es un
polgono inmediato de triangular.
48
4 Localizacin de puntos y diagramas de Voronoi
4.3.1. Denicin y propiedades
Una triangulacin de Delaunay es un grafo dual al diagrama de Voronoi uniendo dos puntos
generadores que comparten un eje de Voronoi; tambin uniendo aquellos puntos vecinos en
regiones de Voronoi abiertas.
Los casos degenerados los encontramos cuando tenemos cuatro puntos alineados. En vez de
obtener un tringulo se consigue un cuadrado, fcilmente triangulable.
Los ejes de Delaunay son los segmentos que denen los tringulos.
Encontramos adems las siguientes propiedades:
1. Cada tringulo de Delaunay posee como vrtices a los generadores del diagrama de Voro-
noi.
2. La frontera de la triangulacin de Delaunay es la envolvente convexa de los puntos.
3. El interior de cada tringulo no posee generadores. Una triangulacin es de Delaunay si
y slo si todos los crculos que pasen por tres vrtices de un tringulo de Delaunay son
vacos.
4. Una triangulacin de Delaunay es aquella que maximiza el mnimo ngulo, lo cual le hace
ser la mejor triangulacin porque genera los tringulos ms equilteros posibles.
5. Una triangulacin de Delaunay es nica si no existen casos degenerados.
Vemos un ejemplo de construccin de la triangulacin de Delaunay a partir del diagrama de
Voronoi:
49
4 Localizacin de puntos y diagramas de Voronoi
4.4. Mtodos de construccin del diagrama de Voronoi
Existen numerosos mtodos para construir el diagrama de Voronoi y por consiguiente su dual, la
triangulacin de Delaunay. En este apartado nicamente citaremos algunos de ellos, interesantes
sobre todo por tratarse de algoritmos ptimos y por estar muy extendidos.
4.4.1. Mtodo Incremental
El mtodo Incremental es uno de los ms importantes debido a su simplicidad y porque su tiem-
po medio de funcionamiento puede ser decrementado a O(n) mediante tcnicas algortmicas.
Este mtodo comienza con un diagrama de Voronoi simple con tres generadores y lo modica
aadiendo otros generadores uno por uno. En este proceso, cuando se aade un nuevo punto p se
detecta en primer lugar el polgono de Voronoi en el que se encuentra p, generado por el punto q.
La inclusin de p en la regin de q hace necesario el clculo del bisector entre estos dos puntos.
Este bisector cortar en dos puntos, w
1
y w
2
a la regin de q. Estos puntos sern el origen para
continuar construyendo bisectores entre q y el resto de sus nuevos vecinos hasta completar un
nuevo polgono convexo, la nueva regin de Voronoi de q.
Para que este algoritmo resulte realmente eciente es preciso que la estructura de datos que
acompae al diagrama de Voronoi tenga informacin a cerca de las regiones adyacentes. De este
modo, una vez localizado un a q y construdo el bisector, se pueda pasar de una regin a su
contigua en tiempo constante.
Este mtodo consta de un tiempo ptimo de construccin, de hecho, si las estructuras de datos
son las apropiadas, podemos hablar de un tiempo O(nlogn) de ejecucin. Para cada punto q
que se aade al diagrama de Voronoi necesitamos un tiempo logartmico para su localizacin. A
este tiempo se debera aadir el necesario para procesar la nueva regin de Voronoi, tiempo que
exceptuando ciertos casos puede considerarse constante.
4.4.2. Mtodo Divide y Vencers
El mtodo Divide y Vencers, aunque no es ms eciente que el anterior, da la seguridad de
trabajar en tiempo O(nlogn) en el peor de los casos. Como viene siendo habitual, el proceso se-
guido se encarga inicialmente de dividir sucesivamente el conjunto de puntos en dos mitades de
aproximadamente el mismo tamao hasta que dicho nmero es menor o igual a tres. A partir de
este momento la construccin del diagrama de Voronoi es trivial y por consiguiente puede cal-
cularse en tiempo constante. El siguiente y sucesivo paso es la unin dos a dos de los diagramas
de Voronoi conseguidos, siguiendo la misma secuencia establecida en el proceso de divisin.
Pero para que la unin de dos diagramas polares en uno solo sea posible, es necesario encontrar
una cadena divisoria capaz de mezclar dichos diagramas polares.
A continuacin quede reejado el proceso en el siguiente algoritmo:
50
4 Localizacin de puntos y diagramas de Voronoi
Al gor i t mo Di vi deYVenceras
Ent rada : Una l i s t a P con l os n generadores en orden cr eci ent e de absci sa
Sal i da : El di agrama de Voronoi cor r espondi ent e
SI n<=3
ENTONCES c ons t r ui r el di agrama de Voronoi di r ect ament e
SINO hacer
Sea t l a par t e ent er a de n / 2 y d i v i d i r P en Pi y Pd
( par t e i zda y decha r espect i vament e)
Const r ui r el di agrama de Voronoi para Pi
Const r ui r el di agrama de Voronoi para Pd
Mezcl ar l os dos di agramas ant er i or es obt eni endo el di agrama de Voronoi de P
La construccin de esta cadena divisoria comenzar de abajo hacia arriba. El problema que
surge inicialmente es conocer cual de los dos primeros generadores participan en la creacin
de la envolvente convexa, si el del diagrama de la izquierda o el de la derecha. Para hacer este
clculo se necesitan conocer las dos envolventes convexas, y no slo eso, tambin el mnimo
soporte comn a ambas tanto por abajo como por arriba. Este ejercicio es realmente similar al
que se emplea en la tcnica Divide y Vencers para el clculo de la envolvente convexa visto en
el Captulo 2 con un coste computacional del orden O(n) (ver gura siguiente).
Sin embargo, el paso realmente importante de este algoritmo consiste en mezclar adecuada-
mente dos diagramas de Voronoi resultantes del proceso descrito en el algoritmo anterior para
convertirlos en uno solo.
Al gor i t mo Mezcl arEnvol vent es
Ent rada : Los di agramas de Voronoi de Pi y Pd
Sal i da : El di agrama de Voronoi para P
INICIO
Const r ui r l a envol vene convexa para Pi y Pd
Encont r ar l a t angent e menor comun a Pi y Pd que t oca a ambos en l os puntos
t i y t d r espect i vament e
Sea w[ 0 ] un punto del i n f i n i t o y que se une al bi sect or por t i y t d
Mi ent r as no se al canza l a t angent e mayor ent r e Pi y Pd
51
4 Localizacin de puntos y diagramas de Voronoi
i < i +1
Encont r ar a ai , punto de cor t e del bi sect or con Pi , sea r i l a r egi on que al canza
Encont r ar al punto ad que cor t a el bi sect or con Pd , sea r d l a r egi on que al canza
SI ai t i ene menor ordenada que ad
ENTONCES w[ i ] < ai
SINO w[ i ] < ad
Cal cul ar el bi sect or ent r e r i y r d
FIN_MIENTRAS
Aadi r l a nueva l nea pol i gonal el i mi ando t odos l os ej es de Pi que queden a l a
derecha de st a y t odos l os de Pd que queden a l a i zqui er da .
FIN
Como podemos observar en la siguiente gura, la cadena divisoria consiste en una polilnea
que comienza a construirse de abajo hacia arriba, construyndose siempre como bisector de dos
puntos, uno del diagrama de Voronoi izquierdo y otro del derecho. Cada vez que dicho bisector
intersecta con con un eje de Voronoi, dicha polilnea comienza a penetrar por una nueva regin
de Voronoi, regin generada por otro punto. El cambio de trayectoria que sigue la polilnea est
determinado por el bisector de los dos puntos que regentan las regiones polares atravesadas en
todo momento.
4.5. Problemas que resuelve el diagrama de Voronoi o la
triangulacin de Delaunay
Como hemos citado anteriormente, son numerosos los campos de aplicacin del diagrama de
Voronoi. A continuacin citaremos algunos de los problemas concretos que resuelve.
52
4 Localizacin de puntos y diagramas de Voronoi
4.5.1. Problemas de proximidad
Dado un conjunto P de n puntos en el plano, para cada punto p
i
de S cul es el lugar geomtrico
de los puntos (x, y) en el plano ms cercanos a p
i
que a ningn otro punto de S?
La solucin a este problema es prcticamente la propia denicin del diagrama de Voronoi.
Cada p
i
genera una regin de Voronoi que da respuesta al problema anteriormente planteado.
Un ejemplo de aplicacin directa es el problema de localizar la ocina de correos ms prxima
a cualquier punto donde nos encontremos.
El vecino ms cercano: Dado un punto p
i
del conjunto P de tamao n, es inmediato localizar
al vecino de p
i
ms cercano, puesto que una regin de Voronoi suele tener un nmero
inferior o igual a 6 vecinos. Teniendo en cuenta que dado un punto generador, conocer o
acceder a sus regiones limtrofes se puede realizar en tiempo constante, el diagrama de
Voronoi evita hacer bsquedas exhaustivas con coste lineal.
Una extensin de este problema consiste en el clculo del vecino ms cercano para cada
uno de los p
i
P. Teniendo en cuenta que el diagrama de Voronoi se calcula en tiempo
O(nlogn), basta un tiempo lineal adicional para conseguir un grafo en el que cada punto
indique utilizando un vector, aquel punto que le resulte ms cercano. La relacin anterior
no tiene porqu ser biunvoca, es decir, si p
j
es el punto ms cercano a p
i
, ste no tiene
porqu ser el ms cercano para p
j
.
El crculo ms pequeo/grande: Este problema tiene especial inters en estudios de mercado.
Supongamos que deseamos construir una nueva residencia tan lejos como sea posible de
las n existentes en la actualidad. Este problema es similar a encontrar el crculo ms grande
que no contenga a ninguno de los p
i
P que representan a los n puntos.
4.5.2. Interpolacin espacial
El problema de la interpolacin espacial utilizando teselaciones del plano o el espacio como son
la triangulacin de Delaunay o el diagrama de Voronoi, pretenden conocer el valor de una fun-
cin para cualquier punto de dicho espacio a partir del valor de una serie de puntos estratgicos,
que son los generadores de las particiones anteriores.
Vecino ms cercano: Este mtodo de interpolacin es sin duda el ms sencillo y consiste en
asignar como valor de la funcin para el punto p el mismo valor que su punto generador
ms cercano, en otras palabras, si p pertenece a la regin de Voronoi de punto s
i
, f (p) =
f (s
i
). Este tipo de interpolacin puede valer sobre todo cuando los valores pueden medirse
en una escala nominal, como es el tipo de vegetacin o de roca
Vecino natural: Otra forma de conseguir el valor que tendra un punto cualquier p sera el
de conocer todos aquellos vecinos naturales de p. Averiguar esta informacin no es ms
que resolver el problema de los vecinos ms cercanos a un punto utilizando el diagrama
de Voronoi. Aplicaciones en este sentido son la identicacin de tomos vecinos en el
53
4 Localizacin de puntos y diagramas de Voronoi
espacio, molculas o partculas en estructuras cristalinas y amorfas, etc. Ahora el punto
de estudio p puede estar inuenciado por dicho conjunto de vecinos, los cuales tambin
puede llevar asociados distintos pesos de inuencia
Mtodos triangulares: Este mtodo no es otro que el de realizar una triangulacin sobre los
puntos generadores, que bien podra ser la triangulacin de Delaunay, posteriormente lo-
calizar el punto a estudiar p dentro de un tringulo, para nalmente calcular la inuencia
que sus tres vrtices pueden poseer sobre dicho punto.
Cuando el propsito de la interpolacin es crear contornos a partir de los valores de un
conjunto de datos irregulares, la triangulacin proporciona ciertas ventajas con respecto al
mtodo de malla regular puesto que se adapta mejor a la disposicin de los datos de entra-
da. En el siguiente tema avanzaremos conceptos sobre las posibilidades de la triangulacin
(TIN) y de otras representaciones para representacin de terrenos.
54
5 Aplicaciones a los Sistemas de Informacin
Geogrcos
Uno de los campos donde se aplica de forma ms inmediata los avances en Geometra Com-
putacional son los Sistemas de Informacin Geogrca. En este captulo vamos a estudiar los
distintos modos de representacin geogrca a nivel computacional. Cada uno de ellos es capaz
de representar los diferentes tipos de informacin como son montaas, ros, ciudades, etc. Sin
embargo, sus caractersticas propias de cada uno de ellos hacen a unos ser ms vlidos que otros
para aplicar ciertos algoritmos.
Estas representaciones son las lneas de contorno o isolneas, los TIN y los Gibs. Veremos las
caractersticas de cada uno de ellos, y as mismo el modo de conversin de unos tipos a otros.
Tambin estudiaremos cmo estas representaciones pueden dar informacin relevante sobre la
orografa del terreno o los elementos geogrcos presentes.
5.1. Modelos de representacin de terrenos
5.1.1. El grid regular
El grid es una estructura que especica valores en una teselacin regular del domino, o lo que
es lo mismo a nivel de representacin interna, un array bidimensional. El dato asociado a cada
posicin representa elevacin para cada punto dentro de un cuadro, lo que no correponde a una
funcin contnua.
El valor puede representar la elevacin del centro del cuadrado o la media de ste. En este caso
se necesita hacer una interpolacin para obtener el modelo de elevacin. Un posible mtodo de
interpolacin para cualquier punto p diferente del central es usar una media con pesos de la
elevacin de los cuatro puntos alrrededor del punto p.
55
5 Aplicaciones a los Sistemas de Informacin Geogrcos
5.1.2. Las lneas de contorno
Cada lnea de contorno representa una determinada elevacin en el modelo. Algunas veces el
trmino de isolnea se usa cuando el modelo de representacin no es ms que la altura sobre
el nivel del mar. Esta lnea se carga como una secuencia de puntos (x, y). Esto representa un
polgono o cadena poligonal en la que se especia la elevacin. Se necesita una interpolacin
para calcular la altura del subconjunto de puntos.
Las lneas de contorno se pueden cargar en listas doblemente enlazadas, todas asociadas al mis-
mo valor.
5.1.3. La triangulacin irregular del modelo de Red (TIN)
En un TIN, un conjunto de puntos nito es cargado junto con su elevacin. No necesitan co-
rresponder con un patrn determinado y la densidad puede variar. En estos puntos se da una
triangulacin plana. Cualquier punto en el domino yace en un vrtice, un eje o un tringulo. Si
el punto no est en un vrtice, entonces la elevacin se obtiene por interpolacin. Se trata de un
modelo lineal que aunque est capacitado para visualizarse como tridimensional.
Un TIN es una triangulacin o particin plana del plano en tringulos. Para cada tringulo t, eje
e y vrtice v, existe un registro de datos. El registro de un tringulo t tiene 3 campos con punteros
que apuntan a los registros de los 3 ejes incidentes a t. El registro de un eje e tiene 4 campos
con punteros, 2 a registros de los 2 tringulos incidentes y los otros 2 a los registros de vrtices
incidentes. El registro de un vrtice v tiene 3 campos, con valores de la x, la y y la elevacin.
Esta topologa permite realizar operaciones en tiempo constante, como encontrar las elevaciones
de sus vrtices, y adems permite pasar de un tringulo a sus adyacentes tambin en tiempo
constante, permitiendo pasear a travs de una lnea recta de forma eciente.
56
5 Aplicaciones a los Sistemas de Informacin Geogrcos
5.1.4. Modelos jerrquicos
Un modelo de terreno jerrquico es un modelo de terreno que lo representa en varios niveles de
error o varios niveles de imprecisin. La mayora de estas representaciones se basan en TINs.
Normalmente los TINs con ms vrtices tienen menos error pero son ms caros de procesar. Un
modelo jerrquico de un terreno permite elegir la precisin sobre el estudio del terreno.
Los aspectos a destacar de un terreno jerrquico son:
1. Uso exceso de carga de datos por mantener informacin en los distintos niveles.
2. El modelo debe incorporar una bsqueda eciente. Encontrar un punto en un terreno puede
ser posible encontrando primero en el nivel ms alto para luego localizarlo en niveles ms
bajos de detalle.
3. La triangulacin deber estar bien formada usando una triangulacin de Dalaunay.
4. Debe permitir mezclar diferentes niveles de detalles en diferentes partes del terreno.
5. Es importante que el modelo sea consistente con las caractersticsas morfolgicas.
5.2. Acceso a TINs
La ventaja computacional de un TIN consisten en la posibilidad de recorrer completa o parcial-
mente dicha estructura.
57
5 Aplicaciones a los Sistemas de Informacin Geogrcos
5.2.1. Recorrido de un TIN
Existe un viejo pero eciente mtodo para recorrer un TIN y llegar a todos sus vrtices sin
necesitar una carga adicional y pasando por todos los tringulos el mnimo nmero de veces.
Sea T un TIN cargado en una estructura descrita y sea v el vrtice izquierdo inferior de T. Para
cada tringulo nombramos cada eje de la siguiente manera:
In: si la lnea conteniendo dicho eje separa el vrtice v y el interior del tringulo. Si la lnea que
soporta el eje contiene a v, el eje es In si el interior de t est a la derecha de la linea que
soporta el eje; se incluye tambin el caso cuando la lnea es horizontal.
Out: si la lnea contenida en dicho eje no separa el vrtice v y el interior del tringulo, esto es,
estn al mismo lado. O cuando estando v en la misma lnea del eje, el interior de t est a
la izda.
Todos los tringulos poseen un eje In y dos Out o dos In y uno Out. Los ejes In representan el eje
a travs del cual el tringulo es atravesado. Para que el interior del tringulo slo se considere
una vez se diferencian los dos tipos de ejes In. Sea un tringulo con dos ejes In, stos dos ejes
comparten un vrtice y la lnea entre este vrtice y v separa en dos al tringulo. El eje In sobre
la lnea o a la izquierda es un eje In real, pero el otro es in-and-back. Aunque se trata de un eje
de entrada, la transversal luego vuelve por el inmediantamente despus. De igual manera para
los tringulos con dos ejes Out, uno de ellos, el que est a la izquierda de la lnea formada por v
y el vrtice comn a los dos ejes, es el primer eje Out. Para cada tringulo se puede conocer en
tiempo constante los ejes In/Out.
El algorimo comienza en v y pasa a la izquierda del rectngulo frontera. El algoritmo cruza ejes
y toma la decisin de qu eje cruzar basndose slo en la clasicacin de ejes anteriores. Como
hay dos tipos de tringulos y tres tipos de ejes y existen 6 casos posibles.
1.- Si e es el nico In de t, entonces sea e

el primer eje Out de t, y sea t

el tringulo en la otra
cara de e. Repetir el algoritmo con t = t

y e = e

.
2.- Si e es el eje In real de t, entonces sea e

el eje Out de t y sea t

el tringulo en la otra cara de


e

. Repetir para e = e

y t = t

.
3.- Si e es un in-and-back de t, entonces t

es el tringulo al otro lado de e, repetir para t =t

y e.
4.- Si t tiene dos ejes Out y e es el primero, entonces e

es el ltimo eje Out de t, y sea t

el
tringulo al otro lado de e

. Repetir para t =t

y e = e

.
58
5 Aplicaciones a los Sistemas de Informacin Geogrcos
5.- Si t tiene dos ejes Out y e es el ltimo, entonces e

es un eje In de t y t

es un tringulo en la
otra cara. Repetir para t = t

y e = e

.
6.- Si e es el nico eje Out de t, sea e

el eje In real y t

el tringulo al otro lado. Repetir para


t = t

y e = e

.
Si no hay un tringulo en la otra cara, entonces volvemos por el mismo eje y al mismo tringulo,
Y de nuevo este tringulo visita cada tringulo exactamente tres veces, uno para cada tipo de
vrtice.
5.2.2. Acceso eciente a TIN.
En un grid el acceso a cualquier punto es un acceso directo. Basta con reescribir las coordenadas
(x, y) sobre los cuales se pretende conocer la altura. En un TIN esto no es tan fcil porque se
trata de una estructura de acceso secuencial con apuntadores y es necesario hacer una bsqueda
para encontrar el tringulo que contiene al punto en cuestin. Esto es desde luego ineciente.
Los tipos de acceso son tres:
Acceso usando quadtrees
Usando quadtrees o R-trees se puede acceder ecientemente a un lugar o punto en un TIN.
Un quadtree se maneja usando bsquedas en un rbol de grado cuatro, lo que implica una car-
ga de datos bidimensional. Representa una descomposicin recursiva en un gran cuadrado (que
representa la raz) en cuatro subcuadrados. Cada uno de estos cuatro cuadrados vuelve a descom-
ponerse en cuatro y as sucesivamente. Se para cuando la porcin de TIN dentro de un cuadrado
es adecuada.
Una hoja del rbol posee un puntero al registro del tringulo que contiene al centro del cuadrado.
Desde el registro del tringulo podemos pasear en la estructura hasta localizar el registro del
tringulo que contiene el punto deseado.
59
5 Aplicaciones a los Sistemas de Informacin Geogrcos
Acceso usando localizacin plana de puntos
En Geometra Computacional se han desarrollado muchos mtodos ecientes para determinar
qu regin de una subdivisin contiene un determinado punto. Para un TIN con n tringulos, es
posible construir una estructura de orden O(n) que permite una localizacin en O(nlogn).
Jump-and-Walk
Es la estratega ms simple. Necesita muy poca carga de datos adicional, as que supone la
mejor eleccin en la prctica. Supongamos que el acceso a una estructura TIN es proporcianado
mediante un puntero a alguna seccin. La idea es atravesar el TIN mediante una lnea recta desde
el punto de acceso al punto buscado. De esta forma encontramos menos tringulos que con la
bsqueda exhaustiva. El tiempo de bsqueda puede ser an ms pequeo empezando por ms
de un punto. Entre todos elegiremos el punto de comienzo como aquel ms cercano al buscado.
Para el caso de tener un grid en un array bidimensional con un puntero a cada entrada en un
TIN, el puntero de acceso al tringulo estar contenido en el grid regular. Este primer esquema
es bueno en la mayora de las situaciones prcticas. Si hay partes del TIN donde hay muchos
tringulos, entonces el esquema no es tan bueno.
Un segundo esquema es elegir m puntos p
1
...p
m
del conjunto de vrtices del TIN de forma alea-
toria, y cargar una copia de stos en una lista desordenada. Eligiendo los puntos de los vrtices
del TIN de modo que aquellas regiones que contienen muchos tringulos tambin poseern mu-
chos accesos. Con cada punto p
i
, cargamos un puntero a uno de los registros incidentes al punto.
Cuando preguntemos con un punto q, primero determinamos el punto de acceso p
i
ms cercano
a q en tiempo O(m), y entones comenzamos a trazar la lnea p
i
q, comenzando con el tringulo
que contiene a p
i
. Ocurre que la eleccin m = c n
1/3
para cada constante c, es bastante buena.
5.3. Conversin entre modelos de terrenos
En muchas ocasiones el modelo obtenido depende del mtodo de captacin del terreno. Si los
contornos de un mapa se toman a mano aunque lo habitual es obtener la informacin mediante
una foto, intrpretndose de forma automtica.
60
5 Aplicaciones a los Sistemas de Informacin Geogrcos
En muchas ocasiones es necesario transformar el formato del terreno, por ejemplo un grid nece-
sita mucha informacin y mucho tiempo de proceso, mientras que con miras a la visualizacin,
las lneas de contorno necesitan ser interpretadas tarde o temprano. Por tanto, la conversin entre
TINs en grids o lneas de contorno es muy til.
5.3.1. De muestreo de puntos a TIN.
Supongamos un conjunto de puntos con una determinada altura, convertir esta informacin a
TIN consistira en triangular la nube de puntos. Puede usarse la triangulacin de Delaunay por-
que forma los tringulos de mejor calidad. Si la interpolacin de esta triangulacin no es apro-
piada pueden usarse mtodos de interpolacin ms avanzados como interpolacin natural del
vecindario (natural neighbor interpolation), medias de pesos en movimimento (weighted mo-
ving averages), splines, etc. La idea es construir un TIN basado en el conjunto P y una funcin
de interpolacin de modo que se obtenga como mximo un error. Pero esto puede no ser su-
ciente con los puntos de P y se necesiten ms. Lo ideal sera siempre usar cuantos menos mejor.
Para la eleccin puede hacerse usando la heurstica. Tambin puede ocurrir que slo una parte
del conjunto P puede ser necesario. En cualquier caso construir un TIN con un mximo error
permitido y con el mnimo nmero de puntos posible es un problema NPduro.
5.3.2. De Grid a TIN
Es un caso especial de conversin de puntos a TIN. Un grid puede ser triangulado de forma regu-
lar, aunque la mayora de los algoritmos lo que hacen seleccionar ciertos puntos para aadirlos
a la triangulacin.
Un modo de hacerlo es descartar puntos de forma incremental en vez de hacer un preprocesa-
miento. Por ltimo hay mtodos que slo comienzan con la triangulacin de las cuatro esquinas
y luego aaden puntos renando y parando cuando los tringulos se aproximen al grid. Por
ltimo otro mtodo detecta supercies con caractersticas especcas etc.
Veamos algunas representaciones de terrenos en las que varia la carga de datos y de una repre-
sentacin constante o adaptativa.
61
5 Aplicaciones a los Sistemas de Informacin Geogrcos
62
5 Aplicaciones a los Sistemas de Informacin Geogrcos
La heurstica de bajada (The drop heuristic)
Consiste en descartar vrtices para quedarnos con menos puntos. Cuando se elimina un vrtice
tambin lo hacen sus ejes asociados y aparece un polgono. Para obtener de nuevo una triangu-
lacin se usa Delaunay.
Para decidir cuales son los puntos a eliminar, cada vrtice se elimina temporalmente, entonces
se determina la distancia vertical entre el punto eliminado y el nuevo TIN. Esta distancia vertical
puede verse como el error introducido por el borrado. Una vez visto el error se vuelve a introducir
el punto y se hace lo mismo con otro vrtice. Despus de hacer todo esto se eligen los puntos
que introducen menos error, y as hasta detener el error preespecicado.
Si todos los vrtices en el TIN se procesan en tiempo constante, ayudando al proceso con rboles
cuya interseccin/borrado es de O(logn), slo se necesita un tiempo nal de O(nlogn).
Renamiento Incremental
El siguiente algoritmo toma un grid y un mximo error E como entrada. En contraste con el
algoritmo anterior, este s garantiza que el TIN nal tiene un error de al menos E. Se comienza
con un TIN de pocos vrtices y se aaden puntos para obtener el menor error E.
1. Sea P el conjunto de puntos intermedios de celdas del grid con su valor de evaluacin.
Tomar las 4 esquinas y eliminarlas de P y ponerlas en S.
2. Hacer la triangulacin de Delaunay DT(S) de S.
3. Determinar para todos los punto de P en qu tringulo de DT(S) caen. Para puntos en
ejes podemos elegir cualquiera de ellos. Cargar con cada tringulo de DT(S) una lista de
puntos de P que caigan en l.
4. Si todos los puntos de P estn aproximadamente con un error de como mximo E por
el actual TIN, entonces el TIN es aceptado y el algoritmo para. Sino, toma el punto con
mximo error, lo elimina de P y lo aade a S. Contina en el paso 2.
Este algoritmo puede trabajar en tiempo O(nlogn)
63
5 Aplicaciones a los Sistemas de Informacin Geogrcos
5.3.3. De lneas de contorno a TIN
Las lneas de contorno son bsicamente la digitalizacin de los contornos de los mapas y su con-
versin a TIN es muy til. Una lnea de contorno es una estructura en forma de vector, de hecho,
es una divisin plana donde a los vrtices y las lneas se les asigna la elevacin del terreno por
donde pasa dicha lnea. Para convertirlos a TIN, es obvio triangular todas las regiones, esto es,
triangular entre las lneas de contorno. Cada regin puede verse como un polgono con agujeros,
y hay montones de algoritmos para triangular esto.
En vez de usar cualquier triangulacin, es buena idea usar la de Dalaunay. Pero la entada es un
conjunto de segmentos, no de puntos. Puede usarse un tipo de triangulacin que intenta seguir
la triangulacion de Delaunay al mximo.
5.4. Computacin matemticas en terrenos
En muchas aplicaciones es usual hacer cosas como aadir o eliminar datos de la representacin
de un terreno, o cuadrar la elevacion de un terreno. Supongamos que los datos de dos terrenos
representan la altura sobre el nivel del mar y la profundidad sobre la supercie del agua. Un
ejemplo para cuadrar y cubicar terrenos es considerar la erosin del viento. Partculas de un
determinado tamao pueden ser arrastradas por el viento y llevadas a otros lugares. Para modelar
la erosin por el viento, necesitamos datos de la velocidad del viento en las superces, que
puede verse como datos de elevacin y modelado por un grid o un TIN. Cuadrar estos datos de
elevacin de un modelo y determinar la capacidad del viento para erosionar es un hecho usado
en muchas simulaciones.
5.4.1. Sumar y restar terrenos
Supongamos que tenemos dos TIN, T1 y T2 en los cuales queremos aadir la informacin de
elevacin en ellos. La sustraccin sera un proceso igual pero de signo negativo. La adicin en
TINs puede ser determinada exactamente y cargada en un nuevo TIN, porque bsicamente con-
siste en la adicin de funciones lineales, que de nuevo producen una funcin lineal. La adicin
64
5 Aplicaciones a los Sistemas de Informacin Geogrcos
se hace realizando una superposicin de T1 y T2. Hay muchos algoritmos para ello, siendo tri-
vial nalmente triangular y obtener el nuevo TIN. Ahora cada vrtice que originalmente estaba
en T1 tiene su altura ms la altura interpolada de T2, igualmente ocurre en T2 con respecto a
T1. Un posible algoritmo trabaja en O(n+k), con n igual al nmero de vrtices de T1 y T2 y
k el nmero de vrtices en el solapamiento. El valor de k es como mucho n
2
, pero ms loa ms
habitual es que sea lineal.
5.5. Computar lneas de contorno
Una de las estructuras ms tiles procedentes de una elevacin digital de un terreno son las lneas
de contorno. Son probablemente las ms tiles para visualizar los datos de elevacin. Cuando
una nueva construccin debe determinar el lugar para realizarse, uno de los requerimientos puede
ser que est en una elevacin por debajo de los 1000 metros. Otra pregunta puede ser la de
encontrar todos los objetos geogrcos de un cierto tipo en una cierta elevacin, por ejemplo
encontrar todos aquellos campos de maz que reciben menos de 255mm de precipitacin anual.
En este caso se utilizaran las lneas de contorno de terrenos que marquen la precipitacin. Las
lneas de contorno pueden ser un conjunto de segmentos concatenados con una determinada
elevacin. Usaremos dos mtodos para determinar las lneas de contorno en un TIN. El primero
simplemente consiste en escanear el TIN para determinadas lneas de contorno y el segundo
realiza un preprocesamiento para encontrar lneas de contorno ms ecientemente.
5.5.1. Computacin directa de lneas de contorno
Observar que todos los vrtices de la lnea de contorno pertenecen a ejes o vrtices de un TIN, y
todos los segmentos de una lnea de contorno lo hacen a tringulos o ejes del TIN. Asumimos que
no hay tringulos horizontales en la elevacin de la cual queremos conocer la lnea de contorno.
Esto se fuerza como sigue: supongamos que se necesitan las lneas de contorno con elevacin
Z, y en algn momento un tringulo horizontal t con elevacin Z es localizado. Entonces slo
tomamos los ejes de t para los cuales los otros tringulos incidentes tienen un vrtice mayor que
Z, lo que consigue trazar lneas de contorno con un valor muy poco por encima de ste.
Dado un TIN y un valor de elevacin Z, hay un camino muy simple para encontrar las lneas de
elevacin. Atravesar el TIN completo y para cada tringulo determinar si contiene un segmento
de la lnea de contorno. Esto necesita O(n) para un TIN con n tringulos, aunque obtenemos las
lneas de contorno en orden arbitrario, no de forma ordenada. Podemos mejorar el proceso pre-
procesando los segmentos que fueron encontrados por el algoritmo trivial, ordenndolos por las
65
5 Aplicaciones a los Sistemas de Informacin Geogrcos
coordenadas. Sabemos que todos los puntos extremos que son compartidos entre dos segmentos
son adyacentes. As se van montando las lneas de contorno. Si las lneas de contorno contienen
k segmentos, el tiempo nal de cmputo puede ser de O(klogk +n).
La segunda forma para obtener las lneas de contorno ordenadamente es trazar cada lnea de
contorno directamente del TIN. Si el TIN se carga en una estructura topolgica, la transversal de
una lnea de contorno desde un punto de partida puede hacerse fcilmente en tiempo lineal del
nmero de segmentos en la lnea de contorno. Queda encontrar todos los puntos de comienzo.
Si el TIN posee bits de marca cargados con los registros de los ejes o tringulos, entonces se
inicializaran todos los bits de marca. Para cada tringulo del TIN, se determina si su bit de
marca est inicializado y contiene un segmento de las lneas de contorno. Si es as, se comienza
trazando la lnea de contorno y se pone la marca de todos los tringulos que son atravesados.
Se para al encontrar un crculo. Luego se comienza con otro tringulo. Despus de chequear
todos los tringulos se inicializan de nuevo las marcas. Se necesita slo O(n) pero un bit ms de
almacenamiento.
5.5.2. Preprocesamiento para lneas de contorno.
La fuerza bruta es un algoritmo que no es satisfactorio cuando el nmero de tringulos que
cruzan la elevacin Z es mucho menor que el nmero total de tringulos del TIN. Es mejor
usar un preprocesamiento y construir una estructura de datos y preguntar por la elevacin de las
lneas de contorno que se necesitan. Este razonamiento permite varios mtodos, como el llevado
a cabo utilizando el rbol de intervalos. Se trata de una estructura de datos geomtrica que carga
un conjunto de intervalos de la recta real. Sea I un conjunto de intervalos abierto de la forma
(a, b), donde a, b R y a < b. El rbol de intervalos para I tiene una raz S que carga un valor
de cambio s. Sea Iizda el subconjunto del intervalo (a, b) para los cuales b <= s, sea Idecha
el subconjunto de intervalos de (a, b) para a >= s y sea IS el subconjunto de intervalos con
a < s < b. Los subconjuntos Izda, Idecha e Is forman una particin de I. El subconjunto IS se
carga en dos listas lineales asociadas con el nodo S. Una lista LS carga IS en valores crecientes
del punto extremo Izdo y la otra lista RS carga IS en valores decrecientes del valor nal derecho.
Si Iizdo no est vaco, entonces el subrbol izquierdo de S dene de forma recursiva como un
rbol de intervalos en el subconjunto Iizdo. Lo mismo para Idecho. Cualquier intervalo de I
se carga exactamente dos veces. Un rbol de intervalos para n elementos usa O(n) como carga
de datos, y puede construirse en O(nlogn) y si los valores de particin estn balanceados, la
profundidad es de O(logn).
66
5 Aplicaciones a los Sistemas de Informacin Geogrcos
El algoritmo sigue un proceso de bsqueda a lo largo del rbol desde la raz hasta las hojas. Sea
q el valor en cuestin y queremos encontrar todos los intervalos conteniendo a q. En cada nodo
S que es visitado, se compara q con el valor de particin s cargado en S si LS o Rs es buscado, y
se determina en qu subrbol seguir. Si q < s se busca en la lista LS y te toman los intervalos que
contienen el valor q. As, podemos atravesar LS y procesar intervalos hasta que no contengan el
valor q. Despus el proceso de bsqueda sigue en el subrbol izquierdo.
Si q > s, entonces se busca en la lista RS y se procede con el subrbol derecho. Se reprocesan
los intervalos en O(log+k), donde k es el nmero de intervalos procesado.
5.6. Caractersticas topogrcas
La geomorfologa estudia la forma de la tierra. Sirve para reconocer automticamente ciertos
terrenos. Las caractersticas del terreno pueden tener 0, 1 y 2 dimensiones. Discutimos las ms
importantes.
5.6.1. Puntos en terrenos
Cualquier punto en un terreno posee una elevacin. Segn lo que ocurre con los vecinos se
dene un gradiente. El gradiente en un punto es el mximo ratio de cambio en la elevacin y de
posicin xy en este punto. Matemticamente, es el valor mximo de la derivada en este punto.
El aspecto de un modelo de elevacin es la direccin de campo en la cual la derivada direccional
es mxima. En un mapa de aspectos se puede ver qu cara de la colina da hacia el sur. El aspecto
67
5 Aplicaciones a los Sistemas de Informacin Geogrcos
de un modelo de elevacin no es un modelo de elevacin en s mismo, es una funcin con dos
variables RxR a cada escala circular (, ). Esta funcin est indenida en puntos sobre la
parte horizontal del terreno. La combinacin de gradientes y aspectos es necesaria para predecir
la forma de las colinas en los mapas.
En el terreno hay 3 tipos de puntos ms importantes que el resto: hoyo (pits), cumbres (peak) y
puntos de paso (passes). Una cumbre es el punto mayor en el vecindario. Un hoyo es aquel que
no encuentra vecinos menores. Un punto de paso es aquel punto donde localmente se encuentran
4 o ms diferentes partes de las lneas de contorno.
Estos puntos describen la forma del terreno. Pueden identicarse todos los de paso y atravesar el
terreno en la direccin ms descendente y ascendente hasta alcanzar cumbres u hoyos. Los ca-
minos atravesados denen una particin del terreno en regiones, en las cuales uno puede esperar
que posean caractersticas geomorfolgicas similares.
5.6.2. Valles y Sierras
Los valles son unidimensionales en un TIN. Podemos denir un eje en un valle si al menos un
tringulo incidente tiene su normal hacia el eje, y el otro tiene su pendiente normal hacia el
eje o paralelo a l. Podemos decir lo mismo para las cordilleras. Otras deniciones poseen la
desventaja de que las lneas del valle pueden ser interrumpidas.
5.6.3. Curvaturas
La curvatura es medida en terrenos en una seccin horizontal o vertical de ste. Estas curvaturas
especican si el terreno es convexo, cncavo o llano. Para supercies suaves, la convexidad
depende del signo de la segunda derivada en la seccin. La mayora de los lados de una colina
son de perl convexo cerca de la parte superior y de perl cncavo cerca del fondo.
Para un grid se toman muestras de pixeles 3x3 eligiendo un interpolador para los 9 pxeles y
ejecutando la curvatura del plano y del perl de la supercie interpolada en el centro.
En un TIN cada eje puede ser visto como llano, convexo o cncavo. Se clasican los tringulos
de acuerdo al tipo de ejes incidentes. Una regin convexa es una consistente slo en tringulos
en los cuales todos los ejes incidentes son convexos. Lo mismo podemos decir para el resto. Los
tringulos incidentes a tringulos de diferentes tipos se denen como tringulos silla (collados).
As se detectan qu regiones de curvatura uniforme se atraviesan fuera del TIN en tiempo lineal.
68
5 Aplicaciones a los Sistemas de Informacin Geogrcos
Pero el TIN no diferencia entre planos y perles. Una regin de perl convexo y de plano cn-
cavo se dene tipo silla. Para obtenerlos del TIN se dene la curvatura plana como sigue en el
vrtice v. Si v es una cumbre la curvatura del plano es convexa. Si v es un hoyo, la curvatura del
plano es cncava. Si v es un punto de silla, la curvatura del plano es indenida. En todos los otros
casos la curvatura plana de v es determinada por la lnea de contorno a travs de v. El vrtice v
es incidente por la lnea de contorno a travs de v. El vrtice v es incidente a dos segmentos s y
s

en dicha lnea de contorno. Cuando se atraviesa la lnea de contorno con el terreno ms alto a
la izquierda y el ms bajo a la derecha, entonces v es de plano convexo si la lnea de contorno
hace un giro izquierdo en v. Si lo hace derecho, v es de plano cncavo y si no gira entonces es
de plano llano. Los nodos de silla deben excluirse porque 4 segmentos de la lnea de contorno
encuentran un vrtice de silla.
Denimos la curvatura de perl en un vrtice v como sigue: si v es una cumbre, el perl en
convexo. Si v es un hoyo, el perl es cncavo. Si v es un punto de silla, la curvatura del perl
es indenida. Para denir la curvatura del perl en otro vrtice v debemos seleccionar un plano
vertical a travs de v, separando s y s

y hacer equivalente el ngulo con ambos. Consideremos la


interseccin del plano vertical con el terreno en v, que es un perl. Podemos denir convexidad,
concavidad y llanura en el perl de forma obvia.
Para obtener regiones de esta informacin usaremos interpolacin. Para cualquier punto de un
tringulo o eje, denimos un plano o perl para que sea la misma que la curvatura del vrti-
ce ms cercano. Esta interpolacin del vecino ms cercano induce un diagrama de Voronoi en
los vrtices del TIN, excluyendo los vrtices de silla. Regiones adyacentes que tienen la mis-
ma curvatura se obtienen borrando las fronteras. El resultado es un terreno partido en regiones
de curvatura uniforme en plano y perl. El diagrama de Voronoi de n puntos se consigue en
O(nlogn).
69
5 Aplicaciones a los Sistemas de Informacin Geogrcos
Este mecanismo puede suplementarse con un permetro de escala de pendiente. Por ejemplo la
curvatura en v, en vez de mirar el ngulo de los segmentos en la lnea de contorno incidente a v,
localizamos dos puntos p y p

en su lnea de contorno a una cierta distancia de v. Esta distancia


es un permetro dependiente de la escala. Denimos el ngulo < pvp

y decidimos la curvatura.
Esto puede causar pequeas concavidades.
5.6.4. Informacin de drenaje
Cualquier terreno introduce ms o menos el ujo natural del agua. El agua siempre uye en la
direccin de la gravedad: las colecciones de agua forman ros. Cuanto ms hacia abajo est el ro,
ms agua lleva. Es posible establecer o predecir los ros de agua con un modelo de elevacin. La
coleccin de estos arroyos y ros se llama red de drenaje. Slo consideraremos cmo la forma
del terreno inuye en el ujo del agua. El rea de hidrologa tambin incluye asuntos como
permeabilidad, ujos de subsupercie, evaporacin, etc.
Generalmente, la red de drenaje puede verse como un grupo de conexiones acclicos en las que
las uniones son dirigidos a los hoyos del terreno. Cada red conectada es tambin un sistema de
ros, y parte del terreno que darn en otros ros es llamado la base de drenaje del sistema.
El sistema de drenaje en un grid
Sobre el grid se pone una ventana 2x2 y toma el mayor pixel en la ventana. Despus de tratar
todas las subdivisiones, los pixeles no anotados juntos forman la red de drenaje. Los mapas
producidos por este mtodo sufren de canales interrumpidos y de puntos aislados.
Otros mtodos modelan la acumulacin de agua de un terreno. Se dene para cada pixel el
drenaje del vecindario en las 8 pixeles de alrededor como el ms descendente. Este vecino se
supone nico. Un hoyo no posee direccin descendente y por lo tanto un vecino de drenaje.
Entonces, asignar a cada pixel una unidad de agua, y trazar todas las unidades en el grid hacia
abajo en los vecinos de drenaje hasta que nalicen en los hoyos. Manteniendo contadores para
70
5 Aplicaciones a los Sistemas de Informacin Geogrcos
determinar para cada pixel cuantas unidades de agua uyen a travs de l, la red de drenaje
puede ser denida. Consiste en aquellos pixeles para los cuales el contador es mayor que un
bien conocido umbral. Tratando los pixeles en orden de la elevacin descendente, el mtodo
requiere O(n
2
logn) en un grid de (nxn). El mtodo necesita de una carga cuadrtica adicional.
La idea de acumulacin resuelve el problema de canales interrumpidos. Si algn pixel pertenece
a la red de drenaje porque su contador exceda el umbral, entonces el camino completo a lo largo
de los vecinos de drenaje hacia un hoyo tambin deben ser parte de la red de drenaje. La idea de
acumulacin tambin ayuda a denir bases de drenaje. Porque el camino desde cualquier pixel
puede ser trazado hacia un hoyo; es posible determinar que pxeles drenan en un hoyo. As que
es posible saber las partes del terreno que drenan en un simple hoyo.
La red de drenaje de un TIN
Denen la red de drenaje como los ejes del valle del TIN. Esta denicin sufre de las posibles
interrupciones de las cadenas conseguidas, que pueden nalizar en puntos distintos de los hoyos.
Por tanto no existe el concepto de ujo.
As que se ha demostrado que la idea de acumulacin puede llevarse a un TIN. En un TIN no
es buena idea asignar agua a tringulos como se haca en los pxeles. Pero la direccin del ujo
puede ser convenientemente de un punto en un TIN como la direccin de mayor descenso. En el
interior podemos necesitar elegir una direccin si hay ms de una direccin de mayor descenso.
Una vez denida la direccin del ujo, los caminos de ujo son trazados y uno puede descubrir
donde se unen los ujos. Es natural denir para cada punto del terreno, el rea de la regin desde
el cual los caminos de ujo van a travs de ese punto. Para muchos puntos del TIN, este rea es 0
porque no hay una regin bidirecional. Pero hay tambin puntos que reciben agua de una regin
con rea positiva. Se dene la red de drenaje como aquellos puntos en el terreno que reciben
agua desde una regin cuya rea excede un cierto umbral. Estudiaremos el caso donde el umbral
es 0. Esto incluir todas las redes de drenaje para mayores valores de umbral.
Las caractersticas de esta red de drenaje es que la red consiste de todos los valles y exactamente
de todos los caminos desde sus ms bajos vrtices. Esto nace de la idea de que el agua slo puede
permanecer acumulada entre valles. La red de drenaje mezcla puntos donde dos o ms cadenas
se unen y continan juntas. Estos puntos de mezcla son tambin vrtices del TIN, o puntos en
ejes del valle. Como asumimos que a cada punto del TIN la direccin del ujo es nica, los
streams no pueden cambiar.
71
5 Aplicaciones a los Sistemas de Informacin Geogrcos
La complejidad de la red de drenaje es al menos lineal en el nmero de ejes del TIN. Es conside-
rablemente menos obvio que el tamao de la red de drenaje est bajo la segunda denicin. En
el peor de los casos encontramos una complejidad cbica. Pero un estudio emprico determina
un 20% ms que la denicin del O(n).
Para computar la denicin de red de drenaje por la primera denicin se identican todos los
valles y se siguen los caminos del ujo en sus menores vrtices hacia los hoyos. Como los
caminos de ujo puede mezclarse, podemos trazar cualquier ujo desde un punto donde otro
ujo acaba de llegar. As cuando un ujo es trazado, se marca en el terreno para asegurarse que
el mismo camino de ujo no sea trazado una y otra vez. El resultado nal necesita O(n +k),
donde k es la complejidad de la red de drenaje.
72
Bibliografa
[1] M. Berg, M. Kreveld, M. Overmars, O. Schwarzkopf. Computational Geometry, Algorithms
and Applications. Springer, 1997.
[2] M. Kreveld, J. Nievergelt, T. Roos, P. Widmayer. Algorithmic Foundations of Geographic
Information Systems. Springer, 1997.
[3] J. ORourke. Computational Geometry in C. Cambridge University Press, 1994.
[4] F. P. Preparata y M. I. Shamos. Computational geometry: an introduction. Springer-Verlag,
New York, 1985.
73

También podría gustarte