Подтвердить что ты не робот

Тестирование того, является ли многоугольник простым или сложным

Для многоугольника, определенного как последовательность точек (x, y), как определить, сложна она или нет? Сложный многоугольник имеет пересечения с самим собой, как показано:

example complex polygon image

Есть ли лучшее решение, чем проверка каждой пары, которая имела бы временную сложность O (N 2)?

4b9b3361

Ответ 1

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

Подробнее см. в этой статье, в частности, этот code to тест для простого полигона.

Ответ 2

См. Bentley Ottmann Algorithm для метода O ((N + I) log N) для развертки. Где N - количество сегментов линии, а я - количество точек пересечения.

Ответ 3

Фактически это можно сделать в линейном алгоритме триангуляции Chazelle с использованием времени. Он либо триангулирует многоугольник, либо обнаруживает, что многоугольник не прост.