我正在使用一块硬件进行通信,通过使用一种类似于简化版C语言的专有编程语言来实现串行控制。
该设备在被查询时会报告其当前音量。该范围为-60到+20。如何将其缩放到0-255的范围内,每次增加3个单位?
您能否提供另一个值和其他刻度的示例,例如-15到15缩放为0-165等?
该设备在被查询时会报告其当前音量。该范围为-60到+20。如何将其缩放到0-255的范围内,每次增加3个单位?
您能否提供另一个值和其他刻度的示例,例如-15到15缩放为0-165等?
将范围 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
这实际上是简单的数学问题。
首先,让我们消除负数的需求:
对于范围-60 <-> + 20:x + 60
现在我们有了0 <-> 80范围,只需将其缩放到255:(x / 80) * 255
将所有内容放入公式中,您应该得到以下结果:
y = ((x + 60) / 80) * 255
因此基本上:
y = ((x + 负值) / 最大值) * 最大比例
希望您现在明白了!