我有一个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 />'); }