Алгоритм точки в многоугольнике, который возвращает true, когда контрольная точка находится на краю многоугольника.

Я реализовал алгоритм "точка в многоугольнике" на основе http://alienryderflex.com/polygon/.

Работает нормально, но как написано в статье:

Если контрольная точка находится на границе полигона, этот алгоритм даст непредсказуемые результаты.

Оказывается, мне нужно, чтобы алгоритм возвращал true, когда контрольная точка находится на границе/ребре (и вершинах) многоугольника.

Есть ли:

  • Альтернативный алгоритм, который мне поможет; или
  • Способ изменить этот алгоритм, чтобы получить то, что я хочу (например, немного расширив полигон перед запуском алгоритма)

person James Bateson    schedule 04.03.2016    source источник


Ответы (1)


Можно немного расширить полигон, но это может быть сложно с вогнутыми полигонами.

Я бы порекомендовал немного сместить точку в разных направлениях (вверх/вниз/влево/вправо) и выполнить расчет для каждой из этих сдвинутых точек. Затем считайте его находящимся внутри, если хотя бы одна из сдвинутых точек определена как находящаяся внутри.

Другой вариант — позволить линии, на которой подсчитываются пересечения, проходить в разных направлениях, а не только по горизонтали.

Но тогда это может быть нецелесообразно, потому что, как говорится в вашей связанной статье: «Обычно это не проблема, поскольку край многоугольника в любом случае бесконечно тонкий, и точки, попадающие прямо на край, могут идти в любую сторону, не причиняя вреда. внешний вид полигона».

person Frank Puffer    schedule 04.03.2016