Я работаю над небольшим проектом, который требует от меня быстро найти, какие треугольники внутри набора треугольников либо частично, либо полностью содержатся в данной прямоугольной области. Меня интересует оптимизация для быстрого поиска - я не ограничена памятью.Алгоритм поиска треугольников в пределах области
Это не та область, в которой я слишком хорошо знаком, поэтому все, что я смог сделать до сих пор, - это подталкивать Google к стандартным алгоритмам для решения этой проблемы. Ближе всего я дошел до того, чтобы использовать два интервала деревьев. Это немного неуклюжие, так как я должен выполнить проверку интервального перекрытия между краями каждого треугольника и краями прямоугольной области в обоих направлениях x и y.
Может кто-нибудь указать мне на любой ресурс, где «правильный» способ справиться с этой проблемой?
Спасибо!
Редактировать: Я забыл упомянуть, что прямоугольные области, которые я использую в настоящее время, параллельны осям координат x и y. На данный момент я доволен любым решением, которое использует это ограничение. В общем, хотя решение с совершенно произвольными прямоугольниками было бы полезно узнать.
Являются ли стороны прямоугольных областей параллельными координатным осям (для этого есть слово, но я забыл об этом)? Если это так, вы можете использовать прямоугольники, окружающие ваши треугольники, для создания двумерных деревьев интервалов (или деревьев сегментов или деревьев деревьев или любых тех структур, которые называются), и посмотреть, эффективно ли эти проблемы решаются. –
Справа. Это подход, который я принял. Это было все еще довольно медленно, но я не уверен, что реализация интервального дерева, которую я потянула, была хорошо оптимизирована. –
Это немного специализированная версия обнаружения столкновений, которая хороша для поискового запроса. См. Например, http://q3k.org/gentoomen/Game%20Development/Programming/Real-Time%20Collision%20Detection.pdf – Gene