:: алгоритмы  и методы :: :: олимпиадные задачи :: :: связь :: :: о сайте ::
Путь: Математика » Геометрия » Многоугольники
  Работа с многоугольниками



Большенство алгоритмов сформулировано для простых многоугольников. Простой многоугольник - замкнутая ломаная без самопересечений. Как следствие, в простом многоугольнике нет 'дыр'.


Площадь
Стандартная формула и ее обоснование.

Центр тяжести
Несколько интерпретаций понятия 'центр тяжести' и алгоритмы его нахождения.

Нахождение ориентации простого многоугольника
Многоугольник задан списком вершин по мере обхода.. По часовой стрелке или против ?..

Определение: выпуклый многоугольник или нет
На входе произвольный простой многоугольник.

  Триангуляция



Триангуляцией полигона называется декомпозиция полигона в набор треугольников. Триангуляция часто используется для упрощения решения задачи в пределах области со сложной конфигурацией, и сведения ее к более простой задаче в пределах треугольника, поскольку треугольник относится к простейшей области и в этом случае задачу можно решить гораздо проще. Например, для определения, лежит ли точка внутри невыпуклого полигона, можно осуществить триангуляцию полигона и ответить "да" только в том случае, если точка принадлежит по крайней мере хотя бы одному треугольнику. Или при анализе сложных поверхностей, расположенных в пространстве, можно эти поверхности аппроксимировать сеткой треугольников, проанализировать которые значительно легче.

Пожалуй, самым простым алгоритмом триангуляции является метод Разделяй-и-властвуй. Требуется O(nlogn) операций в среднем и O(n2) - в худшем случае. Многоугольник рекурсивно делится на части путем проведения хорды вплоть до треугольников.

Более сложные и эффективные алгоритмы(простейшие из таковых) используют понятие монотонных полигонов. Общая стратегия триангуляции состоит из двух этапов:

  1. Декомпозиция полигона на монотонные части.
  2. Триангуляция монотонных частей за общее время О(n).

Быстрее, чем за O(n) триангуляцию осуществить нельзя, поэтому общее время задается первой частью алгоритма.

Довольно старый, но весьма эффективный подход заключается в декомпозиции на монотонные полигоны методом сканирующей линии.

Недавно появился гораздо более эффективный алгоритм Зейделя, простой и работающий за почти линейное время. Существует его реализация, написанная Narkhede и Manocha. В их коде есть и общая функция триангуляции, делающая второй шаг алгоритма. Кроме того (!) их код поддерживает полигоны с дырами, чего не скажешь о методах выше. Также доступна оригинальная статья Зейделя.