一组数字在对数刻度上均匀分布在最小值和最大值之间

时间:2017-12-07 18:17:06

标签: javascript math

我有一个带有最小值和最大值的对数刻度图。我需要在这个尺度上指定刻度。我想指定5个刻度。但问题是我希望滴答均匀分布。天真地,我试过这个:

while (tickValue <= upperTickValue) {
   tickValues.push(
       this.formatNumber.toView(tickValue, 3)
   );
   tickValue = tickValue + interval;
}

然而,这不会在对数刻度(duh)上产生均匀间隔的刻度。

我需要一组在对数刻度上均匀分布的数字。因此,例如,如果我绘制0.01到100的图形,那么正确的答案是:

[0.01, 0.1, 1, 10, 100]

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以将给定值的第n个根作为比例。使用minmax值来防止浮点错误。

function parts(min, max, scale) {
    var f = Math.pow(max / min, 1 / --scale),
        result = [min];

    while (--scale) {
        result.push(result[result.length - 1] * f);

    }
    result.push(max);
    return result;
}

console.log(parts(0.01, 100, 5));
console.log(parts(4, 5, 5));
.as-console-wrapper { max-height: 100% !important; top: 0; }