1

好的,这就是我想要完成的。假设我有 100 件商品。我想创建一个“网格”(每个项目由一个 x、y 点组成)。我希望网格尽可能接近正方形。是否有任何数学方法可以通过一个数字确定网格宽度和网格高度?(网格宽度和高度是指 x 项的数量和 Y 项的数量)

现在我考虑取数字的平方根是否有效,比如 varI=sqrt(45),从 varI...X=varI...中删除小数位,然后 Y 将是 varI+1?

4

4 回答 4

4

平方根正是您所需要的。

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

这是具有 N 个以上位置且最接近正方形的最小矩形。

现在......如果你想找到一个正好有N个位置并且最接近正方形的矩形......那是一个不同的问题。

您需要找到最接近的 N, x 因子

您必须遍历 N 的因子并找到最接近 sqrt(N) 的因子。那么矩形是 x 乘 N/x,都是整数。

于 2010-02-04T05:36:59.803 回答
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
于 2010-02-04T03:53:22.373 回答
1

我也在为 html/css 中的网格解决这个问题,该网格具有固定的尺寸和 N 项适合的位置。我最终在 javascript 中为此创建了自己的脚本。

如果您对我使用的方法和数学感兴趣,可以阅读http://machinesaredigging.com/2013/05/21/jgridder-how-to-fit-elements-in-a-sized-grid/,它是所有记录在那里。我使用了递归,效果很好,您可以对自己的语言使用相同的方法。希望这可以帮助。

于 2013-05-21T23:00:29.380 回答
0

我探索了 Eli 的答案,发现了一些我想指出的东西。为通用起见,只有当 R x C (C = int(N/R)) 不完全是 N 时,才必须将 C 加 1。因此,例外情况包括具有平方根的数字和恰好是乘积的数字两个整数。

例如:

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

希望能帮助到你。

于 2016-08-16T19:55:29.843 回答