我有一个带有最小和最大对数刻度的图形。我需要指定此刻度的刻度。我想指定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]
提前致谢。
最佳答案
您可以将给定值的第n个根作为标度。取min
和max
值可防止浮点错误。
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; }