Me dan un ejercicio que desafortunadamente no tuve éxito por mí mismo.
Hay un conjunto de rectángulos y un rectángulo . Usando el algoritmo de barrido plano, determine si está completamente cubierto por el conjunto de .
Para obtener más detalles sobre el principio de los algoritmos de línea de barrido, consulte aquí .
Vamos a empezar desde el principio. Inicialmente, conocemos el algoritmo de línea de barrido como el algoritmo para encontrar intersecciones de segmento de línea que requiere dos estructuras de datos:
- un conjunto de puntos de evento (almacena puntos finales de segmentos y puntos de intersección)
- un estado (estructura dinámica para el conjunto de segmentos que cruzan la línea de barrido)
La idea general: suponga que la línea de barrido es una línea vertical que comienza a acercarse al conjunto de rectángulos desde la izquierda. Ordene todas las coordenadas de los rectángulos y guárdelas en en orden creciente; debe tomar . Comience desde el primer punto de evento, para cada punto determine el conjunto de rectángulos que se cruzan en la coordenada dada , identifique segmentos continuos de rectángulos de intersección y verifique si cubren completamente en la coordenada actual . Con como árbol binario, tomará . Si alguna parte de permanece descubierta, no está completamente cubierto.
Detalles: La idea del algoritmo de intersección de segmentos era que solo los segmentos adyacentes se cruzan. En base a este hecho, creamos el estado y lo mantuvimos en todo el algoritmo. Traté de encontrar una idea similar en este caso y hasta ahora sin éxito, lo único que puedo decir es que dos rectángulos se cruzan si sus correspondientes coordenadas e superponen.
El problema es cómo construir y mantener , y lo que la complejidad de construir y mantener es. Supongo que los árboles R pueden ser muy útiles en este caso, pero como encontré es muy difícil determinar el rectángulo límite mínimo usando árboles R.
¿Tienes alguna idea sobre cómo resolver este problema, y particularmente cómo construir ?