В связанном вопросе я собираюсь предположить, что прямоугольники выровнены по оси и что они имеют попарно непересекающиеся интерьеры. Разложите каждый прямоугольник на четыре отрезка, ориентированные по часовой стрелке. Повторите следующую процедуру для горизонтального и вертикального сегментов.
Разделите горизонтальные сегменты на y. Для каждого y каждый сегмент порождает два события: событие начала для хвоста и событие остановки для головы. Сортируйте события по x (обратите внимание, что событие остановки для ориентированного на сегмент слева перед предыдущим событием). Инициализируйте переменную sign = 0
, затем выполните итерацию, выполнив sign += 1
в каждом событии начала и sign -= 1
на каждой остановке. Всякий раз, когда sign
идет от 0
до 1
, начните ориентированный сегмент с его хвостом в текущем месте развертки. Всякий раз, когда sign
идет от 1
до 0
, завершите этот сегмент своей головой в текущем месте развертки, отбросив его, если он вырожден. Аналогично, всякий раз, когда sign
идет от 0
до -1
, начните ориентированный сегмент с его головкой в текущем местоположении развертки. Всякий раз, когда sign
идет от -1
до 0
, завершите этот сегмент его хвостом в текущем местоположении развертки, отбросив его, если он вырожден.
Спасибо, Дэвид. Я попытаюсь посмотреть, работает ли это с моей проблемой. – Manish
Дэвид, я просто смог вернуться к проблеме. Ваше решение предполагает, что прямоугольники имеют попарно непересекающиеся интерьеры. У меня есть куча пересекающихся прямоугольников. Кроме того, я должен рассмотреть два соседних прямоугольника (края касаются, но теоретически не пересекаются) как принадлежащие к группе. – Manish