Intersección de segmentos de línea

Documentos relacionados
Algebra lineal y conjuntos convexos

Ángulos complementarios Un par de ángulos son complementarios si la suma resultante de sus medidas es.

Capítulo 2: Inducción y recursión Clase 2: El principio de Inducción Fuerte

Ruta más Corta con una sóla Fuente de Inicio (Single-Source Shortest Paths) DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS COMPUTACIONALES INAOE

Tabla de Símbolos. Programación II Margarita Álvarez

Unidad 2: Ecuaciones, inecuaciones y sistemas.

En la notación C(3) se indica el valor de la cuenta para 3 kilowatts-hora: C(3) = 60 (3) = 1.253

Ecuaciones Lineales en Dos Variables

Aritmética de Enteros

Proyecto. Tema 6 sesión 2: Generación de Rectas, Circunferencias y Curvas. Geometría Analítica. Isidro Huesca Zavaleta

Sistemas polinomiales

Una función de la forma donde a 1 siendo "a" la base y "X" el exponente

Intersección entre segmentos de recta. comp-420

CAPITULO XII PUENTES DE CORRIENTE ALTERNA

El pipeline de visualización es el conjunto de

Álgebra Lineal Ma1010

FUNDAMENTOS DEL ÁLGEBRA. Folleto De Trabajo Para La Clase ECUACIONES LINEALES EN DOS VARIABLES

Sistema Diédrico (I). Verdadera magnitud: Alfabeto de recta y plano en los cuatro cuadrantes

Criterios de divisibilidad y Congruencias

4. ANÁLISIS DE FUNCIONES DE UNA VARIABLE

Áreas entre curvas. Ejercicios resueltos

Curso SIG. Curso SIG Conceptos Básicos y Funciones. Conceptos Básicos y Funciones. Representaciones del mundo. Curso SIG - Pablo Rebufello 1

Función cuadrática. Ecuación de segundo grado completa

5º Básico. Objetivos de Aprendizaje a Evaluar:

En una recta numérica el punto que representa el cero recibe el nombre de origen.

Procesadores de lenguaje Tema 6 La tabla de símbolos

Ecuaciones de primer grado

Materia: Matemática de Octavo Tema: Conjunto Q (Números Racionales)

Conceptos básicos de bases de datos

El TAD Grafo. El TAD Grafo

Unidad V. 5.1 Recta tangente y recta normal a una curva en un punto. Curvas ortogonales.

Guía de Matemática Tercero Medio

Ecuaciones, ecuación de la recta y sistemas

FORMATO CONDICIONAL EN EXCEL

ALGEBRA 1- GRUPO CIENCIAS- TURNO TARDE- Enteros

Profesorado de Nivel Medio y Superior en Biología Matemática - 1º Cuatrimestre Año 2013 FUNCIÓN CUADRÁTICA

A continuación se presenta la información de la altura promedio para el año de 1998 en Holanda de hombres y mujeres jóvenes.

13. Utilizar la fórmula del término general y de la suma de n términos consecutivos

La representación gráfica de una función cuadrática es una parábola.

Tablas Hash y árboles binarios

DISTANCIA ENTRE DOS PUNTOS EN EL PLANO CARTESIANO.

UNIDAD 6.- PROGRAMACIÓN LINEAL

Funciones: Aspectos básicos

PAUTA AUXILIAR Nº4. 1. Sean los puntos,,. Pruebe que no son colineales y encuentre la ecuación

Volumen de Sólidos de Revolución

ELEMENTOS DE GEOMETRÍA. Eduardo P. Serrano

Programación. Tema 8: Tablas Hash. Apuntes elaborados por: Eduardo Quevedo, Aaron Asencio y Raquel López Revisado por: Javier Miranda el????

LA ECUACIÓN CUADRÁTICA

Árboles Filogenéticos. BT7412, CC5702 Bioinformática Diego Arroyuelo. 2 de noviembre de 2010

Método de diferencias finitas para ecuaciones diferenciales parciales elípticas. (Parte II)

ƒ : {(1, 4), (2, 5), (3, 6), (4, 7)}.

2.2 Rectas en el plano

Tema 3 Álgebra Matemáticas I 1º Bachillerato. 1

ESCRITURA Y GRAFICACIÓN DE ECUACIONES LINEALES EN UNA SUPERFICIE PLANA

Capitulo 4. DECISIONES BAJO RIESGO TEORIA DE JUEGOS

Diagramas de secuencia

Modelización por medio de sistemas

TEMA 1.- POLINOMIOS Y FRACCIONES ALGEBRAICAS

