Geometria computacional

73
G EOMETRÍA C OMPUTACIONAL I. T. T OPOGRAFÍA L IDIA O RTEGA A LVARADO JAÉN 2003 Última modificación: 2-06-2003

Transcript of Geometria computacional

Page 1: Geometria computacional

GEOMETRÍA COMPUTACIONAL

I. T. TOPOGRAFÍA

LIDIA ORTEGA ALVARADO

JAÉN 2003

Última modificación: 2-06-2003

Page 2: Geometria computacional

Índice general

1. Introducción a la Geometría Computacional 41.1. Historia de la Geometría Computacional . . . . . . . . . . . . . . . . . . . . . 41.2. Eficiencia de los algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.3. Operaciones básicas en Geometría Computacional . . . . . . . . . . . . . . . . 7

1.3.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.3.2. Algunos tipos de datos simples . . . . . . . . . . . . . . . . . . . . . . 81.3.3. Cálculo del área . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.3.4. Intersección de segmentos . . . . . . . . . . . . . . . . . . . . . . . . 111.3.5. Cálculo de diagonales . . . . . . . . . . . . . . . . . . . . . . . . . . 131.3.6. Un ejemplo completo: triangulación de un polígono . . . . . . . . . . . 15

1.4. Estructuras de Datos y Algoritmos . . . . . . . . . . . . . . . . . . . . . . . . 161.4.1. Introducción a las estructuras de datos . . . . . . . . . . . . . . . . . . 16

1.5. Algunos métodos de programación utilizados en G. C. . . . . . . . . . . . . . 181.5.1. Método incremental . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

1.5.1.1. Línea de barrido . . . . . . . . . . . . . . . . . . . . . . . . 191.5.2. Divide y Vencerás . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2. La envolvente convexa y triangulación de polígonos 212.1. La envolvente convexa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

2.1.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.1.2. Un ejemplo de resolución . . . . . . . . . . . . . . . . . . . . . . . . 222.1.3. Graham’s scan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232.1.4. La marcha de Jarvis . . . . . . . . . . . . . . . . . . . . . . . . . . . 242.1.5. Algoritmo Incremental . . . . . . . . . . . . . . . . . . . . . . . . . . 262.1.6. Método Divide y Vencerás . . . . . . . . . . . . . . . . . . . . . . . . 28

2.2. Triangulación de polígonos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302.2.1. Polígonos monótonos . . . . . . . . . . . . . . . . . . . . . . . . . . . 302.2.2. Partición de un polígono en componentes monótonas . . . . . . . . . . 33

3. Intersecciones 363.1. Intersección de polígonos convexos . . . . . . . . . . . . . . . . . . . . . . . 363.2. Intersección de segmentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

2

Page 3: Geometria computacional

Índice general

4. Localización de puntos y diagramas de Voronoi 444.1. Punto en polígono . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444.2. Diagramas de Voronoi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

4.2.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454.2.2. Definición . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474.2.3. Elementos del diagrama de Voronoi . . . . . . . . . . . . . . . . . . . 474.2.4. Propiedades de diagrama de Voronoi . . . . . . . . . . . . . . . . . . . 47

4.3. Triangulación de Delaunay . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484.3.1. Definición y propiedades . . . . . . . . . . . . . . . . . . . . . . . . . 49

4.4. Métodos de construcción del diagrama de Voronoi . . . . . . . . . . . . . . . . 504.4.1. Método Incremental . . . . . . . . . . . . . . . . . . . . . . . . . . . 504.4.2. Método Divide y Vencerás . . . . . . . . . . . . . . . . . . . . . . . . 50

4.5. Problemas que resuelve el diagrama de Voronoi o la triangulación de Delaunay 524.5.1. Problemas de proximidad . . . . . . . . . . . . . . . . . . . . . . . . 534.5.2. Interpolación espacial . . . . . . . . . . . . . . . . . . . . . . . . . . 53

5. Aplicaciones a los Sistemas de Información Geográficos 555.1. Modelos de representación de terrenos . . . . . . . . . . . . . . . . . . . . . . 55

5.1.1. El grid regular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555.1.2. Las líneas de contorno . . . . . . . . . . . . . . . . . . . . . . . . . . 565.1.3. La triangulación irregular del modelo de Red (TIN) . . . . . . . . . . . 565.1.4. Modelos jerárquicos . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

5.2. Acceso a TINs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575.2.1. Recorrido de un TIN . . . . . . . . . . . . . . . . . . . . . . . . . . . 585.2.2. Acceso eficiente a TIN. . . . . . . . . . . . . . . . . . . . . . . . . . . 59

5.3. Conversión entre modelos de terrenos . . . . . . . . . . . . . . . . . . . . . . 605.3.1. De muestreo de puntos a TIN. . . . . . . . . . . . . . . . . . . . . . . 615.3.2. De Grid a TIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615.3.3. De líneas de contorno a TIN . . . . . . . . . . . . . . . . . . . . . . . 64

5.4. Computación matemáticas en terrenos . . . . . . . . . . . . . . . . . . . . . . 645.4.1. Sumar y restar terrenos . . . . . . . . . . . . . . . . . . . . . . . . . . 64

5.5. Computar líneas de contorno . . . . . . . . . . . . . . . . . . . . . . . . . . . 655.5.1. Computación directa de líneas de contorno . . . . . . . . . . . . . . . 655.5.2. Preprocesamiento para líneas de contorno. . . . . . . . . . . . . . . . . 66

5.6. Características topográficas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675.6.1. Puntos en terrenos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675.6.2. Valles y Sierras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685.6.3. Curvaturas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685.6.4. Información de drenaje . . . . . . . . . . . . . . . . . . . . . . . . . . 70

3

Page 4: Geometria computacional

1 Introducción a la Geometría Computacional

1.1. Historia de la Geometría Computacional

La Geometría fue estudiada desde la antigua Grecia y Egipto. Constituían una herramienta muyimportante para resolver problemas prácticos. El primer algoritmo que pueda considerarse com-pleto es la construcción Euclídea, porque fue el primero que satisfizo todos los requerimientos:es correcto, no ambiguo y tiene un final. Este algoritmo además da una colección 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 seriede primitivas Euclídeas. Se hablaba por entonces ya del término complejidad, no computacionalpero sí de dificultad para medir la complicación de su realización. Se puede decir que fue unaaproximación a lo que entendemos hoy por “complejidad temporal”. No se hablaba del problemaen función del conjunto de entrada, pero sí intentaban reducirse el número de pasos a realizarpara resolver un problema. Poco a poco se fueron dando cuenta de que todo problema posee unesfuerzo mínimo de realización, lo que nosotros llamamos “complejidad del algoritmo”.

Ya en 1672 se demostró que cualquier construcción que pudiera realizarse sólo con regla ycompás podría hacerse usando sólo compás. El concepto de línea se amplió pasando a ser ellugar geométrico compuesto por la unión de los puntos de corte de dos arcos realizados con uncompás.

La Geometría ha tenido momentos de especial realce, por ejemplo el crecimiento del análisisreal, la Geometría métrica y la teoría de la convexidad, han supuesto las herramientas mate-máticas para el diseño de algoritmos rápidos. Por un lado la distancia es un tema esencial enconceptos geométricos y la teoría de la convexidad es analizada para obtener propiedades glo-bales.

La Geometría Algorítmica está basada en caracterizaciones de objetos geométricos en términosde propiedades de subconjuntos finitos. Un tratamiento algorítmico implica eliminar el términoinfinito. Hoy día la Geometría Computacional se utiliza como herramienta básica, no sólo endisciplinas inmediatamente relacionadas con la Geometría. A partir de finales de los años 60y 70, el incremento del uso de las computadoras en investigación y desarrollo, propicia usarestas máquinas para resolver problemas clásicos que siempre fueron resueltos a base de reglas ycompás.

Pero la memoria de las máquinas y el tiempo de ejecución de éstas, la mayoría de las vecescompartido, exigió de pronto el conseguir métodos que no sólo funcionaran, sino que intentaranoptimizar al máximo dos recuerdos muy importantes, sobre todo por aquel entonces: la memoria

4

Page 5: Geometria computacional

1 Introducción a la Geometría Computacional

y el tiempo de CPU. Hoy por hoy a pesar de utilizar máquinas más potentes, también se planteaen muchas ocasiones incrementar el número de datos a procesar, por lo que hoy sigue siendo unproblema a resolver.

Algunas aplicaciones donde la Geometría Computacional es necesaria es la Informática Gráfica,Robótica, Sistemas de Información Geográficos, etc. El término nace en 1975 por Shamos ydesde entonces los trabajos y los estudios en esta disciplina han ido creciendo de forma espec-tacular.

1.2. Eficiencia de los algoritmos

Existen distintas formas de medir algoritmos o de clasificarlos. Un algoritmo fácil de entender,codificar y depurar es preferible a otro que realice lo mismo pero que no cumpla estas caracte-rísticas. Algo similar ocurre con respecto a la eficiencia; un algoritmo es eficiente cuando usaadecuadamente los recursos del ordenador y lo hace con la mayor rapidez posible. Los recursosson siempre referidos al tiempo de ejecución y al tiempo de CPU que necesita para ejecutarse.

Para optar por escribir un tipo de algoritmo que cumpla con las especificaciones anteriores tam-bién es necesario saber cuantas veces va a ejecutarse dicho algoritmo y con qué cantidad dedatos. Así, un algoritmo poco eficiente con pocos datos es preferible utilizarlo a otro que nece-site gran cantidad de tiempo en diseñarse. Por el contrario es beneficioso en muchas ocasionesrealizar un buen diseño a pesar de utilizar gran cantidad de esfuerzo y emplear estructuras dedatos complejas, si se consigue finalmente un método de resolución que realice buenos tiemposde ejecución para entradas grandes de datos. Por otra parte, cuando nuestro algoritmo pretenderesolver un problema clásico, como puede ser en Geometría Computacional, se da por supuestoque tiene que ser eficiente con grantes cantidades de datos y además hay que suponer que dichoalgoritmo va a ser ampliamente utilizado.

Por tanto, nuestro propósito es no sólo entender y utilizar algoritmos que funcionen en GeometríaComputacional sino que también sean eficientes. Para medir dicha eficiencia, hay que tener encuenta ciertos parámetros:

Dependencia de los datos de entrada del programa.

Calidad del código que genera el compilador en el programa objeto.

Las instrucciones y arquitectura de las computadoras.

Tiempo de ejecución de dicho programa.

Como entrar en detalles de compiladores diferentes y de distintas arquitecturas es muy amplio yademás es absolutamente cambiante, basta decir que cuanto más rápido mejor. Lo que haremosserá estudiar los algoritmos en función de la entrada, básicamente de su tamaño, y además en lacomplejidad o tiempo que emplea el algoritmo para su ejecución. Obviamente un algoritmo, o

5

Page 6: Geometria computacional

1 Introducción a la Geometría Computacional

programa puesto que se está ejecutando, va a ser más rápido si tiene que procesar diez datos quesi tiene que realizar lo mismo con una entrada de tamaño cien.

Vamos a denominar T (n) al tiempo de ejecución de un programa con tamaño n. Para no espe-cificar el tiempo en segundos, puesto que depende excesivamente de la máquina empleada, seusará una función expresada en términos de n. Por ejemplo, T (n) = cn2, siendo c una constante.

En muchas ocasiones es necesario referirse al tiempo de ejecución esperado del algoritmo enel peor de los casos para una entrada de tamaño n. De esta forma se puede acotar el problemacon una cota superior que nos permita conocer el margen en el que nos podemos mover. El casomedio también puede ser interesante en casos donde se conozca que el peor caso se produce conuna probabilidad muy pequeña.

Cuando decimos que el tiempo de ejecución T (n) de un programa es O(n2) significa que existenconstantes enteras positivas c tales que T (n) ≤ cn2. Por tanto es lo que llamamos cota superiorque nos identifica el peor caso. En el caso genérico decimos que T (n) es O( f (n)).

También existen cotas inferiores para hablar del tiempo de ejecución. Es una cota inferior o loque es lo mismo: el algoritmo se ejecutará al menos en el tiempo que la función g(n) indica. Sedice que T (n) es Ω(g(n)) cuando existe una constante c tal que T (n)≥ cg(n).

Cuanto menor sea la representación gráfica de la función f (n), más rápido se ejecutará el algo-ritmo para un conjunto de entrada de tamaño dado. Pero esto no siempre es verdadero para todon, es decir, en ocasiones el tiempo de ejecución se refiere a grandes cantidades de información ypor tanto, n tiende a infinito. Así O(n2) es mejor que O(n3); O(n) es mejor que O(n2) pero peorque O(n logn). Por ejemplo un programa con tiempo O(100n) es más lento para n menor que 20que otro que se ejecute en tiempo O(5n2). En algoritmos típicos de Geometría Computacionallo que se busca sobre todo son ejecuciones en tiempo lineal O(n), o en O(n log n).

A menos que un algoritmo tenga una velocidad de crecimiento baja, O(n) o O(n logn), un creci-miento modesto en la rapidez de la computadora no influirá gran cosa en el tamaño del problema.

A pesar de todo lo expuesto anteriormente, si un algoritmo va a ser utilizado pocas veces, el costode escritura de una algoritmo eficiente puede que no merezca la pena. Tampoco es necesariosi siempre va a recibir un conjunto de entrada pequeño. En algunas ocasiones un algoritmopuede permitirse el lujo de ser algo más lento si a cambio es más didáctico. Por otro lado, sila eficiencia a nivel de tiempo en CPU implica un alto coste en cantidad de almacenamiento oporque se encuentre en dispositivos de memoria masiva. Por último, en algoritmos numéricos estan importante la precisión de los cálculos como la eficiencia de éstos.

Para calcular la eficiencia de un algoritmo hay que tener en cuenta ciertos casos:

Si T1(n) y T2(n) son tiempos de ejecución de dos fragmentos de programa, el tiempo totalserá de T1(n)+T2(n). Sin embargo, se considera únicamente el más lento de los dos y eltiempo de ejecución vendrá dado por tanto por O(max( f (n),g(n)) , siendo O( f (n)) eltiempo para T1(n) y O(g(n)) para T2(n). También existen simplificaciones, por ejemplo,O(c f (n)) se considera siempre O( f (n)).

Una asignación u operación aritmética suele considerarse con tiempo O(1).

6

Page 7: Geometria computacional

1 Introducción a la Geometría Computacional

En las proposiciones condicionales, la parte de la condición suele considerarse tiempoconstante si no necesita realizar llamadas a otras funciones. El tiempo global de esta ins-trucción se toma de nuevo como el mayor de las dos partes que la forman, parte then oparte else.

En un ciclo se suele determinar por el número de iteraciones multiplicadas por el ordendel conjunto de instrucciones del cuerpo del bucle. Si tenemos dos bucles de n ciclos, unodentro de otro, se considera tiempo cuadrático (suponiendo que el cuerpo del bucle tuvieraun tiempo contante).

Cuando se hacen llamadas a procedimientos no recursivos, se suman todos los tiempos de eje-cución según las pautas anteriores, pero en procesos recursivos se trabaja de forma distinta.Supongamos la siguiente función:

T (n) =

c+T (n−1) si n > 1d si n≤ 1

Para n > 2, tenemos que T (n) = c + T (n− 1). El término 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 esteproceso hasta el término i entonces T (n) = ic+T (n− i). Cuando i = n−1, T (n) = nc+T (1) =nc∼= O(n).

En el siguiente ejemplo tenemos a un algoritmo recursivo. Para el caso general, n > 1, el procesodivide el problema en dos mitades de aproximadamente el mismo tamaño. Cuando éste procesode división termina necesita un tiempo lineal para unir los resultados de las dos mitades. Estemétodo es muy habitual en los problemas resueltos con el método Divide y Vencerás.

T (n) =

2T (n/2)+ c2n si n > 1d si n≤ 1

Para n > 2 tenemos que T (n/2) = 2T (n/4)+ c2n/2, sustituyendo en T (n),

T (n) = 2(2T (n/22)+ c2n/2)+ c2n = 22T (n/22)+2c2n

T (n) = 2iT (n/2i)+ ic2n. Debe existir un k tal que 2k ' n; k = log2 n.

T (n) = nT (n/n)+ kc2n = nT (1)+ c2n log2 n = n+n log2 n' O(n logn).

1.3. Operaciones básicas en Geometría Computacional

En este apartado entraremos en contacto con métodos para la resolución de algunos de los pro-blemas más elementales en Geometría. Nos servirá igualmente para recordar conceptos a nivelcomputacional. Los algoritmos aparecerán mayormente escritos en lenguaje Pascal, a no ser quealguno de ellos aparezca, no por razones prácticas sino didácticas.

7

Page 8: Geometria computacional

1 Introducción a la Geometría Computacional

1.3.1. Introducción

A nivel de tratamiento de la información, en Geometría Computacional es clara la preferenciapor los tipos de datos enteros, lo que se denomina aritmética entera. La razón es obvia, el or-denador debe transformar todo dato de la recta real en un tipo de dato de una computadora quetiene un espacio finito de almacenamiento. Los datos enteros sí garantizan su transformacióníntegra a un tipo de dato almacenado en memoria, siempre que éste sea menor que una valordado. Sin embargo, los datos reales o en coma flotante pierden casi siempre cierta precisión alser guardados. Cuando una variable de tipo real nace en la ejecución de un programa y a su vezes utilizada como entrada para crear otras nuevas, este proceso repetido puede hacer que el datose aleje del valor correcto. Por esta razón, y siempre que sea posible, es preferible hacer uso dela aritmética entera. Por ejemplo, para saber si dos segmentos intersectan basta utilizar aritméti-ca entera, sin embargo si queremos saber exactamente el lugar de intersección, sí era necesariorealizar algún cálculo en coma flotante.

1.3.2. Algunos tipos de datos simples

Los datos geométricos, a la hora de ser procesados por un ordenador, son reemplazados porlo que denominamos tipos de datos. Muchos conceptos típicamente matemáticos se denominande forma análoga cuando se representan internamente, así usamos el concepto de variable ode constante. Los tipos de datos identifican el tipo de cada una de estas posibles variables oconstantes. Los tipos de datos que cualquier lenguaje de programación soporta cubren el espectromás habitual, sin embargo, los de tipo geométrico deben ser definidos explícitamente por elprogramador.

En este curso utilizaremos varios de estos tipos de datos. Por ejemplo, el tipo de dato TipoPunto,TipoPoligono, etc. En las clases de prácticas se definirán muchos de ellos, ahora identificaremoslos anteriores en Pascal para poder trabajar con ellos a lo largo de este tema:

type TipoPunto=ar ray [ 0 . . 1 ] o f i n t e g e r ;T ipoPol igono = ar ray [ 0 . .TAM_MAX] of TipoPunto ;

Por simplicidad computacional, se emplea un array con dos posiciones para un punto, identifi-cando la posición 0 para guardar el valor de la x y la posición 1 para el de la y. Cuando se diceque un polígono es un array de puntos, realmente tenemos una matriz bidimensional con un totalde dos columnas, igualmente fácil de manejar computacionalmente.

1.3.3. Cálculo del área

Una de las operaciones más elementales en Geometría es el cálculo del área de un triángulo, seadel tipo que sea. El método para realizar este cálculo no es otro que la resolución de un determi-nante 3x3, aunque no es objetivo de esta asignatura el cálculo matemático correspondiente.

8

Page 9: Geometria computacional

1 Introducción a la Geometría Computacional

El algoritmo escrito en pseudocódigo aparece a continuación. Por razones argumentadas ante-riormente, se opta por trabajar siempre con aritmética entera. La función AreaTriangulo2 evitarála división por dos y calculará el doble del área del triángulo, por lo hay que tener en cuenta quepara obtener el valor real del área será necesario hacer la división correspondiente.

f u n c t i o n AreaTr iangulo2 ( var a , b , c : TipoPunto ) : r e a l ;begin

AreaTr iangulo2 : = ( 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 cálculo será positivo siempre que los vértices abc sean recorridos en ordeninverso a las agujas del reloj. En caso contrario el valor será igualmente válido y medirá el área,pero tendrá el signo negativo.

El cálculo del área de un polígono convexo es bien sencillo, basta con calcular el área de todoslos triángulos que se pueden formar lanzando diagonales desde cualquier vértice, hasta el restode los vértices del polígono convexo.

Si el polígono no es convexo, el área puede calcularse sumando las áreas de los triángulos resul-tantes o incluso restando los de aquellos que no tengan superficie, como en el siguiente ejemplo:

El área del polígono puede calcularse de dos modos:

area(abd)+area(bcd)

area(abc)−area(adc)

9

Page 10: Geometria computacional

1 Introducción a la Geometría Computacional

Este mismo principio puede extenderse a cualquier polígono, indistintamente del tipo y núme-ro de vértices que tuviera. Veamos el siguiente ejemplo: se ha elegido un punto cualquiera p,interior o exterior al polígono y se han trazado diagonales a todos sus vértices. Los vértices deéste han sido enumerados del o al n−1 en orden inverso a las agujas del reloj. Este dato es muyimportante, porque va a ser siempre el mecanismo utilizado para numerar los vértices cuandotrabajemos con polígonos. El número de triángulos obtenidos será de n− 1, siempre partiendodel punto p y siguiendo con dos vértices sucesivos del modo siguiente:

El triángulo p01 se traza en sentido inverso a las agujas del reloj, lo que implicará siempre queel área de dicho triángulo es positiva. Se ha señalado utilizando un símbolo + cuando el cálculose realiza en el sentido antihorario y con − cuando el área es negativa. Cuando el recorrido delos vértices del triángulo siempre en la forma pvivi+1, sea en sentido horario, por ejemplo eltriángulo p67, el área correspondiente se resta. El resultado final, como podemos observar enla figura, es que todas las áreas de los triángulos no contenidas en el interior del polígonos sonsumadas y restadas una vez con resultado igual a cero, es decir, el resultado finalmente es eldeseado.

Por tanto, podemos hacer uso de la función AreaTriangulo2 tantas veces como triángulos sevayan formando con el proceso anterior, sumando unas veces las áreas y otras restándose auto-máticamente según sea la salida de dicha función. Como de cada triángulo se calcula el doble desu área, finalmente será necesario dividir por dos el resultado final.

Como el punto P puede ser cualquier punto, sea interior o no al polígono, podemos optar portomar al punto del polígono s0, o lo que es lo mismo computacionalmente, a s[0]. El resultadolo podemos escribir a continuación:

f u n c t i o n AreaPoligono2 ( var S: TipoPol igono ; n : i n t e g e r ) : r e a l ;var suma : r e a l ;

i : i n t e g e r ;begin

suma : = 0 ;f o r i : = 1 to n−1 do

suma : = suma + AreaTr iangulo2 ( S [ 0 ] , S [ i ] , S [ i + 1 ] ) ;AreaPoligono2 : = suma ;

end ;

10

Page 11: Geometria computacional

1 Introducción a la Geometría Computacional

1.3.4. Intersección de segmentos

Una de las operaciones elementales en Geometría Computacional es la intersección de segmen-tos, cálculo válido para otros muchos problemas. Sin embargo, y siguiendo con la dinámicade trabajar siempre que sea posible con aritmética de enteros, el algoritmo de intersección desegmentos va utilizar otra serie de subrutinas necesarias.

Si recordamos una de las propiedades de la función del cálculo del área del triángulo, el resultadoes positivo si la lectura ordenada de los vértices nos da un recorrido antihorario. Esta propiedadpuede ser útil para determinar si un punto c está a la izquierda del segmento ab. Observemos lasiguiente figura:

El triángulo imaginario abc se dibuja en orden inverso a la agujas del reloj, lo que automática-mente nos está indicando que el punto c está a la izquierda de ab. Es necesario observar queno es lo mismo el segmento ab que el segmento ba computacionalmente hablando. El área deltriángulo bac es negativa porque el punto c está a la derecha del segmento ba. El subprogramacorrespondiente únicamente necesita realizar una llamada a la función AreaTriangulo2 ante-riormente vista. Aprovechamos un cálculo en principio de distinta índole, para determinar laposición de un punto con respecto a un segmento.

f u n c t i o n I zqu ie rda ( a , b , c : TipoPunto ) : Boolean ;begin

I zqu ie rda : = ( AreaTr iangulo2 ( a , b , c ) ) >0 ;end ;

No es difícil entender que este mismo principio sirve para determinar si el punto c está justa-mente a la derecha (la función anterior nos devuelve un valor f alse) o si el área del triánguloabc es igual a cero, lo que indica que los tres puntos son colineales:

11

Page 12: Geometria computacional

1 Introducción a la Geometría Computacional

El código de la función Colineal sería el siguiente:

f u n c t i o n Co l i nea l ( a , b , c : TipoPunto ) : Boolean ;begin

Co l i nea l := AreaTr iangulo2 (a , b , c )=0 ;end ;

Debemos insistir en que el código anterior da por supuesto que todos los cálculos se realizanúnicamente utilizando aritmética de enteros. No quiere decir ésto que no pueda migrarse dichocódigo a operaciones en coma flotante, pero en ese caso jamás debería realizarse una operacióncomo esta i f a = 0 ...., puesto que no siempre el valor que nosotros consideramos como cero (ocualquier otro valor concreto) lo entienda así un tipo de dato en coma flotante. Para solventar esteproblema es más 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 valorpróximo a cero.

Para saber si dos segmentos ab y cd intersectan, deberíamos saber si:

1. no son colineales

2. si d está a la izquierda de ab y c está a la derecha (o al revés) y además

3. si a está a la derecha de cd y b lo está a la izquierda (o al revés)

Nos podemos dar cuenta en la figura de que si no se cumple algunas de estas premisas notenemos garantía de que ambos segmentos intersecten.

El código debe tener en cuenta todos los casos citados anteriormente. La operación válida paraimplementar el “al revés”, es la operación XOR(a,b) cuya tabla de verdad da el valor verdaderocuando a y b son distintos.

FUNCTION IntersectaSegmento ( a , b , c , d : TipoPunto ) : Boolean ;BEGIN

i f ( Co l i nea l ( a , b , c ) OR Co l i nea l ( a , b , d ) OR

12

Page 13: Geometria computacional

1 Introducción a la Geometría Computacional

Co l inea l ( c , d , a ) OR Co l i nea l ( c , d , b ) )then IntersectaSegmento : = f a l s eelse IntersectaSegmento :=

(XOR( I zqu ie rda ( a , b , c ) , I zqu ie rda ( a , b , d ) ) ANDXOR( Izqu ie rda ( c , d , a ) , I zqu ie rda ( c , d , b ) ) ) ;

END;

El inconveniente del método es la redundancia. Ahora realizaremos una nueva versión del algo-ritmo utilizando la primitiva Entre, que será capaz de saber si un punto c está o no en el segmentoab. Para ellos veremos si la coordenada x de c cae en el intervalo determinado por la coordenadax de a y b. Lo mismo debe hacerse para la ordenada.

FUNCTION Entre ( a , b , c : TipoPunto ) : Boolean ;BEGIN

i f ( Not Co l i nea l ( a , b , c ) )then Entre : = f a l s eelse i f a [0 ] < > b [ 0 ]

then a[0] <=b [ 0 ] AND c [0] <=b [ 0 ] OR a[0] >= c [ 0 ] AND c [0] >=b [ 0 ]e lse a[1] <= c [ 1 ] AND c [1] <=b [ 1 ] OR a[1] >= c [ 1 ] AND c [1] >=b [ 1 ] ;

END;

Esta versión del algoritmo además cuenta con al ventaja de poder trabajar con las interseccionesde forma propia o impropia. Una intersección impropia ocurre cuando un extremo de uno delos segmentos está justo en en alguna posición del otro. La siguiente función en Pascal detectaprimero si existe la posibilidad de colinealidad con la función Entre. Posteriormente hace elmismo proceso que IntersectaSegmento.

f u n c t i o n In tersec Improp ia ( a , b , c , d : TipoPunto ) : Boolean ;begin

i f ( Entre ( a , b , c ) OR Entre ( a , b , d ) OR Entre ( c , d , a ) OR Entre ( c , d , b ) )then In tersec Improp ia : = t rueelse In tersec Improp ia : = ( I zqu ie rda ( a , b , c ) XOR Izqu ie rda ( a , b , d ) )

and ( I zqu ie rda ( c , d , a ) XOR Izqu ie rda ( c , d , b ) ) ;end ;

1.3.5. Cálculo de diagonales

El cálculo de una diagonal tiene como objetivo la triangulación de polígonos. Una diagonal esaquel segmento que une dos vértices del polígono de forma que no intersecte con ningún otroeje de dicho polígono y además sea interno al polígono.

13

Page 14: Geometria computacional

1 Introducción a la Geometría Computacional

Para saber si existe o no intersección puede utilizarse el proceso anterior, pero para saber si eso no interno necesitamos realizar un procesamiento adicional. Este cálculo puede realizarse entiempo constante porque si una diagonal es interior a un polígono P en su vecindario (vérticespróximos), también lo es para todo el polígono, no siendo necesario un procesamiento completodel polígono P.

Diremos que un segmento s es interno a P si y sólo si es interno al cono cuyo vértice es v i ycuyos lados pasan a través de vi−1 y vi+1. Existen dos casos, el caso convexo en el que el restodel polígono está en la parte de menor ángulo y el caso cóncavo en cuyo caso el ángulo es mayorque π. La siguiente función determina si el vector que une los vértices i y j del polígono P esinterior o no al polígono.

FUNCTION DentroCono ( i , j : I n tege r ; var P : TipoPol igono ; n : In tege r ): Boolean ;

VAR imas1 , imenos1 : In tege r ;begin

imas1 : = ( i +1)mod n ;imenos1 : = ( i−1+n ) mod n ;i f ( IzquierdaOsobre (P[ imenos1 ] ,P [ i ] ,P [ imas1 ] ) ) caso convexo then DentroCono : = I zqu ie rda (P [ i ] ,P [ j ] ,P [ imenos1 ] ) and

Izqu ie rda (P[ j ] ,P [ i ] ,P [ imas1 ] )e lse DentroCono : = not IzquierdaOsobre (P[ i ] ,P [ j ] ,P [ imas1 ] ) and

IzquierdaOsobre (P[ j ] ,P [ i ] ,P [ imenos1 ] ) ;end ;

Vemos en la figura siguiente los dos casos comentados anteriormente. El caso convexo ocurrecuando el vértice vi+1 está a la izquierda del eje trazado por vi−1vi. En este caso, lo vemos en lafigura de la izquierda, para que se trate de un eje interno debe ocurrir que v i−1 esté a la izquierdade viv j y que vi+1 lo esté a la izquierda. El caso cóncavo aparece a la derecha.

Por tanto, una diagonal es aquel segmento interior que está dentro del polígono. Pero el segmentoi j es una diagonal si no intersecta con ninguna otro de las aristas del polígono. Este cálculonecesita forzosamente un tiempo de ejecución lineal. La función Diagonal_IE se encargará derealizar este chequeo, y que será invocado por la función Diagonal cuyo código resulta bastanteevidente: el segmento i j es una diagonal del polígono P de tamaño n si es interior y además nointersecta con ninguna arista.

14

Page 15: Geometria computacional

1 Introducción a la Geometría Computacional

FUNCTION Diagonal_IE ( i , j , n : I n tege r ; var P: TipoPol igono ) : Boolean ;var

k , kmas1 : In tege r ;begin

f o r k : = 0 to n dobegin

Diagonal_IE : = t rue ;kmas1 : = ( k+1)mod n ;i f NOT ( ( k= i ) OR ( kmas1= i ) OR ( k= j ) OR ( kmas1= j ) )then i f In te rsec Improp ia (P [ i ] ,P [ j ] , p [ k ] , p [ kmas1 ] )

then Diagonal_IE : = f a l s e ;end ;

end ;

FUNCTION Diagonal ( i , j , n : I n tege r ; var P : TipoPol igono ) : Boolean ;begin

Diagonal : = ( DentroCono ( i , j ,P , n ) AND Diagonal_IE ( i , j , n ,P ) ) ;end ;

1.3.6. Un ejemplo completo: triangulación de un polígono

La triangulación de polígonos es un cálculo muy importante en muchas aplicaciones de Geo-metría Computacional. Permite, aparte de otras muchas aplicaciones, dividir un polígono conposible cierta complejidad, en un conjunto de triángulos fáciles de procesar.

Veremos que el siguiente método puede ser perfectamente válido para lograr la triangulaciónde cualquier polígono P de tamaño n. Sin embargo, y a pesar de su simpleza, su utilización noes aconsejable y por ello no se ha implementado en un leguaje de programación. Vemos quees un método recursivo porque se llama a sí mismo. La llamada recursiva se realiza cuando selocaliza una diagonal, y como en ese momento el número de vértices a procesar es uno menos,puesto que el vértice i1 queda aislado al encontrarse la diagonal ii2. La función EliminaVerticese encargaría de este operación, dejando cada vez que se llama un polígono más pequeño.

PROCEDIMIENTO Tr iangu la r ( P : TipoPol igono ; n : Entero )INICIO

SI ( n>3)THEN PARA ( i <− 0 HASTA n CON INCR+1 REPETIR)

i 1 <− ( i +1 ) mod ni 2 <− ( i +2 ) mod nSI ( Diagonal ( i , i2 , n , P ) )ENTONCES P i n t a r ( P [ i ] ,P [ i 2 ] )

E l im inaVer t i ce ( i1 , P , n )T r i angu la r ( P , n−1)

FIN_SIFIN_PARA

15

Page 16: Geometria computacional

1 Introducción a la Geometría Computacional

FIN_SIFIN

La razón por la que este algoritmo no es desde luego nada interesente es por su tiempo deejecución. El algoritmo trabaja en O(n3) porque realiza un total n−3 llamadas recursivas y cadauna de ellas, en el peor de los casos, necesita un tiempo cuadrático (la función diagonal es lineal,así como la ejecución completa del bucle).

Como veremos a lo largo de este curso, para valores de n elevados, este algoritmo resulta eviden-temente lento, y en Geometría Computacional todos los problemas cuyas soluciones inmediatassean susceptibles de mejora, son estudiados. Como veremos en sucesivos capítulos, cualquierpolígono puede ser triangulado en tiempo O(n log n).

1.4. Estructuras de Datos y Algoritmos

Los algoritmos geométricos, al igual que los desarrollados para otras disciplinas, deberán com-binar adecuadamente junto con su conjunto de sentencias, a las estructuras de datos correctaspara conseguir el objetivo final, obtener programas eficientes.

1.4.1. Introducción a las estructuras de datos

El estudio de las estructuras de datos y los métodos para la organización de dichos datos es unode los aspectos clásicos más importantes para construir algoritmos eficientes. Los programas tra-bajan con información que permanece en memoria principal o en algún dispositivo de memoriasecundaria. La organización que se le da a dichos datos es lo que denominamos estructuras dedatos.

La mayoría de las estructuras de datos pueden verse como contenedores que mantienen infor-mación de un determinado tipo con un cierto orden. El acceso y manejo de los datos en uncontenedor se realiza a través 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 arrayo un puntero. Una estructura de datos además de proporcionar un modo de acceso, también de-berá llevar asociado un conjunto de operadores, como insertar un nuevo dato, actualizar uno yaexistente o eliminar algún otro. Las características de una estructura de datos va en relación alorden de ejecución de sus operaciones y a los requerimientos de espacio. En cualquier caso, laestructura de datos más idónea dependerá siempre del problema que se pretenda resolver.

Un tipo de dato es una colección de objetos a la que se le da una representación matemática.Un tipo de dato abstracto o TDA es un tipo de dato, más un conjunto de operaciones que lomanejan. Las estructuras de datos pueden considerarse como implementaciones concretas detipos de datos abstractos. Los TDAs (notación anglosajona) han evolucionado hasta convertirseen clases de objetos. Lo que inicialmente se concibió como un concepto matemático que se

16

Page 17: Geometria computacional

1 Introducción a la Geometría Computacional

adaptó a la sintaxis de los lenguajes de programación tradicionales, se ha ido convirtiendo enuna nueva filosofía de programación con los nuevos lenguajes orientados a objetos.

Existen multitudes de estructuras de datos ampliamente documentadas en la bibliografía. En esteapartado repasaremos algunas de las estructuras de datos usadas en el curso.

Dependiendo de la organización interna y del modo de acceso a los datos, existen dos tiposfundamentales 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 información indicando la posición donde se localiza el dato. Por elcontrario un contenedor asociativo, independientemente de su organización interna, permite elacceso por clave.

Contenedores secuenciales

Las secuencias más usuales son las listas enlazadas y los arrays. Las primeras forman una su-cesión de nodos o elementos informativos unidos unos a otros mediante punteros. El tiempo deacceso es lineal, aunque normalmente el acceso a los puntos extremos es constante. Los arraysson contenedores implícitos con acceso directo. Esta ventaja de acceso en tiempo constante se vemermada por poseer menor flexibilidad. Por ejemplo, la operación de inserción de un elementoen posiciones intermedias es de orden lineal. Sobre cualquiera de los contenedores secuencialesanteriormente citados puede construirse estructuras de datos muy conocidas y empleadas, laspilas (LIFO) o las colas (FIFO). Cualquiera de ellas implementada sobre una lista puede con-siderarse como una estructura de datos dinámica. Esta consideración también puede realizarsesobre arrays dinámicos.

Contenedores asociativos

Los contenedores asociativos poseen una filosofía de manejo y una estructura interna totalmentediferente a las secuencias. La diferencia fundamental es que el acceso a la información se realizasiempre utilizando una clave y no una posición, que puede identificar o no de forma unívoca aldato. Las operaciones fundamentales son de inserción, actualización, borrado y búsqueda pordicha clave.

La organización interna de los datos depende del tipo de contenedor asocitivo, por árbol o portabla hash. Los primeros mantienen un árbol binario de búsqueda o Inorden, manteniendo unarelación de orden entre nodos padre e hijos. Normalmente, todo nodo padre es mayor que su hijoizquierdo pero menor o igual que su hijo derecho. El tiempo de acceso en este tipo de estructuraspermite eliminar en cada consulta la mitad del grueso de la información, siempre que todas lasramas del árbol permanezcan a la misma altura. Estas estructuras de datos garantizan búsquedasen O(logn).

Las estructuras de datos consideradas de carácter general son ampliamente utilizadas en Geome-tría Computacional, pero existen otros aspectos como son la naturaleza espacial de los objetos

17

Page 18: Geometria computacional

1 Introducción a la Geometría Computacional

geométricos o sus propiedades estructurales que requieren del manejo de estructuras de datosmás específicas para construir algoritmos eficientes.

La elección de un tipo de estructura de datos o de otro va a depender del tipo de objetivo que sepersiga: captura de información estructural, acceso a los datos o actualización eficiente de éstos,optimización del espacio requerido o del número de operaciones de E/S. En otras ocasiones, lasestructuras de datos se eligen según la asociación de objetos geométricos que representen.

1.5. Algunos métodos de programación utilizados en G. C.

La Geometría Computacional, en contraste con la disciplina clásica basada en proporcionarteoremas matemáticos, enfatiza los aspectos computacionales de los problemas y atiende a laspropiedades geométricas para encontrar algoritmos eficientes.

Que un problema geométrico tenga solución dentro de la Geometría Computacional no basta enmuchas ocasiones, se desea además que la solución se encuentre en un tiempo óptimo. Exis-ten una serie de técnicas y paradigmas de programación que vienen siendo muy habituales nosólo en el campo de la Geometría Computacional. Algunos de estos métodos como el divide yvencerás ya habían proporcionado la solución óptima a problemas como la ordenación, en otrasocasiones los métodos de resolución están íntimamente relacionados con las capacidades de lapropia Geometría.

A continuación daremos un repaso a los paradigmas de programación más empleados dentro dela Geometría Computacional.

1.5.1. Método incremental

Éste puede ser considerado como uno de los métodos más simples e intuitivos, también conocidocomo el método iterativo. La idea sobre la que trabaja este método consiste en construir lasolución de modo iterativo, considerando que la entrada se produce de modo incremental. Paracada 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 cualquierproblema Prob(S) bajo esta técnica. En muchas ocasiones S deberá estar ordenada bajo algúncriterio con coste O(nlogn). El algoritmo trabaja siempre de forma similar. Inicialmente Probse resuelve de forma trivial para s0,s1, ...,sk−1, los primeros k puntos de S. Posteriormente yuno a uno, se resolverá Prob(Si) para el resto de si ∈ S, i = k, ...,n− 1 tal y como indica elAlgoritmo 1, obtiendo finalmente Prob(S).

Si en un problema de tamaño n, el coste de insertar un nuevo dato es O(n), entonces el tiempoglobal del algoritmo será de O(n2). Pero si añadir un nuevo elemento a la solución parcial delproblema tiene coste constante o logarítmico, el algoritmo final se procesará en O(nlogn), lamisma cota impuesta por el algoritmo de ordenación.

18

Page 19: Geometria computacional

1 Introducción a la Geometría Computacional

Algorithm 1 Incremental-generalizado.Entrada: El conjunto S de tamaño n.Salida: Prob(S)INICIO

1. Ordenar S obteniendo S = s0, ..., sn−1

2. Construir Prob(Sk−1) en tiempo constante

3. Para i← k HASTA n−1 HACER

a) Construir Prob(Si)

FIN_Para

FIN

1.5.1.1. Línea de barrido

Esta estrategia es una particularización del método incremental, considerándose válida paraproblemas en dos dimensiones cuando el conjunto de entrada se produce en un cierto orden. Lasolución de la mayoría de estos problemas puede ser incremental, de hecho, la implementaciónde este paradigma sigue las mismas premisas que las dadas para el método incremental citadoanteriormente.

El método supone que una línea horizontal (o vertical) recorre el plano de arriba hacia abajo (oen sentido contrario). Cada vez que dicha línea encuentra un ítem (un punto, una línea, etc) loprocesa modificando el conjunto de estructuras que datos que participen en la construcción dedicho algoritmo. La validez de esta técnica está basada en la observación de que la parte quequeda por encima o por debajo de la línea de barrido se ha construido correctamente.

Por ejemplo en el problema de intersección de segmentos, cuando la línea encuentra un nuevosegmento, se realizará una inserción en alguna estructura de datos capaz de mantenerlos ordena-dos de izquierda a derecha (en el caso de que la línea de barrido sea horizontal). Normalmentese escogen estructuras de datos con tiempos de actualización y de acceso logarítmico. Si elprocesamiento de dichos objetos geométricos es constante, como es el caso de la intersección dedos segmentos, pueden trabarse con tiempos del orden de O(n log n).

Esta técnica es empleada para diferentes problemas como la intersección de segmentos, particiónde polígonos en subdivisiones monótonas, intersección de semiplanos, el diagrama de Voronoiy triangulación de Delaunay, los métodos de Jarvis y Graham para el cálculo de la envolventeconvexa, la técnica de localización de los puntos más lejanos, y otros más. Existen técnicasanálogas para dimensiones mayores.

1.5.2. Divide y Vencerás

Esta técnica clásica de programación es válida para resolver de forma eficiente problemas ge-ométricos. Normalmente se basa en la sucesiva división en partes iguales del problema original,

19

Page 20: Geometria computacional

1 Introducción a la Geometría Computacional

hasta conseguir que éste posea un tamaño lo suficientemente pequeño como para poder resol-verse fácilmente. Llegado a un punto en que la división deja de tener sentido, los problemas sevan resolviendo recursivamente y combinando sus soluciones para obtener la solución final. Elmétodo más eficiente de ordenación, el quicksort, está basado en este paradigma.

El Algoritmo 2 resume los pasos empleados para resolver el problema Prob(S) partiendo delconjunto de datos S y realizando sucesivas divisiones por dos. Para que el algoritmo se considereeficiente se espera que el Paso 3.a) que divide el problema en subproblemas y el Paso 3.c) quecombina las soluciones parciales, se realice en tiempo lineal. El segundo ejemplo de ecuaciónde recurrencia de la Sección 1.2 corresponde al método Divide y Vencerás.

Algorithm 2 DyV_GeneralizadoEntrada: El conjunto ordenado S = s0,s2,...sn−1.Salida: Prob(S)INICIO

1. SI n≤ k

2. ENTONCES resolver Prob(Sk−1)

3. SINO

a) Dividir S en dos subconjuntos S1 y S2 del mismo tamaño

b) Procesar Prob(S1) y Prob(S2) de forma recursiva

c) Unir Prob(S1) y Prob(S2) para obtener Prob(S)

FIN_SI

FIN

Esta técnica es ampliamente utilizada y sirve de base para construir algoritmos aleatorios. Puedeemplearse para construir la envolvente convexa, el diagrama de Voronoi, etc.

20

Page 21: Geometria computacional

2 La envolvente convexa y triangulación depolígonos

2.1. La envolvente convexa

2.1.1. Introducción

El cálculo de la envolvente convexa de un conjunto de puntos en espacios euclídeos ha sidosin duda uno de los problemas a la vez más básicos y más ampliamente estudiados a lo largode la historia de la Geometría Computacional. Además, los campos en los que ha resultado uncálculo útil sorprenden por lo aparentemente poco relacionados con las matemáticas en generaly la geometría en particular.

S

Un conjunto convexo del plano se define como el conjunto que verifica que el segmento que unea dos cualesquiera de sus puntos está totalmente contenido en él. Evidentemente, esta definiciónpuede ser aplicada en cualquier espacio euclídeo n-dimensional. La idea de conjunto convexonos lleva inmediatamente a la de envolvente convexa, considerando a ésta como el menor con-junto convexo que contiene a dicho conjunto. Este concepto es fácil de entender en cierto modosi consideramos a la envolvente convexa de un conjunto de puntos en el plano, como la formaque adquiriría una goma elástica envolviendo a todos los puntos del conjunto que están fijos so-bre el plano. De nuevo esta idea es extensible intuitivamente a otras dimensiones, y puede servirde partida para construir algoritmos simples para el cálculo de la envolvente convexa.

Pero exiten otras definiciones válidas: la envolvente convexa de un conjunto de puntos en elplano es la unión de todos los triángulos determinados por dicho conjunto de puntos.

El estudio de la envolvente convexa en dos dimensiones ha sido objeto de especial interés. Exis-ten una serie de características asociadas a los puntos que forman parte de la envolvente convexaen el plano y que han servido igualmente para definirla y construirla. Un punto q ∈ S pertenecea la envolvente convexa de S, q ∈CH(S), si es posible trazar una recta pasando por dicho puntode forma que todo el conjunto S′, S′ = S−q quede a un lado de dicha recta.

21

Page 22: Geometria computacional

2 La envolvente convexa y triangulación de polígonos

Como se ha indicado con anterioridad, el cálculo de la envolvente convexa ha sido aplicadoampliamente a disciplinas en ocasiones ajenas a la Geometría Computacional y en espaciosdistintos de dos dimensiones. Tal es el caso del reconocimiento de patrones, procesamiento deimágenes, etc.

Los algoritmos propuestos para este problema son realmente numerosos. Sin duda es uno delos planteamientos de la Geometría Computacional que más soluciones ha conseguido. Desdeincluso antes del nacimiento oficial de esta disciplina se conoce el trabajo de Graham en el año1972. Se han propuesto estrategias siguiendo los paradigmas más empleados como el métodoincremental y el divide y vencerás. Todos estos algoritmos construyen la envolvente convexaen tiempo Θ(n log n). El método propuesto por Preparata y Shamos en 1985 fue denominadoQuickhull por su similitud con el método de ordenación Quicksort. Otra propuesta diferente sedió a conocer en 1973 como “La marcha de Jarvis”. Este método, que estudiaremos en estecurso, posee un tiempo de ejecución cuadrático, sin embargo supone un interesante ejemplobasado en manejo de ángulos del cual partiremos para el tratamiento del diagrama polar. Todosestos trabajos constituyen el conjunto clásico de algoritmos para la resolución de la envolventeconvexa, al que habría que añadir otras técnicas posteriores.

La envolvente convexa posee una cota de Ω(n log n), es decir, no se puede encontrar una algorit-mo que trabaje en menor tiempo para todos los casos.

2.1.2. Un ejemplo de resolución

El problema de encontrar la envolvente convexa de un conjunto de puntos puede ser interesanteporque es equivalente a encontrar todo el conjunto de puntos extremos de dicha nube. Por tanto,puede definirse como punto extremo a cualquier punto de la envolvente convexa, y todo puntoextremo tiene la propiedad de que es posible trazar una línea recta a través de él de modo que elresto de puntos queden a un lado.

También podemos decir que un punto es extremo si y sólo si está dentro de algún posible trián-gulo cuyos vértices son cualesquiera de los puntos de la nube original. Pero bajo esta definición,necesitaríamos procesar O(n3) triángulos para cada uno de los n puntos, lo que nos proporcio-na un método en triempo O(n4), lo cual no es eficiente teniendo en cuenta que se trata de unproblema Ω(n log n).

Pero la envolvente convexa posee aplicaciones fuera del ámbito de la Geometría. Supongamosque una explotación petrolífera extrae diferentes tipos de componentes mezclados en distintapropoción. Si el objetivo es conseguir los componentes A y B pero en una nueva proporción,podemos hacer uso de la envolvente convexa del modo siguiente. Supongamos que partimos delas mezclas:

e1 = A10%B35%, e2 = A16%B20% y e3 = A7%B15% y queremos obtener e f = A13%B22%. Parasaber si es posible obtener este producto final e f basta con considerar las anteriores mezclascomo puntos del plano, obteniendo el siguiente esquema:

22

Page 23: Geometria computacional

2 La envolvente convexa y triangulación de polígonos

Todo punto que caiga dentro de la envolvente convexa de todas las muestras representadas porpuntos en el plano, indica que puede ser producida. Si por contra, cayera fuera de dicha en-volvente, la combinación final no podría producirse. Este problema sería un problema 3D sicada mezcla tuviera tres componentes, la solución sería la contrucción de la envolvente convexatridimensional.

2.1.3. Graham’s scan

Este es sin duda uno de los algoritmos más importantes para el cálculo de la envolvente convexa,no únicamente por su simpleza sino también por su rapidez.

El proceso realiza primero una ordenación angular de los puntos. El punto tomado de referenciapara tal fin debe ser un punto de la envolvente convexa, por ejemplo el de menor ordenada y alque llamaremos p0. El resto de puntos quedan ordenados de izquierda a derecha obteniendo lasecuencia p1, p2, ..., pn−1.

El proceso seguido por Graham toma sucesivamente triángulos elegidos según el orden conse-guido tras la ordenación. Siempre que el triángulo formado abc, posea una superficie positiva, elvértice central, es decir, el vértice b será tenido en cuenta como probable punto de la envolvente.Pero cuando dicho área es negativa, b es descartado definitivamente.

Para comprender dicho algoritmo, será necesario repasar el concepto de pila. Una pila es untipo de dato abstacto (tipo de dato más operaciones para su manejo) muy restrictivo a la hora demanejar los datos que almacena. Se construye utilizando una estructura de datos lineal, array olista enlazada, sobre la que sólo se pueden introducir (push) o sacar elementos (pop) por uno desus extremos, lo que se denomina cima o tope de la pila.

Operaciones de manejo de P i l a :

Pi laCrea ( a : T ipoP i l a)−−−>Crea una p i l a ívacaPilaPush ( a : T ipoPi la , d : TipoDato) −−−> Mete e l elemento " d " en l a p i l a " a "Pi laPop ( a : T ipoP i l a ) : TipoDato −−−> Saca y devuelve un elementoPilaTope ( a : T ipoP i l a ) : TipoDato −−−> Devuelve pero no saca e l elemento

23

Page 24: Geometria computacional

2 La envolvente convexa y triangulación de polígonos

Pi laDest ruye ( a : T ipoP i l a ) −−−> Destruye todos los elementos de l a p i l a

ALGORITMO GRAHAM (VAR P: TipoNubePuntos , n : entero , VAR Env : T ipoP i l a )ENTRADA: La nube de puntos P de ñtamao nSALIDA : La envolvente convexa de P , CH(P)VARIABLES:

min : Entero / / mantiene e l í ndice de l punto con menor ordenadat : Entero / / s i r v e para sacar y meter datos en l a p i l ai : Entero / / reco r re todos los elementos de P

INICIOmin <− PuntoMenorOrdenada(P, n )OrdenarAngularmente(P, n , min )Pi laCrea ( Env )Pi laPush ( Env ,P[ n−1])Pi laPush ( Env ,P [ 0 ] )i <− 1MIENTRAS i < n−1 REPETIR

t <− PilaPop ( Env )SI I zqu ie rda ( Pi laTope ( Env ) , t , P [ i ] )ENTONCES

PilaPush ( Env , t )Pi laPush ( Env , i )i <− i +1

SINO t <− PilaPop ( Env )FIN_SI

FIN_MIENTRASFIN

