【发布时间】:2010-12-16 08:00:50
【问题描述】:
我有一个大多边形 (Pa)。多边形内部有很多小“洞”,如图:
以下是孔的几个条件:
- 孔不能相互重叠
- 孔不能超出外部多边形
- 但是,孔可以接触多边形的外边缘
如何高效获取剩余多边形(或多边形列表)?最简单的方法(蛮力方法)是采用Pa,并通过减去孔逐渐计算剩余的多边形。虽然这个想法是可行的,但我怀疑还有更高效的算法。
编辑:我不是在问如何执行多边形裁剪(或减法)算法!事实上,这是我会用蛮力做的事情。请问除了多边形剪裁方法(取主多边形,然后逐渐将洞剪掉),还有其他更有效的方法吗?
【问题讨论】:
-
你看过
System.Drawing中的老Region类吗?也许GraphicsPath也有帮助。 -
@leppie,问题是我不会使用
System.Drawing中的类来绘制我的多边形——我正在其他地方绘制它。 -
Soon Hui:我确实意识到它有点特定于 GDI,但这并没有阻止我在 Web 应用程序等中使用它。
-
@leppie,我认为
Region背后的算法——当然,减去 GDI 代码——将是我所需要的。我不确定如何在 Web 应用程序或 OpenGL 环境中使用它。 -
Soon Hui:您可以从
Bitmap获取Graphics实例。只需创建一个。作为奖励,您可以将输出转储为普通图像文件:)