TEMA 1. MATRICES, DETERMINANTES Y APLICACIÓN DE LOS DETERMINANTES. CONCEPTO DE MATRIZ. LA MATRIZ COMO EXPRESIÓN DE TABLAS Y GRAFOS.

No es otra cosa, que la representación de los resultados de una función sobre el plano carteciano.

2. El conjunto de los números complejos

PROYECTO MATEM CURSO PRECÁLCULO UNDÉCIMO AÑO MODALIDAD ANUAL. Guía para el II parcial

Otra forma de enumerar los resultados es en una tabla de frecuencia:

1. dejar a una lado de la igualdad la expresión que contenga una raíz.

UNIDAD 6: SISTEMAS DE ECUACIONES

Preparación para Álgebra 1 de Escuela Superior

UNIDAD 6: ECUACIONES OBJETIVOS

GEOMETRÍA ANALÍTICA LA CIRCUNFERENCIA

Oliverio J. Santana Jaria. Sistemas Digitales Ingeniería Técnica en Informática de Sistemas Curso Los objetivos de este tema son:

Lección 10: División de Polinomios. Dra. Noemí L. Ruiz Limardo 2009

FUNCIONES REALES DE VARIABLE REAL.

Sistemas de ecuaciones

Capítulo 16. Diagrama de Clases UML

Algebra Lineal Tarea No 22: Valores y vectores propios Solución a algunos problemas de la tarea (al 29 de junio de 2014)

Inecuaciones con valor absoluto

UNIDAD DIDÁCTICA 5: Geometría analítica del plano

Computación Aplicada. Universidad de Las Américas. Aula virtual de Computación Aplicada. Módulo de Excel 2013 LIBRO 4

Tema 14: Sistemas Secuenciales

Unidad 1: SISTEMAS DE ECUACIONES. MÉTODO DE GAUSS

SISTEMAS DE NUMERACION

Tema 3: El Método Simplex. Algoritmo de las Dos Fases.

GEOMETRÍA ANALÍTICA DEL PLANO

Primaria Sexto Grado Matemáticas (con QuickTables)

Estándares de Contenido y Desempeño, Estándares de Ejecución y Niveles de Logro Marcado* MATEMÁTICA

Teorema Central del Límite (1)

APUNTES DE GEOMETRÍA ANALÍTICA

El Teorema Fundamental del Álgebra

SESIÓN 6 INTERPRETACION GEOMETRICA DE LA DERIVADA, REGLA GENERAL PARA DERIVACIÓN, REGLAS PARA DERIVAR FUNCIONES ALGEBRAICAS.

Matemáticas. Si un error simple ha llevado a un problema más sencillo se disminuirá la puntuación.

Contenido Objetivos Ceros de Polinomios. Ceros de Polinomios. Carlos A. Rivera-Morales. Precálculo 2

y cualquier par (x, y) puede escalarse, multiplicarse por un número real s, para obtener otro vector (sx, sy).

Álgebra Lineal Ma1010

INSTITUCION EDUCATIVA MANUEL ANGEL ANACHURY AREA: TECNOLOGIA E INFORMATICA

MATEMÁTICAS BÁSICAS. Autoras: Margarita Ospina Pulido Jeanneth Galeano Peñaloza Edición: Rafael Ballestas Rojano

1.3.- V A L O R A B S O L U T O

Método de Sustitución

. De R (Reales) a C (Complejos)

Consideramos dos líneas. Hay tres formas de que las dos pueden interactuar:

Transcripción:

Intersección de segmentos de línea Dr. Eduardo A. RODRÍGUEZ TELLO CINVESTAV-Tamaulipas 22 de febrero del 2013 Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 1 / 85

1 Intersección de segmentos de línea Intersecciones geométricas Intersección de segmentos de línea Cálculo del punto de intersección 2 Algoritmo de barrido del plano (plane sweep) Introducción Línea de barrido Eventos Actualización de eventos Detección de intersecciones Estructuras de datos Algoritmo de barrido del plano Ejemplo Análisis de complejidad Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 2 / 85

Intersección de segmentos de línea El material de la clase de hoy está basado en el capítulo 2 del siguiente libro: Mark de Berg, Otfried Cheong, Marc van Kreveld and Mark Overmars. Computational Geometry: Algorithms and Applications. Springer, 3rd edition (April 16, 2008), ISBN-10: 3540779736. Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 3 / 85

Intersección de segmentos de línea Intersecciones geométricas Intersecciones geométricas Uno de los problemas más básicos en geometría computacional es el del cálculo de intersecciones El cálculo de intersecciones en espacios 2 y 3 dimensionales es esencial para diversas áreas de aplicación En modelado de sólidos las personas suelen crear formas complejas mediante la aplicación de diversas operaciones booleanas (intersección, unión, y diferencia) a simples formas primitivas. El proceso es llamado geometría constructiva de sólidos (CSG). Con el fin de realizar estas operaciones, el paso más básico es determinar los puntos en los que los límites de dos objetos se intersectan Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 4 / 85

