On me fait un exercice malheureusement je n'ai pas réussi par moi-même.
Il y a un ensemble de rectangles et un rectangle . En utilisant un algorithme de balayage plan, déterminez si est complètement couvert par l'ensemble de .
Pour plus de détails sur le principe des algorithmes de ligne de balayage, voir ici .
Commençons depuis le début. Initialement, nous connaissons l'algorithme de ligne de balayage comme l'algorithme de recherche d' intersections de segments de ligne qui nécessite deux structures de données:
- un ensemble de points d'événement (il stocke les extrémités des segments et des points d'intersections)
- un état (structure dynamique pour l'ensemble des segments coupés par la ligne de balayage)
L'idée générale: supposons que la ligne de balayage est une ligne verticale qui commence à se rapprocher de l'ensemble de rectangles à partir de la gauche. Trier toutes les coordonnées des rectangles et les stocker dans dans l'ordre croissant - devrait prendre . Commencez par le premier point d'événement, pour chaque point, déterminez l'ensemble de rectangles qui se croisent à la coordonnée donnée , identifiez les segments continus des rectangles d'intersection et vérifiez s'ils couvrent complètement à la coordonnée actuelle . Avec comme arbre binaire, ça va prendre . Si une partie de reste découverte, n'est pas complètement couvert.
Détails: L'idée de l'algorithme d'intersection de segments était que seuls les segments adjacents se croisent. Sur la base de ce fait, nous avons construit l'état et l' avons maintenu tout au long de l'algorithme. J'ai essayé de trouver une idée similaire dans ce cas et jusqu'à présent sans succès, la seule chose que je peux dire est que deux rectangles se croisent si leurs coordonnées et y correspondantes se chevauchent.
Le problème est de savoir comment construire et entretenir , et ce que la complexité de la construction et de maintenir est. Je suppose que les arbres R peuvent être très utiles dans ce cas, mais comme je l'ai trouvé, il est très difficile de déterminer le rectangle de délimitation minimum à l'aide des arbres R.
Avez-vous une idée de la façon de résoudre ce problème, et en particulier de la façon de construire ?