2016-08-17 5 views
0

アスペクト比では、n要素で塗りつぶすグリッドの大きさを見つける必要があります。グリッドがいっぱいである必要はありません。例えば与えられたアスペクト比に対してn個の要素でグリッドを塗りつぶすアルゴリズム

N = 8、アスペクト比が1である場合、:1、私はそれに8つの要素を有する3×3のグリッドを取得する必要があり、私は空のセルが残されたい:

*** 
*** 
** 
場合の

のn = 13、アスペクト比が1:2、私は6×3グリッド得るだろう:

****** 
****** 
* 

を私がどれのためにこれを計算するための方法が存在することをかなり確信しているとどんな比率でも、私はウェブ上で何かを見つけることができませんでした(おそらく私はこの種の問題のキーワードを知らないので)。

注:私はJavaScriptを使用して作成していますが、JSコードは必要ありません。アルゴリズムのみです。

答えて

4

ステップ1 - 見つける乗数:4、次いでa=3b=4n = elements
multi = math.ceil( SQRT(n/(a*b)) ):アスペクト比が3

場合。
ステップ2 - サイズを見つける:
dim1 = a * multi;
dim2 = b * multi;

例。

N = 96 = 59、A = 2、B = 3

multi = math.ceil (SQRT (59/(2*3))) = math.ceil( sqrt(9.833) ) = 4 
dim1 = 2*4 = 8; 
dim2 = 3*4 = 12; 

8 * 12(したがって59がそれに収まります)。前は54(6x9) - それは小さすぎた。

例2
N = 24、A = 1、B = 2

multi = math.ceil (SQRT (24/(1*2))) = math.ceil( sqrt(12) ) = 4 
dim1 = 1*4 = 4; 
dim2 = 2*4 = 8; 

4×8 = 32(したがって24がそれに収まります)。

例3(正確にいっぱい)。
N = 27 = 1、B = 3

multi = math.ceil (SQRT (27/(1*3))) = math.ceil( sqrt(9) ) = 3 
dim1 = 1*3 = 3; 
dim2 = 3*3 = 9; 

3 * 9 = 27(したがって27(境界値)がそれに収まります)。

関連する問題