1

thisとthisを確認することで、関数を思いつきました。これはおそらく必要以上に複雑ですが、私の数学のサックスは次のとおりです。

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/

(長方形を意味する場合、7の例は3 * 3ではなく2 * 4になるため、指定された量よりも大きい整数の最小の2乗を意味していると思います。)

于 2013-10-21T11:31:36.980 に答える