Метод разбиения многоугольника на треугольники (триангуляция) заключается в том, чтобы разбить многоугольник на наименьшее число треугольников. en.wikipedia.org ru.ruwiki.ru
Для многоугольника без отверстий с n вершинами триангуляцию можно вычислить за время Θ(n). en.wikipedia.org Для многоугольника с отверстиями существует нижняя граница Ω(nlog n). en.wikipedia.org
Также существует вариант разбиения на треугольники с минимальной общей длиной рёбер, который называется триангуляцией с минимальным весом. en.wikipedia.org
Алгоритм разбиения многоугольника на треугольники можно описать так: habr.com
- Подготовить рабочие объекты. habr.com Результатом работы должен быть список треугольников, поэтому создают пустой список. habr.com
- Перед стартом просчитать углы для всех точек многоугольника. habr.com
- Выбрать любую точку многоугольника как «рабочую». habr.com
- Создать пустой список для хранения временных треугольников. habr.com
- Если точка слева от «рабочей» имеет угол меньше 180 градусов и треугольник не содержит внутри себя других точек многоугольника — занести этот треугольник в временный список. habr.com
- Если точка справа от «рабочей» имеет угол меньше 180 градусов и треугольник не содержит внутри себя других точек многоугольника — занести этот треугольник в временный список. habr.com
- Если «рабочая» точка имеет угол меньше 180 градусов и треугольник не содержит внутри себя других точек многоугольника — занести этот треугольник в временный список. habr.com
- Если временный список не содержит треугольников — выбрать вместо «рабочей» точку слева от неё и вернуться к первому пункту. habr.com
- Если содержит — выбрать треугольник с минимальной разницей между минимальным и максимальным углом (нужно пересчитать значение углов), занести его в список треугольников, удалить из рабочего двунаправленного замкнутого списка среднюю точку из выбранного треугольника, а соседним точкам от неё пересчитать значения углов, первую точку выбрать в качестве «рабочей». habr.com
- Если в рабочем двунаправленном замкнутом списке осталось только две точки — прекратить работу, список треугольников будет готов, иначе вернуться к первому пункту. habr.com
Также существует вариант разбиения на треугольники с минимальной общей длиной рёбер, который называется триангуляцией с минимальным весом. en.wikipedia.org