Intersección de segmentos de línea Intersecciones geométricas Intersecciones geométricas En robótica y planificación del movimiento es importante saber cuando dos objetos se intersectan para detectar y evitar colisiones En los sistemas de información geográfica es útil la superposición de dos subdivisiones (e.g., una red de carreteras y los límites de un estado para determinar las responsabilidades de mantenimiento de carreteras). Dado que estas redes se forman a partir de colecciones de segmentos de línea, esto genera el problema de la determinación de las intersecciones de segmentos de línea Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 5 / 85

Intersección de segmentos de línea Intersecciones geométricas Intersecciones geométricas En gráficas computacionales, ray shooting es un importante método para renderizar escenas. Computacionalmente la parte más intensiva de este método es determinar la intersección de los rayos con otros objetos. La mayoría de los problemas de intersección complejos se descomponen sucesivamente en subproblemas más simples. El día de hoy vamos a discutir el algoritmo más básico, a partir del cual están compuestos otros algoritmos más complejos para resolver el problema del cálculo de intersecciones Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 6 / 85

Intersección de segmentos de línea Intersección de segmentos de línea 1 Intersección de segmentos de línea Intersecciones geométricas Intersección de segmentos de línea Cálculo del punto de intersección Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 7 / 85

Intersección de segmentos de línea Intersección de segmentos de línea Intersección de segmentos de línea El problema que vamos a considerar es, dados n segmentos de línea en el plano, reportar todos los puntos donde un par de segmentos de línea se intersectan Asumimos que cada segmento de línea está representado con las coordenadas de sus dos puntos extremos Observemos que n segmentos de línea pueden tener un número total de puntos de intersección que va desde 0 hasta ( n 2) = O(n 2 ) Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 8 / 85

Intersección de segmentos de línea Intersección de segmentos de línea Intersección de segmentos de línea Intersección de segmentos de línea Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 9 / 85

Intersección de segmentos de línea Intersección de segmentos de línea Intersección de segmentos de línea Es posible diseñar un algoritmo O(n 2 ), argumentando que es asintóticamente óptimo en el peor caso Pero no sería útil en la práctica Esto es debido a que en muchas instancias del problema el número de intersecciones puede ser relativamente pequeño (mucho menor que n 2 ) Por lo tanto parece razonable buscar un algoritmo sensible a la salida Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 10 / 85

Intersección de segmentos de línea Intersección de segmentos de línea Intersección de segmentos de línea Sea I el número de intersecciones Asumiremos que los segmentos de línea están en posición general, de esta forma no nos preocuparemos por el problema de si hay tres o más líneas intersectándose en un solo punto Sin embargo, generalizar el algoritmo para manejar este tipo de casos especiales es un ejercicio interesante (ver capítulo 2 del libro de Berg et al.) Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 11 / 85

Intersección de segmentos de línea Intersección de segmentos de línea Intersección de segmentos de línea El mejor tiempo de ejecución en el peor caso que debemos esperar es O(n log n + I) Claramente requerimos un tiempo O(I) para reportar los puntos de intersección Lo que es menos obvio es que se necesita un tiempo O(n log n) para el resto del algoritmo Este resultado se deriva del hecho de que el problema de unicidad de elementos requiere un tiempo Ω(n log n) para resolverse usando el modelo de árboles algebraicos de decisión Dada una lista de n números reales, el problema de unicidad de elementos consiste en determinar si todos esos números son distintos Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 12 / 85

Intersección de segmentos de línea Intersección de segmentos de línea Intersección de segmentos de línea Vamos a reducir el problema de unicidad de elementos al de reporte de la intersección en tiempo O(n) Esto significa que si podemos resolver el reporte de la intersección en tiempo o(n log n), entonces se podría resolver el problema de unicidad de elementos en tiempo o(n log n), lo que estaría en contradicción con la cota inferior conocida Ω(n log n) Aquí está la reducción. Dada una lista de n números, (x 1, x 2,..., x n ), en tiempo O(n) podemos construir un conjunto de n segmentos de línea horizontales, todos teniendo la misma coordenada y Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 13 / 85

Intersección de segmentos de línea Intersección de segmentos de línea Intersección de segmentos de línea Por ejemplo, mapear x i a un segmento de línea horizontal p i q i donde p i = (0, x i ) y q i = (1, x i ) Observemos que si los números son distintos, entonces no hay intersecciones entre los segmentos Por otra parte, si dos o más números son iguales, entonces los segmentos correspondientes serán iguales y, por lo tanto existe al menos una intersección Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 14 / 85

