gpt4 book ai didi

javascript - 计算对数刻度段的长度

转载 作者:行者123 更新时间:2023-12-03 12:19:39 25 4
gpt4 key购买 nike

我想为一系列事件计算一行的长度。

我正在使用以下代码进行此操作。

var maxLineLength = 20;
var lineLen = function(x, max) {
return maxLineLength * (x / max);
}
var events = [0.1, 1, 5, 20, 50];
var max = Math.max.apply(null, events);
events.map(function (x) {
console.log(lineLen(x, max));
});


这行得通,但是我使用线性缩放,而我想使用对数,因为我不希望小事件在大事件出现时也变得太小。

我修改了lineLen函数,如下所示,但是-显然-它对于等于1的事件不起作用,因为对数1为零。我想显示等于1(适当缩放)的事件,而不是使它们变为零。我还需要正数来保持正数(0.1变为负数)

如何修改lineLen以使用对数刻度?

var maxLineLength = 20;
var lineLen = function(x, max) {
return maxLineLength * (Math.log(x) / Math.log(max));
}
var events = [0.1, 1, 5, 20, 50];
var max = Math.max.apply(null, events);
events.map(function (x) {
console.log(lineLen(x, max));
});

最佳答案

您可以使用log(x+1)而不是log(x),这不会太大改变值,并且比率保持较小的数字。

var maxLineLength = 20;
var lineLen = (x, max) => maxLineLength * Math.log(x+1)/Math.log(max+1);
var events = [ 0.1, 1, 5, 20, 50];
var visualizer = function(events){
var max = Math.max.apply(null, events);
return events.reduce((y, x) => {
y.push(lineLen(x, max));
return y;
}, []);
};

console.log(visualizer(events));

关于javascript - 计算对数刻度段的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47189078/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com