Dostałem ćwiczenie, niestety nie udało mi się.
Istnieje zestaw prostokątów i prostokąt . Za pomocą algorytmu zamiatania płaszczyzny ustal, czy jest całkowicie objęte zestawem .
Więcej informacji na temat zasady algorytmów linii przeciągnięcia znajduje się tutaj .
Zacznijmy od początku. Początkowo znamy algorytm linii przeciągnięcia jako algorytm znajdowania skrzyżowań segmentów linii, który wymaga dwóch struktur danych:
- zestaw punktów zdarzeń (przechowuje punkty końcowe segmentów i punkty przecięcia)
- status (struktura dynamiczna dla zestawu segmentów przecinających się linii przeciągnięcia)
Ogólna idea: załóż, że linia przeciągnięcia jest linią pionową, która zaczyna zbliżać się do zestawu prostokątów od lewej. Posortuj wszystkie współrzędne prostokątów i zapisz je w kolejności w kolejności rosnącej - powinno przyjąć . Zacznij od pierwszego punktu zdarzenia, dla każdego punktu określ zbiór prostokątów przecinających się przy danej współrzędnej , zidentyfikuj ciągłe segmenty prostokątów przecięcia i sprawdź, czy pokrywają całkowicie przy bieżącej współrzędnej . Z jako drzewem binarnym zajmie . Jeśli jakakolwiek część pozostaje odkryta, to nie jest całkowicie uwzględniony.
Szczegóły: Idea algorytmu przecięcia segmentu była taka, że przecinają się tylko sąsiednie segmenty. Na podstawie tego faktu zbudowaliśmy status i utrzymaliśmy go w całym algorytmie. Próbowałem znaleźć podobny pomysł w tym przypadku i jak dotąd bez powodzenia, jedyne co mogę powiedzieć, to dwa prostokąty przecinają jeśli odpowiadające im i współrzędne pokrywają się.
Problem polega na tym, jak zbudować i utrzymać , a co złożoność budowy i utrzymania jest. Zakładam, że drzewa R mogą być bardzo przydatne w tym przypadku, ale ponieważ stwierdziłem, że bardzo trudno jest określić minimalny prostokąt ograniczający za pomocą drzew R.
Czy masz pojęcie o tym, jak rozwiązać ten problem, a zwłaszcza jak zbudować ?