如何获取一组数字并将它们“拟合”到最小/最大范围内?

时间:2014-03-02 18:35:22

标签: javascript arrays math numbers

我有一个生成值数组的函数,如:

[343,709,88,4,0] =总共1144。

我的函数生成的值总是加起来设置为 nMax (在本例中为1144)。

但是现在我分开函数我可以传递这些值的数组并将它们放入由 nMin 确定为 nMax 的范围内,像refit(array,nMin,nMax)。

假设nMin = 30,nMax = 1144。

对于这个例子,这意味着我需要0变为30,其余数字按比例变小,所以所有数字仍然加起来 nMax (1144)。

我尝试根据我在此处找到的公式创建一个函数(https://math.stackexchange.com/questions/43698/range-scaling-problem),但它不起作用:

var oldMin = 0; //constant
var oldMax = 1144; //constant

function refit(oldArray, newMin, newMax) {
    var newArray = Array(oldArray.length);
    for(var i=0; i < oldArray.length; ++i) {
        var oldValue = oldArray[i];
        var newValue = (newMin * (1 - ((oldValue - oldMin) / (oldMax - oldMin)))) + (newMax * ((oldValue - oldMin) / (oldMax - oldMin)));
        console.log(oldValue + ' = ' + newValue);
        newArray[i] = newValue;
    }
    return newArray;
}

输出结果如下:

343 = 364.00524475524475
709 = 720.4073426573426
88 = 115.6923076923077
4 = 33.89510489510489
0 = 30 

哪个不正确,因为输出加起来 1264 ,这是不正确的。

建议?

0 个答案:

没有答案