0

我有许多窗口,我想将它们平铺以覆盖屏幕的整个工作区域。如果窗口较少,则单个窗口较大。窗户几乎是正方形的——例如 800x585。它们总是以固定的比例缩放。

在此处输入图像描述

在这个例子中,我只有 4 个窗口,所以我的计算应该算出填充屏幕是使用 2x2 网格完成的。

在此处输入图像描述

在此示例中,我有 8 个窗口,但不是 4 列 x 2 行(由于固定比例,这将在第二行下方留下一个巨大的间隙),窗口被划分为 3x3,并带有一个空白点。

基本思想是尽可能少地留下未覆盖的屏幕空间。我正在尝试在 AutoIt 中执行此操作,但如果有人可以用 C# 或 Python 解释这一点,我同样很高兴 :)

4

1 回答 1

0

伪代码中的蛮力算法:


开始:

n为窗口数。

找到s使得:

  • 平方根s是一个正整数
  • s >= n

wasteed-area = s个槽的方格中的实际浪费面积。

x = 平方根s

y = 平方根s

对于每个 ( i , j ),其中:

  • ij是正整数

  • i * j = n --------------> ijn的因数

a = 矩形网格的实际浪费面积 ( i , j )

一个<浪费区域然后

  • x设置为i
  • y设置为j
  • 浪费区域设置

下一个 ( i , j )

带有 ( x , y )的平铺屏幕

结尾


注意:如果可以对窗口的比例和屏幕的比例做出一些假设,那么可以排除一些因素对。如果无法做出任何假设,那么蛮力就是我能做到的。具有较强数学背景的人可能会做得更好。

请记住,在真正的计算机上,绝对意义上的n可能很少很大,在许多情况下,蛮力可能是可以接受的。

于 2013-12-15T20:05:56.380 回答