6

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

设备在查询时报告其当前音量。范围是 -60 到 + 20。如何将其缩放到 0-255 范围,以 3 为增量上升?

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

4

2 回答 2

9

要将范围 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
于 2012-10-18T16:36:14.730 回答
8

这实际上是简单的数学

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

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

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

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

所以基本上:

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

我希望你现在明白了!

于 2012-10-18T16:40:27.523 回答