2013-09-25 3 views
1

Say У меня есть 2D плоскость, покрытую многоугольников (идентифицированных как массив вершин), аналогично:Определение того, какие многоугольники точка находится в пределах от большого набора полигонов

enter image description here

Допустим, I также имеют точку с координатами на этой плоскости, какой самый простой способ вернуть какой из полигонов находится точка?

Хотя в этом примере перечислены 4 многоугольника, было бы просто запустить check on each polygon to see if the point is within it, но я создаю систему, которая в настоящее время имеет около 150 полигонов и может распространяться до тысячи, поэтому это может стать очень медленным.

Итак, есть ли какие-либо решения для этого, которые не требуют повторения всех доступных полигонов и проверки наличия точки?

ответ

1

Вы можете использовать kd-дерево или r-дерево. Это может уменьшить пространство поиска. Вы также можете найти квадрант. Вы можете выбрать размер квадрата, чтобы соответствовать многоугольникам и минимизировать перекрывающиеся ограничивающие прямоугольники.

+0

Ничего себе, это выглядит прекрасно, я ищу информацию об этом сейчас, но знаете ли вы о каких-либо ресурсах, которые могли бы показать, что это реализовано, псевдо-код, если это возможно, но я довольно язык агностик и могу интерпретировать – topherg

+1

I написал решение для четырехъядерных процессоров. Он использует кривую гильберта и похож на квадрант. Вы можете скачать его на phpclasses.org. Но нетрудно закодировать kd-дерево. Вы также можете использовать базу данных с пространственным индексом. – Bytemain

Смежные вопросы