Generar nuevos polígonos a partir de un polígono cortado (2D)

Estoy atascado con este pequeño problema y mi algoritmo para resolver esto no es válido para todos los casos. ¿Alguien tiene una idea de cómo resolver esto?

Aquí hay un ejemplo de polígono:

ejemplo http://img148.imageshack.us/img148/8804/poly.png

Descripción formal

Tenemos una lista de puntos en orden CW que define el polígono. También podemos consultar si un punto es un punto de corte conis_cut(p), dóndep Es un punto dado. Ahora queremos calcular nuevos polígonos causados ​​por este "corte".

El algoritmo debería hacer esto:

Entrada:{a, c1, b, c4, c, c5, d, c6, e, c3, f, c2}

Salida:{a, c1, c2}, {b, c4, c3, f, c2, c1}, {d, c6, c5}, {e, c3, c4, c, c5, c6}

Aquí mi algoritmo actual:

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

Este algoritmo no se mantiene si se inicia enc of.

Respuestas a la pregunta(4)

Su respuesta a la pregunta