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