Intersección de segmentos de línea Intersección de segmentos de línea Intersección de segmentos de línea Tengamos en cuenta que esta cota inferior asume el uso del modelo de árboles algebraicos de decisión, en el cual todas las decisiones están hechas por comparaciones basadas en operaciones algebraicas exactas (+,,, /) aplicadas a entradas numéricas A pesar de que esto abarca la mayor parte de lo que se consideran como cálculos geométricos normales, hay otros modelos alternativos de cálculo Por ejemplo, utilizando operaciones de módulo, floor, o ceil, es posible implementar el hashing Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 15 / 85

Intersección de segmentos de línea Intersección de segmentos de línea Intersección de segmentos de línea Usando hashing es posible resolver el problema de unicidad de elementos en tiempo O(n) Lamentablemente, incluso en este modelo computacional más poderoso, nadie conoce cómo determinar si dos segmentos de línea cualquiera se intersectan en un tiempo más rápido que O(n log n + I) en el peor caso Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 16 / 85

Intersección de segmentos de línea Intersección de segmentos de línea Intersección de segmentos de línea Más adelante en el curso discutiremos un algoritmo óptimo aleatorizado que resuelve el problema de intersección de segmentos de línea en tiempo O(n log n + I) Por ahora sólo presentaremos un algoritmo (no óptimo) para resolver este problema que corre en tiempo O(n log n + I log n) Pero antes veamos cómo calcular el punto en el cuál dos segmentos de línea se intersectan Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 17 / 85

Intersección de segmentos de línea Cálculo del punto de intersección 1 Intersección de segmentos de línea Intersecciones geométricas Intersección de segmentos de línea Cálculo del punto de intersección Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 18 / 85

Intersección de segmentos de línea Cálculo del punto de intersección Cálculo del punto de intersección Como muchas primitivas geométricas, calcular el punto en el cuál dos segmentos de línea se intersectan pude ser reducido a resolver un sistema lineal de ecuaciones Sean ab y cd dos segmentos de línea, definidos por sus puntos extremos Notemos primero que es posible determinar dónde estos segmentos de línea se intersectan, simplemente aplicando una combinación apropiada de pruebas de orientación (Ejercicio) Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 19 / 85

Intersección de segmentos de línea Cálculo del punto de intersección Cálculo del punto de intersección Otra forma de determinar el punto en el cuál los segmentos se intersectan es usando una técnica empleada en gráficas computacionales la cual consiste en representar los segmentos como ecuaciones paramétricas Recordemos que cualquier punto en un segmento de línea ab puede ser escrito como una combinación convexa empleando un parámetro real s: p(s) = (1 s)a + sb para 0 s 1 (1) De forma similar para cd podemos introducir un parámetro t: q(t) = (1 t)c + td para 0 t 1 (2) Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 20 / 85

Intersección de segmentos de línea Cálculo del punto de intersección Cálculo del punto de intersección Una intersección occurre si y sólo si podemos encontrar valores para s y t en los rangos deseados tales que p(s) = q(t) Por lo tanto obtenemos las dos ecuaciones siguientes: (1 s)a x + sb x = (1 t)c x + td x (1 s)a y + sb y = (1 t)c y + td y (3) Las coordenadas de los puntos son conocidas, por lo tanto es un simple ejercicio de álgebra lineal resolver este sistema para s y t Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 21 / 85

Intersección de segmentos de línea Cálculo del punto de intersección Cálculo del punto de intersección El cálculo de s y t implica una división Si el divisor es cero, significa que los segmentos de línea son paralelos o colineales Estos casos especiales deben ser tratados con cuidado Si el divisor es distinto de cero, entonces obtendremos valores para s y t como número racionales Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 22 / 85

Intersección de segmentos de línea Cálculo del punto de intersección Cálculo del punto de intersección Podemos aproximarlos a números de punto flotante, o si deseamos realizar cálculos exactos es posible simular álgebra de números racionales usando enteros de alta precision Una vez que los valores de s y t han sido calculados todo lo que se requiere es comprobar que ambos están en el [0, 1] Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 23 / 85

Algoritmo de barrido del plano (plane sweep) Introducción 2 Algoritmo de barrido del plano (plane sweep) Introducción Línea de barrido Eventos Actualización de eventos Detección de intersecciones Estructuras de datos Algoritmo de barrido del plano Ejemplo Análisis de complejidad Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 24 / 85

Introducción Algoritmo de barrido del plano (plane sweep) Introducción Dado un conjunto de segmentos de línea S = {s 1, s 2,..., s n } cuyas intersecciones se desean conocer El método llamado de barrido del plano (plane sweep) está compuesto por los siguientes elementos esenciales, los cuales detallaremos a continuación: Línea de barrido Eventos Actualización de eventos Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 25 / 85

