我正在使用一种硬件,我正在使用一种专有的编程语言与 VIA 串行控制进行通信,这种语言看起来像一个非常愚蠢的 C 版本。
设备在查询时报告其当前音量。范围是 -60 到 + 20。如何将其缩放到 0-255 范围,以 3 为增量上升?
您能否提供另一个值和其他比例的示例,即 -15 到 15 缩放到 0-165 等
我正在使用一种硬件,我正在使用一种专有的编程语言与 VIA 串行控制进行通信,这种语言看起来像一个非常愚蠢的 C 版本。
设备在查询时报告其当前音量。范围是 -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 +negativeValue) / MaxValue) * MaxScale
我希望你现在明白了!