Я застрял в этой маленькой проблеме, и мой алгоритм для решения этого не выполняется для всех случаев. У кого-нибудь есть идея, как это решить?
Здесь пример полигона:
пример 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 a poly
do this for every non-cut-point
Этот алгоритм не выполняется, если вы начинаете с c
или f
.