0
this question(fabulous answer for values from 0..1を含む)に基づいて、最小値と最大値を含むように関数を修正しようとしました。小数点を含む動的値に基づいて勾配ステップを生成
function getColor(value, min, max){
var hue=((max-(value-min))*120).toString(10);
return ["hsl(",hue,",100%,50%)"].join("");
}
小数点以下は整数では問題ありませんが、小数点以下では問題ありません。
var value=42;
var d=document.createElement('div');
d.textContent="value="+value + " (this should be green)";
d.style.backgroundColor=getColor(value,42,100);
document.body.appendChild(d);
var value=42;
var d=document.createElement('div');
d.textContent="value="+value + " (this should be red)";
d.style.backgroundColor=getColor(value,0,42);
document.body.appendChild(d);
をしかし、これらにはありません:たとえば、これらは期待どおりに動作
var value=0.1;
var d=document.createElement('div');
d.textContent="value="+value + " (this should be green)";
d.style.backgroundColor=getColor(value,0,90);
document.body.appendChild(d);
var value=0.1;
var d=document.createElement('div');
d.textContent="value="+value + " (this should be green)";
d.style.backgroundColor=getColor(value,0,5);
document.body.appendChild(d);
最後のものは... Here is a fiddle実際に青です。どのようにして4つすべてのシナリオで動作するように変更できますか?
以下のコメントをもとに、私はあなたのコードが間違っていると思いますが、機能は1-0の間の正規化値を見込んで、これだけのことを確認してください入力値は最小値/最大値に基づいて1〜0の間で正規化されます。次に、その値を持つ関数を入力します。 http://stats.stackexchange.com/a/70807 – user5542121
詳しいことができますか? 'var v =(value-min)/ max;'は常に1-0、noの間の値でなければなりません。関数外で計算を行うのはなぜですか? –
正規化についての上記の答えによると。その数式は正しくありません。そのほぼ正確ではあるが、完全には正確ではない。 など。 max = 1、max = 1000、value = 1000、v => 0.996 のようになりますが、1にする必要があります。 – user5542121