我有许多窗户,我想将它们平铺以覆盖屏幕的整个工作区域。如果窗口较少,则各个窗口都较大。窗户几乎是正方形 - 例如800x585。它们总是以固定比例缩放。
在这个例子中我只有4个窗口,所以我的计算应该知道填充屏幕是用2x2网格完成的。
在这个例子中我有8个窗口,但是不是4个cols x 2个行(由于固定的比率,它会在第2行下面留下巨大的间隙),窗口被分成3x3,有一个空白点。
基本思路是尽可能少地留下未覆盖的屏幕空间。我试图在AutoIt中执行此操作,但如果有人可以用C#或Python解释这一点,我同样高兴:)
答案 0 :(得分:0)
伪代码中的强力算法:
开始:
让 n 为窗口数。
查找 s ,以便:
让浪费区域 = s 广场的方格中的实际浪费区域。
让 x =平方根 s
让 y =平方根 s
对于每个( i , j ),其中:
我和 j 是正整数
i * j = n --------------> i 和 j 是 n 的因素
让 a =矩形网格的实际浪费区域( i , j )
当 a < 浪费区域然后
下一步( i , j )
平铺屏幕( x , y )
结束
注意:如果可以对窗口的比例和屏幕的比例做出一些假设,那么可以排除一些因素。如果不能做出任何假设,那么蛮力就像我能做的一样好。数学背景较强的人可能会做得更好。
请记住,在真正的计算机上, n 在绝对意义上很少会很大,在许多情况下,暴力可能是可以接受的。