Я хотел бы проверить, описывает ли набор из N точек выпуклый многоугольник или нет
Мне было интересно, есть ли хороший алгоритм для этого?
Вот некоторые подходы, которые я подумализ:
1. Алгоритм выпуклой оболочки:
Если набор равен его выпуклой оболочке, то он выпуклый.Сложность такого алгоритма составляет O (n * LN (N)).Но у меня было ощущение, что это было похоже на разбивание бабочки на колесе.
3. Взгляд на углы:
Тогда я подумал проверить, неуглы двух последовательных векторов никогда не превышают 180 °.Но так как мои очки не упорядочены, мне нужно проверить все комбинации из 3 последовательных очков, что усложняет задачу O (n3). (Должен быть способ сделать это лучше)
Я пытаюсь выбратьНапример, точки справа налево, но результаты не всегда ожидаемые:
Например, в этом случае я нахожу выпуклую форму, если взять слева направо:
Так что для этого решения мне может понадобиться хороший алгоритм для выбора точек.
3.глядя на барицентр:
Я думаю, что проверка того, находится ли барицентр всех трех последовательных точек внутри фигуры, покажет мне, является ли фигура выпуклой или нет.
Вот чтоЯ имею в виду (G - барицентр каждого треугольника):
для этого решения я могу без проблем выбрать точки слева направо.если сложность проверки, находится ли G в форме, равна O (N), то общая сложность будет примерно равна O (N2).
Не могли бы вы посоветовать мне хороший алгоритм для решения этой проблемы или улучшитьрешения, о которых я думаю
Заранее спасибо