将值范围映射到rainbow-colormap

时间:2016-06-17 08:07:28

标签: c++ linear colormap

我需要一个将v映射到从红色到紫色的彩虹色的功能。精确说:

{{1}}

vε[0,a] ,其中0应为红色和紫色。

有什么存在(到目前为止没找到任何东西)? 我用C ++编码

1 个答案:

答案 0 :(得分:1)

请尝试此功能,该功能具有线性插值并环绕到红色 - >绿色 - >蓝色 - >红色。 np是您的最大值(a),p是输入值(v)。你可以通过增加np来使它停止在紫罗兰,这样p总是小于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);