El orden de ejecución de este algoritmo viene dado por la necesidad de ordenar los puntosangularmente. Cualquier ordenación necesita al menos un tiemo O(n logn). A este tiempo se ledebe añadir el del proceso ideado por Graham. Para averiguar este tiempo basta con percatarseque en cada paso un punto es tenido en cuenta o es descartado. En el peor de los casos, cuandola envolvente convexa es un triángulo, necesitamos del orden de 2n−3 operaciones.

Todo lo anterior nos indica que Graham’s scan es un algoritmo que trabaja en tiempo óptimoO(n log n).

2.1.4. La marcha de Jarvis

La marcha de Jarvis está basada en el siguiente resultado, que sirve de definición para la envol-vente convexa:

El segmento l, definido por dos puntos de la nube de puntos, es un eje de la envolvente convexasii todos los puntos de la envolvente convexa están a un lado de ésta.

24

Page 25: Geometria computacional

2 La envolvente convexa y triangulación de polígonos

Siguiendo este criterio podríamos descubrir para cada punto los n2 combinaciones posibles, loque nos da un fácil pero costoso O(n3) algoritmo.

Sin embargo, Jarvis pudo bajar la cota al comprobar que si pi p j es una arista perteneciente a laenvolvente convexa, la siguiente arista la encontramos partiendo de p j en tiempo lineal. Veamosel siguiente ejemplo:

Partiendo de s6, el punto de menor ordenada, alcanzamos a s5 tras realizar un barrido angularen sentido antihorario desde la horizontal. El siguiente punto de la envolvente se puede localizarpartiendo de s5 y haciendo un nuevo barrido angular, localizando así a s1.

PROCEDIMIENTO MarchaJarvis (VAR P: TipoNubePuntos , n : Entero ,VAR Env : L is taPuntos )

ENTRADA: La nube P de ñtamao nSALIDA : La l i s t a Env con los puntos de l a envolventeVARIABLES:

p0 , p1 , p2 : Entero / / t r e s puntos de l a envolventeINICIO

p0 <− MiminoPunto (P, n )p1 <− p0REPETIR

L is taPonerF ina l ( Env , p1 )p2 <− Sigu ien te_en_Jarv is ( P, n , p1 )p1 <− p2

HASTA p2=p0FIN

FUNCION Sigu ien te_en_Jarv is (VAR P: TipoNubePuntos , n : Entero ,p : TipoPunto ) : TipoPunto

ENTRADA: La nube P de ñtamao n ye l punto p sobre e l que par te l a úbsqueda

SALIDA : e l punto s igu ien te en l a marcha de J a r v i sVARIABLES:

minang : Real / / menorá ngulo encontrado con respecto a pi : Entero / / v a r i a b l e contadora de l bucle

25

Page 26: Geometria computacional

2 La envolvente convexa y triangulación de polígonos

ang : Realá / / ngulo ca lcu lado en cada ó i t e r a c i npmin : Entero / / i n d i c e de l punto que forma e lá ngulo " pmin "

INICIOminang <− 2∗PiPARA i <− 0 HASTA n−1 REPETIR

SI P[ i ] < > pENTONCES

ang <− Angulo ( p , P[ i ] )SI ang < minangENTONCES

minang <− angpmin <− P[ i ]

FIN_SIFIN_SI

FIN_PARADEVOLVER ( pmim)

FIN

Es fácil de intuir que este proceso tardará en ejecutarse un tiempo proporcional al número depuntos en la envolvente y al tamaño de la nube. Cada barrido angular necesita un tiempo de pro-ceso del orden de O(n) pasos. Si la envolvente final posee k puntos, el tiempo final de ejecuciónes del orden de O(nk). En el mejor de los casos el comportamiento puede ser lineal, por ejemplosi la envolvente es un triángulo. El peor de los casos, sin embargo, se da cuando todos los puntosestán en la envolvente convexa, convirtiéndose en un método cuadrático.

2.1.5. Algoritmo Incremental

La ventaja de unos métodos con respecto a otros a veces viene dada por su velocidad computa-cional y otras veces por su fácil extensión a tres dimensiones, lo que habitualmente llamamosproblemas 3D. El método incremental para el cálculo de la envolvente convexa es uno de estoscasos.

En todo método incremental se supone que se ha resuelto el problema para un tamaño n y queen cada paso se añade un nuevo punto dando solución a un problema de tamaño n+1.

Para el cálculo de la envolvente convexa ordenamos inicialmente los puntos del conjunto P deizquierda a derecha, por ejemplo, obteniendo el conjunto p0, p1, ..., pn−1. Tomamos los tres pri-meros puntos tras esta ordenación sabiendo que el polígono que forman p0, p1, p2, un triángulo,es convexo. El siguiente paso intenta añadir el siguiente punto, p3, de modo que se tras finalizareste paso tengamos la envolvente convexa de los primerso cuatro puntos p0, p1, p2, p3.

Para añadir cada nuevo punto pi+1 basta con lanzar tangentes desde este punto hasta el polígonoconvexo obtenido en el paso anterior. Localizaremos dos tangentes, una superior y otra inferior,como vemos en la siguiente figura:

26

Page 27: Geometria computacional

2 La envolvente convexa y triangulación de polígonos

Siempre ocurre que el punto más bajo de tangencia es tal que pi, es tal que q está a laizquierda de pi−1 pi pero a la derecha de pi pi+1.

El punto p j será el punto de mayor tangencia si q está a la derecha de p j−1 p j pero a laizquierda de p j p j+1.

A continuación aparece el código correspondiente al cálculo de los dos puntos tangentes, p i yp j .

PROCEDIMIENTO PuntosTangentes (VAR P: TipoPoligono , n : Entero , q : TipoPunto , VAR pt : ARRAY( 2 ) de ENTEROS)ENTRADA: La nube P de ñtamao n ; e l punto q desde e l que se lanzan tangentes hacia PSALIDA : La pare ja de puntos ptVARIABLES:

j : Entero / / e l í ndice para pti : Entero / / v a r i a b l e contadora de l bucle

INICIOj <− 0PARA i <− 0 HASTA n−1 REPETIR

SI XOR ( Izqu ierda_sobre ( p [ i −1] ,p [ i ] , q ) , I zqu ie rda_sobre ( p [ i ] , p [ i +1 ] ,q ) )ENTONCES

pt [ j ] <− P[ i ]j <− j +1

FIN_SIFIN_PARA

FIN

El procedimiento PuntosTangentes calcula los puntos resultantes de lanzar tangentes desde elpunto q al polígono P de tamaño n obteniendo como resultado los vértices pt1 y pt2. El algorit-mo determina que el vértice p[i] es un punto tangente si recorriendo cada arista del polígono Pdicho vértice implica un cambio de resultado tras ejecutar la función IzquierdaOSobre.

27

Page 28: Geometria computacional

2 La envolvente convexa y triangulación de polígonos

Pero obtener los dos puntos tangentes no implica de ningún modo que el proceso ha finalizado.El punto q será parte ahora del nuevo polígono convexo, así como lo serán los puntos pt1 y pt2.Sin embargo, es posible que algunos otros vértices del polígono convexo desaparezcan. En elejemplo de la figura, la secuencia de vértices i+1, ..., j−1 claramente desaparece al añadir elnuevo punto. El resultado final sería el polígono P = p0, p1, ..., pi−1, pi,q, p j , p j+1, ..., pn−1.

El orden de ejecución del algoritmo es la suma de los siguientes términos:

1. la operación de ordenación con coste O(n logn)

2. cada uno de los n− 3 puntos que añaden necesitan calcular las dos tangentes, operaciónque en el peor de los casos es lineal.

Por tanto, y aunque el algoritmo es susceptible de añadir mejoras, necesita en el peor de loscasos un tiempo O(n2).

2.1.6. Método Divide y Vencerás

Los métodos divide y vencerás siempre trabajan de modo similar. En este caso, partimos deuna nube de puntos ordenada de izquierda a derecha que se divide en dos mitades A y B deaproximadamente el mismo tamaño. Para cada una de estas mitades, continuamos el procesode división hasta que finalmente el tamaño de la nube de puntos es tan pequeño que puederesolverse el problema fácilmente. Este caso concreto es cuando tenemos tres puntos. Cuandoel problema no pueda dividirse más, el siguiente paso es unir dos a dos los polígonos convexosresultantes de la etapa anterior, en un nuevo polígono convexo. El proceso finaliza obteniendo laenvolvente convexa de todos los puntos.

Sin embargo, la etapa de unión de dos polígonos convexos en un único polígono convexo noes inmediata. Necesitamos calcular dos tangentes que unan dichas envolventes, una tangentesuperior y otra inferior.

El mecanismo para conseguir, por ejemplo, la tangente inferior, podemos observarlo en la si-guiente figura. Se comenzaría suponiendo que el segmento que une el punto más a la derechade A y el punto más a la izquierda de B es una tangente válida. Como esta suposición es falsapara este ejemplo, decidimos bajar vértices sucesivamente hasta que por fin para el polígono Ase localiza una envolvente. En el ejemplo, A2-B5 ya es una tangente para A, sin embargo no loes para B. El siguiente paso es hacer exactamente lo mismo pero bajando sucesivos vértices deB. El proceso termina cuando para los dos polígonos se encuentra una tangente.

28

Page 29: Geometria computacional

2 La envolvente convexa y triangulación de polígonos

PROCEDIMIENTO Envolvente_DyV (VAR P: TipoNubePuntos , i , j : Entero , VAR E: TipoCtoPuntos )ENTRADA: La óporc in comprendida ent re i y j de l a nube de puntos PSALIDA : La envolvente convexa de dicha óporc in de dicha nubeVARIABLES E1 , E2 : TipoCtoPuntos / / Las envolventes convexas en s i t uac iones in te rmed iasINICIO

SI j−i < 3ENTONCES E <−− PSINO

Envolvente_DyV ( P , i , ( i + j ) / 2 , E1 )Envolvente_DyV ( P , ( i + j ) / 2 + 1 , j , E2)MezclarEnvolventes ( E1 , E2 , j−i +1 , E)

FIN_SIFIN

PROCEDIMIENTO MezclarEnvolventes (VAR EI , ED : TipoCtoPuntos , n : Entero , VAR E: TipoCtoPuntos )ENTRADA: EI y ED, envolventes convexas de ñtamaos n y mSALIDA : La envolvente convexa EVARIABLES:INICIO

MenorTangente ( EI , ED, n , m, a , b )MenorTangente ( EI , ED, n , m, c , d )E <−− EI − a + 1 , . . . , c−1 + ED − d + 1 , . . . , b−1

FIN

PROCEDIMIENTO MenorTangente ( EI , ED : TipoCtoPuntos , n , m, a , b : Entero )ENTRADA: EI de ñtamao n y ED de ñtamao mSALIDA : e l segmento formado por a y bINICIO

a <− MasDecha ( EI , n )b <− MasIzda ( ED, m)REPETIR

aa <− abb <− nMIENTRAS NO ( TangenteMenor ( EI , n , a , b ) ) REPETIR

29

Page 30: Geometria computacional

2 La envolvente convexa y triangulación de polígonos

a <− (a−1+n ) mod nFIN_MIENTRASMIENTRAS NO ( TangenteMenor ( ED,m, a , b ) ) REPETIR

b <− (b +1 ) mod nFIN_MIENTRAS

HASTA ( aa=a AND bb=b )FIN

Para saber si ab es tangente a un polígono observemos los siguientes gráficos: queda comoejercicio la implementación de las funciones TangenteMenor y TangenteMayor.

El tiempo de ejecución de un algoritmo divide y vencerás depende en gran medida del compor-tamiento de la función de mezcla de cada pareja de diagramas polares. Cuando ésto se realiza entiempo lineal, como es este caso, sabemos que contamos con un algoritmo en tiempo O(n log n)(ver Sección 1).

2.2. Triangulación de polígonos

En el Tema 1 hicimos referencia por primera vez a la triangulación de polígonos. En esa ocasiónse hizo incapié de la necesidad de encontrar un algoritmo eficiente para realizar este cálculo,puesto que el dado en dicho tema posee un tiempo de ejecución poco eficiente.

En esta sección conseguiremos triangular cualquier tipo de polígono en tiempo óptimo O(n logn),para ello serán necesarios dos pasos diferentes: la partición de cualquier polígono en particionesmonótonas y la triangulación de cada una de estas porciones.

2.2.1. Polígonos monótonos

Un polígono monótono con respecto a la vertical es aquel que si se recorre con una línea hori-zontal bajando a lo largo del total del polígono, ocurre que sólo encontramos como máximo dosintersecciones del polígono con dicha recta. Si además no consideramos la existencia de aristashorizontales, entonces hablamos de polígono extrictamente monótono.

Intuitivamente hablando, un polígono monótono será aquel que no posee cúspides interiores,considerándo al vértice vi como cúspide si vi−1 y vi+1 están ambos arriba o abajo.

30

Page 31: Geometria computacional

2 La envolvente convexa y triangulación de polígonos

La ventaja de triangular un polígono monótono es más o menos intuitiva: al bajar una líneahorizontal imaginaria a lo largo de todo el triángulo y encontrarse con el vértice v i, se sabe que sudiagonal irá a un punto visible desde dicho punto. La idea es ir bajando paulatinamente vérticea vértice, bien por la izquierda, bien por la derecha, dibujando diagonales según el siguientealgoritmo.

ALGORITMO TriangulacionMonotonaENTRADA: El ípolgono S de ñtamao nSALIDA : El conjunto de Diagonales que t r i a n g u l a n e l ípolgonoINICIO

Ordenar ( S, n , p )L is taCrea ( l )l i s t a C r e a ( Diagonales )L is taMeteF ina l ( l , p [ 0 ] )L is taMeteF ina l ( l , p [ 1 ] )PARA j <− 2 HASTA n−1 REPETIR

SI Adyacente ( L i s t a I n i c i o ( l , p [ j ] ) AND NOT Adyacente ( L i s t a F i n a l ( l ) , p [ j ] )ENTONCES

v<− L i s t a S a c a I n i c i o ( l )MIENTRAS (NOT Lis taVac ia ( l ) ) REPETIR

v <− L i s t a S a c a I n i c i o ( l )L is taMeteF ina l ( Diagonales , v , p [ j ] )

FIN_MIENTRASLis taMeteF ina l ( l , v )L is taMeteF ina l ( l , p [ j ] )

SINOSI Adyacente ( L i s t a F i n a l ( l ) , p [ j ] ) AND NOT Adyacente ( L i s t a I n i c i o ( l ) , p [ j ] )ENTONCES

v<−L is taSacaFina l ( l )x<−F i n a l L i s t a ( l )MIENTRAS ( Angulo ( p [ j ] , v , x ) < Pi ) REPETIR

L is taMeteF ina l ( Diagonales , x , p [ j ] )v <− L is taF ina lSaca ( l )SI NOT Lis taVac ia ( l )ENTONCES x<−L i s t a F i n a l ( l )

FIN_MIENTRASLis taMeteF ina l ( l , v )L is taMeteF ina l ( l , p [ j ] )

SINOv<−L i s t a S a c a I n i c i o ( l )v<−L i s t a S a c a I n i c i o ( l )MIENTRAS NOT ( L is taVac ia ( l ) )

v<−L i s t a S a c a I n i c i o ( l )L is taMeteF ina l ( Diagonales , p [ j ] , v )

FIN_MIENTRASFIN_SI

FIN_SIFIN_PARA

31

Page 32: Geometria computacional

2 La envolvente convexa y triangulación de polígonos

FIN

En la siguiente figura podemos observar el conjunto de diagonales obtenidas tras la ejecución deeste algoritmo para el polígono monótono de ejemplo.

Veamos como funciona el algoritmo en sus primeros pasos para este ejemplo. Al ordenar lospuntos de mayor a menor obtenemos la numeración que vemos en la figura. Antes de entrar enel bucle, la lista l = s0,s1. Al entrar por primera vez en el bucle con j = 2, observamos que s2 esadyacente al final de la lista l (2a sentencia condicional) pero el algoritmo no construye aún dia-gonales porque el Angulo(s[2],1,0)>π por lo que la lista acaba siendo l = s0,s1,s2. Las siguientesiteraciones son iguales, hasta que para j = 4 se construyen las diagonales 1−4,2−4,3−4. Laidea básica del algortimo es construir diagonales con el comienzo de la lista l o con el final deésta , teniendo en cuenta que sólo se unen puntos visibles entre sí (ángulo <π) y que no sonadyacentes.

El tiempo de ejecución de este algoritmo es O(n log n). El proceso de ordenación de los vérticesya posee este orden de ejecución, por lo que dicho algoritmo no podría ejecutarse en menor tiem-po. Además habría que añadir un tiempo lineal, puesto que todas las operaciones del algoritmo,operaciones con el final y principio de la lista, el cálculo del ángulo, etc., se ejecutan en tiempoconstante. Tan sólo nos puede plantear un problema los bucles MIENTRAS, pero sin embargoaseguramos el tiempo lineal del proceso, puesto que todo vértice es procesado como mucho dosveces, uno cuando entra en la lista y otra vez cuando sale de ésta.

32

Page 33: Geometria computacional

2 La envolvente convexa y triangulación de polígonos

2.2.2. Partición de un polígono en componentes monótonas

La triangulación de polígonos monótonos desde luego deja de tener sentido si no es posibleparticionar cualquier tipo de polígono en particiones monótonas. En este apartado completa-mos el proceso de triangulación eficiente de polígonos dando un algoritmo capaz de encontrardiagonales tales que dividan dicho polígono en particiones monótonas.

Consideramos a un polígono y-monótono si para cada horizontal h, la intersección del polígonocon h es conexa, esto es, es un punto o el vacío. La definición para x-monótono es análoga.

Antes de ver el funcionamiento del polígono determinaremos los cinco tipos de vértices quepodemos encontrar:

Vértice comienzo: el vértice vi es de comien-zo si vi−1 y vi+1 poseen menor ordenaday su ángulo interior es menor que π.

Vértice final: el vértice vi es de final si vi−1 yvi+1 poseen mayor ordenada y su ángulointerior es menor que π.

Vértice Partición: el vértice vi es de particiónsi vi−1 y vi+1 poseen menor ordenada ysu ángulo interior es mayor que π.

Vértice Mezcla: el vértice vi es de mezcla sivi−1 y vi+1 poseen mayor ordenada y suángulo interior es mayor que π.

Vértice Regular: cualquier otro vértice no considerado anteriormente.

33

Page 34: Geometria computacional

2 La envolvente convexa y triangulación de polígonos

Utilizaremos la técnica de “línea de barrido” para encontrar las distintas particiones monótonas.La idea será localizar los vértices que rompen la monotonía, los de partición y los de mezcla.Desde ellos se lanzarán diagonales, el destino de éstos será también un objetivo primordial delalgoritmo.

Las estructuras de datos implicadas son las siguientes:

P: será un array conteniendo los vértices del polígono, ordenados como es habitual en sentidoantihorario.

Q: La línea imaginaria bajando por el plano se encontraría los puntos de P de mayor a menorordenada. Para no duplicar los puntos, y sobre todo por ventajas computacionales, Q seráun vector de tamaño n con los índices de P identificando los puntos ordenados de mayora menor ordenada.

T: Se trata de alguna estructura de datos con tiempo de acceso logarítmico. Almacenará losvértices ei, siendo ei = vi− vi+1, con excepción de en−1 = vn−1v0. El conjunto de ejes sealmacenan por la coordenada x, tanto de izquierda a derecha.

Ayu: Es un array que almacena en todo momento el vértice candidato para unir a los vérticesde partición y mezcla. Los valores podrán ir cambiando hasta que se localice el valorcorrecto.

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 : TipoPol igono ; VAR D: T ipoL i s ta )ENTRADA: El ípolgono P de ñtamao nSALIDA : El conjunto D de diagonales

