我有一个大窗口,其中有n个小窗口。任务放置小窗户,使他们之间没有交集,或说这是不可能的。矩形的马赛克
所有窗口都是矩形的,并具有所有顶点的坐标。
我知道确定是否容易将其中一个矩形与其他矩形交叉。只要查看包含任何其他矩形中顶点的坐标就足够了。
但是,这里是如何找到一个可以移动这个矩形的空闲区域?
就我而言,小窗口出现在大窗口中。问题看起来像。
我有一个大窗口,其中有n个小窗口。任务放置小窗户,使他们之间没有交集,或说这是不可能的。矩形的马赛克
所有窗口都是矩形的,并具有所有顶点的坐标。
我知道确定是否容易将其中一个矩形与其他矩形交叉。只要查看包含任何其他矩形中顶点的坐标就足够了。
但是,这里是如何找到一个可以移动这个矩形的空闲区域?
就我而言,小窗口出现在大窗口中。问题看起来像。
这看起来有点像Rectangle Packing问题。 有examples和implementations那里可以帮助。
不同之处在于你正在处理的是UI,而不是纹理或其他问题。你可以选择上面提到的解决方案,但我想你会需要某种过渡动画,以便用户看到/理解他/她的窗口最终会到达哪里。
这取决于我想这个功能是如何工作的。用户是否允许首先与窗口相交?
我想所有的矩形将需要适应一个larget一个(显示)
我一直在玩的纸在我的办公桌不同大小的矩形和这里的东西,想到:
1st确定您是否有足够的空间:将左侧空间分割为矩形并添加矩形区域,然后检查空间区域是否大于或等于交叉区域。如果继续。
这里就是我所说的剩余空间拆分成箱找到区域:
我建议首先检查矩形包装解决方案,我的联系,因为它们使用的可用空间优化它实际上工作,而不是我通过玩纸带来:) 我还没有编码/测试我的解决方案呢。
HTH
一个简单的解决方案是蛮力。对所有小矩形进行排列,并将它们放置在最左上角的位置。如果你设法放置它们,你有一个解决方案。如果你失败了,你回到下一个排列并再试一次。如果用完选项,则失败。这将起作用,但显然当矩形数量增加时,它很快就无法使用。