Algoritmo de barrido del plano (plane sweep) Línea de barrido 2 Algoritmo de barrido del plano (plane sweep) Introducción Línea de barrido Eventos Actualización de eventos Detección de intersecciones Estructuras de datos Algoritmo de barrido del plano Ejemplo Análisis de complejidad Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 26 / 85

Algoritmo de barrido del plano (plane sweep) Línea de barrido Línea de barrido Se simulará el barrido de una línea vertical l, llamada la línea de barrido de izquierda a derecha (el libro utiliza una línea horizontal, pero no hay una diferencia substancial) Vamos a mantener los segmentos de línea que se intersectan con la línea de barrido ordenados (digamos, de arriba a abajo). Tenga en cuenta que no podemos almacenar de manera eficiente las coordenadas reales en las cuales los segmentos de línea intersectan la línea de barrido, ya que esto requeriría demasiadas actualizaciones. Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 27 / 85

Algoritmo de barrido del plano (plane sweep) Línea de barrido Línea de barrido En vez de eso, simplemente se almacena un puntero que nos proporciona el acceso a la ecuación del segmento de línea Dada la coordenada x actual de la línea de barrido, podemos calcular la coordenada y del punto de intersección como se requiere Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 28 / 85

Algoritmo de barrido del plano (plane sweep) Eventos 2 Algoritmo de barrido del plano (plane sweep) Introducción Línea de barrido Eventos Actualización de eventos Detección de intersecciones Estructuras de datos Algoritmo de barrido del plano Ejemplo Análisis de complejidad Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 29 / 85

Eventos Algoritmo de barrido del plano (plane sweep) Eventos Aunque podríamos pensar en la línea de barrido en movimiento continuo, sólo tenemos que actualizar las estructuras de datos en los puntos donde se producen algunos cambios significativos en el contenido de la línea de barrido Estos puntos son llamados puntos de evento La interpretación de los puntos de evento varia de acuerdo con el problema al cual se aplique el método de barrido del plano Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 30 / 85

Eventos Algoritmo de barrido del plano (plane sweep) Eventos En nuestro caso los puntos de evento corresponden a: Eventos de extremos: donde la línea de barrido se encuentra con el punto extremo de un segmento de línea Eventos de intersección: donde la línea barrido se encuentra con el punto de intersección de dos segmentos de línea Tenga en cuenta que los eventos de extremos se pueden preordenar antes de que el barrido se ejecute En cambio, los eventos de intersección se descubrirán conforme el barrido se ejecuta Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 31 / 85

Eventos Algoritmo de barrido del plano (plane sweep) Eventos Por ejemplo, en la siguiente figura algunos de los puntos de intersección situados a la derecha de la línea de barrido no han sido aún descubiertos como eventos Sin embargo, mostraremos más adelante que cada punto de intersección será descubierto como un evento antes de que la línea de barrido llegue a él Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 32 / 85

Eventos Algoritmo de barrido del plano (plane sweep) Eventos Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 33 / 85

Algoritmo de barrido del plano (plane sweep) Actualización de eventos 2 Algoritmo de barrido del plano (plane sweep) Introducción Línea de barrido Eventos Actualización de eventos Detección de intersecciones Estructuras de datos Algoritmo de barrido del plano Ejemplo Análisis de complejidad Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 34 / 85

Algoritmo de barrido del plano (plane sweep) Actualización de eventos Actualización de eventos Cuando un evento es encontrado las estructuras de datos asociados con ese evento deben ser actualizadas Es importante tener cuidado en especificar exactamente las invariantes que se van a mantener Por ejemplo, cuando nos encontramos con un punto de intersección, debemos intercambiar el orden de los segmentos de línea de intersección a lo largo de la línea de barrido Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 35 / 85

Algoritmo de barrido del plano (plane sweep) Actualización de eventos Actualización de eventos Hay un gran número de casos especiales que complican el funcionamiento del algoritmo Sin embargo, haremos una serie de supuestos para simplificar este problema: 1 Ningún segmento de línea es vertical 2 Si dos segmentos se intersectan, entonces lo harán en un solo punto (i.e., no son colineales) 3 No existen tres segmentos de línea que se intersecten en un punto común Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 36 / 85

Algoritmo de barrido del plano (plane sweep) Actualización de eventos Actualización de eventos a b d a d c e f b a c b Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 37 / 85

Algoritmo de barrido del plano (plane sweep) Detección de intersecciones 2 Algoritmo de barrido del plano (plane sweep) Introducción Línea de barrido Eventos Actualización de eventos Detección de intersecciones Estructuras de datos Algoritmo de barrido del plano Ejemplo Análisis de complejidad Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 38 / 85

