Как разрезать простой многоугольник линией

У меня есть простой многоугольник (выпуклый или вогнутый, но без отверстий), который мне нужно разрезать на части с помощью сегмента линии . Я не уверен, как на самом деле определить, сколько полигонов получится после среза, или как сгруппировать вершины.

Основные выпуклые случаи, когда всегда получается 2 суб-полигона, легко, но как бы я справился со сложным вогнутым форма? Возьмем, к примеру, многоугольник E-образной формы. Вертикальный срез может дать 4 полигона. Как я могу определить, какие вершины составляют каждый из этих суб-полигонов?

Определение полигона: У меня есть два варианта. Мой многоугольник может быть упорядоченным списком вершин или массивом треугольников. Я бы предпочел решение, использующее массив треугольников. Должно быть довольно легко перебрать каждый треугольник и разрезать его линией, если они пересекаются. Но тогда я понятия не имею, как сгруппировать эти треугольники в получающиеся подполигоны.

Псевдокод или даже общий совет - это хорошо; реализация на C # идеальна.

6
задан codekaizen 30 September 2010 в 16:58
поделиться