C# 计算减法后剩余多边形的算法
我有一个大多边形(C# 计算减法后剩余多边形的算法,c#,algorithm,C#,Algorithm,我有一个大多边形(Pa)。多边形内部有许多小“孔”,如图所示: 以下是孔的一些条件: 这些孔不能相互重叠 孔不能超出外部多边形 但是,孔可以接触外部多边形边 如何高效地获取剩余多边形(或多边形列表)?最简单的方法(蛮力法)是使用Pa,然后通过减去孔逐渐计算剩余多边形。虽然这个想法是可行的,但我怀疑还有一个更有效的算法 编辑:我不是问如何执行多边形剪裁(或减法)算法!事实上,我会用蛮力来做这件事。我在问,除了多边形剪裁方法(取主多边形,然后逐渐将孔剪裁出来)之外,还有其他更有效的方法吗?一般来说
Pa
)。多边形内部有许多小“孔”,如图所示:
以下是孔的一些条件:
Pa
,然后通过减去孔逐渐计算剩余多边形。虽然这个想法是可行的,但我怀疑还有一个更有效的算法
编辑:我不是问如何执行多边形剪裁(或减法)算法!事实上,我会用蛮力来做这件事。我在问,除了多边形剪裁方法(取主多边形,然后逐渐将孔剪裁出来)之外,还有其他更有效的方法吗?一般来说,这很难做到。您可以在此处找到解决方案的源代码: 你可以这样做
如果你对多边形使用正确的表示法,你就不需要做任何事情。只需将孔的边列表附加到
Pa
的边列表中即可
您应该考虑的唯一问题是,如果某个孔顶点或边可以接触Pa边,则必须在那里执行一些简化
另一个问题是将该多边形渲染为位图 我同意萨尔瓦的观点,但我的帖子将讨论绘图部分。基本上,可以将主多边形和孔多边形的所有直线相加,从而得到一个复杂多边形
算法本身并不是很复杂,在中有很好的解释。您看过
系统中的好的区域
类了吗。绘图
?也许GraphicsPath
也会有帮助。@leppie,问题是我不会使用系统中的类来绘制多边形。绘制——我正在其他地方绘制它。Soon Hui:我确实意识到它有点GDI专用,但这从未阻止我在web应用程序中使用它,等等。@leppie,我认为区域
后面的算法——当然减去GDI代码——将是我所需要的。我不知道如何在web应用程序或OpenGL环境中使用它。Soon Hui:你可以从位图
中获得图形
实例。只需创建一个。作为奖励,您可以将输出转储为普通图像文件:)这就是我所说的多边形减法——我将使用gpc库