INICIOOrdenar_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 hasta n−1 Repet i r

i <−Q( k )

34

Page 35: Geometria computacional

2 La envolvente convexa y triangulación de polígonos

EN CASO DE QUE T ipoVer t i ce (P, i ) SEA0 : ( ∗ Comienzo∗ )

L is ta Inser ta rOrdenado (T , i ,P)Ayu ( i ) <− i

1 : (∗ F ina l ∗ )Si T ipoVer t i ce (P , Ayu ( i −1))=2Entonces I n s e r t a r L i s t a ( D , i−Ayu ( i −1))L i s t a E l i m i n a r ( T , i−1)

2 : (∗Mezcla∗ )Si T ipoVer t i ce ( P , Ayu ( i −1))=2Entonces L i s t a I n s e r t a r ( D , i−Ayu ( i −1))L i s t a E l i m i n a r ( T , i−1)j <− L is taBuscar Izdo ( T , i )Si T ipoVer t i ce ( P , Ayu ( j ) )=2Entonces L i s t a I n s e r t a r ( D , i−Ayu ( j ) )Ayu ( j ) <− i

3 : (∗ó P a r t i c i n )j <− L is taBuscar Izdo ( T , i )L i s t a I n s e r t a r ( D , i−Ayu ( j ) )Ayu ( j )<− iL is ta Inser ta rOrdenado ( T , i ,P)Ayu ( i )<− i

4 : (∗ Regular∗ )Si I n te r i o rDecha ( P, i )Entonces

Si T ipoVer t i ce ( P , Ayu ( i −1))=2Entonces L i s t a I n s e r t a r ( D, i−Ayu ( i −1))L i s t a B o r r a r (T , i −1)L is ta Inser ta rOrdenado (T , i ,P)Ayu ( i )<− i

Sinoj <−L is taBuscar Izdo (T , i )

