如何对数字/数值进行扩展

7
我正在使用一块硬件进行通信,通过使用一种类似于简化版C语言的专有编程语言来实现串行控制。
该设备在被查询时会报告其当前音量。该范围为-60到+20。如何将其缩放到0-255的范围内,每次增加3个单位?
您能否提供另一个值和其他刻度的示例,例如-15到15缩放为0-165等?
2个回答

10

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

    y = y0 + (y1 - y0) * (x - x0) / (x1 - x0)

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

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

=>  y = 255 * (x + 60) / 80

9

这实际上是简单的数学问题。

首先,让我们消除负数的需求:

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

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

将所有内容放入公式中,您应该得到以下结果:

y = ((x + 60) / 80) * 255

因此基本上:

y = ((x + 负值) / 最大值) * 最大比例

希望您现在明白了!


很好的解释。我想补充一点,即“将其缩放到255:(x / 80)* 255”的除以80会将范围从0 <-> 80转换为0 <-> 1。无论您乘以什么,它都将被作为百分比缩放。 - Eric

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接