如何缩放数字/值

inb*_*der 5 math

我正在使用一种硬件,我正在使用专有编程语言与VIA串行控制进行通信,该语言看起来像是一个非常愚蠢的C版本.

查询时,设备会报告当前的卷.范围是-60到+ 20.如何将其扩展到0-255范围,增量为3?

您是否还可以提供另一个值和其他比例的示例,即-15到15缩放到0-165等等

Pau*_*l R 6

要将范围x0..x1缩放到新范围y0..y1:

    y = y0 + (y1 - y0) * (x - x0) / (x1 - x0)
Run Code Online (Sandbox Code Playgroud)

所以对于上面的第一个例子,x0 = -60,x1 = 20,y0 = 0,y1 = 255:

    y = 0 + (255 - 0) * (x - -60) / (20 - -60)

=>  y = 255 * (x + 60) / 80
Run Code Online (Sandbox Code Playgroud)


小智 6

这实际上是简单的数学

首先,让我们删除负数的需要:

对于范围-60 < - > + 20:x + 60

现在我们有一个0 < - > 80范围,只需将其缩放到255:(x/80)*255

把它全部放在公式中,这就是你应该得到的:y =((x + 60)/ 80)*255

所以基本上:

y =((x + negativeValue)/ MaxValue)*MaxScale

我希望你现在明白了!