Algoritmo de barrido del plano (plane sweep) Detección de intersecciones Detección de intersecciones Recordemos que se mencionó que los eventos de extremos son todos conocidos de antemano Sin embargo, cómo detectar los eventos de intersección? Para el algoritmo es importante que cada evento pueda ser detectado antes de que ocurra Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 39 / 85

Algoritmo de barrido del plano (plane sweep) Detección de intersecciones Detección de intersecciones La estrategia es la siguiente, cuando dos segmentos de línea son adyacentes a lo largo de la línea de barrido, se comprobará si tienen una intersección que ocurren a la derecha de la línea de barrido Si es así, añadimos este nuevo evento (suponiendo que no haya sido ya agregado) Una pregunta natural es si ésto es suficiente En particular, si dos segmentos de línea se intersectan, existe necesariamente un posicionamiento previo de la línea de barrido de tal manera que sean adyacentes Afortunadamente, este es el caso, pero requiere una prueba Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 40 / 85

Algoritmo de barrido del plano (plane sweep) Detección de intersecciones Detección de intersecciones Lema Dados dos segmentos s i y s j, que se intersectan en un único punto p (y suponiendo que ningún otro segmento de línea pasa por este punto) hay un posicionamiento de la línea de barrido previo a este evento, de manera que s i y s j son adyacentes a lo largo de la línea de barrido (y por lo tanto, se probará su intersección) Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 41 / 85

Algoritmo de barrido del plano (plane sweep) Detección de intersecciones Detección de intersecciones Prueba A partir de nuestro supuesto de la posición general, no existen tres líneas que se intersecten en un punto común Por lo tanto, si consideramos un posicionamiento de la línea de barrido que es infinitesimalmente a la izquierda del punto de intersección, las líneas s i y s j serán adyacentes a lo largo de esta línea de barrido. Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 42 / 85

Algoritmo de barrido del plano (plane sweep) Detección de intersecciones Detección de intersecciones Prueba.. Considere el punto de evento q con la mayor coordenada x que es estrictamente menor que p x El orden de las líneas a lo largo de la línea de barrido después de procesar q será idéntico al orden de las líneas a lo largo de la línea de barrido justo antes de p Por lo tanto, s i y s j serán adyacentes en este punto Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 43 / 85

Algoritmo de barrido del plano (plane sweep) Detección de intersecciones Detección de intersecciones Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 44 / 85

Algoritmo de barrido del plano (plane sweep) Estructuras de datos 2 Algoritmo de barrido del plano (plane sweep) Introducción Línea de barrido Eventos Actualización de eventos Detección de intersecciones Estructuras de datos Algoritmo de barrido del plano Ejemplo Análisis de complejidad Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 45 / 85

Algoritmo de barrido del plano (plane sweep) Estructuras de datos Estructuras de datos En la implementación del algoritmo de barrido del plano se requiere el uso de dos estructuras de datos: 1 Cola de eventos 2 Estatus de la línea de barrido A continuación describiremos cada una de ellas Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 46 / 85

Algoritmo de barrido del plano (plane sweep) Estructuras de datos Estructuras de datos La cola de eventos almacena un conjunto de eventos futuros, ordenados de manera creciente con respecto a la coordenada x Cada evento contiene la información auxiliar que permite identificar su tipo (punto extremo del segmento o de intersección), y qué segmento(s) está involucrado Las operaciones que esta estructura de datos debe soportar son: La inserción de un evento (si no está ya presente en la cola) Extraer el mínimo evento Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 47 / 85

Algoritmo de barrido del plano (plane sweep) Estructuras de datos Estructuras de datos Pareciera que una estructura de datos de tipo heap sería ideal para ello, ya que soporta las inserciones y la extracción del mínimo en tiempo O(log M), donde M es el número de entradas en la cola Sin embargo, un heap no permite verificar la existencia de eventos duplicados Existen dos maneras de manejar esto, la primera es utilizar una estructura de datos más sofisticada, como un árbol binario balanceado o una lista por saltos (skip list) Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 48 / 85

Algoritmo de barrido del plano (plane sweep) Estructuras de datos Estructuras de datos Esto añade un pequeño factor constante a la complejidad, pero permite verificar duplicados fácilmente La segunda es utilizar el heap, aceptar el hecho de que puede haber eventos duplicados y agregar algún mecanismo que permita detectar e ignorar los eventos duplicados El libro de Berg et al. recomienda usar un árbol binario balanceado Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 49 / 85

