5 #define colormapPaletteColor(c, isPants) colormapPaletteColor_(c, isPants, time)
6 vector colormapPaletteColor_(int c, bool isPants, float t)
10 case 0: return '1.000000 1.000000 1.000000';
11 case 1: return '1.000000 0.333333 0.000000';
12 case 2: return '0.000000 1.000000 0.501961';
13 case 3: return '0.000000 1.000000 0.000000';
14 case 4: return '1.000000 0.000000 0.000000';
15 case 5: return '0.000000 0.666667 1.000000';
16 case 6: return '0.000000 1.000000 1.000000';
17 case 7: return '0.501961 1.000000 0.000000';
18 case 8: return '0.501961 0.000000 1.000000';
19 case 9: return '1.000000 0.000000 1.000000';
20 case 10: return '1.000000 0.000000 0.501961';
21 case 11: return '0.000000 0.000000 1.000000';
22 case 12: return '1.000000 1.000000 0.000000';
23 case 13: return '0.000000 0.333333 1.000000';
24 case 14: return '1.000000 0.666667 0.000000';
27 return '1 0 0' * (0.502 + 0.498 * sin(t / 2.7182818285 + 0.0000000000))
28 + '0 1 0' * (0.502 + 0.498 * sin(t / 2.7182818285 + 2.0943951024))
29 + '0 0 1' * (0.502 + 0.498 * sin(t / 2.7182818285 + 4.1887902048));
31 return '1 0 0' * (0.502 + 0.498 * sin(t / 3.1415926536 + 5.2359877560))
32 + '0 1 0' * (0.502 + 0.498 * sin(t / 3.1415926536 + 3.1415926536))
33 + '0 0 1' * (0.502 + 0.498 * sin(t / 3.1415926536 + 1.0471975512));
34 default: return '0.000 0.000 0.000';
38 float rgb_mi_ma_to_hue(vector rgb, float mi, float ma)
46 if (rgb.y >= rgb.z) return (rgb.y - rgb.z) / (ma - mi);
47 else return (rgb.y - rgb.z) / (ma - mi) + 6;
51 return (rgb.z - rgb.x) / (ma - mi) + 2;
53 else // if(ma == rgb_z)
55 return (rgb.x - rgb.y) / (ma - mi) + 4;
59 vector hue_mi_ma_to_rgb(float hue, float mi, float ma)
63 hue -= 6 * floor(hue / 6);
65 // else if(ma == rgb_x)
66 // hue = 60 * (rgb_y - rgb_z) / (ma - mi);
70 rgb.y = hue * (ma - mi) + mi;
73 // else if(ma == rgb_y)
74 // hue = 60 * (rgb_z - rgb_x) / (ma - mi) + 120;
77 rgb.x = (2 - hue) * (ma - mi) + mi;
85 rgb.z = (hue - 2) * (ma - mi) + mi;
87 // else // if(ma == rgb_z)
88 // hue = 60 * (rgb_x - rgb_y) / (ma - mi) + 240;
92 rgb.y = (4 - hue) * (ma - mi) + mi;
97 rgb.x = (hue - 4) * (ma - mi) + mi;
101 // else if(ma == rgb_x)
102 // hue = 60 * (rgb_y - rgb_z) / (ma - mi);
107 rgb.z = (6 - hue) * (ma - mi) + mi;
113 vector rgb_to_hsv(vector rgb)
118 mi = min(rgb.x, rgb.y, rgb.z);
119 ma = max(rgb.x, rgb.y, rgb.z);
121 hsv.x = rgb_mi_ma_to_hue(rgb, mi, ma);
124 if (ma == 0) hsv.y = 0;
125 else hsv.y = 1 - mi / ma;
130 vector hsv_to_rgb(vector hsv)
132 return hue_mi_ma_to_rgb(hsv.x, hsv.z * (1 - hsv.y), hsv.z);
135 vector rgb_to_hsl(vector rgb)
140 mi = min(rgb.x, rgb.y, rgb.z);
141 ma = max(rgb.x, rgb.y, rgb.z);
143 hsl.x = rgb_mi_ma_to_hue(rgb, mi, ma);
145 hsl.z = 0.5 * (mi + ma);
146 if (mi == ma) hsl.y = 0;
147 else if (hsl.z <= 0.5) hsl.y = (ma - mi) / (2 * hsl.z);
148 else // if(hsl_z > 0.5)
149 hsl.y = (ma - mi) / (2 - 2 * hsl.z);
154 vector hsl_to_rgb(vector hsl)
156 float mi, ma, maminusmi;
158 if (hsl.z <= 0.5) maminusmi = hsl.y * 2 * hsl.z;
159 else maminusmi = hsl.y * (2 - 2 * hsl.z);
161 // hsl_z = 0.5 * mi + 0.5 * ma
162 // maminusmi = - mi + ma
163 mi = hsl.z - 0.5 * maminusmi;
164 ma = hsl.z + 0.5 * maminusmi;
166 return hue_mi_ma_to_rgb(hsl.x, mi, ma);
169 string rgb_to_hexcolor(vector rgb)
173 DEC_TO_HEXDIGIT(floor(rgb.x * 15 + 0.5)),
174 DEC_TO_HEXDIGIT(floor(rgb.y * 15 + 0.5)),
175 DEC_TO_HEXDIGIT(floor(rgb.z * 15 + 0.5))