减法后计算剩余多边形的算法

时间:2010-12-16 08:00:51

标签: c# algorithm

我有一个大的多边形(Pa)。在多边形内部有许多小“洞”,如图所示:

以下是这些漏洞的一些条件:

  1. 这些洞不能相互重叠
  2. 孔不能超出外部多边形
  3. 但是,可以触及外部多边形边缘
  4. 如何以有效的方式获取剩余的多边形(或多边形列表)?最简单的方法(蛮力方式)是取Pa,然后通过减去孔逐渐计算剩余的多边形。虽然这个想法是可行的,但我怀疑有一个更有效的算法。

    编辑:我不是在询问如何执行多边形裁剪(或减法)算法!事实上,这是我通过蛮力做的事情。我问除了多边形裁剪方法(取主要多边形,然后逐渐将洞夹出),还有其他更有效的方法吗?

4 个答案:

答案 0 :(得分:3)

这一般很难做到。您可以在此处找到解决方案的源代码:

General Polygon Clipper (GPC)

答案 1 :(得分:1)

好吧,如果你为多边形使用正确的表示法,你就不需要做任何事情。只需将孔的边缘列表附加到Pa的边缘列表。

您应该考虑的唯一考虑因素是,如果某个孔顶点或边缘可以触及Pa边缘,则必须在那里进行一些简化。

另一个问题是将多边形渲染为位图!

答案 2 :(得分:0)

你可以这样做。

  1. 使用位图中的颜色绘制主多边形。
  2. 在同一个位图中用另一种颜色绘制孔。
  3. 然后通过运行行进方形算法以主多边形颜色作为阈值来提取多边形。
  4. 输出将包含属于该多边形的所有点。
  5. 如果您希望将点作为连续的闭合多边形,则可以对这些点进行排序。

答案 3 :(得分:0)

我同意salva,但我的帖子将解决绘图部分。基本上,您可以将主多边形和孔多边形的所有线相加,从而得到一个复杂的多边形。

算法本身不是很复杂,在Polygon Fill Teaching Tool中很好地解释了。