重新计算一个范围内的值

问题描述

首先让我向您介绍这个问题。

比方说,我们有一个传感器可以测量某些东西,油箱油/水位等。 传感器经过校准,可进行0-3.5 [m]的测量。 据此,我们收到的反馈百分比为0到100%。

现在,让我们说0 [m]为我的零,我们希望1,2 [m]为0%,而2,4 [m]为100%。

要做的第一件事是计算原始比例尺中1,2 [m]和2,4 [m]的值是多少。

1,2 [m]-> 34.2%和2,4 [m]-> 68,4%

因此,原始比例的34.2%的值对应于新比例的0%。 原始比例的68.4%对应新比例的100%。

现在,如果我想将原始比例重新缩放到这两个值之间,您将如何做? 我怀疑下一步是从测量值替换新的“零”(34,2%),然后我需要将第一个映射到另一个,或者将另一个映射到第一个……类似的东西。

提前谢谢!!抱歉,如果不清楚,我尝试尽可能地将问题弄清楚。


P.S。解决方案表示赞赏,但我期待听到解释,这样会更好。

解决方法

首先,让我们为这些值命名。

原始高度范围是:

Hmin_0 = 0[m],Hmax_0 = 3.5[m]

新的高度范围是:

Hmin_1 = 1.2[m],Hmax_1 = 2.4[m]

让我们致电x传感器的输出。我们有:

x(h=0[m])=0 %
x(h=3.5[m])=100 %

让我们分别调用x0和x1作为h = Hmin_1和h = Hmax_1的传感器读数:

x0=Hmin_1/(Hmax_0-Hmin_0)*100   [%]
x1=Hmax_1/(Hmax_0-Hmin_0)*100   [%]

我们正在寻找一个函数f(x)= a * x + b这样:

f(x0) = 0
f(x1) = 100

您可以检查该功能:

f(x)=(x-x0)/(x1-x0)*100 (equ.1)    

是您要寻找的。实际上,f(x0)= 0和f(x1)= 100都是必需的。

或者,如果您不相信,可以求解2个线性方程组:

a * x0 + b = 0   (equ. 2)
a * x1 + b = 100 (equ. 3)

这将给出:

a=100/(x1-x0) 
b=-x0*100/(x1-x0). 

所以,f(x)= a * x + b等于等式

致谢

,

传感器经过校准,可进行0-3.5 [m]的测量。

max = 3.5

我们收到百分比为0到100%的反馈。

我们称之为feedback

我们希望1.2 [m]为0%,2.4 [m]为100%。

low = 1.2high = 2.4

然后可以按以下方式得出映射:

首先将feedback转换为原始绝对度量,即max * feedback/100

然后减去low,以确保绝对值low映射为0。

然后应用一个系数,使high - low的绝对距离映射为100。因此该系数为100 / (high - low)

就是这样。因此,最终公式为:

(max * feedback / 100 - low) * 100 / (high - low)

或等效名称:

(max * feedback - low * 100) / (high - low)

以下是一个JavaScript代码段,该代码段可进行此转换以在[0,10,20,...,100]中进行反馈:

let max = 3.5;
let low = 1.2;
let high = 2.4;

for (let feedback = 0; feedback <= 100; feedback += 10) {
    let output = (max * feedback - low * 100) / (high - low);
    console.log(feedback,"=>",output);
}