From: ian Date: Sat, 23 Oct 2004 10:50:49 +0000 (+0000) Subject: angle colour has constant luminance X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ijackson/git?a=commitdiff_plain;h=95472808b591f5073b222f1d87fe11910c1fe952;p=trains.git angle colour has constant luminance --- diff --git a/layout/subseg2display.c b/layout/subseg2display.c index 23538ea..7d89cdc 100644 --- a/layout/subseg2display.c +++ b/layout/subseg2display.c @@ -196,25 +196,27 @@ static unsigned reverse_bits_in_byte(unsigned a) { static void angle_to_colour(double result[3], double angle /* in units of 2pi radians< <1.0 */, int reverse) { - /* Inspired by http://www.acm.org/jgt/papers/SmithLyons96/hsv_rgb.html */ - int i; - double f; + int s; + double f, u, d, U, D; angle *= 6.0; - i= floor(angle); - f= angle - i; + s= floor(angle); + f= angle - s; + if (reverse) { s += 3; s %= 6; } - if (reverse) { i += 3; i %= 6; } - if (i&1) f= 1.0 - f; + u= f * 0.5; + U= u + 0.5; + d= 0.5 - u; + D= d + 0.5; - switch (i) { + switch (s) { #define R(r,g,b) if(1){ result[0]=r; result[1]=g; result[2]=b; break; }else - case 0: R( 1, f, 0 ); - case 1: R( f, 1, 0 ); - case 2: R( 0, 1, f ); - case 3: R( 0, f, 1 ); - case 4: R( f, 0, 1 ); - case 5: R( 1, 0, f ); + case 0: R( D, U, 0 ); + case 1: R( d, 1, u ); + case 2: R( 0, D, U ); + case 3: R( u, d, 1 ); + case 4: R( U, 0, D ); + case 5: R( 1, u, d ); #undef R } }