假设我打开MS Paint,绘制一堆实心矩形,将其保存为png,然后交给你:
现在你必须找出我是如何绘制这些矩形的。对于此图像,您的算法将生成如
之类的指令或者换句话说,给定图像,我想尽可能使用最少的矩形命令来生成它。矩形命令根据其位置,长度,宽度和颜色绘制实心矩形。我该如何解决这个问题?
该算法应足够稳健,不仅可以处理通过放置矩形绘制的图像,还可以处理复杂图像,如照片。
答案 0 :(得分:1)
你需要找到两个数字的交点,在它们相交的任何一点找到哪一个是可见的。对于那一点,它将为您提供哪一个在上面。
答案 1 :(得分:1)
你可能很清楚这一点,但我很确定即使有2种颜色,这个问题也是NP完全的。请参阅有关正交多边形here的部分。他们看到的覆盖问题是相似的,但不完全相同。
启发式地我怀疑寻找大的单色矩形不会让你离最佳状态太远。完成后,尝试通过在z顺序中向前移动相互相邻的不同颜色的矩形来合并相同颜色的相邻矩形。
答案 2 :(得分:1)
这是一个多步骤的过程。
从这些列表开始:R和S. R是矩形(矩形绘制用于按顺序构建最终图像)。 S是截面(每个颜色像素的区域)。
1)检测任何“完美”形状;发现颜色的任何矩形除了那个矩形之外没有任何颜色。必须至少有1个,因为最后一个矩形不能重叠。 将其添加到R的结尾。
2)继续(1)直到没有完美的形状。
3)下一部分很棘手。对于每个部分:如果该部分加上R中所有矩形的某些集体部分,形成一个完美的矩形,则在R中所有其他现有矩形之前将该矩形插入列表的开头。
4)重复(3)直到没有更多。
然后你就完成了。