あなたが描いたカーブは、カーブがgamma correctionとよく似ています。考えられるのは、範囲の最小値と最大値は入力値と同じにとどまっていますが、グラフの中にあるように中央が曲がっています(ではありません。ではなく、余弦インプリメンテーション)。お使いのxの値は0から1の範囲であった場合は、
...機能をここに、インスピレーションとしてそれで、だから、
alt text http://upload.wikimedia.org/wikipedia/commons/thumb/7/74/GammaFunctionGraph.svg/200px-GammaFunctionGraph.svg.png
数学です:
グラフィカルには、それはこのようになりますむしろ単純である:
y = f(x, gamma) = x^gamma
(すなわち、X = 0〜100)をスケーリングするためのXMAX値を追加し、関数は次のようになる。
y = f(x, gamma) = ((x/xmax)^gamma) * xmax
または代わり:
y = f(x, gamma) = (x^gamma)/(xmax^(gamma - 1))
あなたはゼロ以外XMINを追加したい場合は、さらに一歩これを取ることができます。
ガンマが1の場合、線は常に完全に線形です(y = x)。 xが1未満の場合、カーブが上に曲がります。 xが1より大きい場合、カーブは下に曲がります。ガンマの逆数は元の値に戻ります(x = f(y、1/g)= f(f(x、g)、1/g)
ガンマの値を自分の好みやアプリケーションのニーズに合わせて調整することができます。ユーザーに「感度向上」の複数のオプションを提供したいので、-4(最小感度)から0変更なし)を4(最も感度が高い)に設定し、内部のガンマ値をパワー関数でスケーリングします。つまり、(-4、-3、-2、-1、0,1,2,3 。
0:4)が、(5.06、3.38、2.25、1.50、1.00、0.67、0.44、0.30、0.20)のガンマ値にそれを翻訳し
C#でそれをコーディングすると、このようになります。
これを使用するには、新しいSensitivityAdjusterを作成し、ユーザーの設定に応じて感度レベルを設定します(コンストラクタまたはメソッドを使用して-4〜4がおそらく妥当なレベル値になります)。Adjust(x)を調整された出力値を取得します。合理的なレベルの幅を広げたり狭めたりしたい場合は、SetSensitivityLevelsメソッドでその1.5の値を減らすか増やします。もちろん、100はあなたの最大x値を表します。
なぜC#タグですか?あなたのソリューションは、最終的にはC#かもしれませんが、私はC#で問題は何も見えません。タグを削除する... – abelenky
必要な動作を説明してください。 (開始点/エンドポイントの他に)指数関数的ですか?多項式?対数? 0に近い勾配が線形で、終点を満たすために必要に応じて上方向にズームするように見えます。 –
...または線形と何かの間の補間。 –