我正在寻找一种算法,可以将有孔的形状切割成没有孔的形状。语言最好是 C#。
这是这种形状的示例图像。
我想将该形状切割成最少量的较小形状,而没有孔,以消除大部分空白空间(白色)。在这种情况下,这可能是一堆矩形。但是原始形状可能更复杂,例如带有圆孔。
对我来说,这听起来像是某种装箱问题,因此最好用遗传算法来解决。
但如果你知道更好的方法,这就是我问的原因。
//编辑:好吧,我显然有一些事情要解释:
形状是一个几何对象 (WPF),它是从一个较大的几何图形中减去一堆小几何图形而产生的。所以我猜想某处存储了顶点。
结果形状的数量应该最小化,是的,最小的集合。
生成的形状应具有尽可能笔直的边缘,并尽可能减少拐角。
不幸的是,我还不能提供任何代码,因为我不知道如何以编程方式实际处理这个问题。我真的很抱歉。
生成的形状应该很复杂,但不是必须的。
解释一下原因:我正在研究一个纺织工艺(特别是拼布)程序,通过它可以创建拼布并计算需要多少织物和成本。将补丁放在织物面板上已经可以使用类似俄罗斯方块的算法以某种方式工作,其中补丁尽可能靠近放置以减少浪费。
此外,在任何形状被切割的地方,我都需要为生成的部分添加缝边(这就是您在示例图像中已经可以看到的绿色)。
//edit 2一个可接受的解决方案可能如下所示。红线显示形状被切割的位置,以获得大量没有孔的最终形状。结果集包含六个大矩形和 25 个小矩形:
然而,根据可能看起来完全不同的原始形状,即使有圆形边缘(圆孔),可接受的解决方案也可能看起来不同。目标是尽可能去除白色区域,同时在后期实际切割织物时保持一些便利。有很多碎片必须再次缝合在一起(因此都需要缝边)只是为了节省一点织物,所以会适得其反。