я хотел бы создать динамическую структуру данных, которая может содержать список полигонов и возвратить список полигонов, который перекрывает указанный прямоугольник.
я изучил лучшие деревья (и деревья квадрантов), но они, кажется, не работают слишком хорошо, когда полигоны накладываются в большой степени.
какие-либо хорошие идеи, которые я должен проверить, прежде чем я прокручу свою собственную ерунду?
править
позволяет предполагают, что все полигоны нормальны не повернутые прямоугольники. Я готов получить удар (точка в тесте полигона) во время тестов точки (я мог бы делать его так или иначе), и во время теста региона, получая их ограничительные рамки так же хорошо. только небольшой процент их на самом деле не перекроет рассматриваемый регион.
я только что написал обычное дерево квадрантов, которое позволяло каждому листовому узлу содержать неограниченное количество полигонов, если пересечение границ листа и границ каждого полигона в ведре были эквивалентны. в противном случае листовые узлы ограничены 8 полигонами перед разделением.
Я бы посмотрел на двумерные сегментные графики задержки . См. Также Многоугольники Nef . CGAL имеет множество операций над полигонами . Ответы на этот вопрос также могут иметь значение
Изменить Если ваши многоугольники представляют собой не повернутые прямоугольники, см. R-Trees
Зачем вы сами это пишете? Java предлагает сложные тесты пересечения. Вы можете преобразовать структуры данных многоугольника и прямоугольника в Java.awt.geom.Area и затем вызвать метод Area.intersect(), который сделает всю математику за вас.
Он также позаботится обо всех редко встречающихся (но все еще важных) особых случаях, которые очень неприятно ловить.