Si T ipoVer t i ce (P, Ayu ( j ) ) = 2Entonces L i s t a I n s e r t a r ( D, i−Ayu ( j ) Ayu ( j )<− i

FIN_SIFIN_SI

FIN_CASEFIN

El tiempo de ejecución del algoritmo anterior es óptimo. La ordenación de los vértices puederealizarse en tiempo O(n log n). Cada una de las n iteraciones de bucle se ejecuta en tiempologarítmico, el correspondiente a las operaciones de manejo de la estructura de datos T .

35

Page 36: Geometria computacional

3 Intersecciones

La detección de intersecciones constituye una de las primitivas geométricas fundamentales conmuy diversas aplicaciones. En realidad virtual o diseño de circuitos VLSI el manejo de intersec-ciones es fundamental. Pero existen otras áreas de interés más próximas a la Topografía comoson los Sistemas de Información Geográfica. En muchas ocasiones para hacer los mapas másmanejables y legibles, la información que contienen se divide en distintos tipos de mapas, ca-da uno especializado en carreteras, ciudades, ríos y montañas, densidad de población, etc. Lainformación geométrica subyacente en cada uno de estos mapas también puede considerarsediferente, así una carretera puede ser representada mediante una polilínea y un núcleo urbanopuede serlo mediante conjunto de polígonos. Sin embargo, cuando dos de estos mapas necesi-tan ser manejados al mismo tiempo (por ejemplo para conocer las carreteras que llegan a unaciudad), es necesario el manejo de intersecciones entre iguales o diversos objetos geométricos.

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 doselementos geométricos, únicamente conocer si existe dicha intersección. También podemos en-contrar una diferencia sustancial entre manejar un par de líneas o segmentos o hacerlo con unconjunto de ellos. De hecho, la realidad a veces necesita simular la forma de cualquier líneamediante una polilínea o conjunto de segmentos unidos a modo de cadena. La naturaleza de losobjetos también puede ser conveniente conocerla a priori, puesto que la intersección de polígo-nos convexos cuenta con un orden de ejecución menor que si se trata de polígonos generales.

3.1. Intersección de polígonos convexos

El tiempo de ejecución para conocer la intersección de dos polígonos cualesquiera es O(nm),siendo n y m el número de ejes de los dos polígonos. El resultado de calcular la intersección dedos polígonos cualesquiera podemos verlo en la siguiente figura:

36

Page 37: Geometria computacional

3 Intersecciones

Sin embargo, realizar esta operación con polígonos convexos puede hacerse en tiempo O(n+m).Existe una propiedad importante para la intersección de polígonos convexos: la intersección estambién un polígono convexo.

Denominaremos a A y B a los ejes que en cada momento se están ejecutando. En cada iteraciónse avanza el eje A o el B (siempre en orden inverso a las agujas del reloj) dependiendo deciertas reglas de avance. El objetivo es que dichos avances se vayan sincronizando en cuanto asu 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. Lasreglas de avance harán por ejemplo, que si B apunta hacia la línea que contiene a A, entoncesavanzamos B para buscar la intersección con A.

Denominaremos a H(A) como el semiplano cerrado a la izquierda de A y a H(B) como elsemiplano cerrado a la izquierda de H(B). Ocurre que AxB > 0 cuando el giro más corto degirar A hacia B es en sentido inverso a las agujas del reloj. Como por regla general los dosvectores no coincidirán en su inicio, imaginaremos sin embargo que así ocurre para localizar elgiro más corto. En el siguiente ejemplo, AxB > 0 puesto que observamos que hacemos un giroen 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 b∈H(A) A>0 b/∈H(A) B<0 a∈H(B) B<0 b/∈H(B) A

El método anteriormente descrito aparece a continuación. También aparece el pseudocódigo deotros subalgoritmos llamados por el algoritmo principal.

PROCEDIMIENTO IntersectaPol igonosConvexos (VAR P,Q: TipoPol igono ; n ,m: Entero )ENTRADA: P,Q de ñtamao n y mSALIDA :VARIABLES:CONSTANTES : Origen : ( 0 , 0 )INICIO

37

Page 38: Geometria computacional

3 Intersecciones

a<−0b<−0Dentro <− −1REPETIR

a1 <− (a+n−1) mod nb1 <− (b+m−1) mod mSubvector ( P [ a ] , P [ a1 ] , A)Subvector (Q[ b ] , Q[ b1 ] , B)ProductoX <− Area2 ( Origen , A , B)bHA <− IzdaSobre ( P[ a1 ] ,P [ a ] ,Q[ b ] )aHB <− IzdaSobre (Q[ b1 ] ,Q[ b ] ,P [ a ] )SI ( I n t e r s e c t a P[ a1 ] ,P [ a ] ,Q[ b1 ] ,Q[ b ] ,P)ENTONCES SI Dentro = −1

ENTONCES AvanA <− 0AvanB <− 0

FIN_SIDentro <− TestDentro ( aHB)

FIN_SISI ( 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_SIHASTA ( AvanA >= n AND AvanB >= m)

SI Dentro = −1ENTONCES ESCRIBIR " No ha habido ó i n t e r s e c c i n " ;

FIN

FUNCION TestDentro (H: Entero ) : óLgicoINICIO

SI H < > 0ENTONCES TestDentro <− 1SINO TestDentro <− 0

FIN

FUCION Avanza (VAR ab , Avd : Entero ; n : Entero ; Dentro : óLgico ; v : TipoPunto )INICIO

SI DentroENTONCES P i n t a r ( v )FIN_SIAdv <− Adv + 1ab <− (ab +1 ) mod n

FIN

38

Page 39: Geometria computacional

3 Intersecciones

PROCEDIMIENTO Subvector (VAR a , b , c : TipoPunto )INICIO

PARA i <− 0 HASTA 1 INCR + 1 REPETIRc [ i ] <− a [ i ] − b [ i ]

FIN_PARAFIN

En el siguiente ejemplo observamos un ejemplo de polígonos convexos.

En la siguiente tabla observamos el resultado tras aplicar el algoritmo. En la última columnaobservamos el avance de los ejes. Podemos comprobar que el recorrido conjunto de ambos ejespermite localizar todas y cada una de las intersecciones existentes.

A B AxB a∈H(B) b∈H(A) Avanza5-0 4-0 >0 F V A0-1 4-0 <0 V F B0-1 0-1 >0 F V A1-2 0-1 >0 F V A2-3 0-1 <0 V F B2-3 1-2 >0 F V A3-4 1-2 <0 V F B3-4 2-3 >0 V F B3-4 3-4 >0 V V A4-5 3-4 >0 V V A5-0 3-4 >0 V F B5-0 4-0

3.2. Intersección de segmentos

La intersección de segmentos es un cálculo muy importante por las repercusiones que tiene anivel de intersecciones en el mundo real. Podemos simular una carretera como un conjunto de

39

Page 40: Geometria computacional

3 Intersecciones

segmentos. Para saber donde se podría construir un puente podríamos computar el conjunto deintersecciones entre el mapa de carreteras y el mapa de ríos. Las operaciones realizadas a bajonivel en la aplicación informática que lleve a cabo este cálculo serán las de intersecciones desegmentos.

Puede realizarse siempre un algoritmo de fuerza bruta para realizar este cálculo utilizando paraello un tiempo O(n2) si supuestamente empleamos un número similar de ríos y de carreteras.Como es de imaginar este algoritmo procesaría todos los ríos con todas las carreteras, y siendopor tanto poco eficiente. Probablemente el número de intersecciones sea mucho menor al depotenciales puntos de intersección, por lo que podría buscarse un método alternativo que tuvie-ra por principio el procesar únicamente posibles intersecciones en segmentos que estén cerca,evitando así cálculos innecesarios.

La estrategia a seguir puede ser la de bajar una línea horizontal L de arriba hacia abajo por elplano de modo que se vaya tropezando tanto con un tipo de segmentos como del otro. Cada vezque L se encuentra con un segmento lo almacena en una lista ordenada de izquierda a derecha, yasí sucesivamente con todos y cada uno de los segmentos localizados. Para cada nueva intersec-ción y borrado en dicha lista se pregunta si la nueva situación provoca una intersección, siempreentre segmentos vecinos de la lista.

Emplear las estructuras de datos correctas en este método es fundamental para la eficiencia 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 tamaño de nx4 puntos, siendo cada fila los cuatropuntos que forman un segmento en el orden x0,y0,x1,y1, siendo siempre el punto (x0,y0)el extremo de mayor ordenada.

Q: Es la denominada cola de eventos que almacena el conjunto de vértices y de puntos inter-sección. Mantendrá los puntos extremos ordenados de mayor a menor ordenada. Cuandoen dicha lista se inserten dos puntos con la misma ordenada, se considerará primero el demenor abscisa. Será preferentemente una lista a un array porque deberá permitir insercio-nes.

T: Estructura de datos que simula el comportamiento de la línea imaginaria L. Mantendrá or-denados de izquierda a derecha los segmentos que en todo momento vaya atravesando,eliminado los ya procesados e insertándolos cuando se comienzan a atravesar. Esta estruc-tura de datos deberá permitir inserciones y borrados en tiempo logarítmico 1.

I: Cualquier tipo de estructura de datos que almacene las intersecciones localizadas.

La función ManejarEvento es la encargada de procesar cada uno de los nuevos extremos dela cola de eventos Q. Esta función sería llamada por el algoritmo EncontrarIntersecccion tal ycomo vemos a continuación.

1Por simplicidad, en las prácticas de este curso lo sustituiremos por una lista, aunque no cuente con tiempo deacceso logarítmico.

40

Page 41: Geometria computacional

3 Intersecciones

ALGORITMO Encontrar In te rsecc ionENTRADA: P , conjunto de segmentos en e l plano de tamanio nSALIDA : Conjunto I de in te rsecc iones de l planoINICIO

Ordenar ( P, n ,Q)I n i c i a l i z a r ( T)Tam <− ni <− 0MIENTRAS ( tam >1) REPETIR

ManejarEvento ( P,Q, i ,Tam)FIN_MIENTRAS

FIN

PROCEDIMIENTO ManejarEvento (VAR P: TipoConjuntoSegmento ; VAR Q: Array (2 , n ) de Enteros ;i , Tam : Entero ; VAR In te rsecc iones : TipoConjuntoPuntos ; VAR : Tam : Entero )ENTRADA: P de tamanio n ; Q de tamanio n ; i ópos i c i n de Q a procesarSALIDA : In te rsecc ionesINICIO

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 )Tipo <− Q( i , 1 )EN CASO DE QUE Tipo SEA

1 : L i s t a I n s e r t a r (U, k )0 : L i s t a I n s e r t a r (C, k )−1: L i s t a I n s e r t a r ( L , k )

FIN_CASEi <− i +1Tam <− Tam −1

HASTA NO ( IgualesCoordenadas (P( k , Tipo ) , P(Q( i , 0 ) ,Q( i , 1 ) )SI ( TamanioLisa (U) + TamanioLista (C) + TamaLista ( L ) ) > 1ENTONCES I n s e r t a r L i s t a ( In te rsecc iones , k )FIN_SIPARA l <− 0 HASTA TamanioLista ( L)−1

L i s t a E l i m i n a r ( T , ElementoLista ( L , l ) )FIN_PARAPARA l <− 0 HASTA TamanioLista (U) −1

L i s t a I n s e r t a r ( T , ElementoLista (U, l ) )FIN_PARASI Tamanio (U) + TamanioLista (C) = 0ENTONCES

s l <− BuscarL is ta Izdo ( T , k )s r <− BuscarDecho ( T , k )SI I n t e r s e c t a ( P , s l , sr , q )ENTONCES InsertarOrdenado (Q, q , 0 )

Tam <− Tam + 1FIN_SI

41

Page 42: Geometria computacional

3 Intersecciones

SINOSI TamanioLista (C ) = 0ENTONCES

s1 <− Pr imeroL is ta (U)s l <− BuscarL is ta Izdo ( T , s1 )SI I n t e r s e c t a ( P , s1 , s l , q )ENTONCES InsertarOrdenado ( Q, q , 0 )

Tam <− Tam +1FIN_SIs2 <− Pr imeroL is ta (U)sr <− BuscarListaDecho ( T , s2 )SI I n t e r s e c t a ( P , s2 , sr , q )ENTONCES InsertarOrdenado ( Q, q , 0 )

Tam <− Tam +1FIN_SI

SINOs l <− Pr imeroL is ta (C)sr <− Ul t imoL i s ta (C)In te rcambiarPos ic iones ( T , s l , s r )

FIN_SIFIN_SI

FIN .

Sin embargo, la función de intersección de segmentos desarrollada en el primer tema no es válidapara conocer el punto de intersección entre dos segmentos, sólo para saber si dicha intersecciónse produce.

FUNCION Interseccion_segment (VARA a , b , c , d : TipoPunto ; VAR p : TipoPunto ) : óLgico ;ENTRADA: Los segmentos ab y cdSALIDA : e l punto p s i hay ó i n t e r s e c c i nINICIO

denominador <− 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 denominador = 0 . 0ENTONCES Interseccion_segment <− f a l s os <− (a [ 0 ]∗ ( d[1]−c [ 1 ] ) +

c [ 0 ]∗ ( a[1]−d [ 1 ] ) +d [ 0 ]∗ ( c [1]−a [ 1 ] ) ) / denominador

t <− −(a [ 0 ]∗ ( c [1]−b [ 1 ] ) +b [ 0 ]∗ ( a[1]−c [ 1 ] ) +c [ 0 ]∗ ( b[1]−a [ 1 ] ) ) / denominador

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 Interseccion_segment <− verdadSINO Interseccion_segment <− f a l s e

FIN

42

Page 43: Geometria computacional

3 Intersecciones

En el siguiente ejemplo vemos un conjunto de segmentos en los cuales podemos encontrar unconjunto de intersecciones. Hay que tener en cuenta que el algoritmo también detecta las inter-secciones de los segmentos por sus extremos, ya que hay que tener en cuenta que los segmentospueden llegar desordenados y sin relación unos con otros.

43

Page 44: Geometria computacional

4 Localización de puntos y diagramas deVoronoi

4.1. Punto en polígono

El problema denominado punto en polígono se presenta cada vez que se pincha el ratón enpantalla. Si el polígono P sobre el que trabajamos es convexo, el problema puede solucionarseen tiempo O(logn). Pero el método más interesante ocurre cuando P no es convexo.

Para este caso utilizamos el siguiente método: si queremos saber si el punto q está dentro o fueradel polígono P trazamos una línea en cualquier dirección, por ejemplo utilizando la recta r iguala y = 0, x≥ 0 y entonces contamos el número de intersecciones que se producen. El punto q estádentro de P si el número de intersecciones es impar.

Para hacer más fácil el cálculo y utilizar una recta r válida para cualquier caso, hacemos coincidirel punto q con el origen de coordenadas de forma que la r pueda ser simplemente y = 0, parax≥ 0.

Para conocer el lugar justo de intersección utilizaremos la siguiente fórmula:

y− yi−1 = (x− xi−1)(yi− yi−1)/(xi− xi−1)

trasladamos la idea anterior al siguiente algoritmo en pseudocódigo que realiza el test de inclu-sión de punto en polígono. 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 sólo se tienen encuenta los cortes que se producen para x > 0.

44

Page 45: Geometria computacional

4 Localización de puntos y diagramas de Voronoi

FUNCTION PuntoEnPoligono (VAR P: TipoPol igono ; q : TipoPunto ; n : Entero ) : óLgicoENTRADA: El punto q que áest dentro o no de l ípolgono P de ñtamao nSALIDA : Verdadero s i q áes t dentro de P

Falso en caso c o n t r a r i oINICIO

PARA i <− 0 HASTA n−1 REPETIRPARA j <− 0 HASTA 1 REPETIR

P[ i , j ] <− P[ i , j ]−q [ j ]FIN_PARA

FIN_PARAcross <− 0PARA i <− 0 HASTA n−1 REPETIR

i 1 <− ( i +n−1) mod n s i e x i s t e i n t e r s e c c i o n SI ( ( ( P( i ,1 ) >0 AND P( i1 , 1 ) < = 0 ) ) OR

( ( P( i1 ,1 ) >0 AND P( i , 1 ) < = 0 ) ) )ENTONCES

despejamos l a x y hacemos y=0x <− P( i , 0 )∗P( i1 ,1)−P( i1 ,0 )∗P( i , 1 ) / ( P( i1 ,1)−P( i , 1 ) )

SI x > 0ENTONCES cross <− cross + 1FIN_SI

FIN_SIFIN_PARASI ( cross mod 2 ) = 1ENTONCES PuntoEnPoligono <− verdadSINO PuntoEnPoligono <− f a l s e

FIN .

El tiempo de ejección de este test de inclusión es lineal, como claramente indica la búsquedaexhaustiva de intersecciones de una recta con todas las aristas de un polígono.

4.2. Diagramas de Voronoi

4.2.1. Introducción

Para conocer de forma intuitiva el concepto de diagrama de Voronoi de un conjunto de puntosen el espacio, supongamos que asociamos a cada uno de estos puntos generadores el lugar delos puntos del espacio más cercano a cada uno de ellos. Veamos un ejemplo a continuación enel plano:

45

Page 46: Geometria computacional

4 Localización de puntos y diagramas de Voronoi

Se conoce el diagrama de Voronoi a partir del año 1629 y más tarde en el 1644 por Descartes. Laaplicación inicial que se le dio fue la contrucción espacial. Sin embargo, se le conoce con dichonombre 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 extrañar que uno de las primerasaplicaciones fuera la cristalografía. El resto de aplicaciones se descubrieron posteriormente, eldiagrama de Voronoi y la triangulación de Delaunay poseen aplicaciones inmediatas en distin-tas disciplinas como Antropología, Arqueología, Astronomía, Biología, Cartografía, GeometríaComputacional, Ecología, estudios forestales, Geografía, Geología, Marketing, Meteorología,física, fisiología, planificación urbana y regional, etc. Hoy por hoy el número de aplicacionessigue creciendo.

El concepto del diagrama de Voronoi nace en el siglo XVII y fue estudiado por Descartes, perose le conoce con este nombre desde principios del siglo XX. Una de sus aplicaciones iniciales fuela cristalografía, pero hoy se le conocen múltiples aplicaciones: en Minería, estudios de merca-do, Sociología, Cartografía, Antropología, Arqueología, Biología, Ecología, estudios forestales,Geografía, Meteorología, Física, Fisiología, planificación urbana y regional, etc.

En cristalografía el objetivo es la interpolación del espacio. En una reserva mineral se hacenagujeros para tomar muestras. Estos resultaban ser puntos generadores del diagrama de Voronoiy conocer así el área de interrelación entre diversos elementos. En estudios de mercado su utili-zación está muy extendida desde los años cuarenta del siglo XX. Por ejemplo, se puede suponerque un punto es la localización de un determinado negocio o comercio. Las regiones de Voronoique se generan pueden suponer el potencial de clientes que tendría abrir dicho negocio en esaubicación pudiéndose tener en cuenta aspectos como como el área de influencia o los medios detransporte.

El diagrama de Voronoi ha sido utilizado por ejemplo para determinar los puntos estratégicosdonde colocar puntos de observación para el control de incendios. El terreno es así dividido deforma 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 conla influencia a partir de los años setenta de la informática.

46

Page 47: Geometria computacional

4 Localización de puntos y diagramas de Voronoi

4.2.2. Definición

Un diagrama de Voronoi puede considerarse como el resultado de asociar a todas las locali-zaciones del espacio euclídeo con su miembro más próximo del conjunto de puntos según ladistancia euclídea.

Un polígono de Voronoi es un conjunto cerrado cuya frontera consiste en segmentos, semirectaso líneas infinitas que llamaremos ejes de Voronoi. Si dos polígonos comparten algún eje sedice que son adyacentes. Entonces, dado un conjunto de n puntos en el plano, se considera unpolígono o región de Voronoi V (pi) asociado al punto pi como sigue:

V (pi) =

x : |pi− x| ≤ |p j− x|, ∀ j 6= i

El conjunto de regiones asociadas a todos y cada uno de los pi anteriores constituye el deno-miando diagrama de Voronoi:

V = V (p1),V (p2), . . . ,V (pn)

4.2.3. Elementos del diagrama de Voronoi

Podemos considerar los siguientes elementos en el diagrama de Voronoi:

pi punto generador

e je es el conjunto de segmentos, semirectas o líneas infinitas que son frontera de una región deVoronoi a otra.

vértice un punto que comparte más de dos polígonoos de Voronoi

adyacentes dos regiones se dice que son adyacentes si comparten algún eje.

Los conceptos anteriores son extensibles a tres dimensiones, teniendo en cuenta que ahora lasregiones de Voronoi serían poliedros y los ejes serían polígonos.

4.2.4. Propiedades de diagrama de Voronoi

1. Todas las regiones de Voronoi son convexas o infinitas.

2. La unión de todas las regiones de Voronoi es el plano.

3. Un polígono de Voronoi es infinito si su generador pertenece a la envolvente convexa.

47

Page 48: Geometria computacional

4 Localización de puntos y diagramas de Voronoi

4. Para cualquier punto del plano, el punto generador más cercano es aquel que forma laregión polar donde dicho punto se encuentra.

5. Si se toma como centro de un círculo 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 unaregión de Voronoi. Pero si toca exactamente a dos puntos generadores, entonces dichopunto separa exactamente a dos regiones de Voronoi, o lo que es lo mismo, ese punto esparte de un eje de Voronoi. Pero si se puede dibujar una circunferencia que toque a treso más puntos generadores, entonces hablamos de un vértice de Voronoi, o lo que es lomismo, como el lugar de intersección de dos ejes de Voronoi.

6. Para cada vértice de Voronoi, existe un único círculo centrado en dicho vértice y que pasapor tres generadores (o más en el caso de que existan degeneraciones) y ocurre que dichocírculo es el mayor de todos los círculos que puede construirse sin que contenga dentro aotro generador distinto del tomado como centro del círculo.

7. El número de vértices de un diagrama de Voronoi en el plano cumple la siguiente propie-dad: nv−ne+n = 1, es decir, el número de vértices menos el número de ejes más el totalde generadores es igual a uno.

8. El número de ejes es igual a 3n−6, para n generadores.

9. El número de vértices es igual a 2n−4, para n generadores.

(Si el vértice v es un vértice de Voronoi, el punto p4 no puede estar ahí)

4.3. Triangulación de Delaunay

La triangulación de Delaunay posee la característica de ser una teselación del plano dual aldiagrama de Voronoi. En otras palabras: es posible construir la triangulación de Delaunay a partirdel diagrama de Voronoi. Para ello basta con unir todos aquellos generadores que compartan uneje de Voronoi, es decir, los generadores de regiones de Voronoi adyacentes.

Únicamente cuando el diagrama de Voronoi es degenerado, el paso anterior no devuelve unatriangulación sino una pretriangulación de Delaunay. Sin embargo, la región resultante es unpolígono inmediato de triangular.

48

Page 49: Geometria computacional

4 Localización de puntos y diagramas de Voronoi

4.3.1. Definición y propiedades

Una triangulación de Delaunay es un grafo dual al diagrama de Voronoi uniendo dos puntosgeneradores que comparten un eje de Voronoi; también uniendo aquellos puntos vecinos enregiones de Voronoi abiertas.

Los casos degenerados los encontramos cuando tenemos cuatro puntos alineados. En vez deobtener un triángulo se consigue un cuadrado, fácilmente triangulable.

Los ejes de Delaunay son los segmentos que definen los triángulos.

Encontramos además las siguientes propiedades:

1. Cada triángulo de Delaunay posee como vértices a los generadores del diagrama de Voro-noi.

2. La frontera de la triangulación de Delaunay es la envolvente convexa de los puntos.

3. El interior de cada triángulo no posee generadores. Una triangulación es de Delaunay siy sólo si todos los círculos que pasen por tres vértices de un triángulo de Delaunay sonvacíos.

4. Una triangulación de Delaunay es aquella que maximiza el mínimo ángulo, lo cual le haceser la mejor triangulación porque genera los triángulos más equiláteros posibles.

5. Una triangulación de Delaunay es única si no existen casos degenerados.

Vemos un ejemplo de construcción de la triangulación de Delaunay a partir del diagrama deVoronoi:

49

Page 50: Geometria computacional

4 Localización de puntos y diagramas de Voronoi

4.4. Métodos de construcción del diagrama de Voronoi

Existen numerosos métodos para construir el diagrama de Voronoi y por consiguiente su dual, latriangulación de Delaunay. En este apartado únicamente citaremos algunos de ellos, interesantessobre todo por tratarse de algoritmos óptimos y por estar muy extendidos.

4.4.1. Método Incremental

El método Incremental es uno de los más importantes debido a su simplicidad y porque su tiem-po medio de funcionamiento puede ser decrementado a O(n) mediante técnicas algorítmicas.Este método comienza con un diagrama de Voronoi simple con tres generadores y lo modificaañadiendo otros generadores uno por uno. En este proceso, cuando se añade un nuevo punto p sedetecta en primer lugar el polígono de Voronoi en el que se encuentra p, generado por el punto q.La inclusión de p en la región de q hace necesario el cálculo del bisector entre estos dos puntos.Este bisector cortará en dos puntos, w1 y w2 a la región de q. Estos puntos serán el origen paracontinuar construyendo bisectores entre q y el resto de sus nuevos vecinos hasta completar unnuevo polígono convexo, la nueva región de Voronoi de q.

Para que este algoritmo resulte realmente eficiente es preciso que la estructura de datos queacompañe al diagrama de Voronoi tenga información a cerca de las regiones adyacentes. De estemodo, una vez localizado un a q y construído el bisector, se pueda pasar de una región a sucontigua en tiempo constante.

Este método consta de un tiempo óptimo de construcción, de hecho, si las estructuras de datosson las apropiadas, podemos hablar de un tiempo O(n log n) de ejecución. Para cada punto qque se añade al diagrama de Voronoi necesitamos un tiempo logarítmico para su localización. Aeste tiempo se debería añadir el necesario para procesar la nueva región de Voronoi, tiempo queexceptuando ciertos casos puede considerarse constante.

4.4.2. Método Divide y Vencerás

El método Divide y Vencerás, aunque no es más eficiente que el anterior, da la seguridad detrabajar en tiempo O(n log n) 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 deaproximadamente el mismo tamaño hasta que dicho número es menor o igual a tres. A partir deeste momento la construcción del diagrama de Voronoi es trivial y por consiguiente puede cal-cularse en tiempo constante. El siguiente y sucesivo paso es la unión dos a dos de los diagramasde Voronoi conseguidos, siguiendo la misma secuencia establecida en el proceso de división.

Pero para que la unión de dos diagramas polares en uno solo sea posible, es necesario encontraruna cadena divisoria capaz de mezclar dichos diagramas polares.

A continuación quede reflejado el proceso en el siguiente algoritmo:

50

Page 51: Geometria computacional

4 Localización de puntos y diagramas de Voronoi

Algor i tmo DivideYVencerasEntrada : Una l i s t a P con los n generadores en orden c rec ien te de abscisaSa l ida : El diagrama de Voronoi cor respond iente

SI n<=3ENTONCES c o n s t r u i r e l diagrama de Voronoi d i rectamenteSINO hacer

Sea t l a par te entera de n / 2 y d i v i d i r P en Pi y Pd( par te izda y decha respect ivamente )

Cons t ru i r e l diagrama de Voronoi para PiCons t ru i r e l diagrama de Voronoi para PdMezclar l os dos diagramas a n t e r i o r es obteniendo e l diagrama de Voronoi de P

La construcción de esta cadena divisoria comenzará de abajo hacia arriba. El problema quesurge inicialmente es conocer cual de los dos primeros generadores participan en la creaciónde la envolvente convexa, si el del diagrama de la izquierda o el de la derecha. Para hacer estecálculo se necesitan conocer las dos envolventes convexas, y no sólo eso, también el mínimosoporte común a ambas tanto por abajo como por arriba. Este ejercicio es realmente similar alque se emplea en la técnica Divide y Vencerás para el cálculo de la envolvente convexa visto enel Capítulo 2 con un coste computacional del orden O(n) (ver figura 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 paraconvertirlos en uno solo.

Algor i tmo MezclarEnvolventesEntrada : Los diagramas de Voronoi de Pi y PdSal ida : El diagrama de Voronoi para PINICIO

Cons t ru i r l a envolvene convexa para Pi y PdEncontrar l a tangente menor comun a Pi y Pd que toca a ambos en los puntos

t i y td respect ivamenteSea w [ 0 ] un punto de l i n f i n i t o y que se une a l b i s e c t o r por t i y tdMientras no se alcanza l a tangente mayor ent re Pi y Pd

51

Page 52: Geometria computacional

4 Localización de puntos y diagramas de Voronoi

i <− i +1Encontrar a ai , punto de co r te de l b i s e c t o r con Pi , sea r i l a reg ion que alcanzaEncontrar a l punto ad que co r ta e l b i s e c t o r con Pd , sea rd l a reg ion que alcanzaSI a i t i ene menor ordenada que adENTONCES w[ i ] <− a iSINO w[ i ] <− adCalcu la r e l b i s e c t o r ent re r i y rd

FIN_MIENTRASñAadir l a nueva í lnea po l i gona l e l imiando todos los ejes de Pi que queden a l a

derecha deé sta y todos los de Pd que queden a l a i zqu ie rda .FIN

Como podemos observar en la siguiente figura, la cadena divisoria consiste en una polilíneaque comienza a construirse de abajo hacia arriba, construyéndose siempre como bisector de dospuntos, uno del diagrama de Voronoi izquierdo y otro del derecho. Cada vez que dicho bisectorintersecta con con un eje de Voronoi, dicha polilínea comienza a penetrar por una nueva regiónde Voronoi, región generada por otro punto. El cambio de trayectoria que sigue la polilínea estádeterminado por el bisector de los dos puntos que regentan las regiones polares atravesadas entodo momento.

4.5. Problemas que resuelve el diagrama de Voronoi o latriangulación de Delaunay

Como hemos citado anteriormente, son numerosos los campos de aplicación del diagrama deVoronoi. A continuación citaremos algunos de los problemas concretos que resuelve.

52

Page 53: Geometria computacional

4 Localización 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 pi de S ¿cuál es el lugar geométricode los puntos (x,y) en el plano más cercanos a pi que a ningún otro punto de S?

La solución a este problema es prácticamente la propia definición del diagrama de Voronoi.Cada pi genera una región de Voronoi que da respuesta al problema anteriormente planteado.Un ejemplo de aplicación directa es el problema de localizar la oficina de correos más próximaa cualquier punto donde nos encontremos.

El vecino más cercano: Dado un punto pi del conjunto P de tamaño n, es inmediato localizaral vecino de pi más cercano, puesto que una región de Voronoi suele tener un númeroinferior o igual a 6 vecinos. Teniendo en cuenta que dado un punto generador, conocer oacceder a sus regiones limítrofes se puede realizar en tiempo constante, el diagrama deVoronoi evita hacer búsquedas exhaustivas con coste lineal.

Una extensión de este problema consiste en el cálculo del vecino más cercano para cadauno de los pi ∈ P. Teniendo en cuenta que el diagrama de Voronoi se calcula en tiempoO(n log n), basta un tiempo lineal adicional para conseguir un grafo en el que cada puntoindique utilizando un vector, aquel punto que le resulte más cercano. La relación anteriorno tiene porqué ser biunívoca, es decir, si p j es el punto más cercano a pi, éste no tieneporqué ser el más cercano para p j .

El círculo más pequeño/grande: Este problema tiene especial interés en estudios de mercado.Supongamos que deseamos construir una nueva residencia tan lejos como sea posible delas n existentes en la actualidad. Este problema es similar a encontrar el círculo más grandeque no contenga a ninguno de los pi ∈ P que representan a los n puntos.

4.5.2. Interpolación espacial

El problema de la interpolación espacial utilizando teselaciones del plano o el espacio como sonla triangulación de Delaunay o el diagrama de Voronoi, pretenden conocer el valor de una fun-ción para cualquier punto de dicho espacio a partir del valor de una serie de puntos estratégicos,que son los generadores de las particiones anteriores.

Vecino más cercano: Este método de interpolación es sin duda el más sencillo y consiste enasignar como valor de la función para el punto p el mismo valor que su punto generadormás cercano, en otras palabras, si p pertenece a la región de Voronoi de punto s i, f (p) =f (si). Este tipo de interpolación puede valer sobre todo cuando los valores pueden medirseen una escala nominal, como es el tipo de vegetación o de roca

Vecino natural: Otra forma de conseguir el valor que tendría un punto cualquier p sería elde conocer todos aquellos vecinos naturales de p. Averiguar esta información no es másque resolver el problema de los vecinos más cercanos a un punto utilizando el diagramade Voronoi. Aplicaciones en este sentido son la identificación de átomos vecinos en el

53

Page 54: Geometria computacional

4 Localización de puntos y diagramas de Voronoi

espacio, moléculas o partículas en estructuras cristalinas y amorfas, etc. Ahora el puntode estudio p puede estar influenciado por dicho conjunto de vecinos, los cuales tambiénpuede llevar asociados distintos pesos de influencia

Métodos triangulares: Este método no es otro que el de realizar una triangulación sobre lospuntos generadores, que bien podría ser la triangulación de Delaunay, posteriormente lo-calizar el punto a estudiar p dentro de un triángulo, para finalmente calcular la influenciaque sus tres vértices pueden poseer sobre dicho punto.

Cuando el propósito de la interpolación es crear contornos a partir de los valores de unconjunto de datos irregulares, la triangulación proporciona ciertas ventajas con respecto almétodo de malla regular puesto que se adapta mejor a la disposición de los datos de entra-da. En el siguiente tema avanzaremos conceptos sobre las posibilidades de la triangulación(TIN) y de otras representaciones para representación de terrenos.

54

Page 55: Geometria computacional

5 Aplicaciones a los Sistemas de InformaciónGeográficos

Uno de los campos donde se aplica de forma más inmediata los avances en Geometría Com-putacional son los Sistemas de Información Geográfica. En este capítulo vamos a estudiar losdistintos modos de representación geográfica a nivel computacional. Cada uno de ellos es capazde representar los diferentes tipos de información como son montañas, ríos, ciudades, etc. Sinembargo, sus características propias de cada uno de ellos hacen a unos ser más válidos que otrospara aplicar ciertos algoritmos.

Estas representaciones son las líneas de contorno o isolíneas, los TIN y los Gibs. Veremos lascaracterísticas de cada uno de ellos, y así mismo el modo de conversión de unos tipos a otros.También estudiaremos cómo estas representaciones pueden dar información relevante sobre laorografía del terreno o los elementos geográficos presentes.

5.1. Modelos de representación de terrenos

5.1.1. El grid regular

El grid es una estructura que especifica valores en una teselación regular del domino, o lo quees lo mismo a nivel de representación interna, un array bidimensional. El dato asociado a cadaposición representa elevación para cada punto dentro de un cuadro, lo que no correponde a unafunción contínua.

El valor puede representar la elevación del centro del cuadrado o la media de éste. En este casose necesita hacer una interpolación para obtener el modelo de elevación. Un posible método deinterpolación para cualquier punto p diferente del central es usar una media con pesos de laelevación de los cuatro puntos alrrededor del punto p.

55

Page 56: Geometria computacional

5 Aplicaciones a los Sistemas de Información Geográficos

5.1.2. Las líneas de contorno

Cada línea de contorno representa una determinada elevación en el modelo. Algunas veces eltérmino de isolínea se usa cuando el modelo de representación no es más que la altura sobreel nivel del mar. Esta línea se carga como una secuencia de puntos (x,y). Esto representa unpolígono o cadena poligonal en la que se especifia la elevación. Se necesita una interpolaciónpara calcular la altura del subconjunto de puntos.

Las líneas de contorno se pueden cargar en listas doblemente enlazadas, todas asociadas al mis-mo valor.

5.1.3. La triangulación irregular del modelo de Red (TIN)

En un TIN, un conjunto de puntos finito es cargado junto con su elevación. No necesitan co-rresponder con un patrón determinado y la densidad puede variar. En estos puntos se da unatriangulación plana. Cualquier punto en el domino yace en un vértice, un eje o un triángulo. Siel punto no está en un vértice, entonces la elevación se obtiene por interpolación. Se trata de unmodelo lineal que aunque está capacitado para visualizarse como tridimensional.

Un TIN es una triangulación o partición plana del plano en triángulos. Para cada triángulo t, ejee y vértice v, existe un registro de datos. El registro de un triángulo t tiene 3 campos con punterosque apuntan a los registros de los 3 ejes incidentes a t. El registro de un eje e tiene 4 camposcon punteros, 2 a registros de los 2 triángulos incidentes y los otros 2 a los registros de vérticesincidentes. El registro de un vértice v tiene 3 campos, con valores de la x, la y y la elevación.

Esta topología permite realizar operaciones en tiempo constante, como encontrar las elevacionesde sus vértices, y además permite pasar de un triángulo a sus adyacentes también en tiempoconstante, permitiendo pasear a través de una línea recta de forma eficiente.

56

Page 57: Geometria computacional

5 Aplicaciones a los Sistemas de Información Geográficos

5.1.4. Modelos jerárquicos

Un modelo de terreno jerárquico es un modelo de terreno que lo representa en varios niveles deerror o varios niveles de imprecisión. La mayoría de estas representaciones se basan en TINs.Normalmente los TINs con más vértices tienen menos error pero son más caros de procesar. Unmodelo jerárquico de un terreno permite elegir la precisión sobre el estudio del terreno.

Los aspectos a destacar de un terreno jerárquico son:

1. Uso exceso de carga de datos por mantener información en los distintos niveles.

2. El modelo debe incorporar una búsqueda eficiente. Encontrar un punto en un terreno puedeser posible encontrando primero en el nivel más alto para luego localizarlo en niveles másbajos de detalle.

3. La triangulación deber estar bien formada usando una triangulación 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 característicsas morfológicas.

5.2. Acceso a TINs

La ventaja computacional de un TIN consisten en la posibilidad de recorrer completa o parcial-mente dicha estructura.

57

Page 58: Geometria computacional

5 Aplicaciones a los Sistemas de Información Geográficos

5.2.1. Recorrido de un TIN

Existe un viejo pero eficiente método para recorrer un TIN y llegar a todos sus vértices sinnecesitar una carga adicional y pasando por todos los triángulos el mínimo número de veces.Sea T un TIN cargado en una estructura descrita y sea v el vértice izquierdo inferior de T. Paracada triángulo nombramos cada eje de la siguiente manera:

In: si la línea conteniendo dicho eje separa el vértice v y el interior del triángulo. Si la línea quesoporta el eje contiene a v, el eje es In si el interior de t está a la derecha de la linea quesoporta el eje; se incluye también el caso cuando la línea es horizontal.

Out: si la línea contenida en dicho eje no separa el vértice v y el interior del triángulo, esto es,están al mismo lado. O cuando estando v en la misma línea del eje, el interior de t está ala izda.

Todos los triángulos poseen un eje In y dos Out o dos In y uno Out. Los ejes In representan el ejea través del cual el triángulo es atravesado. Para que el interior del triángulo sólo se considereuna vez se diferencian los dos tipos de ejes In. Sea un triángulo con dos ejes In, éstos dos ejescomparten un vértice y la línea entre este vértice y v separa en dos al triángulo. El eje In sobrela línea o a la izquierda es un eje In real, pero el otro es in-and-back. Aunque se trata de un ejede entrada, la transversal luego vuelve por el inmediantamente después. De igual manera paralos triángulos con dos ejes Out, uno de ellos, el que está a la izquierda de la línea formada por vy el vértice común a los dos ejes, es el primer eje Out. Para cada triángulo se puede conocer entiempo constante los ejes In/Out.

El algorimo comienza en v y pasa a la izquierda del rectángulo frontera. El algoritmo cruza ejesy toma la decisión de qué eje cruzar basándose sólo en la clasificación de ejes anteriores. Comohay dos tipos de triángulos 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 triángulo en la otracara 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 triángulo en la otra cara dee′. Repetir para e = e′ y t = t ′.

3.- Si e es un in-and-back de t, entonces t ′ es el triángulo 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 ′ eltriángulo al otro lado de e′. Repetir para t = t ′ y e = e′.

58

Page 59: Geometria computacional

5 Aplicaciones a los Sistemas de Información Geográficos

5.- Si t tiene dos ejes Out y e es el último, entonces e′ es un eje In de t y t ′ es un triángulo en laotra 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 triángulo al otro lado. Repetir parat = t ′ y e = e′.

Si no hay un triángulo en la otra cara, entonces volvemos por el mismo eje y al mismo triángulo,Y de nuevo este triángulo visita cada triángulo exactamente tres veces, uno para cada tipo devértice.

5.2.2. Acceso eficiente 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 fácil porque setrata de una estructura de acceso secuencial con apuntadores y es necesario hacer una búsquedapara encontrar el triángulo que contiene al punto en cuestión. Esto es desde luego ineficiente.Los tipos de acceso son tres:

Acceso usando quadtrees

Usando quadtrees o R-trees se puede acceder eficientemente a un lugar o punto en un TIN.Un quadtree se maneja usando búsquedas en un árbol de grado cuatro, lo que implica una car-ga de datos bidimensional. Representa una descomposición recursiva en un gran cuadrado (querepresenta la raíz) en cuatro subcuadrados. Cada uno de estos cuatro cuadrados vuelve a descom-ponerse en cuatro y así sucesivamente. Se para cuando la porción de TIN dentro de un cuadradoes adecuada.

Una hoja del árbol posee un puntero al registro del triángulo que contiene al centro del cuadrado.Desde el registro del triángulo podemos pasear en la estructura hasta localizar el registro deltriángulo que contiene el punto deseado.

59

Page 60: Geometria computacional

5 Aplicaciones a los Sistemas de Información Geográficos

Acceso usando localización plana de puntos

En Geometría Computacional se han desarrollado muchos métodos eficientes para determinarqué región de una subdivisión contiene un determinado punto. Para un TIN con n triángulos, esposible construir una estructura de orden O(n) que permite una localización en O(n log n).

Jump-and-Walk

Es la estrategía más simple. Necesita muy poca carga de datos adicional, así que supone lamejor elección en la práctica. Supongamos que el acceso a una estructura TIN es proporcianadomediante un puntero a alguna sección. La idea es atravesar el TIN mediante una línea recta desdeel punto de acceso al punto buscado. De esta forma encontramos menos triángulos que con labúsqueda exhaustiva. El tiempo de búsqueda puede ser aún más pequeño empezando por másde un punto. Entre todos elegiremos el punto de comienzo como aquel más cercano al buscado.

Para el caso de tener un grid en un array bidimensional con un puntero a cada entrada en unTIN, el puntero de acceso al triángulo estará contenido en el grid regular. Este primer esquemaes bueno en la mayoría de las situaciones prácticas. Si hay partes del TIN donde hay muchostriángulos, entonces el esquema no es tan bueno.

Un segundo esquema es elegir m puntos p1...pm del conjunto de vértices del TIN de forma alea-toria, y cargar una copia de éstos en una lista desordenada. Eligiendo los puntos de los vérticesdel TIN de modo que aquellas regiones que contienen muchos triángulos también poseerán mu-chos accesos. Con cada punto pi, 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 más cercanoa q en tiempo O(m), y entones comenzamos a trazar la línea pi−q, comenzando con el triánguloque contiene a pi. Ocurre que la elección m = c ·n1/3 para cada constante c, es bastante buena.

5.3. Conversión entre modelos de terrenos

En muchas ocasiones el modelo obtenido depende del método de captación del terreno. Si loscontornos de un mapa se toman a mano aunque lo habitual es obtener la información medianteuna foto, intérpretándose de forma automática.

60

Page 61: Geometria computacional

5 Aplicaciones a los Sistemas de Información Geográficos

En muchas ocasiones es necesario transformar el formato del terreno, por ejemplo un grid nece-sita mucha información y mucho tiempo de proceso, mientras que con miras a la visualización,las líneas de contorno necesitan ser interpretadas tarde o temprano. Por tanto, la conversión entreTINs en grids o líneas 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 información aTIN consistiría en triangular la nube de puntos. Puede usarse la triangulación de Delaunay por-que forma los triángulos de mejor calidad. Si la interpolación de esta triangulación no es apro-piada pueden usarse métodos de interpolación más avanzados como interpolación natural delvecindario (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 funciónde interpolación de modo que se obtenga como máximo un error. Pero esto puede no ser sufi-ciente con los puntos de P y se necesiten más. Lo ideal sería siempre usar cuantos menos mejor.Para la elección puede hacerse usando la heurística. También puede ocurrir que sólo una partedel conjunto P puede ser necesario. En cualquier caso construir un TIN con un máximo errorpermitido y con el mínimo número de puntos posible es un problema NPduro.

5.3.2. De Grid a TIN

Es un caso especial de conversión de puntos a TIN. Un grid puede ser triangulado de forma regu-lar, aunque la mayoría de los algoritmos lo que hacen seleccionar ciertos puntos para añadirlosa la triangulación.

Un modo de hacerlo es descartar puntos de forma incremental en vez de hacer un preprocesa-miento. Por último hay métodos que sólo comienzan con la triangulación de las cuatro esquinasy luego añaden puntos refinando y parando cuando los triángulos se aproximen al grid. Porúltimo otro método detecta superficies con características específicas etc.

Veamos algunas representaciones de terrenos en las que varia la carga de datos y de una repre-sentación constante o adaptativa.

61

Page 62: Geometria computacional

5 Aplicaciones a los Sistemas de Información Geográficos

62

Page 63: Geometria computacional

5 Aplicaciones a los Sistemas de Información Geográficos

La heurística de bajada (The drop heuristic)

Consiste en descartar vértices para quedarnos con menos puntos. Cuando se elimina un vérticetambién lo hacen sus ejes asociados y aparece un polígono. Para obtener de nuevo una triangu-lación se usa Delaunay.

Para decidir cuales son los puntos a eliminar, cada vértice se elimina temporalmente, entoncesse determina la distancia vertical entre el punto eliminado y el nuevo TIN. Esta distancia verticalpuede verse como el error introducido por el borrado. Una vez visto el error se vuelve a introducirel punto y se hace lo mismo con otro vértice. Después de hacer todo esto se eligen los puntosque introducen menos error, y así hasta detener el error preespecificado.

Si todos los vértices en el TIN se procesan en tiempo constante, ayudando al proceso con árbolescuya intersección/borrado es de O(log n), sólo se necesita un tiempo final de O(n log n).

Refinamiento Incremental

El siguiente algoritmo toma un grid y un máximo error E como entrada. En contraste con elalgoritmo anterior, este sí garantiza que el TIN final tiene un error de al menos E. Se comienzacon un TIN de pocos vértices y se añaden puntos para obtener el menor error E.

1. Sea P el conjunto de puntos intermedios de celdas del grid con su valor de evaluación.Tomar las 4 esquinas y eliminarlas de P y ponerlas en S.

2. Hacer la triangulación de Delaunay DT(S) de S.

3. Determinar para todos los punto de P en qué triángulo de DT (S) caen. Para puntos enejes podemos elegir cualquiera de ellos. Cargar con cada triángulo de DT (S) una lista depuntos de P que caigan en él.

4. Si todos los puntos de P están aproximadamente con un error de como máximo E porel actual TIN, entonces el TIN es aceptado y el algoritmo para. Sino, toma el punto conmáximo error, lo elimina de P y lo añade a S. Continúa en el paso 2.

Este algoritmo puede trabajar en tiempo O(n logn)

63

Page 64: Geometria computacional

5 Aplicaciones a los Sistemas de Información Geográficos

5.3.3. De líneas de contorno a TIN

Las líneas de contorno son básicamente la digitalización de los contornos de los mapas y su con-versión a TIN es muy útil. Una línea de contorno es una estructura en forma de vector, de hecho,es una división plana donde a los vértices y las líneas se les asigna la elevación del terreno pordonde pasa dicha línea. Para convertirlos a TIN, es obvio triangular todas las regiones, esto es,triangular entre las líneas de contorno. Cada región puede verse como un polígono con agujeros,y hay montones de algoritmos para triangular esto.

En vez de usar cualquier triangulación, es buena idea usar la de Dalaunay. Pero la entada es unconjunto de segmentos, no de puntos. Puede usarse un tipo de triangulación que intenta seguirla triangulacion de Delaunay al máximo.

5.4. Computación matemáticas en terrenos

En muchas aplicaciones es usual hacer cosas como añadir o eliminar datos de la representaciónde un terreno, o cuadrar la elevacion de un terreno. Supongamos que los datos de dos terrenosrepresentan la altura sobre el nivel del mar y la profundidad sobre la superficie del agua. Unejemplo para cuadrar y cubicar terrenos es considerar la erosión del viento. Partículas de undeterminado tamaño pueden ser arrastradas por el viento y llevadas a otros lugares. Para modelarla erosión por el viento, necesitamos datos de la velocidad del viento en las superfices, quepuede verse como datos de elevación y modelado por un grid o un TIN. Cuadrar estos datos deelevación de un modelo y determinar la capacidad del viento para erosionar es un hecho usadoen muchas simulaciones.

5.4.1. Sumar y restar terrenos

Supongamos que tenemos dos TIN, T1 y T2 en los cuales queremos añadir la información deelevación en ellos. La sustracción sería un proceso igual pero de signo negativo. La adición enTINs puede ser determinada exactamente y cargada en un nuevo TIN, porque básicamente con-siste en la adición de funciones lineales, que de nuevo producen una función lineal. La adición

64

Page 65: Geometria computacional

5 Aplicaciones a los Sistemas de Información Geográficos

se hace realizando una superposición de T1 y T2. Hay muchos algoritmos para ello, siendo tri-vial finalmente triangular y obtener el nuevo TIN. Ahora cada vértice que originalmente estabaen T1 tiene su altura más la altura interpolada de T2, igualmente ocurre en T2 con respecto aT1. Un posible algoritmo trabaja en O(n + k), con n igual al número de vértices de T 1 y T2 yk el número de vértices en el solapamiento. El valor de k es como mucho n2, pero más loa máshabitual es que sea lineal.

5.5. Computar líneas de contorno

Una de las estructuras más útiles procedentes de una elevación digital de un terreno son las líneasde contorno. Son probablemente las más útiles para visualizar los datos de elevación. Cuandouna nueva construcción debe determinar el lugar para realizarse, uno de los requerimientos puedeser que esté en una elevación por debajo de los 1000 metros. Otra pregunta puede ser la deencontrar todos los objetos geográficos de un cierto tipo en una cierta elevación, por ejemploencontrar todos aquellos campos de maíz que reciben menos de 255mm de precipitación anual.En este caso se utilizarían las líneas de contorno de terrenos que marquen la precipitación. Laslíneas de contorno pueden ser un conjunto de segmentos concatenados con una determinadaelevación. Usaremos dos métodos para determinar las líneas de contorno en un TIN. El primerosimplemente consiste en escanear el TIN para determinadas líneas de contorno y el segundorealiza un preprocesamiento para encontrar líneas de contorno más eficientemente.

5.5.1. Computación directa de líneas de contorno

Observar que todos los vértices de la línea de contorno pertenecen a ejes o vértices de un TIN, ytodos los segmentos de una línea de contorno lo hacen a triángulos o ejes del TIN. Asumimos queno hay triángulos horizontales en la elevación de la cual queremos conocer la línea de contorno.Esto se fuerza como sigue: supongamos que se necesitan las líneas de contorno con elevaciónZ, y en algún momento un triángulo horizontal t con elevación Z es localizado. Entonces sólotomamos los ejes de t para los cuales los otros triángulos incidentes tienen un vértice mayor queZ, lo que consigue trazar líneas de contorno con un valor muy poco por encima de éste.

Dado un TIN y un valor de elevación Z, hay un camino muy simple para encontrar las líneas deelevación. Atravesar el TIN completo y para cada triángulo determinar si contiene un segmentode la línea de contorno. Esto necesita O(n) para un TIN con n triángulos, aunque obtenemos laslíneas de contorno en orden arbitrario, no de forma ordenada. Podemos mejorar el proceso pre-procesando los segmentos que fueron encontrados por el algoritmo trivial, ordenándolos por las

65

Page 66: Geometria computacional

5 Aplicaciones a los Sistemas de Información Geográficos

coordenadas. Sabemos que todos los puntos extremos que son compartidos entre dos segmentosson adyacentes. Así se van montando las líneas de contorno. Si las líneas de contorno contienenk segmentos, el tiempo final de cómputo puede ser de O(k logk +n).

La segunda forma para obtener las líneas de contorno ordenadamente es trazar cada línea decontorno directamente del TIN. Si el TIN se carga en una estructura topológica, la transversal deuna línea de contorno desde un punto de partida puede hacerse fácilmente en tiempo lineal delnúmero de segmentos en la línea de contorno. Queda encontrar todos los puntos de comienzo.Si el TIN posee bits de marca cargados con los registros de los ejes o triángulos, entonces seinicializarían todos los bits de marca. Para cada triángulo del TIN, se determina si su bit demarca está inicializado y contiene un segmento de las líneas de contorno. Si es así, se comienzatrazando la línea de contorno y se pone la marca de todos los triángulos que son atravesados.Se para al encontrar un círculo. Luego se comienza con otro triángulo. Después de chequeartodos los triángulos se inicializan de nuevo las marcas. Se necesita sólo O(n) pero un bit más dealmacenamiento.

5.5.2. Preprocesamiento para líneas de contorno.

La fuerza bruta es un algoritmo que no es satisfactorio cuando el número de triángulos quecruzan la elevación Z es mucho menor que el número total de triángulos del TIN. Es mejorusar un preprocesamiento y construir una estructura de datos y preguntar por la elevación de laslíneas de contorno que se necesitan. Este razonamiento permite varios métodos, como el llevadoa cabo utilizando el árbol de intervalos. Se trata de una estructura de datos geométrica que cargaun 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 raíz S que carga un valorde cambio s. Sea Iizda el subconjunto del intervalo (a,b) para los cuales b <= s, sea Idechael subconjunto de intervalos de (a,b) para a >= s y sea IS el subconjunto de intervalos cona < s < b. Los subconjuntos Izda, Idecha e Is forman una partición de I. El subconjunto IS secarga en dos listas lineales asociadas con el nodo S. Una lista LS carga IS en valores crecientesdel punto extremo Izdo y la otra lista RS carga IS en valores decrecientes del valor final derecho.Si Iizdo no está vacío, entonces el subárbol izquierdo de S define de forma recursiva como unárbol de intervalos en el subconjunto Iizdo. Lo mismo para Idecho. Cualquier intervalo de Ise carga exactamente dos veces. Un árbol de intervalos para n elementos usa O(n) como cargade datos, y puede construirse en O(n log n) y si los valores de partición están balanceados, laprofundidad es de O(logn).

66

Page 67: Geometria computacional

5 Aplicaciones a los Sistemas de Información Geográficos

El algoritmo sigue un proceso de búsqueda a lo largo del árbol desde la raíz hasta las hojas. Seaq el valor en cuestión y queremos encontrar todos los intervalos conteniendo a q. En cada nodoS que es visitado, se compara q con el valor de partición s cargado en S si LS o Rs es buscado, yse determina en qué subárbol seguir. Si q < s se busca en la lista LS y te toman los intervalos quecontienen el valor q. Así, podemos atravesar LS y procesar intervalos hasta que no contengan elvalor q. Después el proceso de búsqueda sigue en el subárbol izquierdo.

Si q > s, entonces se busca en la lista RS y se procede con el subárbol derecho. Se reprocesanlos intervalos en O(log+k), donde k es el número de intervalos procesado.

5.6. Características topográficas

La geomorfología estudia la forma de la tierra. Sirve para reconocer automáticamente ciertosterrenos. Las características del terreno pueden tener 0, 1 y 2 dimensiones. Discutimos las másimportantes.

5.6.1. Puntos en terrenos

Cualquier punto en un terreno posee una elevación. Según lo que ocurre con los vecinos sedefine un gradiente. El gradiente en un punto es el máximo ratio de cambio en la elevación y deposición xy en este punto. Matemáticamente, es el valor máximo de la derivada en este punto.

El aspecto de un modelo de elevación es la dirección de campo en la cual la derivada direccionales máxima. En un mapa de aspectos se puede ver qué cara de la colina da hacia el sur. El aspecto

67

Page 68: Geometria computacional

5 Aplicaciones a los Sistemas de Información Geográficos

de un modelo de elevación no es un modelo de elevación en sí mismo, es una función con dosvariables RxR a cada escala circular (−π,π). Esta función está indefinida en puntos sobre laparte horizontal del terreno. La combinación de gradientes y aspectos es necesaria para predecirla forma de las colinas en los mapas.

En el terreno hay 3 tipos de puntos más importantes que el resto: hoyo (pits), cumbres (peak) ypuntos de paso (passes). Una cumbre es el punto mayor en el vecindario. Un hoyo es aquel queno encuentra vecinos menores. Un punto de paso es aquel punto donde localmente se encuentran4 o más diferentes partes de las líneas de contorno.

Estos puntos describen la forma del terreno. Pueden identificarse todos los de paso y atravesar elterreno en la dirección más descendente y ascendente hasta alcanzar cumbres u hoyos. Los ca-minos atravesados definen una partición del terreno en regiones, en las cuales uno puede esperarque posean características geomorfológicas similares.

5.6.2. Valles y Sierras

Los valles son unidimensionales en un TIN. Podemos definir un eje en un valle si al menos untriángulo incidente tiene su normal hacia el eje, y el otro tiene su pendiente normal hacia eleje o paralelo a él. Podemos decir lo mismo para las cordilleras. Otras definiciones poseen ladesventaja de que las líneas del valle pueden ser interrumpidas.

5.6.3. Curvaturas

La curvatura es medida en terrenos en una sección horizontal o vertical de éste. Estas curvaturasespecifican si el terreno es convexo, cóncavo o llano. Para superficies suaves, la convexidaddepende del signo de la segunda derivada en la sección. La mayoría de los lados de una colinason de perfil convexo cerca de la parte superior y de perfil cóncavo cerca del fondo.

Para un grid se toman muestras de pixeles 3x3 eligiendo un interpolador para los 9 píxeles yejecutando la curvatura del plano y del perfil de la superficie interpolada en el centro.

En un TIN cada eje puede ser visto como llano, convexo o cóncavo. Se clasifican los triángulosde acuerdo al tipo de ejes incidentes. Una región convexa es una consistente sólo en triángulosen los cuales todos los ejes incidentes son convexos. Lo mismo podemos decir para el resto. Lostriángulos incidentes a triángulos de diferentes tipos se definen como triángulos silla (collados).Así se detectan qué regiones de curvatura uniforme se atraviesan fuera del TIN en tiempo lineal.

68

Page 69: Geometria computacional

5 Aplicaciones a los Sistemas de Información Geográficos

Pero el TIN no diferencia entre planos y perfiles. Una región de perfil convexo y de plano cón-cavo se define tipo silla. Para obtenerlos del TIN se define la curvatura plana como sigue en elvértice v. Si v es una cumbre la curvatura del plano es convexa. Si v es un hoyo, la curvatura delplano es cóncava. Si v es un punto de silla, la curvatura del plano es indefinida. En todos los otroscasos la curvatura plana de v es determinada por la línea de contorno a través de v. El vértice ves incidente por la línea de contorno a través de v. El vértice v es incidente a dos segmentos s ys′ en dicha línea de contorno. Cuando se atraviesa la línea de contorno con el terreno más alto ala izquierda y el más bajo a la derecha, entonces v es de plano convexo si la línea de contornohace un giro izquierdo en v. Si lo hace derecho, v es de plano cóncavo y si no gira entonces esde plano llano. Los nodos de silla deben excluirse porque 4 segmentos de la línea de contornoencuentran un vértice de silla.

Definimos la curvatura de perfil en un vértice v como sigue: si v es una cumbre, el perfil enconvexo. Si v es un hoyo, el perfil es cóncavo. Si v es un punto de silla, la curvatura del perfiles indefinida. Para definir la curvatura del perfil en otro vértice v debemos seleccionar un planovertical a través de v, separando s y s′ y hacer equivalente el ángulo con ambos. Consideremos laintersección del plano vertical con el terreno en v, que es un perfil. Podemos definir convexidad,concavidad y llanura en el perfil de forma obvia.

Para obtener regiones de esta información usaremos interpolación. Para cualquier punto de untriángulo o eje, definimos un plano o perfil para que sea la misma que la curvatura del vérti-ce más cercano. Esta interpolación del vecino más cercano induce un diagrama de Voronoi enlos vértices del TIN, excluyendo los vértices de silla. Regiones adyacentes que tienen la mis-ma curvatura se obtienen borrando las fronteras. El resultado es un terreno partido en regionesde curvatura uniforme en plano y perfil. El diagrama de Voronoi de n puntos se consigue enO(n log n).

69

Page 70: Geometria computacional

5 Aplicaciones a los Sistemas de Información Geográficos

Este mecanismo puede suplementarse con un perímetro de escala de pendiente. Por ejemplo lacurvatura en v, en vez de mirar el ángulo de los segmentos en la línea de contorno incidente a v,localizamos dos puntos p y p′ en su línea de contorno a una cierta distancia de v. Esta distanciaes un perímetro dependiente de la escala. Definimos el ángulo < pvp′ y decidimos la curvatura.Esto puede causar pequeñas concavidades.

5.6.4. Información de drenaje

Cualquier terreno introduce más o menos el flujo natural del agua. El agua siempre fluye en ladirección de la gravedad: las colecciones de agua forman ríos. Cuanto más hacia abajo esté el río,más agua lleva. Es posible establecer o predecir los ríos de agua con un modelo de elevación. Lacolección de estos arroyos y ríos se llama red de drenaje. Sólo consideraremos cómo la formadel terreno influye en el flujo del agua. El área de hidrología también incluye asuntos comopermeabilidad, flujos de subsuperficie, evaporación, etc.

Generalmente, la red de drenaje puede verse como un grupo de conexiones acíclicos en las quelas uniones son dirigidos a los hoyos del terreno. Cada red conectada es también un sistema deríos, y parte del terreno que darán en otros ríos 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. Después de tratartodas las subdivisiones, los pixeles no anotados juntos forman la red de drenaje. Los mapasproducidos por este método sufren de canales interrumpidos y de puntos aislados.

Otros métodos modelan la acumulación de agua de un terreno. Se define para cada pixel eldrenaje del vecindario en las 8 pixeles de alrededor como el más descendente. Este vecino sesupone único. Un hoyo no posee dirección 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 haciaabajo en los vecinos de drenaje hasta que finalicen en los hoyos. Manteniendo contadores para

70

Page 71: Geometria computacional

5 Aplicaciones a los Sistemas de Información Geográficos

determinar para cada pixel cuantas unidades de agua fluyen a través de él, la red de drenajepuede ser definida. Consiste en aquellos pixeles para los cuales el contador es mayor que unbien conocido umbral. Tratando los pixeles en orden de la elevación descendente, el métodorequiere O(n2 log n) en un grid de (nxn). El método necesita de una carga cuadrática adicional.

La idea de acumulación resuelve el problema de canales interrumpidos. Si algún pixel pertenecea la red de drenaje porque su contador exceda el umbral, entonces el camino completo a lo largode los vecinos de drenaje hacia un hoyo también deben ser parte de la red de drenaje. La idea deacumulación también ayuda a definir bases de drenaje. Porque el camino desde cualquier pixelpuede ser trazado hacia un hoyo; es posible determinar que píxeles drenan en un hoyo. Así quees posible saber las partes del terreno que drenan en un simple hoyo.

La red de drenaje de un TIN

Definen la red de drenaje como los ejes del valle del TIN. Esta definición sufre de las posiblesinterrupciones de las cadenas conseguidas, que pueden finalizar en puntos distintos de los hoyos.Por tanto no existe el concepto de flujo.

Así que se ha demostrado que la idea de acumulación puede llevarse a un TIN. En un TIN noes buena idea asignar agua a triángulos como se hacía en los píxeles. Pero la dirección del flujopuede ser convenientemente de un punto en un TIN como la dirección de mayor descenso. En elinterior podemos necesitar elegir una dirección si hay más de una dirección de mayor descenso.Una vez definida la dirección del flujo, los caminos de flujo son trazados y uno puede descubrirdonde se unen los flujos. Es natural definir para cada punto del terreno, el área de la región desdeel cual los caminos de flujo van a través de ese punto. Para muchos puntos del TIN, este área es 0porque no hay una región bidirecional. Pero hay también puntos que reciben agua de una regióncon área positiva. Se define la red de drenaje como aquellos puntos en el terreno que recibenagua desde una región cuya área excede un cierto umbral. Estudiaremos el caso donde el umbrales 0. Esto incluirá todas las redes de drenaje para mayores valores de umbral.

Las características de esta red de drenaje es que la red consiste de todos los valles y exactamentede todos los caminos desde sus más bajos vértices. Esto nace de la idea de que el agua sólo puedepermanecer acumulada entre valles. La red de drenaje mezcla puntos donde dos o más cadenasse unen y continúan juntas. Estos puntos de mezcla son también vértices del TIN, o puntos enejes del valle. Como asumimos que a cada punto del TIN la dirección del flujo es única, losstreams no pueden cambiar.

71

Page 72: Geometria computacional

5 Aplicaciones a los Sistemas de Información Geográficos

La complejidad de la red de drenaje es al menos lineal en el número de ejes del TIN. Es conside-rablemente menos obvio que el tamaño de la red de drenaje está bajo la segunda definición. Enel peor de los casos encontramos una complejidad cúbica. Pero un estudio empírico determinaun 20% más que la definición del O(n).

Para computar la definición de red de drenaje por la primera definición se identifican todos losvalles y se siguen los caminos del flujo en sus menores vértices hacia los hoyos. Como loscaminos de flujo puede mezclarse, podemos trazar cualquier flujo desde un punto donde otroflujo acaba de llegar. Así cuando un flujo es trazado, se marca en el terreno para asegurarse queel mismo camino de flujo no sea trazado una y otra vez. El resultado final necesita O(n + k),donde k es la complejidad de la red de drenaje.

72

Page 73: Geometria computacional

Bibliografía

[1] M. Berg, M. Kreveld, M. Overmars, O. Schwarzkopf. Computational Geometry, Algorithmsand Applications. Springer, 1997.

[2] M. Kreveld, J. Nievergelt, T. Roos, P. Widmayer. Algorithmic Foundations of GeographicInformation Systems. Springer, 1997.

[3] J. O’Rourke. 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