问题描述
首先让我向您介绍这个问题。
比方说,我们有一个传感器可以测量某些东西,油箱油/水位等。 传感器经过校准,可进行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.2
和high = 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);
}