У меня есть простой многоугольник (выпуклый или вогнутый, но без отверстий), который мне нужно разрезать на части с отрезком линии. Я не уверен, как определить, сколько полигонов получилось после среза, или как сгруппировать вершины.
Основные выпуклые случаи, всегда приводящие к двум подполигонам, просты, но как бы я справился со сложной вогнутой формой? Возьмите, например, многоугольник в форме буквы «Е». Вертикальный срез может дать 4 полигона. Как я могу определить, какие вершины составляют каждый из этих подполигонов?
Определение многоугольника: у меня есть два варианта здесь. Мой многоугольник может быть упорядоченным списком вершин или массивом треугольников. Я бы предпочел решение, которое использует массив треугольников. Должно быть довольно легко пройти через каждый треугольник и отрезать его с линией, если они пересекаются. Но тогда я понятия не имею, как сгруппировать эти треугольники в получающиеся подполигоны.
Псевдокод или даже общий совет - это хорошо; реализация C # идеальна.