Генерация новых полигонов из вырезанного полигона (2D)

Я застрял с этой маленькой проблемой, и мой алгоритм для решения этой проблемы неТ для всех случаев. У кого-нибудь есть идеи, как это решить?

Вот'Пример полигона:

пример http://img148.imageshack.us/img148/8804/poly.png

Формальное описание

У нас есть список точек в CW-порядке, определяющих многоугольник. Мы также можем запросить, является ли точка режущей точкой сis_cut(p), гдеp это заданная точка. Теперь мы хотим вычислить новые полигоны, вызванные этим "резать".

Алгоритм должен сделать это:

Входные данные:{a, c1, b, c4, c, c5, d, c6, e, c3, f, c2}

Выход: , , ,{a, c1, c2}{b, c4, c3, f, c2, c1}{d, c6, c5}{e, c3, c4, c, c5, c6}

Вот мой текущий алгоритм:

follow your points, CW
if the point is a cut point
-> go back trough the list looking for cut points
--- if next cut point is connected to the current cut point 
    and not part of the current poly, follow it
--- else keep searching
else
-> continue until you hit your starting point.
that's a poly
do this for every non-cut-point

Этот алгоритм недержись если тыбуду начинать сc или же .f

Ответы на вопрос(4)

Ваш ответ на вопрос