【发布时间】:2011-08-30 05:46:35
【问题描述】:
我有一个大窗口,里面有 n 个小窗口。放置小窗户的任务,使它们之间没有交集,或者说这是不可能的。
所有的窗口都是矩形的,并且有所有顶点的坐标。
我知道确定一个矩形是否与其他矩形交叉是多么容易。看看是否包含其他矩形的顶点坐标就足够了。
但是这里是如何找到一个可以移动这个矩形的空闲区域?
就我而言,小窗口出现在大窗口中。问题看起来像。
【问题讨论】:
标签: geometry
我有一个大窗口,里面有 n 个小窗口。放置小窗户的任务,使它们之间没有交集,或者说这是不可能的。
所有的窗口都是矩形的,并且有所有顶点的坐标。
我知道确定一个矩形是否与其他矩形交叉是多么容易。看看是否包含其他矩形的顶点坐标就足够了。
但是这里是如何找到一个可以移动这个矩形的空闲区域?
就我而言,小窗口出现在大窗口中。问题看起来像。
【问题讨论】:
标签: geometry
这看起来有点像Rectangle Packing 问题。 examples 和 implementations 可以提供帮助。
不同之处在于您处理的是 UI,而不是纹理或其他问题。您可以采用上述解决方案,但我想您将需要某种过渡动画,以便用户看到/理解他/她的所有窗口将在哪里结束。
我认为这取决于此功能的工作方式。是否允许用户首先与窗口相交?
我想所有的矩形都需要适应一个大的(显示器)
我一直在桌子上玩不同大小的矩形纸,我想到了以下几点:
第一个确定您是否有足够的空间:将剩余的空间分割成矩形并添加矩形区域,然后检查空间区域是否大于或等于相交区域。如果是这样,请继续。
这就是我将剩余空间分成盒子以找到该区域的意思:
我建议首先检查我链接到的矩形包装解决方案,因为它们以最佳方式使用可用空间并且它确实有效,而不是我玩纸带来的东西 :) 我还没有编码/测试我的解决方案。
HTH
【讨论】:
一个简单的解决方案是蛮力。取小矩形的所有排列,一次一个地放置在最左上角的位置。如果你设法放置它们,你就有了解决方案。如果失败,则返回到下一个排列并重试。如果你用完了选项,那么你就失败了。这会起作用,但很明显,当矩形数量增加时,它很快就会变得不可用。
【讨论】: