我有一个大窗户,里面有n个小窗户。任务是放置小窗口,使它们之间没有交叉点,或者说它是不可能的。
所有窗口都是矩形的,并且具有所有顶点的坐标。
我理解确定是否与其他矩形交叉是多么容易。它足以查看是否包含任何其他矩形中顶点的坐标。
但是这里是如何找到一个可以移动这个矩形的空闲区域?
在我的情况下,小窗口出现在大窗口中。问题看起来像。
答案 0 :(得分:1)
这有点像Rectangle Packing问题。 有examples和implementations可以提供帮助。
不同的是,你正在处理UI,而不是纹理或其他一些问题。您可以使用上述解决方案,但我想您需要某种过渡动画,以便用户看到/了解他/她的所有窗口最终会在哪里。
这取决于我认为这个功能的工作原理。用户是否允许首先与窗口交叉?
我想所有的矩形都需要适合一个大的(显示)
我一直在桌子上玩不同大小的纸张矩形,这是我想到的:
第一确定您是否有足够的空间:将左侧空间拆分为矩形并添加矩形区域,然后检查空间区域是否大于或等于交叉区域。如果是这样继续。
这就是我的意思,将剩余空间拆分成方框以查找区域:
我建议首先检查我链接的矩形包装解决方案,因为它们最佳地使用可用空间并且它实际上有效,而不是我通过玩纸张带来的东西:) 我还没有对我的解决方案进行编码/测试。
HTH
答案 1 :(得分:0)
一个简单的解决方案是蛮力。取出小矩形的所有排列,并在最左上方的位置一次放置一个。如果你设法放置它们,你就有了解决方案。如果失败,则回溯到下一个排列并再试一次。如果你的选项用完了,那你就失败了。这将起作用,但显然当矩形数量增加时它将很快无法使用。