我正在使用一种硬件,我正在使用专有的编程语言与VIA串行控制进行通信,该语言看起来像是一个非常愚蠢的C版本。
设备在查询时会报告当前的音量。范围是-60到+ 20.如何将其缩放到0-255范围,增量为3?
您是否还可以提供另一个值和其他比例的示例,即-15到15缩放到0-165等等
答案 0 :(得分:6)
将范围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
答案 1 :(得分:5)
这实际上是简单的数学
首先,让我们不再需要负数:
对于范围-60< - > + 20:x + 60
现在我们有一个0< - > 80范围,只需将其缩放到255:(x / 80)* 255
把这一切都放在一个公式中,这就是你应该得到的: y =((x + 60)/ 80)* 255
基本上是这样的:
y =((x + negativeValue)/ MaxValue)* MaxScale
我希望你现在明白!