Как отобрать 2D полигон?

У меня есть многоугольники, которые определяют контур округов в Великобритании. Эти фигуры очень детализированы (от 10 до 20 тысяч точек каждая), что делает соответствующие вычисления (точка X в многоугольнике P?) Довольно вычислительно дорогими.

Таким образом, я хотел бы "отбирать" мои полигоны, чтобы получить похожую форму, но с меньшим количеством точек. Какие существуют разные техники для этого?

Тривиальным было бы взять один каждый N баллы (таким образом, подвыбор N), но это кажется слишком "сырым". Я бы предпочел сделать усреднение баллов или что-то в этом роде. Любой указатель?

3 ответа

Решение

На ум приходят два решения:

1) поскольку карта Великобритании достаточно квадратная, вы можете выбрать отображение растровых изображений с графствами. Присвойте каждому определенный цвет, а затем визуализируйте границы с помощью черной линии толщиной 1 или 2 пикселя. Это означает, что вам придется выполнять дорогостоящий расчет интерьера / экстерьера только в том случае, если образец окажется на границе. Чем больше растровое изображение, тем реже это происходит.

2) упростить планы округа. Вы можете использовать рекурсивный алгоритм Рамера-Дугласа-Пекера для рекурсивного упрощения границ. Просто убедитесь, что вы кешируете результаты. Возможно, вам также придется решить эту проблему не для границ всего округа, а только для общих границ, чтобы не было пропусков. Это может быть довольно сложно.

Здесь вы можете найти проект, касающийся именно ваших проблем. Хотя он в основном работает с областью, "заполненной" точками, вы можете настроить ее для работы с определением типа "периметр", как у вас.

Он использует подход k-ближайших соседей для расчета региона.

Образцы:

Здесь вы можете запросить копию статьи.

По-видимому, они планировали предложить онлайн-сервис для запроса расчетов, но я не проверял его, и, вероятно, он не работает.

НТН!

Триангуляция полигонов должна помочь здесь. Вам все равно придется проверять много полигонов, но теперь это треугольники, поэтому их легче проверять, и вы можете использовать некоторые оптимизации, чтобы определить только небольшое подмножество полигонов для проверки заданной области или точки.

Кажется, что у вас есть все алгоритмы, которые вам нужны для полигонов, не только для треугольников, вы также можете объединить несколько слишком маленьких треугольников после триангуляции или, если количество треугольников становится слишком большим.

Другие вопросы по тегам