2011-01-05 12 views
1

pingをmsで指定すると、ifとcolorsをハードコーディングせずにアルゴリズムを使ってこのpingを行うことができますか?値をハードに定義する代わりに、アルゴリズムで色を表示する

function displayPing(lngThePingTime) 

    response.Write("<span style=""font-wight:bold;color:") 

    if(lngThePingTime < 50) then 
     response.Write("#77ff66") 
    elseif lngThePingTime < 100 then 
     response.Write("#22ee00") 
    elseif lngThePingTime < 150 then 
     response.Write("#33bb00") 
    elseif lngThePingTime < 250 then 
     response.Write("#ffaa00") 
    elseif lngThePingTime < 400 then 
     response.Write("#ee6600") 
    elseif lngThePingTime < 550 then 
     response.Write("#dd4400") 
    elseif lngThePingTime < 700 then 
     response.Write("#dd1100") 
    elseif lngThePingTime < 1000 then 
     response.Write("#990000") 
    else 
     response.Write("#660000") 
    end if 

    response.Write(""">")  
    response.Write lngThePingTime   
    response.Write("</span>") 

end function 

をしかし言うアルゴリズム持つのいずれかの方法があります:IEこの機能はうまく機能

Lowest Colour : #77ff66 
Highest Colour: #660000 
Cutoff Value: 1500 (any ping higher than this is fixed to highest colour) 

色はすべての日陰ではない固定色合いのセットになるようにしますか?

言語は問題ではなく、メソッドにもっと興味があります!

+1

スプリット色LowとHighの間で単純な線形補間を行います。私にはうまく見える、私はこれを使用しました。 –

+0

HSV座標内の補間は、通常、少し良くなります。つまり、緑色から赤色への移行は、茶色のかわりに黄色を経ます。 –

答えて

2

色は多次元空間なので、補間の方法を選択する必要があります。ちょうど次元としてRGBで「まっすぐな」線を描くことはまれにしかうまくいきません。

簡単な方法の1つは、HSB/V/L color spaceです。最近のプログラミング言語の多くは自動的にこの空間に変換されます。たとえば、[Java Color methods] [2]を参照してください。それ以外の場合、数学はあまりにも難しくありません。 wikipedia article explains it

私は、これが私の望むことをしていない状況を抱えていました。たとえば、信号機のスタイルを「琥珀色で赤色から緑色に変えたい」と考えました。この場合、私は次のコードを使用しました。これは「十分に良い」コードです。ご覧のとおり、RGBとカラーの関係について少し分かっています。これは、あなたが望むかもしれないほど設定可能ではありませんが、あなたが使用できる方法の一種の例を示します:

private static int makeTrafficLight(float fraction, int brightness) { 
    final float orange = 0.4f; 
    if(fraction < orange) { 
      int r = brightness; 
      float f = fraction/orange; 
      int g = (int)(brightness*(f/2.0f)); 
      int b = 0; 
      return Color.rgb(r,g,b); 
    } else { 
      float f = ((fraction-orange)/(1.0f-orange)); 
      int r = (int)(brightness*(1.0f-f)); 
      int g = (int)(brightness*(f/2.0f+0.5f)); 
      int b = 0; 
      return Color.rgb(r,g,b); 
    } 
} 

[2]:対応するRGBへhttp://download.oracle.com/javase/1.4.2/docs/api/java/awt/Color.html#HSBtoRGB(float、フロート、フロート)

+0

偉大な答え、+1ありがとう –

関連する問題