ColorEx HSVtoRGB( float h, float s, float v )
{
int i;
ColorEx rv = new ColorEx( 0.0f, 0.0f, 0.0f, 1.0f );
float f, p, q, t;
h = (float)System.Math.IEEERemainder( h, 360.0f );
h /= 60.0f; // sector 0 to 5
i = (int)System.Math.Floor( h );
f = h - i; // factorial part of h
p = v * ( 1.0f - s );
q = v * ( 1.0f - s * f );
t = v * ( 1.0f - s * ( 1.0f - f ) );
switch ( i )
{
case 0:
rv.r = v;
rv.g = t;
rv.b = p;
break;
case 1:
rv.r = q;
rv.g = v;
rv.b = p;
break;
case 2:
rv.r = p;
rv.g = v;
rv.b = t;
break;
case 3:
rv.r = p;
rv.g = q;
rv.b = v;
break;
case 4:
rv.r = t;
rv.g = p;
rv.b = v;
break;
default:
rv.r = v;
rv.g = p;
rv.b = q;
break;
}
return rv;
}