Простые выпуклые полигоны: O (n)
Это когда вы хотите работать с простыми полигонами, такими как прямоугольники, пятиугольники, шестиугольники и так далее.Здесь вы просто берете отправную точку и соединяете ее со всеми остальными вершинами.Этот алгоритм тривиален, и что я действительно хотел, так это более общее решение, которое могло бы обрабатывать вогнутые и многоугольники с отверстиями.
Для того, чтобы иметь дело с более сложными полигонами, такими как предоставленный Пэйном ...
Произвольный многоугольник в треугольник в O (n log n)
Хотя существуют алгоритмы, которые работают быстрее, более быстрые алгоритмы становятся очень сложными. Киркпатрик и соавт.нашел алгоритм для запуска в O (n log log n) и Chazelle сделал это в O (n).Однако проще всего реализовать, вероятно, алгоритм Зейделя , который работает в O (n log n).
Алгоритм представляет собой трехэтапный процесс
- Разложить многоугольник на трапеции
- Разложить трапеции на монотонных многоугольников
- Разложить монотонные многоугольники на треугольники
C источник
Если вас интересует источник C, его можно получить в Университете Северной Каролины в Чапел-Хилле .В целом качество кода хорошее, он обрабатывает дыры, но, вероятно, его нужно будет массировать в соответствии с вашими потребностями.