首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >给定高宽比用n个元素填充网格的算法

给定高宽比用n个元素填充网格的算法
EN

Stack Overflow用户
提问于 2016-08-17 13:19:23
回答 1查看 142关注 0票数 0

我需要找到由n个元素填充的网格的尺寸,给定一个高宽比。网格不一定要满。

例如,如果n=8和高宽比为1:1,我应该得到一个3x3的网格。如果其中有8个元素,就会留下一个空单元格:

代码语言:javascript
复制
***
***
**

如果n=13和高宽比为1:2,我将得到一个6×3网格:

代码语言:javascript
复制
******
******
*

我确信有一种方法可以计算任意n和任何比率,但是我在网上找不到任何东西(可能是因为我不知道这类问题的关键字)。

注意:这是我用Javascript进行的可视化,但我不需要JS代码,只是一个算法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-17 13:30:28

步骤1 -查找乘法器:

如果高宽比为3:4,则a=3b=4n = elements

multi = math.ceil( SQRT(n / (a*b)) )

步骤2 -查找维度:

dim1 = a * multi

dim2 = b * multi

示例.

N= 59。A= 2,b= 3。

代码语言:javascript
复制
 multi = math.ceil  (SQRT (59 / (2*3))) = math.ceil(  sqrt(9.833)  ) = 4
 dim1 = 2*4 = 8; 
 dim2 = 3*4 = 12;

8*12 = 96 (因此59符合它)。以前是54 (6x9) -它太小了。

示例2.

N= 24。A= 1,b= 2。

代码语言:javascript
复制
 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。A= 1,b= 3。

代码语言:javascript
复制
 multi = math.ceil  (SQRT (27 / (1*3))) = math.ceil(  sqrt(9)  ) = 3
 dim1 = 1*3 = 3; 
 dim2 = 3*3 = 9;

3*9 = 27 (so 27 (边界值)适合它)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38997860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档