Разбить самопересекающийся многоугольник на части без самопересечений, зная все точки пересечений

Есть задача: разбить самопересекающийся многоугольник на части без самопересечений. Проблему нахождения всех точек пересечения я решил: полным перебором. Знаю, что есть алгоритм Бентли-Оттмана, но мне легче было написать полный перебор, так как не нашел хорошего полноценного описания алгоритма на русском языке.

Вопрос сейчас такой: что мне дальше делать с этими точками? Есть ли какой-то способ, зная эти точки, разбить теперь мой многоугольник? Знаю про способ (по этой ссылке в заголовке "Decompose into Simple Pieces"), при котором это делается с каждым шагом алгоритма Бентли-Оттмана, есть ли какой-то способ сделать аналогично в моем случае? Или все-таки придется разбираться с алгоритмом Бентли-Оттмана? Если да, то, возможно, у кого-то есть хорошее понятное полноценное описание этого алгоритма на русском языке?


Ответы (1 шт):

Автор решения: MBo

Если задача не состоит в том, чтобы всё сделать самостоятельно, посмотрите, что умеет Clipper (Delphi, C++, C# и некоторые другие языки). Работа этой библиотеки основана на алгоритме Vatti.

Функция SimplifyPolygon, похоже, делает то, что Вам требуется

введите сюда описание изображения

введите сюда описание изображения

→ Ссылка