不知道你在问什么,但这可能会有所帮助。它吐出从 w=0(红色)到 w=1.0(紫色)的彩虹色。如果你想在 N 种颜色之间平均分配它,我会这样做:
for(int i = 0; i<N; i++){
colors[i] = spectrum(i/((double)(N-1)));
}
使用这种方法:
public Color spectrum(double w) {
if (w>1)w=1;
if (w<0)w=0;
w=w*(645-380)+380;
double R,B,G;
if (w >= 380 && w < 440){
R = -(w - 440.) /(440. - 350.);
G = 0.0;
B = 1.0;
}
else if (w >= 440 && w < 490){
R = 0.0;
G = (w - 440.) /(490. - 440.);
B = 1.0;
}
else if (w >= 490 && w < 510){
R = 0.0;
G = 1.0;
B = (510-w) /(510. - 490.);
}
else if (w >= 510 && w < 580){
R = (w - 510.) /(580. - 510.);
G = 1.0;
B = 0.0;
}
else if (w >= 580 && w < 645){
R = 1.0;
G = -(w - 645.) /(645. - 580.);
B = 0.0;
}
else if (w >= 645 && w <= 780){
R = 1.0;
G = 0.0;
B = 0.0;
}
else{
R = 0.0;
G = 0.0;
B = 0.0;
}
return new Color(R,G,B);
}
抱歉,它不在 javascript 中。我在Java方面更流利。那里的数字映射到以纳米为单位的波长,因此它对各种东西都很有用。R、G、B 值当然可以通过乘以 255 并截断小数来转换为整数。