У меня есть список прямоугольников, и мне нужно создать список пересекающихся прямоугольников.
Прямоугольники определяются с помощью
- Точка
- Размер
- Boolean, может ли прямоугольник двигаться
- Boolean, может ли прямоугольник быть удален
Никакие прямоугольники не могут быть перемещены, но не могут быть удалены
Пересечение определяется с помощью
- Указатель на первый прямоугольник
- Указатель на второй прямоугольник
- Список точек первого прямоугольника, находящихся во втором
- Список точек второго прямоугольника, находящихся в первом
Для этого мне нужен контейнер, так как прямоугольники можно добавлять, удалять или перемещать. операции, которые мне нужны:
- Вставка прямоугольника
- Удаление прямоугольника (возможно только для тех, кто отмечен для этого)
- Изменение положения прямоугольника (не размера, возможно только с отмеченными для него)
- Генерация множества пересечений.
Как мне реализовать такой контейнер? Я могу легко сделать это, используя метод перекрестной проверки, но это будет далеко не оптимизировано.
Я подумал о том, чтобы сохранить карту прямоугольника -> пересечения, а затем всякий раз, когда прямоугольник добавляется, проверять, пересекает ли он что-либо, и добавлять пересечение на карту. , и когда он будет удален, удалите ключ с карты, но я не знаю, как проверить, пересекает ли он что-либо быстро, или как перемещать прямоугольники без удаления и повторной вставки.
Я могу использовать C++11.