我不确定我是否使用了正确的数学术语,但这里有......
我目前有一个函数可以将数字平均除以另一个数字。
function factorIt(numPieces, totalSize) {
return totalSize / numPieces;
}
返回线性/偶数除法。我需要做的是返回形成不均匀/指数/对数集的值。
例如,运行10次以上的函数,在值500和10上将返回50次,因为500除以10是50.但我需要它返回更像的东西:
1, 2, 5, 10, 20, 30, 60, 100, 150, 200 // All should add up to input value
这10个值实际上总计达到了578,但是该功能需要它加起来为500的输入值。这是我目前所拥有的..
var output = '';
for (var i = 1; i<11; i++) {
output += factorIt(i, 10, 500) + '<br>';
}
function factorIt(i, numPieces, totalSize) {
var factor = 5;
return totalSize / numPieces / i * factor; // Err...something like this... :-S
}
此功能的最终目标是在二维空间上绘制位图,并在它们之间不断缩小的空间,以创建3d后退透视的幻觉。
有谁知道我需要的配方?我似乎无法绕过它......
答案 0 :(得分:0)
您的问题没有详细说明如何获取序列“1,2,5,10,20,30,60 ......”。如果您需要将值设置为整数,也不指定。
如果你想要一个加上给定总数的“准指数”序列,你可以通过某些固定因子使用连续除法:
var current = 500;
while (current > 0) {
var new = ceil(current / 2);
output = new + '<br>' + output;
current = current - new;
}
这将生成“1,2,4,8,16,31,63,125,250”,总计为500. ceil
是天花板函数,即大于或等于其参数的最大整数(总是“四舍五入”)。您还可以使用不同的因子来生成更短的序列(更小的因子)或更长的序列。
请注意,循环以按顺序生成值,即从最大值开始。此方法也可能在序列的开头产生1
的重复值(如果以2的任何幂开始...)
此外,此方法不允许您指定序列中元素的数字。如果你想拥有固定大小的序列,你可以尝试通过与
类似的方式计算因子f = exp(ln(total)/n)
但是,如果你只对整数值进行操作,则可能需要修改此因子以获得正确的结果。