0

多数のウィンドウがあり、それらをタイル状に並べて画面の作業領域全体をカバーしたいと考えています。ウィンドウが少ない場合、個々のウィンドウは大きくなります。ウィンドウはほぼ正方形です。例は 800x585 です。それらは常に固定比率でスケーリングされます。

ここに画像の説明を入力

この例では、ウィンドウが 4 つしかないため、計算により、画面の塗りつぶしが 2x2 グリッドで行われることがわかります。

ここに画像の説明を入力

この例では 8 つのウィンドウがありますが、4 列 x 2 行 (比率が固定されているため 2 行目の下に大きなギャップが残る) の代わりに、ウィンドウは 3x3 に分割され、1 つの空のスポットがあります。

基本的な考え方は、覆われていない画面スペースをできるだけ少なくすることです。私は AutoIt でこれをやろうとしていますが、誰かがこれを C# または Python で説明できれば、私も同様に幸せです:)

4

1 に答える 1

0

擬似コードでのブルート フォース アルゴリズム:


始める:

nをウィンドウの数とします

次のような を見つけます。

  • 平方根sは正の整数です
  • s >= n

無駄な領域= sスロットの正方形グリッド内の実際の無駄な領域とします。

x =平方根sとする

y = 平方根sとする

各 ( i , j ) について:

  • ijは正の整数です

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

a = 長方形グリッド実際の無駄な領域 ( i , j )とする

<無駄な領域ある場合

  • xiに設定
  • yjに設定
  • 無駄な領域aに設定します

次へ ( i , j )

( x , y )で画面を並べて表示

終わり


注: ウィンドウの比率と画面の比率についていくつかの仮定を立てることができる場合、要因のいくつかのペアを除外することができます。仮定を立てることができない場合は、力ずくで行うことができます。数学のバックグラウンドが強い人の方がうまくいくかもしれません。

実際のコンピュータでは、 nが絶対的な意味で大きくなることはめったにないことを念頭に置くと、多くの状況ではおそらくブルート フォースが許容されます。

于 2013-12-15T20:05:56.380 に答える