色彩空间:HSL和RGB的相互转换
做一个计算程序的可视化程序要用到的,需要用色彩表示数值的大小。
试过了很多RGB的组合,还是没有满意的效果,其实用Hue就可以了。不过最后给后处理程序的还是RBG的参数,就需要HSL和RGB之间的相互转换关系了。RGB如左图所示,XYZ为红绿蓝三色空间;右图则是HSL空间,HSL表示色调H、饱和度S和亮度L。
一般在有限元中,采用的表示应力、应变的方法就是采用在一定S/L参数下的Hue,根据数值的大小,在空间中一般只占有从0~240度,即从红到蓝的范围。如下图所示:
Max ---------------- Min
它们之间的转换公式可以参照 Wiki 上的介绍。“染色”工作已经完成......
PS: RGB=(red, green, blue); HSL=(hue, saturation, lightness)
附录子程序,从HSL到RGB转换。输入HSL参数得到的C[i]就是需要的RGB参数。
其中H~[0,240];S和L~[0,1]。
/*HSL to RGB space transformation. */
double C[3];
void HSL2RGB(double H, double S, double L)
{
double Q;
double P;
double T[3];
H=H*1.0*1/360;
T[0]=H+1.0*1/3;
T[1]=H;
T[2]=H-1.0*1/3;
int j;
for(j=0;j<3;j++)
{
if(T[j]<0) T[j]=T[j]+1.0;
if(T[j]>1) T[j]=T[j]-1.0;
}
if(L<0.5) Q=L*(1.0+S);
if(L>=0.5) Q=L+S-(L*S);
P=2.0*L-Q;
int k;
for(k=0;k<3;k++)
{
if(T[k]<1.0*1/6) C[k]=P+((Q-P)*6.0*T[k]);
if(T[k]<0.5 && T[k]>=1.0*1/6) C[k]=Q;
if(T[k]>=0.5 && T[k]<1.0*2/3) C[k]=P+((Q-P)*(1.0*2/3-T[k])*6.0);
if(T[k]>=1.0*2/3) C[k]=P;
}
}
aloe Said,
19 7 月, 2007 @ 16:25
No name Said,
9 9 月, 2007 @ 16:25
wow power leveling
wow power leveling
wow power leveling
wow power leveling
wow power leveling
wow power leveling
wow power leveling
wow power leveling
wow power leveling
wow power leveling
wow power leveling
wow power leveling
wow power leveling
wow power leveling
wow power leveling
wow power leveling
wow power leveling
wow power leveling
wow power leveling
wow power leveling
wow power leveling
wow power leveling
wow power leveling
wow power leveling
wow power leveling
wow power leveling
wow power leveling
wow power leveling
wow power leveling
wow power leveling
wow power leveling
wow power leveling
wow power leveling
wow power leveling -260158522982004