【发布时间】:2018-04-30 09:42:28
【问题描述】:
我想计算长度为totalLineLength 的行的子段的长度,其中子段与给定事件的日志成正比。
视觉表示:|---|-----|---------|由子段组成的行。
我希望计算的子段的总和等于totalLineLength,并且必须打印Success。 Log(x+1) 也必须使用(因为它总是会为肯定的论点提供肯定的结果,并且比例也为 1)。
使用线性缩放,我正在这样做,它可以工作。
var totalLineLength = 20;
var eventTotal;
var calcSubSegment = function(x) {
return totalLineLength * x / eventTotal;
}
var events = [0.1, 1, 22];
eventTotal = events.reduce((a, b) => a + b, 0);
var subSegments = events.map(calcSubSegment);
var segmentLength = subSegments.reduce((a, b) => a + b);
if (segmentLength != totalLineLength) {
console.log("Error:", segmentLength);
} else {
console.log("Success");
}
使用 log(x+1) (calcSubSegment 更新),它不起作用。
var totalLineLength = 20;
var eventTotal;
var calcSubSegment = function(x) {
return totalLineLength * Math.log(x+1) / Math.log(eventTotal+1);
}
var events = [0.1, 1, 22];
eventTotal = events.reduce((a, b) => a + b, 0);
var subSegments = events.map(calcSubSegment);
var segmentLength = subSegments.reduce((a, b) => a + b, 0);
if (segmentLength != totalLineLength) {
console.log("Error:", segmentLength);
} else {
console.log("Success");
}
我的代码有什么问题?我想是 eventTotal 计算,但我不确定如何进行。
我应该如何使用对数缩放?我也想要一个数学解释。
【问题讨论】:
-
log(0.1 + 1) + log(1 + 1) * log(22 + 1) = log(1.1*2*23) = log(50.6)和log(0.1 + 1 + 22 + 1) = log(24.1)。这应该如何等于线性情况?请详细说明您的期望。 -
子段的长度不必等于线性情况,但它们的总和必须等于totalLineLength。我不明白你为什么要对 log(x+1) 求和,其中 x 是事件。
-
我认为这是你所做的。
-
我和 log(x+1) / log(eventTotal+1) not log(x+1)
-
好的。因素
log(eventTotal+1),因为它对所有人都是一样的。然后,你总结log(x+1)。对吗?
标签: javascript math logarithm