通过回顾this和this,我想出了一个函数,它可能比它应该的更复杂,但是,伙计,我的数学 sux:
function tablize(elements)
{
var root = Math.floor(Math.sqrt(elements));
var factors = [];
for (var i = 1; i <= root; i++)
{
if (elements % i === 0)
{
factors.push([i, elements / i]);
}
}
var smallest = null;
for (var f = 0; f < factors.length; f++)
{
var factor = factors[f];
var current = Math.abs(factor[0] - factor[1]);
if (!smallest || factors[smallest] > factor)
{
smallest = f;
}
}
return factors[smallest];
}
虽然这确实有效,但它提供了我不满意的结果。
例如 - 7,它被分成 1x7,我希望它是 3x3。这是填充 7 个元素所需的最小、最佳网格大小。
另外 - 3,它分为 1x3,我希望它是 2x2。
我需要这个用于监视器上的实时摄像机馈送帧分布,但我完全迷失了。我能想到的唯一方法是构建一个额外的函数来输入先前生成的数字并再次划分,但这似乎是错误的。
解决这个问题的最佳解决方案是什么?