2016-06-17 15 views
0

vを虹色に赤から紫にマップする関数が必要です。正確には言った:0は赤紫色であるべきであるVε[0、A]虹色のカラーマップへのマップ値の範囲

(rRB,gRB,bRB) = mapping_fct(v) 

既存のものはありますか(これまでに何も見つかりませんでした)? 私はC++でコーディングしています

+0

mapping_fctは何ですか? – Garf365

+0

mapping_fctの入力は何ですか?列挙型または単純な整数? –

+0

連続スペクトルが必要な場合、[a]は実際には赤にマップされ、折り返されます。 0 =赤、a * 1/3 =緑、a * 2/3 =青、a =赤 –

答えて

1

この関数を試してください。この関数は線形補間を行い、赤色→緑色→青色→赤色にラップアラウンドします。 npは最大値(a)、pは入力値(v)です。 pが常にnpより小さくなるように、npを少し増やして紫色に止まるようにすることができます。

void getcolor(int p, int np, float&r, float&g, float&b) { 
    float inc = 6.0/np; 
    float x = p * inc; 
    r = 0.0f; g = 0.0f; b = 0.0f; 
    if ((0 <= x && x <= 1) || (5 <= x && x <= 6)) r = 1.0f; 
    else if (4 <= x && x <= 5) r = x - 4; 
    else if (1 <= x && x <= 2) r = 1.0f - (x - 1); 
    if (1 <= x && x <= 3) g = 1.0f; 
    else if (0 <= x && x <= 1) g = x - 0; 
    else if (3 <= x && x <= 4) g = 1.0f - (x - 3); 
    if (3 <= x && x <= 5) b = 1.0f; 
    else if (2 <= x && x <= 3) b = x - 2; 
    else if (5 <= x && x <= 6) b = 1.0f - (x - 5); 
} 

使用例:

float r,g,b; 
getcolor(545, 1024, r, g, b); 
+0

ありがとうございます!これは私が探していたものです! – Christoph