我有以下问题。一个大的矩形包含较小的非交叉矩形(下图中的黑色矩形),我需要找到一个算法来填充剩余的自由区域和非交叉矩形(下图中的红色矩形)。速度不是算法的问题。此外,如果有人会有算法的示例源代码,我将非常感激。
编辑。小澄清我需要得到红色矩形的坐标而不是绘制它们。我也在处理点数据而不是图像。
答案 0 :(得分:3)
像大多数装箱问题一样,这对我来说看起来像NP难题。有2个矩形,有8个! (= 40320)您需要考虑的可能安排。三个矩形产生12个!可能性,一个很酷的4.8亿。
你需要一个启发式来使这个可计算。除了偏向最接近边界矩形的矩形的外边缘外,我看不到好的边缘。你需要对你接受的结果矩形有更严格的要求,它们的数量无济于事。很高兴这不是我的问题:))
答案 1 :(得分:1)
虽然有多种可能的解决方案,但我认为你可以很容易地找到一个解决方案。
我会在一个轴上增加值。通过扫描所有矩形并沿着该轴排列它们的边缘外观,您可以遍历它们并随时创建矩形。每次你碰到一对新角落,你都可以与你当前“打开”的矩形进行比较,并确定要做什么(关闭它们,开始新的,划分等)。
该声明不是一个完整的解决方案,但我认为它可以让您从复杂的解决方案转变为简单的解决方案。在性能方面,它似乎也不是NP完整的。你甚至可以得到O(n)性能
一个有趣的问题。让我们知道你是如何上场的。
答案 2 :(得分:0)
查看Region类。