6

私は、C の非常に単純なバージョンのように見える独自のプログラミング言語を使用して、VIA シリアル コントロールと通信しているハードウェアで作業しています。

クエリを実行すると、デバイスは現在の音量を報告します。範囲は -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 + 負の値) / MaxValue ) * MaxScale

私はあなたが今理解していることを願っています!

于 2012-10-18T16:40:27.523 に答える