嗨,我左边有乱七八糟的混乱,它几乎是一些带有一些孔的矩形(用红色标记)。我正在寻找一种方法来将它们组合起来,以尽可能少的矩形结束它们,并且最好使它们中的大部分尽可能接近正方形。看看右边的图片,这是我想要完成的事情,只是更漂亮一点,最好更自动一点。
我需要这个用于游戏而且它不会在运行时完成,因此速度并不是真正的问题(除非它非常慢,因为我必须在相当大的时候做到这一点)但我以前从来没有做过这样的事情,老实说我也不知道从哪里开始。
我已经尝试过强行通过阵列,从左上角的方块开始,然后进行合并,直到没有任何东西可以合并,但它真的不是那么有效,因为它可以'考虑合并矩形3x2,4x3等。
如果您能指出任何可以处理此类事情的算法,或者想知道如何实现这一点,那将非常感激。谢谢!
答案 0 :(得分:2)
你可以试试贪心算法。当然,它不会是最优的(好吧,你没有严格定义最优性标准)。但也许它的表现足以满足您的需求。
所以你可以尝试:
如果您还关心结果矩形接近正方形,您可以尝试使用{0}的合适值来最大化a * totalArea + (1 - a) * (min_resulting_side/max_resulting_side)
之类的值。 a< 1。