Найти прямоугольник в двумерном пространстве

У меня есть набор прямоугольников разных размеров в 2D-пространстве. Количество прямоугольников может динамически изменяться от 10 до 100 000, их положение, а также размеры часто обновляются.

Какую пространственную структуру вы бы порекомендовали для нахождения прямоугольника в заданной точке (x,y)? Предполагая, что операция поиска также выполняется очень часто (например, при движении мыши). Если бы вы могли дать ссылку на сравнение различных алгоритмов пространственного индексирования или сравнить их производительность поиска/сборки/обновления здесь - это было бы прекрасно.


person CuriousG    schedule 21.05.2012    source источник
comment
Вы хотите что-то вроде поиска всех прямоугольников, содержащих заданную точку? прямоугольники повернуты на произвольную величину или их оси параллельны x и y?   -  person andrew cooke    schedule 21.05.2012
comment
их топоры параллельны Быку, Ой, извините, что пропустил это. Было бы неплохо найти все прямоугольники, но достаточно найти даже такой, в котором есть точка. Я знаю о различных индексах, но никогда с ними не работал, поэтому любопытно мнение экспертов, какой из них я должен выбрать в зависимости от данной ситуации...   -  person CuriousG    schedule 21.05.2012


Ответы (2)


Я бы предложил R-Tree. Он в первую очередь предназначен для прямоугольников (или кубов, выровненных по N-мерным осям).

person Juraj Blaho    schedule 21.05.2012

Используйте дерево квадрантов (http://en.wikipedia.org/wiki/Quadtree).

Определите все возможные значения X и Y, при которых прямоугольники начинаются и заканчиваются. Затем постройте дерево квадрантов на основе этих значений. В каждом листе дерева квадрантов сохраните, какие прямоугольники перекрываются с диапазонами координат листа. Чтобы найти перекрывающиеся прямоугольники, нужно просто найти лист, содержащий координату.

person Patrick    schedule 21.05.2012