Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
x : |p
i
x| |p
j
x|, j = i
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
. Repetir para e = e
y t = t
.
3.- Si e es un in-and-back de t, entonces t
y e.
4.- Si t tiene dos ejes Out y e es el primero, entonces e
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
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 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