如何找到包含一定数量单元格的表格布局,这些单元格的维度比率最接近给定的宽高比

时间:2017-05-31 17:37:03

标签: layout aspect-ratio closest

如何找到包含一定数量单元格( N )的表格布局,其尺寸比例( x,y )最接近a给定纵横比( r )?

我需要在表格布局中放置一些项目,并且需要知道我的表格布局必须至少包括所有项目,同时尽可能接近给定的宽高比。< / p>

例如假设我们将 N = 5个项目放入表格布局中,我们的目标宽高比 r 为4:3( 1.33),然后3x2会比2x3表更好。

3 * 2(比例3:2 = 1.5,因此更接近1.33)

[1][2][3]
[4][5][_]

2 * 3(比例2:3 = 0.67)

[1][2]
[3][4]
[5][_]

1 个答案:

答案 0 :(得分:0)

我在Python中找到了这个解决方案。

def closest_layout_to_ratio(n, ratio=(4, 3)):
    if n == 1: return (1, 1)

    th_r = max(ratio)/min(ratio)
    th_x = th_r*math.sqrt(n/th_r)
    th_y = n / th_x

    best = (None, None, math.inf)
    for rounder in (math.floor, math.ceil):
        y = max(1, rounder(th_y))
        x = math.ceil(n/y)
        r = x / y
        if abs(r - th_r) < abs(best[2] - th_r):
            best = (int(x), int(y), r)

    return best[:2] if ratio[0] == max(ratio) else best[:2][::-1]