2013-10-21 69 views
1

的氮量通過審查thisthis,我想出了一個功能,這可能是更復雜的比它應該是,但是,男人,我的數學SUX:計算最大可用的行和列,以填補項目

function tablize(elements) 
{ 
    var root = Math.floor(Math.sqrt(elements)); 

    var factors = []; 

    for (var i = 1; i <= root; i++) 
    { 
     if (elements % i === 0) 
     { 
      factors.push([i, elements/i]); 
     } 
    } 

    var smallest = null; 

    for (var f = 0; f < factors.length; f++) 
    { 
     var factor = factors[f]; 

     var current = Math.abs(factor[0] - factor[1]); 

     if (!smallest || factors[smallest] > factor) 
     { 
      smallest = f; 
     } 
    } 

    return factors[smallest]; 
} 

雖然這確實有效,但它提供了我不滿意的結果。例如 - 7,它分爲1x7,我希望它是3x3。這是填充7個元素所需的最小,最佳網格大小。

另外 - 3,它被分成1x3,我希望它是2x2。

我需要這個用於顯示器上的實時攝像頭幀分配,但我完全失去了。我能想到的唯一方法是建立一個額外的功能,以先前生成的數字進行再次分割並再次分割,但這似乎是錯誤的。

解決此問題的最佳解決方案是什麼?

回答

1

對於正方形:

function squareNeeded(num) { 
    return Math.ceil(Math.sqrt(num)); 
} 

http://jsfiddle.net/aKNVq/

(我想你指的是整個數大於給定的量更大的最小平方,因爲如果你的意思是一個矩形,然後你的例子爲七將是2 * 4而不是3 * 3)。