Algoritmo de barrido del plano (plane sweep) Estructuras de datos Estructuras de datos Al utilizar esta estructura de datos si los eventos tienen la misma coordenada x, entonces podemos ordenar los puntos lexicográficamente con respecto a (x, y) Esto resulta en que los eventos se procesen de abajo hacia arriba a lo largo de la línea de barrido Y tiene el mismo efecto que si giraramos (hipotéticamente) la línea de barrido infinitesimalmente a la izquierda Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 50 / 85

Algoritmo de barrido del plano (plane sweep) Estructuras de datos Estructuras de datos Estatus de la línea de barrido, esta estructura de datos se emplea para almacenar el estado actual de la línea de barrido Se mantiene un diccionario ordenado (por ejemplo, un árbol binario balanceado) cuyas entradas son apuntadores a los segmentos de línea, almacenados en orden creciente de la coordenada y a lo largo de la línea de barrido actual Normalmente, cuando se almacenan elementos en un árbol, los valores llave son constantes Dado que la línea de barrido varía, es necesario almacenar llaves variables Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 51 / 85

Algoritmo de barrido del plano (plane sweep) Estructuras de datos Estructuras de datos Para ello, vamos a suponer que cada segmento de línea calcula una ecuación de la recta y = mx + b como parte de su representación El valor llave en cada nodo del árbol es un apuntador a un segmento de línea Para calcular la coordenada y de algún segmento en la posición actual de la línea de barrido, simplemente se toma la coordenada x actual de la línea de barrido Este valor de x se utiliza en la ecuación de la recta para este segmento de línea obteniéndose la coordenada y La coordenada y resultante es entonces utilizada en las comparaciones Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 52 / 85

Algoritmo de barrido del plano (plane sweep) Estructuras de datos Estructuras de datos Las operaciones que se requiere implementar en esta estructura de datos son: 1 La eliminación de un segmento de línea 2 La inserción de un segmento de línea 3 El intercambio de la posición de dos segmentos de línea 4 Determinar el predecesor y sucesor inmediato de cualquier elemento Mediante un árbol binario balanceado o una lista por saltos (skip list), estas operaciones se puede realizar en tiempo O(log n) cada una Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 53 / 85

Algoritmo de barrido del plano (plane sweep) Algoritmo de barrido del plano 2 Algoritmo de barrido del plano (plane sweep) Introducción Línea de barrido Eventos Actualización de eventos Detección de intersecciones Estructuras de datos Algoritmo de barrido del plano Ejemplo Análisis de complejidad Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 54 / 85

Algoritmo de barrido del plano (plane sweep) Algoritmo de barrido del plano Algoritmo de barrido del plano El algoritmo completo de barrido del plano será presentado a continuación Nuestro algoritmo considera la creación de nuevos eventos, pero no toma en cuenta el problema de eventos duplicados En el libro de Berg et al. se muestra una implementación que toma en cuenta este detalle Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 55 / 85

Algoritmo de barrido del plano 1 Insertar todos los puntos extremos de los segmentos de línea de S en la cola de eventos Q 2 Inicializar a vacio el estatus de la línea de barrido T 3 while Q extraer el próximo evento de la cola. Existen tres casos dependiendo del tipo de evento: Punto extremo izquierdo: Insertar este segmento de línea en T, basado en las coordenadas y tanto de este punto extremo como de los segmentos actualmente a lo largo de la línea de barrido. Verificar las intersecciones con el segmento inmediato superior e inmediato inferior Punto extremo derecho: Borrar este segmento de línea de T. Verificar las intersecciones con el segmento inmediato anterior e inmediato posterior Punto de intersección: Intercambiar el orden de los dos segmentos a lo largo de la línea de barrido. Para el nuevo segmento superior, verificar de nuevo la intersección con el segmento inmediato anterior. Para el nuevo segmento inferior, verificar de nuevo la intersección con el segmento inmediato posterior

Algoritmo de barrido del plano (plane sweep) Algoritmo de barrido del plano Algoritmo de barrido del plano Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 57 / 85

Algoritmo de barrido del plano (plane sweep) Ejemplo 2 Algoritmo de barrido del plano (plane sweep) Introducción Línea de barrido Eventos Actualización de eventos Detección de intersecciones Estructuras de datos Algoritmo de barrido del plano Ejemplo Análisis de complejidad Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 58 / 85

Ejemplo S 4 S 6 T S 1 S 2 S 7 S 3 S 5 S 8

Ejemplo S 4 S 6 T S 3 S 1 S 2 S 7 S 3 S 5 S 8

Ejemplo S 4 S 6 T S 3 S 8 S 1 S 2 S 7 S 3 S 5 S 8

Ejemplo S 4 S 6 T S 1 S 3 S 8 S 1 S 2 S 7 S 3 S 5 S 8

Ejemplo S 4 S 6 S 1 S 2 T S 4 S 1 S 3 S 8 S 7 S 3 S 5 S 8

