1

通过回顾thisthis,我想出了一个函数,它可能比它应该的更复杂,但是,伙计,我的数学 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。

我需要这个用于监视器上的实时摄像机馈送帧分布,但我完全迷失了。我能想到的唯一方法是构建一个额外的函数来输入先前生成的数字并再次划分,但这似乎是错误的。

解决这个问题的最佳解决方案是什么?

4

1 回答 1

1

对于正方形:

function squareNeeded(num) {
    return Math.ceil(Math.sqrt(num));
}

http://jsfiddle.net/aKNVq/

(我认为您的意思是大于给定数量的整数的最小平方,因为如果您指的是矩形,那么您的七示例将是 2*4 而不是 3*3。)

于 2013-10-21T11:31:36.980 回答