求5504×1504画布中按目标数量生成正方形的尺寸计算算法
算法方案
核心思路
要让正方形尽可能高效铺满5504×1504的画布,需先匹配画布的宽高比例(约3.66:1),再通过计算合适的行列数,得出不超出画布的最大正方形边长。
具体步骤
计算画布宽高比:
画布宽度W=5504,高度H=1504,宽高比ratio = W / H ≈ 3.66确定行列数:
设目标正方形数量为N,需找到整数x(每行数量)和y(每列数量),满足:x * y ≥ Nx / y尽可能接近ratio(减少留白浪费)
推导可得:x ≈ sqrt(N * ratio),y ≈ sqrt(N / ratio),再将x、y取整(向上取整或调整到最接近的整数组合,保证x*y≥N)
计算正方形边长:
正方形的最大可能边长为side = min(W / x, H / y),确保所有正方形都能放进画布。
示例计算
案例1:目标数量N=200
- 计算
x≈sqrt(200*3.66)=sqrt(732)≈27.05,取x=27 y≈sqrt(200/3.66)=sqrt(54.64)≈7.39,取y=8(此时27*8=216≥200)- 边长
side=min(5504/27≈203.85, 1504/8=188)→ 188
(若调整x=28,y=8,28*8=224≥200,边长仍为188,结果一致)
案例2:目标数量N=500
x≈sqrt(500*3.66)=sqrt(1830)≈42.78,取x=43y≈sqrt(500/3.66)=sqrt(136.61)≈11.69,取y=12(43*12=516≥500)- 边长
side=min(5504/43≈128, 1504/12≈125.33)→ 125
(验证:43*125=5375≤5504,12*125=1500≤1504,仅剩余4像素高度留白)
补充说明
- 若追求刚好生成
N个正方形(不多生成),可选择x*y=N的组合,比如N=200时取x=25,y=8,此时边长仍为188,仅每行留白更多。 - 若允许正方形之间有间隙,只需在计算边长时减去间隙宽度再调整即可。
内容的提问来源于stack exchange,提问作者Mehdi
相关产品推荐
相关产品推荐

