確定的數目這裏就是我試圖完成。說我有100個物品。我想創建一個「網格」(每個項目包含一個x,y點)。我希望網格儘可能接近正方形。 是否有任何一種數學來確定網格寬度,以及網格高度只需要一個數字?(通過網格寬度和高度來表示x項目的數量和Y項目的數量)創建格列元素
現在,我想它會是有效的取數的平方根,說VARI =開方(45),從VARI刪除小數位... X = VARI ...則Y是VARI + 1 ?
確定的數目這裏就是我試圖完成。說我有100個物品。我想創建一個「網格」(每個項目包含一個x,y點)。我希望網格儘可能接近正方形。 是否有任何一種數學來確定網格寬度,以及網格高度只需要一個數字?(通過網格寬度和高度來表示x項目的數量和Y項目的數量)創建格列元素
現在,我想它會是有效的取數的平方根,說VARI =開方(45),從VARI刪除小數位... X = VARI ...則Y是VARI + 1 ?
平方根正是你所需要的。
N
x=floor(sqrt(N))
y=raise(N/x)
這是具有超過N個位置並且最接近正方形的最小矩形。
現在......如果你想找到一個正好有N個位置並且最接近正方形的矩形......那是另一個問題。
你需要找的N,X因素,這是最接近
你必須通過N的因素來運行,並找到最接近的sqrt(N)。然後矩形是x乘N/x,都是整數。
這裏有幾個問題需要考慮。如果你希望你的網格儘可能的平方,對於許多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
我正在尋找解決這個問題的HTML/CSS有一個固定的尺寸和N個項目將適合的網格。我最終創建了自己的JavaScript腳本。
如果您對我使用的方法和數學感興趣,您可以閱讀http://machinesaredigging.com/2013/05/21/jgridder-how-to-fit-elements-in-a-sized-grid/,它全部記錄在那裏。我使用了遞歸,它運行得非常好,你可以使用你自己的語言相同的方法。希望這可以幫助。
我還沒有看,但感謝分享。即使它不能幫助我,但希望它能幫助其他人。 – 2013-05-21 23:56:41
我探索了Eli的答案並找到了一些我想指出的東西。對於一般性的緣故,必須添加1至C僅當R X C(C = INT(N/R))是不完全N.因此,異常包括具有平方根它們是完全產物數字和號碼兩個整數。
例如:
N = 12
R = 3
C = 4 (int(N/R))
希望它能幫助。
良好的信息。我相信我的情況下,額外的細胞不會呈現(我甚至不記得任何更多的東西我甚至工作哈哈) – 2013-05-21 23:58:31
我怎麼能實現第二種情況?用最小的空單元格找到最好的網格。 – 2018-02-19 12:25:18