将值范围映射到彩虹色图
Map value range to rainbow-colormap
我需要一个将 v 映射到从红色到紫色的彩虹色的函数。准确地说:
(rRB,gRB,bRB) = mapping_fct(v)
with v ϵ [0, a],其中 0 应该是红色和紫色。
有没有现成的(目前没找到)?
我正在用 C++
编码
请试试这个函数,它有线性插值并环绕到红色->绿色->蓝色->红色。 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);
我需要一个将 v 映射到从红色到紫色的彩虹色的函数。准确地说:
(rRB,gRB,bRB) = mapping_fct(v)
with v ϵ [0, a],其中 0 应该是红色和紫色。
有没有现成的(目前没找到)? 我正在用 C++
编码请试试这个函数,它有线性插值并环绕到红色->绿色->蓝色->红色。 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);