我有一个JavaScript滑块,根据其位置输出一个介于0和1之间的值。我想将该值转换为另一个介于100到1000之间的标度值,但要基于一组介于100到1000之间的数据点的分布。

这里的用例是,当一组数字非常接近时,我希望滑块对更改不太敏感。例如,假设比例尺的值是:

100, 200, 300, 500, 1000

值100-500可能占据滑块的前80%,这是因为它们分布更紧密,因此更容易在它们之间进行选择。

显然有一个数学函数可以计算出来,可能涉及标准偏差和系数。有人知道这是什么吗?

最佳答案

在较大的值之间使用线性插值,例如

var bigValues = [100, 200, 300, 500, 1000];
var input; /* will vary in the range [0.0..1.0] */
var idx; /* index of nearest entry in bigValues below input */
var frac; /* fraction [0.0..1.0) in interval in bigValues */
var output;
/* try some test values for input */
for (var i = 0; i<=20; i++) {
    input = i * 0.05;
    idx = Math.floor(input * (bigValues.length - 1));

    frac = (input - (idx) / (bigValues.length - 1)) * (bigValues.length - 1);
    if (frac == 0) { /* no need to calculate */
        output = bigValues[idx];
    }
    else {
        output = bigValues[idx] + (bigValues[idx+1] - bigValues[idx]) * frac;
    };
    document.write(input + ', ' + output + '<br />');
}

关于javascript滑块加权值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8731326/

10-11 12:20