Я разделил мир на X случайных многоугольников.
![enter image description here](https://i.stack.imgur.com/AbDGW.jpg)
Затем мне дают координату C1, например (-21.45, 7.10), и я хочу приписать правый многоугольник этой координате.
Первое решение - применить мой алгоритм 'point_in_polygon
' (учитывая набор координат, определяющих многоугольник, и координату, определяющую точку, скажите, находится ли точка внутри или нет) на каждом многоугольникепока я не найду правильный.Но это очень дорого, если у меня есть много точек, чтобы вставить много полигонов.
Улучшение, основанное на следующей идее: Для оптимизации поиска я создаю grid
(набор) с шагом n, k , где я уже приписываю каждую пару координат таким образом:
for i=-180 to 180 step n
for j = -90 to 90 step k
grid.add(i,j)
Затем я создаю словарь, и для каждой пары вВ коллекции я нахожу соответствующий многоугольник
For each g in grid
For each p in polygons
If point_in_polygon(g,p) == True
my_dict(g) = p
Затем, когда я получаю C1, я ищу ближайшую координату в моей сетке, скажем, g1.Благодаря my_dict я могу быстро получить p1 = my_dict(g1)
Затем я вычисляю point_in_polygon(C1, p1)
, что, вероятно, будет правдой.Если это не так, я нахожу ближайший g, который назначен другому многоугольнику, и я повторяю тест.И т.д., пока я не нашел правильный многоугольник.
Теперь вопрос: Какое оптимальное n, k для создания сетки?
Так что я могу найти правильный многоугольник за минимальное количество шагов.Я не хочу, чтобы он был слишком низким, потому что поиск ближайшего g, который назначен другому полигону, может быть дорогим.Я тоже не хочу, чтобы это было слишком высоко, потому что тогда я мог бы пропустить некоторые полигоны, и тогда поиск никогда не сходится.
Моя интуиция заключается в том, что самый маленький полигон собирается выполнить шаги.
Я не уверен, является ли это проблемой программирования, математической проблемой или просто тем, что я могу найти эмпирически, поэтому я спрашиваю это здесь.
Любые отзывы приветствуются!