В качестве расширения и частичного ответа на мой поток Я написал простой алгоритм, который с учетом набора точек (с координатами xy) может образовывать самопересекающийся многоугольник.
Утверждение. Учитывая произвольный набор точек с разными координатами, всегда можно построить правильный или нерегулярный, непересекающийся многоугольник.
Алгоритм:
Предположим, что существует множество V, содержащее все вершины
1) Сортировка всех вершин в V по x-координате
2) Представьте прямую линию (назовем ее «делителем»), параллельную оси x, которая, начиная с первого узла, расширяется до бесконечности и делит / разбивает вершины на два набора.
3) Теперь рассмотрим два набора:
A = Множество всех вершин выше или на разделительной линии
B = Множество всех оставшихся вершин
4) Начиная с самой левой вершины A, соедините все вершины в A, пока не дойдете до самой правой
5) Если крайняя правая вершина отсортированного множества V (вершина с наибольшей координатой x) не находится в A, соедините с ней последнюю вершину (крайнюю правую из A).
6) Работать задом наперед, начиная с крайней правой вершины отсортированного множества V (вершины с наибольшей координатой x), соединяя все вершины из B
7) Соединить первую (самую левую вершину B) вершину B с самой левой вершиной A
Я думаю, что алгоритм верен и не может найти тест, который бы провалился, но, возможно, я что-то упустил.
Я был бы признателен, если бы вы могли взглянуть и привести пример, который не сработает, если он есть (что, я уверен, должно быть).