回答:
基本式は次のとおりです。
Result := ((Input - InputLow) / (InputHigh - InputLow))
* (OutputHigh - OutputLow) + OutputLow;
あなたの場合:
結果:=((入力 - -1)/(1 - -1)*(255 - 0)+ 0 ;
係数が静的な場合、ここから変換を最適化できますが、おそらくコンパイラーもそれを単独で行います。
結果:=((入力 - -1)/ 2)* 255 + 0。
結果:= 入力 * 127.5 + 127.5 ;
スケーリングとバイアスの力を通して。
値から、範囲の最小値を引きます。これにより、範囲[0..2]の値が得られます。
それをソース範囲の幅で割り、範囲[0..1]の値を与えます。
それにターゲット範囲の幅を掛けて、範囲[0..255]の値を与えます。
ターゲット範囲のベースを追加して、ターゲット範囲内の値を取得します。この場合、前の手順と同じです。
要約すれば:
(v - (-1.0))
v' = 0 + ---------------- * (255 - 0)
(1.0 - (-1.0))
oldRange = oldMax - oldMin
newRange = newMax - newMin
newValue = ((oldValue - oldMin) * newRange / oldRange) + newMin
お役に立てれば。
x
元の入力でy
あり、期待される出力であるとしましょう。少なくとも2つのポイント
(x、y)(-1、0)(1、255)があります
線形補間を行いたいので、形式の方程式を調べることができます
y = m*x + c
二点以上で、我々はのために解決することができますm
し、c
それが完了したら、あなたは変換式を得ます。
このメソッドは、他のタイプの方程式でも機能することに注意してください。たとえば、指数補間または二次補間が必要な場合。
v = (1-a)*x + (a)*y
。彼が望んでいるのは範囲のマッピングだけなので、この答えが質問にどのように関連するのかわかりません。