スライダーを と の間で直線的に変化させたいと仮定すると0.2f
、0.3f
間隔[0.0 1.0]
から への変換[0.2 0.3]
は自明です。
newVal = 0.2f + (sliderVal)*0.1f;
これを数学的な観点から見ると、記述に従って、出力を入力に対して線形にする必要があります。したがって、入力値と出力値の間の伝達関数は次の形式でなければなりません。
y = mx + b
値を入力 (スライダーx
の値) と見なし、y
値を出力 (新しい目的の値) と見なします。したがって、次の 2 つの点があります。これらの点を上記の式(0.0, 0.2)
に(1.0, 0.3)
代入します。
0.2 = (0.0)m + b
0.3 = (1.0)m + b
これで、解くのが簡単な線形方程式系が得られました。
0.2 = (0.0)m + b --> b = 0.2
0.3 = (1.0)m + b --> 0.3 = m + 0.2 --> m = 0.1
したがって、伝達関数は次のようになります。
y = 0.1 * x + 0.2
QED
上記のプロセスを一般化できます。(0.0, 0.2)
ポイントとを使用する代わりに、ポイントと(1.0, 0.3)
を使用します。(minSlider, maxSlider)
(minValue, maxValue)
minValue = (minSlider)m + b
maxValue = (maxSlider)m + b
変数を削除しますb
:
minValue = (minSlider)m + b
-maxValue = -(maxSlider)m - b
--> minValue-maxValue = (minSlider-maxSlider)m
m = (minValue-maxValue)/(minSlider-maxSlider)
変数を削除しますm
:
minValue*maxSlider = (minSlider*maxSlider)m + b*maxSlider
-maxValue*minSlider = -(minSlider*maxSlider)m - b*minSlider
--> minValue*maxSlider - maxValue*minSlider = b(maxSlider-minSlider)
b = (minValue*maxSlider - maxValue*minSlider)/(maxSlider-minSlider)
m
これらの方程式が と にまったく同じ値を与えることを確認できますb
。スライダーの最小値が常に次のようになると仮定すると、次のようになります0.0
。
m = (minValue-maxValue)/(minSlider-maxSlider)
b = (minValue*maxSlider - maxValue*minSlider)/(maxSlider-minSlider)
--> m = (maxValue-minValue)/(maxSlider)
b = minValue
C++ の場合:
const double maxSlider = 1.0;
const double minValue = 0.2;
const double maxValue = 0.3;
double value = (maxValue-minValue)/(maxSlider)*getSliderPosition() + minValue;