しばらく前にLPCで使用した(書かれていない)便利なメソッドのJavascriptバージョンを見つけようとしていました。これはdimval()と呼ばれ、次の形式でした。
NAME
dimval() - returns values with a reduced increase in output
as input values grow larger.
SYNOPSIS
float dimval(float input, float max_input, float max_output,
float min_input, float min_output, float rate);
DESCRIPTION
Returns (as a float) a value between min_output and max_output,
with values increasing at a reduced rate as they move from
min_input toward max_output.
Input is the input value.
Max_input is the maximum acceptable input. Any higher input
value will be capped to this.
Max_output is the maximum value returned.
Min_input is the (optional) minimum input. Default is zero.
Min_output is the (optional) minimum output. Default is zero.
Rate determines how quickly the cost increases to achieve
greater return values. Higher numbers are faster, lower numbers
are slower.
私はこの記事を読みましたが、私が望むものを捉えていないようです(最初ははるかに簡単に見えます)。私もこのSOの質問を読みました、そして...まあ、これはうまくいくと思います...しかし、正直なところ、数学は私を超えています。上記の説明と、パラメーターがどのように連携して希望する種類の結果を生成するかを理解しています。
上記の制約のあるメソッドをJavascriptで提供していただければ幸いです。
乾杯!
編集:元の方法からのサンプル出力。
- eval return dimval(5.0、100.0、100.0、0.0、0.0、1.0)=> 22.360680
- eval return dimval(10.0、100.0、100.0、0.0、0.0、1.0)=> 31.622776
eval return dimval(50.0、100.0、100.0、0.0、0.0、1.0)=> 70.710678
eval return dimval(10.0、100.0、100.0、0.0、0.0、2.0)=> 15.811388
eval return dimval(10.0、100.0、100.0、0.0、0.0、10.0)=> 3.162278
eval return dimval(200.0、100.0、100.0、0.0、0.0、10.0)=> 10.000000
eval return dimval(200.0、100.0、100.0、0.0、0.0、1.0)=> 100.000000
eval return dimval(1.0、100.0、100.0、10.0、0.0、10.0)=> 0.000000
これ以上サンプルを実行してほしい場合はお知らせください。