1

マップ上に1から10までの難易度のGRPトラックがあります。難易度に応じて、これらのトラックの色を変えたいです。イージー難易度は緑、ハードは赤、ミディアムはオレンジです。ただし、これらの3色だけでなく、それらの間の移行をスムーズにする必要があります。難易度のポイントごとに1つの色、または半分のポイントごとに1つの色のように。これらの色とその遷移を計算するアルゴリズムはありますか?どういうわけかrgb値を増減するのが好きですか?ありがとうございました。

4

3 に答える 3

1
Red = 255,0,0
Yellow = 255, 255, 0
Green = 0,255,0

レベル1から10までループするforループを作成します。

レベルごとに、次のような色を作成します。

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

次に、RGB値から色を作成します。

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

于 2012-05-01T15:05:00.493 に答える
1

あなたが探しているのは、色を越えて補間する能力です。2つの色を単純に補間するだけでは不十分な場合があります(間に偽の色が入る可能性があるため)が、各色のRGBを3D空間のポイントとして扱い、ポリラインに沿って補間します(各ポイントは色/中間色です)。 )それは色を表します(あなたの場合、難しさ)。これが私が話していることを示すリンクです。

于 2012-05-01T15:46:07.190 に答える
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());
    }
}
于 2012-05-01T16:17:28.257 に答える