【问题标题】:Recalculate value from one range to other将值从一个范围重新计算到另一个范围
【发布时间】:2021-01-16 12:43:41
【问题描述】:

首先让我介绍一下这个问题。

假设我们有一个传感器正在测量某物,如油箱油位/水位等。 传感器经过校准,可在 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 %),然后我需要将第一个映射到另一个,或者另一个映射到第一个......类似的东西。

提前致谢!!对不起,如果不清楚,我尽量把问题弄清楚。


附:解决方案表示赞赏,但我期待听到解释,这会更好。

【问题讨论】:

  • 您希望输出是百分比还是绝对值?
  • 我不清楚你所说的重新缩放是什么意思。如果原始反馈为 0%,您希望将其转换为什么?
  • @trincot 百分比。因此,例如,如果原始反馈为 34.8%,我希望它在我的新比例/间隔中为 0%,但是您想调用它。如果在我的新量表中原始反馈是 68.4%,我希望它是 100%。如果原始反馈是 0%,我认为新反馈应该是 -100%。

标签: algorithm math numbers mapping intervals


【解决方案1】:

传感器经过校准,可在 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 sn-p,它在 [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);
}

【讨论】:

    【解决方案2】:

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

    原来的高度范围是:

    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 等同于 equ.1

    问候

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-03
      • 2014-03-14
      • 2020-06-05
      • 2017-05-21
      • 1970-01-01
      • 2020-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多