2012-05-01 4 views
1

マップ上にGRPトラックが1〜10の難易度を持っています。これらのトラックは難易度によって色分けしてください。簡単な難度は緑色で、硬いものは赤色で、中程度のものはオレンジ色です。しかし、私はこれらの3色だけでなく、それらの間の滑らかな遷移を持つ必要があります。難易度ごとに1色、半分ごとに1色のように。これらの色とそれらのトランジションを計算するアルゴリズムはありますか?何とかrgb値を増減するように?ありがとうございました。色変換が難しい

答えて

0
using System; 
using System.Drawing; 
using System.Windows.Forms; 

public partial class MainForm : Form 
{ 
    protected override void OnPaint(PaintEventArgs e) 
    { 
     Color[] colors = new Color[11]; 

     colors[0] = Color.Green; 
     colors[1] = Interpolate(Color.Green, Color.Orange, 0.2); 
     colors[2] = Interpolate(Color.Green, Color.Orange, 0.4); 
     colors[3] = Interpolate(Color.Green, Color.Orange, 0.6); 
     colors[4] = Interpolate(Color.Green, Color.Orange, 0.8); 
     colors[5] = Color.Orange; 
     colors[6] = Interpolate(Color.Orange, Color.Red, 0.2); 
     colors[7] = Interpolate(Color.Orange, Color.Red, 0.4); 
     colors[8] = Interpolate(Color.Orange, Color.Red, 0.6); 
     colors[9] = Interpolate(Color.Orange, Color.Red, 0.8); 
     colors[10] = Color.Red; 

     Rectangle rect = new Rectangle(10, 10, 20, 90); 
     for (int i = 0; i < colors.Length; i++) 
     { 
      e.Graphics.FillRectangle(new SolidBrush(colors[i]), rect); 
      rect.Offset(20, 0); 
     } 

     base.OnPaint(e); 
    } 

    private static Color Interpolate(Color a, Color b, double t) 
    { 
     int R = (int)(a.R + (b.R - a.R) * t); 
     int G = (int)(a.G + (b.G - a.G) * t); 
     int B = (int)(a.B + (b.B - a.B) * t); 
     return Color.FromArgb(R, G, B); 
    } 

    [STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new MainForm()); 
    } 
} 
1
Red = 255,0,0 
Yellow = 255, 255, 0 
Green = 0,255,0 

各レベルについて10

にレベル1からループforループのようなものとして、色を作成します:そしてRGB値から色を作成

Red = level * 25.5; 
Green = 255 - (level * 25.5); 
Blue = 0; 

明らかにこれは擬似コードに過ぎませんが、開始するためのアイデアが必要です。

1

あなたが探しているのは、さまざまな色を補間する機能です。その間に偽の色があるかもしれないので、2つの色を補間するだけでは十分ではないかもしれませんが、各色のRGBを3D空間の点として扱い、ポリライン(各点は色/中間色です)に沿って補間します)(あなたのケースでは、困難)を表す。 Hereは、私が話していることを示すリンクです。

+0

+1色補間には複数の異なる手法があります。あなたは単純で離散的な何かをやっているので、あなたはそれをただちに見ることができ、それを良いものと呼ぶことができます。しかし、一般的にはそれよりもはるかに多いことを理解することは良いことです。 –

関連する問題