【发布时间】:2010-12-19 00:40:39
【问题描述】:
我被这个小问题困住了,我解决这个问题的算法并不适用于所有情况。有人知道如何解决这个问题吗?
这是一个多边形示例:
example 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 开始,则此算法不成立。
【问题讨论】:
-
当我看到你的照片时,我终于明白了输出。但是我不认为,给定这个输入,计算机可以以某种方式神奇地猜测 C 坐标都属于一起。所以我认为除了多边形的坐标之外,您还需要一个单独的输入数组来指定这些索引中的哪些是要剪切的索引。更合乎逻辑的是:一个多边形和一个定义切割线的向量
-
正确,我之前计算了 c_n 个点,因此我可以提供一个函数 is_cut(p),它会形成这样一个列表 {c1,...,cn},其中 n mod 2 == 0. 我很抱歉图片,但是 stackoverflow 不允许我发布图片:(。
-
我还添加了一个伪代码算法,我用它来知道。
-
嗯……那张照片让我想起了我每天在地下看到的东西。 (图片)alloyfirms.ru/bank/5295_moscow.gif
-
@pavel:这是我的地下地图ecampmany.com/NY/Subwaymap.gif
标签: algorithm polygon intersection computational-geometry