Ejemplo S 4 S 6 S 1 S 2 T S 4 S 1 S 7 S 3 S 8 S 7 S 3 S 5 S 8

Ejemplo S 4 S 6 S 1 S 2 T S 1 S 4 S 7 S 3 S 8 S 7 S 3 S 5 S 8

Ejemplo S 4 S 6 S 1 S 2 T S 1 S 4 S 7 S 3 S 5 S 8 S 7 S 3 S 5 S 8

Ejemplo S S 6 4 S 1 S 2 S 7 T S 6 S 1 S 4 S 7 S 3 S 5 S 8 S 3 S 5 S 8

Ejemplo S S 6 4 S 1 S 2 S 7 T S 6 S 1 S 4 S 7 S 5 S 3 S 8 S 3 S 5 S 8

Ejemplo S 4 S 6 S 1 S 2 T S 6 S 4 S 7 S 5 S 3 S 8 S 7 S 3 S 5 S 8

Ejemplo S S 6 4 S 1 S 2 S 7 T S 6 S 2 S 4 S 7 S 5 S 3 S 8 S 3 S 5 S 8

Ejemplo S S 6 4 S 1 S 2 S 7 T S 6 S 2 S 4 S 5 S 7 S 3 S 8 S 3 S 5 S 8

Ejemplo S 4 S 6 S 1 S 2 T S 6 S 2 S 5 S 7 S 3 S 8 S 7 S 3 S 5 S 8

Ejemplo S 4 S 6 S 1 S 2 T S 6 S 2 S 7 S 3 S 8 S 7 S 3 S 5 S 8

Ejemplo S 4 S 6 S 1 S 2 T S 2 S 6 S 7 S 3 S 8 S 7 S 3 S 5 S 8

Ejemplo S 4 S 6 S 1 S 2 T S 6 S 7 S 3 S 8 S 7 S 3 S 5 S 8

Ejemplo S 4 S 6 T S 6 S 3 S 8 S 1 S 2 S 7 S 3 S 5 S 8

Ejemplo S 4 S 6 T S 6 S 8 S 3 S 1 S 2 S 7 S 3 S 5 S 8

Ejemplo S 4 S 6 T S 6 S 8 S 1 S 2 S 7 S 3 S 5 S 8

Ejemplo S 4 S 6 T S 8 S 1 S 2 S 7 S 3 S 5 S 8

Ejemplo S 4 S 6 T S 1 S 2 S 7 S 3 S 5 S 8

Algoritmo de barrido del plano (plane sweep) Análisis de complejidad 2 Algoritmo de barrido del plano (plane sweep) Introducción Línea de barrido Eventos Actualización de eventos Detección de intersecciones Estructuras de datos Algoritmo de barrido del plano Ejemplo Análisis de complejidad Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 81 / 85

Algoritmo de barrido del plano (plane sweep) Análisis de complejidad Análisis de complejidad El trabajo realizado por el algoritmo está dominado por el tiempo dedicado a la actualización de las diversas estructuras de datos (ya que por el contrario cada barrido toma solo un tiempo constante) Tenemos por lo tanto que contar dos cosas: El número de operaciones aplicadas a cada estructura de datos La cantidad de tiempo necesario para procesar cada operación Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 82 / 85

Algoritmo de barrido del plano (plane sweep) Análisis de complejidad Análisis de complejidad Para el estatus de la línea de barrido, hay como máximo n elementos intersectando la línea de barrido en cualquier momento Por lo tanto el tiempo necesario para realizar cualquier operación es O(log n) (árboles binarios balanceados) Ya que no se permiten eventos duplicados en la cola, el número total de elementos en la cola en cualquier momento es como máximo 2n + I Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 83 / 85

Algoritmo de barrido del plano (plane sweep) Análisis de complejidad Análisis de complejidad Debido a que usamos un árbol binario balanceado para almacenar la cola de eventos, cada operación toma un tiempo como máximo logarítmico en el tamaño de la cola, que es O(log(2n + I)) Dado que I n 2, esto es a lo sumo un tiempo O(log n 2 ) = O(2 log n) = O(log n) Cada evento implica un número constante de accesos o de operaciones sobre la estructura de estatus de la línea de barrido Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 84 / 85

Algoritmo de barrido del plano (plane sweep) Análisis de complejidad Análisis de complejidad Puesto que cada operación de ese tipo toma un tiempo O(log n), se deduce que el tiempo total empleado para procesar todos los eventos de la línea de barrido es: O((2n + I) log n) = O((n + I) log n) = O(n log n + I log n). (4) Este es el tiempo total de ejecución del algoritmo de barrido del plano Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Intersección de segmentos de línea 22 de febrero del 2013 85 / 85