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

Учитывая набор точек, я хочу создать вогнутый непересекающийся многоугольник, используя эти точки. Выпуклый корпус будет сводить на нет вогнутую часть, а расположение их по координатам x / y или углам от центра создаст колючие артефакты. Есть простой способ сделать это?

Пример полигона, который я хочу создать:

пример


person phalanx    schedule 07.04.2016    source источник


Ответы (1)


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

Периметр обнаружен с использованием минимального связующего дерева

В верхнем примере показано, где работает MST (с соединением первой и последней вершин в получившейся полилинии)

В нижнем примере показано, что происходит, если края периметра подходят слишком близко.

person shouston    schedule 08.04.2016
comment
Спасибо. На самом деле у меня есть большое количество наборов данных, и я не могу гарантировать, что для каждого набора данных расстояние между вершинами периметра будет меньше расстояния между краями периметра. Есть ли подход, который этого не предполагает? - person phalanx; 08.04.2016
comment
В ответе на этот вопрос обсуждаются некоторые проблемы с более общим решением: stackoverflow.com/questions/20141812/ - person shouston; 08.04.2016