私は、C の非常に単純なバージョンのように見える独自のプログラミング言語を使用して、VIA シリアル コントロールと通信しているハードウェアで作業しています。
クエリを実行すると、デバイスは現在の音量を報告します。範囲は -60 から + 20 です。これを 0 から 255 の範囲にスケールし、3 ずつ増加させるにはどうすればよいですか?
別の値と他のスケールの例、つまり-15から15を0から165にスケーリングした例も提供できますか?
私は、C の非常に単純なバージョンのように見える独自のプログラミング言語を使用して、VIA シリアル コントロールと通信しているハードウェアで作業しています。
クエリを実行すると、デバイスは現在の音量を報告します。範囲は -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 + 負の値) / MaxValue ) * MaxScale
私はあなたが今理解していることを願っています!