我在数学上非常糟糕,所以请原谅我,如果这是非常明显的,我确实做了研究,找不到符合我需要的东西。
我正在尝试让我的音频分析仪在宽度上做出响应。事实证明这很困难,因为frequency array具有固定的大小。
通过计算每个条的宽度,以及画布的宽度,我可以很容易地找出它内部可以容纳多少条。
因此,假设画布宽度为20像素,每个条形宽度为4像素(包括间距)。这意味着5个条可以放在画布内。因此,使用此信息,我们可以创建一个函数,将频率数组长度调整为5,并将频率均匀分配到这5个索引中。
这样就不会遗漏任何频率范围,分析仪可以调整到任何宽度,并且仍可填充空间。
function resize(array, integer) {
...
return result;
}
array = [1, 2, 3, 4, 5... 100] // Array that goes from 1 to 100 (100 indexes)
resize(array, 10) // [1, 10, 20, 30, 40, 50, 60, 70, 80, 90]
这是画布上显示的原始数组(虚线条是画布外的那些)
现在我想调整数组的大小,使条形像这样适合画布(本例中为20条)
我真的希望我在这里解释得很好,这很难解释
答案 0 :(得分:0)
此解决方案有效。现在。返回原始数组的第n个值factor
。
function arrayResize(array, integer) {
var factor = array.length / integer;
return Array.apply(null, { length: integer }).map(function (_, i) {
return array[Math.floor(i * factor)];
});
}
var array = Array.apply(null, { length: 100 }).map(function (_, i) { return Math.floor(i / 10); });
document.write('<pre>' + JSON.stringify(array, 0, 4) + '</pre>');
document.write('<pre>' + JSON.stringify(arrayResize(array, 5), 0, 4) + '</pre>');
document.write('<pre>' + JSON.stringify(arrayResize(array, 10), 0, 4) + '</pre>');
document.write('<pre>' + JSON.stringify(arrayResize(array, 20), 0, 4) + '</pre>');