1

0.0f から 1.0f までの値を返すスライダーがあります。

この値を使用して MIN と MAX にクランプしたいのですが、厳密にはクランプしません。

最小が 0.2f、最大が 0.3f だとします。スライダーが 0 のときは、0.2f が必要です。スライダーが 0.5f にあるときは、0.25f が必要です。

スライダーの効果があまり強くないようにするためです。

MIN MAX と SliderVal が与えられた場合、sliderVal をクランプするにはどうすればよいでしょうか?

ありがとう

4

4 に答える 4

6
slider_range = slider_max - slider_min;
range = range_max - range_min;

value = (double)(slider_pos - slider_min) / slider_range * range + range_min;
于 2012-06-30T04:39:16.890 に答える
5

スライダーを と の間で直線的に変化させたいと仮定すると0.2f0.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;
于 2012-06-30T04:38:34.067 に答える
3

基本的にあなたは持っています

0.0f -> MIN
1.0f -> MAX

そしてあなたが欲しい

clampedVal = sliderVal * ( MAX - MIN ) + MIN
于 2012-06-30T04:39:00.200 に答える