OK только для точки в полигоне:
Я думаю, что проблема основана на «фрактальной природе» двумерных объектов и неопределенном и несбалансированном распределении пространственной информации. Если у вас есть регулярная сетка, легко рассчитать положение или отношение ячейки. Но у изолинии модели местности могут быть несложные части на одной стороне и математически сложные на другой стороне (морфологически активные части, такие как гребни, долины ...).
Индексирование пытается обрабатывать две вещи:
Быстрая процедура, которая дает вам набор корзин, в которых вы собираете объекты, которые вы можете выделить пространственно (корзины!). И BBox легко рассчитать и обрабатывать.
Набор отношений (перекрытие, касание), чтобы различать или связывать пространственные вещи (объекты).
К сожалению, BBoxы не дадут вам подсказки, сколько точек в каждом BBox, как объекты имеют форму (отверстия, выпуклые, ...) и как локально распределяется информация (90% точек в левом верхнем углу BBox). Таким образом, вы можете найти быстрые члены операции на уровне объекта и потерять много времени в построении отношений теста.
Чтобы использовать более нерегулярный подход, триангуляция IMO в сочетании с и quadtree является одной из стратегий, где вы можете сблизить часть индекса и построение отношений индекса (объединение == построение отношений).
Для примера Point-in-Polygon-Test можно построить неправильный кеш, используя:
- ! ограниченная триангуляция Делоне для вашего полискрытия с дополнительными точками границы сетки для обнаружения вне обложки
- поместите это в схему индексации квадродеревьев с не более чем N треугольниками на блок (фрактальные сегменты)
- найти набор треугольников, к которому принадлежит точка - лист в дереве квадрантов
- найти треугольник, в котором лежит точка (тестовая часть по макс. N треугольникам)
- и попросить идентификаторы полигонов вершин треугольника
- если идентификатор является уникальным, точка принадлежит многоугольнику, если не она находится снаружи
Стоимость построения олова и квадродеревьев очень высока, и их сложно рассчитать, и квадродерево должно сбалансировать большие и маленькие треугольники (треугольники, которые не помещаются в меньшие поля поддеревьев).
Некоторые инструменты и ссылки:
Треугольник - триангуляция ограничивающего многоугольника
Quadtrees - с примерами источников
Stony Brook Repository - Структуры данных и дискретная геометрия