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 にしたいところです。
モニターでライブ カメラ フィード フレームを配信するためにこれが必要ですが、完全に迷っています。私が考えることができる唯一の方法は、以前に生成された数値をフィードして再度除算する追加の関数を構築することですが、それは間違っているようです。
これを解決するための最適なソリューションは何ですか?