2010-02-04 59 views
1

確定的數目這裏就是我試圖完成。說我有100個物品。我想創建一個「網格」(每個項目包含一個x,y點)。我希望網格儘可能接近正方形。 是否有任何一種數學來確定網格寬度,以及網格高度只需要一個數字?(通過網格寬度和高度來表示x項目的數量和Y項目的數量)創建格列元素

現在,我想它會是有效的取數的平方根,說VARI =開方(45),從VARI刪除小數位... X = VARI ...則Y是VARI + 1 ?

回答

2

平方根正是你所需要的。

N 
x=floor(sqrt(N)) 
y=raise(N/x) 

這是具有超過N個位置並且最接近正方形的最小矩形。

現在......如果你想找到一個正好有N個位置並且最接近正方形的矩形......那是另一個問題。

你需要找的N,X因素,這是最接近

你必須通過N的因素來運行,並找到最接近的sqrt(N)。然後矩形是x乘N/x,都是整數。

2

這裏有幾個問題需要考慮。如果你希望你的網格儘可能的平方,對於許多N,它將會有空單元。一個簡單的例子是N = 10。您可以爲它創建一個3x4網格,但它將有兩個空單元格。另一方面,2x5網格將沒有空單元。一些Ns(素數)在網格中總是有空單元格。

但是,如果你只是想要廣場,不關心空場,那麼一般情況下,你應該採取平方根。說你的電話號碼是N.然後,拿R = int(sqrt(N))。接下來,做一個整數除法N/R,取商並加1。這是C。網格是RxC。請注意,當N是一個正方形(如100),這是一個特殊情況,所以不要加1到商。

例子:

N = 40 
R = int(sqrt(N)) = 6 
C = int(40/6) + 1 = 7 
grid is 6x7 
+0

良好的信息。我相信我的情況下,額外的細胞不會呈現(我甚至不記得任何更多的東西我甚至工作哈哈) – 2013-05-21 23:58:31

+0

我怎麼能實現第二種情況?用最小的空單元格找到最好的網格。 – 2018-02-19 12:25:18

1

我正在尋找解決這個問題的HTML/CSS有一個固定的尺寸和N個項目將適合的網格。我最終創建了自己的JavaScript腳本。

如果您對我使用的方法和數學感興趣,您可以閱讀http://machinesaredigging.com/2013/05/21/jgridder-how-to-fit-elements-in-a-sized-grid/,它全部記錄在那裏。我使用了遞歸,它運行得非常好,你可以使用你自己的語言相同的方法。希望這可以幫助。

+0

我還沒有看,但感謝分享。即使它不能幫助我,但希望它能幫助其他人。 – 2013-05-21 23:56:41

0

我探索了Eli的答案並找到了一些我想指出的東西。對於一般性的緣故,必須添加1至C僅當R X C(C = INT(N/R))是不完全N.因此,異常包括具有平方根它們是完全產物數字和號碼兩個整數。

例如:

N = 12 
R = 3 
C = 4 (int(N/R)) 

希望它能幫助。