我正在寻找一种算法,可以将带有孔的形状切割成没有孔的形状。语言最好是C#。
这是这种形状的示例图像。
我想将这种形状切割成最少量的小形状,而没有空洞摆脱大部分空白区域(白色)。在这种情况下,这可能是一堆矩形。但是原始形状可能更复杂,例如圆孔。
对我而言,这听起来像某种垃圾箱包装问题,因此可以通过遗传算法最好地解决。
但是如果你知道更好的方法,那就是我问的原因。
//编辑:好的,我显然有一些事情需要解释:
形状是几何对象(WPF),它是从较大的几何图形中减去一堆小几何图形而得到的。所以我猜有些顶点存储在某处。
应尽量减少最终形状的数量,是最小的一组。
生成的形状应尽可能地具有尽可能直的边,并且可能具有最小的角。
不幸的是,我无法提供任何代码,因为我无论如何实际上以编程方式处理这个问题都没有任何意义。我很抱歉。
生成的形状应该很复杂但不必。
解释原因:我正在制作一个纺织品制作(特别是拼凑工作)程序,用它可以创建拼凑并计算需要多少面料和成本。将贴片放置在布料面板上已经以某种方式使用类似俄罗斯方块的算法,其中贴片尽可能靠近放置以减少浪费。
此外,在形状被切割的任何地方,我都需要为结果部件添加接缝余量(这是示例图像中您已经可以看到的绿色)。
//编辑2 可接受的解决方案可能如下所示。红线表示切割形状的位置,以获得一些没有孔的结果形状。结果集包含六个大矩形和25个小矩形:
然而,根据可能看起来完全不同的原始形状,即使是圆形边缘(圆形孔),可接受的解决方案也可能看起来不同。目标是尽可能地去除白色区域,同时保持对后来实际切割织物的一些便利。有很多碎片必须再次缝合在一起(因此都需要缝边)只是为了节省一点布料,这在某种程度上会适得其反。
答案 0 :(得分:0)
我不确定你想要的结果形状是什么,但我会假设你想要它们在Polygon中。如在对象Polygon中,它是2D顶点(x,y)的向量。你现在可以做的是使用这个Clipper库来解决几何空间问题。它做多边形减法,加法,交集等等。它也快速,免费,无需许可证。
http://sourceforge.net/projects/polyclipping/
然后,您可以通过找到沿每个多边形顶点的距离并将它们相加来计算您的接缝长度。但是,此库不支持曲线轮廓。