1 #include <cgx.h>
2
3
4 #define MAX_LABELS 32
5
6
7 // Colormap name
8 // Possible values: "classic", "viridis", "turbo", "inferno", "jet"
9 extern char cmap_name[];
10
11
12 // Classic GraphiX colormap
get_cmap_classic(float v,float ** r,float ** g,float ** b)13 void get_cmap_classic(float v, float **r, float **g, float **b)
14 {
15 if ( v < 0.1 ) **r = .5 - v * 1./0.2;
16 else if ( v < 0.5 ) **r = 0. ;
17 else if ( v < 0.8 ) **r = (v-.5) * 1./0.3 ;
18 else if ( v < 0.9 ) **r = 1. ;
19 else **r = 1. - (v-0.9) * 1./0.4 ;
20
21 if ( v < 0.1 ) **g = 0.;
22 else if ( v < 0.3 ) **g = (v-.1) * 1./0.2;
23 else if ( v < 0.5 ) **g = 1. - (v-.3) * 1./0.4;
24 else if ( v < 0.8 ) **g = .5 + (v-.5) * 1./0.6;
25 else **g = 1. - (v-.8) * 1./0.2;
26
27 if ( v < 0.5 ) **b = 1. - v * 1./0.5;
28 else **b = 0;
29 }
30
31
32 // Viridis colormap - Berkeley Institute for Data Science
get_cmap_viridis(float v,float ** r,float ** g,float ** b)33 void get_cmap_viridis(float v, float **r, float **g, float **b)
34 {
35 float cmap_data[256][3] = {
36 {0.26700401, 0.00487433, 0.32941519},
37 {0.26851048, 0.00960483, 0.33542652},
38 {0.26994384, 0.01462494, 0.34137895},
39 {0.27130489, 0.01994186, 0.34726862},
40 {0.27259384, 0.02556309, 0.35309303},
41 {0.27380934, 0.03149748, 0.35885256},
42 {0.27495242, 0.03775181, 0.36454323},
43 {0.27602238, 0.04416723, 0.37016418},
44 {0.2770184 , 0.05034437, 0.37571452},
45 {0.27794143, 0.05632444, 0.38119074},
46 {0.27879067, 0.06214536, 0.38659204},
47 {0.2795655 , 0.06783587, 0.39191723},
48 {0.28026658, 0.07341724, 0.39716349},
49 {0.28089358, 0.07890703, 0.40232944},
50 {0.28144581, 0.0843197 , 0.40741404},
51 {0.28192358, 0.08966622, 0.41241521},
52 {0.28232739, 0.09495545, 0.41733086},
53 {0.28265633, 0.10019576, 0.42216032},
54 {0.28291049, 0.10539345, 0.42690202},
55 {0.28309095, 0.11055307, 0.43155375},
56 {0.28319704, 0.11567966, 0.43611482},
57 {0.28322882, 0.12077701, 0.44058404},
58 {0.28318684, 0.12584799, 0.44496 },
59 {0.283072 , 0.13089477, 0.44924127},
60 {0.28288389, 0.13592005, 0.45342734},
61 {0.28262297, 0.14092556, 0.45751726},
62 {0.28229037, 0.14591233, 0.46150995},
63 {0.28188676, 0.15088147, 0.46540474},
64 {0.28141228, 0.15583425, 0.46920128},
65 {0.28086773, 0.16077132, 0.47289909},
66 {0.28025468, 0.16569272, 0.47649762},
67 {0.27957399, 0.17059884, 0.47999675},
68 {0.27882618, 0.1754902 , 0.48339654},
69 {0.27801236, 0.18036684, 0.48669702},
70 {0.27713437, 0.18522836, 0.48989831},
71 {0.27619376, 0.19007447, 0.49300074},
72 {0.27519116, 0.1949054 , 0.49600488},
73 {0.27412802, 0.19972086, 0.49891131},
74 {0.27300596, 0.20452049, 0.50172076},
75 {0.27182812, 0.20930306, 0.50443413},
76 {0.27059473, 0.21406899, 0.50705243},
77 {0.26930756, 0.21881782, 0.50957678},
78 {0.26796846, 0.22354911, 0.5120084 },
79 {0.26657984, 0.2282621 , 0.5143487 },
80 {0.2651445 , 0.23295593, 0.5165993 },
81 {0.2636632 , 0.23763078, 0.51876163},
82 {0.26213801, 0.24228619, 0.52083736},
83 {0.26057103, 0.2469217 , 0.52282822},
84 {0.25896451, 0.25153685, 0.52473609},
85 {0.25732244, 0.2561304 , 0.52656332},
86 {0.25564519, 0.26070284, 0.52831152},
87 {0.25393498, 0.26525384, 0.52998273},
88 {0.25219404, 0.26978306, 0.53157905},
89 {0.25042462, 0.27429024, 0.53310261},
90 {0.24862899, 0.27877509, 0.53455561},
91 {0.2468114 , 0.28323662, 0.53594093},
92 {0.24497208, 0.28767547, 0.53726018},
93 {0.24311324, 0.29209154, 0.53851561},
94 {0.24123708, 0.29648471, 0.53970946},
95 {0.23934575, 0.30085494, 0.54084398},
96 {0.23744138, 0.30520222, 0.5419214 },
97 {0.23552606, 0.30952657, 0.54294396},
98 {0.23360277, 0.31382773, 0.54391424},
99 {0.2316735 , 0.3181058 , 0.54483444},
100 {0.22973926, 0.32236127, 0.54570633},
101 {0.22780192, 0.32659432, 0.546532 },
102 {0.2258633 , 0.33080515, 0.54731353},
103 {0.22392515, 0.334994 , 0.54805291},
104 {0.22198915, 0.33916114, 0.54875211},
105 {0.22005691, 0.34330688, 0.54941304},
106 {0.21812995, 0.34743154, 0.55003755},
107 {0.21620971, 0.35153548, 0.55062743},
108 {0.21429757, 0.35561907, 0.5511844 },
109 {0.21239477, 0.35968273, 0.55171011},
110 {0.2105031 , 0.36372671, 0.55220646},
111 {0.20862342, 0.36775151, 0.55267486},
112 {0.20675628, 0.37175775, 0.55311653},
113 {0.20490257, 0.37574589, 0.55353282},
114 {0.20306309, 0.37971644, 0.55392505},
115 {0.20123854, 0.38366989, 0.55429441},
116 {0.1994295 , 0.38760678, 0.55464205},
117 {0.1976365 , 0.39152762, 0.55496905},
118 {0.19585993, 0.39543297, 0.55527637},
119 {0.19410009, 0.39932336, 0.55556494},
120 {0.19235719, 0.40319934, 0.55583559},
121 {0.19063135, 0.40706148, 0.55608907},
122 {0.18892259, 0.41091033, 0.55632606},
123 {0.18723083, 0.41474645, 0.55654717},
124 {0.18555593, 0.4185704 , 0.55675292},
125 {0.18389763, 0.42238275, 0.55694377},
126 {0.18225561, 0.42618405, 0.5571201 },
127 {0.18062949, 0.42997486, 0.55728221},
128 {0.17901879, 0.43375572, 0.55743035},
129 {0.17742298, 0.4375272 , 0.55756466},
130 {0.17584148, 0.44128981, 0.55768526},
131 {0.17427363, 0.4450441 , 0.55779216},
132 {0.17271876, 0.4487906 , 0.55788532},
133 {0.17117615, 0.4525298 , 0.55796464},
134 {0.16964573, 0.45626209, 0.55803034},
135 {0.16812641, 0.45998802, 0.55808199},
136 {0.1666171 , 0.46370813, 0.55811913},
137 {0.16511703, 0.4674229 , 0.55814141},
138 {0.16362543, 0.47113278, 0.55814842},
139 {0.16214155, 0.47483821, 0.55813967},
140 {0.16066467, 0.47853961, 0.55811466},
141 {0.15919413, 0.4822374 , 0.5580728 },
142 {0.15772933, 0.48593197, 0.55801347},
143 {0.15626973, 0.4896237 , 0.557936 },
144 {0.15481488, 0.49331293, 0.55783967},
145 {0.15336445, 0.49700003, 0.55772371},
146 {0.1519182 , 0.50068529, 0.55758733},
147 {0.15047605, 0.50436904, 0.55742968},
148 {0.14903918, 0.50805136, 0.5572505 },
149 {0.14760731, 0.51173263, 0.55704861},
150 {0.14618026, 0.51541316, 0.55682271},
151 {0.14475863, 0.51909319, 0.55657181},
152 {0.14334327, 0.52277292, 0.55629491},
153 {0.14193527, 0.52645254, 0.55599097},
154 {0.14053599, 0.53013219, 0.55565893},
155 {0.13914708, 0.53381201, 0.55529773},
156 {0.13777048, 0.53749213, 0.55490625},
157 {0.1364085 , 0.54117264, 0.55448339},
158 {0.13506561, 0.54485335, 0.55402906},
159 {0.13374299, 0.54853458, 0.55354108},
160 {0.13244401, 0.55221637, 0.55301828},
161 {0.13117249, 0.55589872, 0.55245948},
162 {0.1299327 , 0.55958162, 0.55186354},
163 {0.12872938, 0.56326503, 0.55122927},
164 {0.12756771, 0.56694891, 0.55055551},
165 {0.12645338, 0.57063316, 0.5498411 },
166 {0.12539383, 0.57431754, 0.54908564},
167 {0.12439474, 0.57800205, 0.5482874 },
168 {0.12346281, 0.58168661, 0.54744498},
169 {0.12260562, 0.58537105, 0.54655722},
170 {0.12183122, 0.58905521, 0.54562298},
171 {0.12114807, 0.59273889, 0.54464114},
172 {0.12056501, 0.59642187, 0.54361058},
173 {0.12009154, 0.60010387, 0.54253043},
174 {0.11973756, 0.60378459, 0.54139999},
175 {0.11951163, 0.60746388, 0.54021751},
176 {0.11942341, 0.61114146, 0.53898192},
177 {0.11948255, 0.61481702, 0.53769219},
178 {0.11969858, 0.61849025, 0.53634733},
179 {0.12008079, 0.62216081, 0.53494633},
180 {0.12063824, 0.62582833, 0.53348834},
181 {0.12137972, 0.62949242, 0.53197275},
182 {0.12231244, 0.63315277, 0.53039808},
183 {0.12344358, 0.63680899, 0.52876343},
184 {0.12477953, 0.64046069, 0.52706792},
185 {0.12632581, 0.64410744, 0.52531069},
186 {0.12808703, 0.64774881, 0.52349092},
187 {0.13006688, 0.65138436, 0.52160791},
188 {0.13226797, 0.65501363, 0.51966086},
189 {0.13469183, 0.65863619, 0.5176488 },
190 {0.13733921, 0.66225157, 0.51557101},
191 {0.14020991, 0.66585927, 0.5134268 },
192 {0.14330291, 0.66945881, 0.51121549},
193 {0.1466164 , 0.67304968, 0.50893644},
194 {0.15014782, 0.67663139, 0.5065889 },
195 {0.15389405, 0.68020343, 0.50417217},
196 {0.15785146, 0.68376525, 0.50168574},
197 {0.16201598, 0.68731632, 0.49912906},
198 {0.1663832 , 0.69085611, 0.49650163},
199 {0.1709484 , 0.69438405, 0.49380294},
200 {0.17570671, 0.6978996 , 0.49103252},
201 {0.18065314, 0.70140222, 0.48818938},
202 {0.18578266, 0.70489133, 0.48527326},
203 {0.19109018, 0.70836635, 0.48228395},
204 {0.19657063, 0.71182668, 0.47922108},
205 {0.20221902, 0.71527175, 0.47608431},
206 {0.20803045, 0.71870095, 0.4728733 },
207 {0.21400015, 0.72211371, 0.46958774},
208 {0.22012381, 0.72550945, 0.46622638},
209 {0.2263969 , 0.72888753, 0.46278934},
210 {0.23281498, 0.73224735, 0.45927675},
211 {0.2393739 , 0.73558828, 0.45568838},
212 {0.24606968, 0.73890972, 0.45202405},
213 {0.25289851, 0.74221104, 0.44828355},
214 {0.25985676, 0.74549162, 0.44446673},
215 {0.26694127, 0.74875084, 0.44057284},
216 {0.27414922, 0.75198807, 0.4366009 },
217 {0.28147681, 0.75520266, 0.43255207},
218 {0.28892102, 0.75839399, 0.42842626},
219 {0.29647899, 0.76156142, 0.42422341},
220 {0.30414796, 0.76470433, 0.41994346},
221 {0.31192534, 0.76782207, 0.41558638},
222 {0.3198086 , 0.77091403, 0.41115215},
223 {0.3277958 , 0.77397953, 0.40664011},
224 {0.33588539, 0.7770179 , 0.40204917},
225 {0.34407411, 0.78002855, 0.39738103},
226 {0.35235985, 0.78301086, 0.39263579},
227 {0.36074053, 0.78596419, 0.38781353},
228 {0.3692142 , 0.78888793, 0.38291438},
229 {0.37777892, 0.79178146, 0.3779385 },
230 {0.38643282, 0.79464415, 0.37288606},
231 {0.39517408, 0.79747541, 0.36775726},
232 {0.40400101, 0.80027461, 0.36255223},
233 {0.4129135 , 0.80304099, 0.35726893},
234 {0.42190813, 0.80577412, 0.35191009},
235 {0.43098317, 0.80847343, 0.34647607},
236 {0.44013691, 0.81113836, 0.3409673 },
237 {0.44936763, 0.81376835, 0.33538426},
238 {0.45867362, 0.81636288, 0.32972749},
239 {0.46805314, 0.81892143, 0.32399761},
240 {0.47750446, 0.82144351, 0.31819529},
241 {0.4870258 , 0.82392862, 0.31232133},
242 {0.49661536, 0.82637633, 0.30637661},
243 {0.5062713 , 0.82878621, 0.30036211},
244 {0.51599182, 0.83115784, 0.29427888},
245 {0.52577622, 0.83349064, 0.2881265 },
246 {0.5356211 , 0.83578452, 0.28190832},
247 {0.5455244 , 0.83803918, 0.27562602},
248 {0.55548397, 0.84025437, 0.26928147},
249 {0.5654976 , 0.8424299 , 0.26287683},
250 {0.57556297, 0.84456561, 0.25641457},
251 {0.58567772, 0.84666139, 0.24989748},
252 {0.59583934, 0.84871722, 0.24332878},
253 {0.60604528, 0.8507331 , 0.23671214},
254 {0.61629283, 0.85270912, 0.23005179},
255 {0.62657923, 0.85464543, 0.22335258},
256 {0.63690157, 0.85654226, 0.21662012},
257 {0.64725685, 0.85839991, 0.20986086},
258 {0.65764197, 0.86021878, 0.20308229},
259 {0.66805369, 0.86199932, 0.19629307},
260 {0.67848868, 0.86374211, 0.18950326},
261 {0.68894351, 0.86544779, 0.18272455},
262 {0.69941463, 0.86711711, 0.17597055},
263 {0.70989842, 0.86875092, 0.16925712},
264 {0.72039115, 0.87035015, 0.16260273},
265 {0.73088902, 0.87191584, 0.15602894},
266 {0.74138803, 0.87344918, 0.14956101},
267 {0.75188414, 0.87495143, 0.14322828},
268 {0.76237342, 0.87642392, 0.13706449},
269 {0.77285183, 0.87786808, 0.13110864},
270 {0.78331535, 0.87928545, 0.12540538},
271 {0.79375994, 0.88067763, 0.12000532},
272 {0.80418159, 0.88204632, 0.11496505},
273 {0.81457634, 0.88339329, 0.11034678},
274 {0.82494028, 0.88472036, 0.10621724},
275 {0.83526959, 0.88602943, 0.1026459 },
276 {0.84556056, 0.88732243, 0.09970219},
277 {0.8558096 , 0.88860134, 0.09745186},
278 {0.86601325, 0.88986815, 0.09595277},
279 {0.87616824, 0.89112487, 0.09525046},
280 {0.88627146, 0.89237353, 0.09537439},
281 {0.89632002, 0.89361614, 0.09633538},
282 {0.90631121, 0.89485467, 0.09812496},
283 {0.91624212, 0.89609127, 0.1007168 },
284 {0.92610579, 0.89732977, 0.10407067},
285 {0.93590444, 0.8985704 , 0.10813094},
286 {0.94563626, 0.899815 , 0.11283773},
287 {0.95529972, 0.90106534, 0.11812832},
288 {0.96489353, 0.90232311, 0.12394051},
289 {0.97441665, 0.90358991, 0.13021494},
290 {0.98386829, 0.90486726, 0.13689671},
291 {0.99324789, 0.90615657, 0.1439362 }};
292 int i = (int)floor(v * 255);
293 **r = cmap_data[i][0];
294 **g = cmap_data[i][1];
295 **b = cmap_data[i][2];
296 }
297
298
299 // Turbo colormap - Google
get_cmap_turbo(float v,float ** r,float ** g,float ** b)300 void get_cmap_turbo(float v, float **r, float **g, float **b)
301 {
302 float cmap_data[256][3] = {
303 {0.18995, 0.07176, 0.23217},
304 {0.19483, 0.08339, 0.26149},
305 {0.19956, 0.09498, 0.29024},
306 {0.20415, 0.10652, 0.31844},
307 {0.20860, 0.11802, 0.34607},
308 {0.21291, 0.12947, 0.37314},
309 {0.21708, 0.14087, 0.39964},
310 {0.22111, 0.15223, 0.42558},
311 {0.22500, 0.16354, 0.45096},
312 {0.22875, 0.17481, 0.47578},
313 {0.23236, 0.18603, 0.50004},
314 {0.23582, 0.19720, 0.52373},
315 {0.23915, 0.20833, 0.54686},
316 {0.24234, 0.21941, 0.56942},
317 {0.24539, 0.23044, 0.59142},
318 {0.24830, 0.24143, 0.61286},
319 {0.25107, 0.25237, 0.63374},
320 {0.25369, 0.26327, 0.65406},
321 {0.25618, 0.27412, 0.67381},
322 {0.25853, 0.28492, 0.69300},
323 {0.26074, 0.29568, 0.71162},
324 {0.26280, 0.30639, 0.72968},
325 {0.26473, 0.31706, 0.74718},
326 {0.26652, 0.32768, 0.76412},
327 {0.26816, 0.33825, 0.78050},
328 {0.26967, 0.34878, 0.79631},
329 {0.27103, 0.35926, 0.81156},
330 {0.27226, 0.36970, 0.82624},
331 {0.27334, 0.38008, 0.84037},
332 {0.27429, 0.39043, 0.85393},
333 {0.27509, 0.40072, 0.86692},
334 {0.27576, 0.41097, 0.87936},
335 {0.27628, 0.42118, 0.89123},
336 {0.27667, 0.43134, 0.90254},
337 {0.27691, 0.44145, 0.91328},
338 {0.27701, 0.45152, 0.92347},
339 {0.27698, 0.46153, 0.93309},
340 {0.27680, 0.47151, 0.94214},
341 {0.27648, 0.48144, 0.95064},
342 {0.27603, 0.49132, 0.95857},
343 {0.27543, 0.50115, 0.96594},
344 {0.27469, 0.51094, 0.97275},
345 {0.27381, 0.52069, 0.97899},
346 {0.27273, 0.53040, 0.98461},
347 {0.27106, 0.54015, 0.98930},
348 {0.26878, 0.54995, 0.99303},
349 {0.26592, 0.55979, 0.99583},
350 {0.26252, 0.56967, 0.99773},
351 {0.25862, 0.57958, 0.99876},
352 {0.25425, 0.58950, 0.99896},
353 {0.24946, 0.59943, 0.99835},
354 {0.24427, 0.60937, 0.99697},
355 {0.23874, 0.61931, 0.99485},
356 {0.23288, 0.62923, 0.99202},
357 {0.22676, 0.63913, 0.98851},
358 {0.22039, 0.64901, 0.98436},
359 {0.21382, 0.65886, 0.97959},
360 {0.20708, 0.66866, 0.97423},
361 {0.20021, 0.67842, 0.96833},
362 {0.19326, 0.68812, 0.96190},
363 {0.18625, 0.69775, 0.95498},
364 {0.17923, 0.70732, 0.94761},
365 {0.17223, 0.71680, 0.93981},
366 {0.16529, 0.72620, 0.93161},
367 {0.15844, 0.73551, 0.92305},
368 {0.15173, 0.74472, 0.91416},
369 {0.14519, 0.75381, 0.90496},
370 {0.13886, 0.76279, 0.89550},
371 {0.13278, 0.77165, 0.88580},
372 {0.12698, 0.78037, 0.87590},
373 {0.12151, 0.78896, 0.86581},
374 {0.11639, 0.79740, 0.85559},
375 {0.11167, 0.80569, 0.84525},
376 {0.10738, 0.81381, 0.83484},
377 {0.10357, 0.82177, 0.82437},
378 {0.10026, 0.82955, 0.81389},
379 {0.09750, 0.83714, 0.80342},
380 {0.09532, 0.84455, 0.79299},
381 {0.09377, 0.85175, 0.78264},
382 {0.09287, 0.85875, 0.77240},
383 {0.09267, 0.86554, 0.76230},
384 {0.09320, 0.87211, 0.75237},
385 {0.09451, 0.87844, 0.74265},
386 {0.09662, 0.88454, 0.73316},
387 {0.09958, 0.89040, 0.72393},
388 {0.10342, 0.89600, 0.71500},
389 {0.10815, 0.90142, 0.70599},
390 {0.11374, 0.90673, 0.69651},
391 {0.12014, 0.91193, 0.68660},
392 {0.12733, 0.91701, 0.67627},
393 {0.13526, 0.92197, 0.66556},
394 {0.14391, 0.92680, 0.65448},
395 {0.15323, 0.93151, 0.64308},
396 {0.16319, 0.93609, 0.63137},
397 {0.17377, 0.94053, 0.61938},
398 {0.18491, 0.94484, 0.60713},
399 {0.19659, 0.94901, 0.59466},
400 {0.20877, 0.95304, 0.58199},
401 {0.22142, 0.95692, 0.56914},
402 {0.23449, 0.96065, 0.55614},
403 {0.24797, 0.96423, 0.54303},
404 {0.26180, 0.96765, 0.52981},
405 {0.27597, 0.97092, 0.51653},
406 {0.29042, 0.97403, 0.50321},
407 {0.30513, 0.97697, 0.48987},
408 {0.32006, 0.97974, 0.47654},
409 {0.33517, 0.98234, 0.46325},
410 {0.35043, 0.98477, 0.45002},
411 {0.36581, 0.98702, 0.43688},
412 {0.38127, 0.98909, 0.42386},
413 {0.39678, 0.99098, 0.41098},
414 {0.41229, 0.99268, 0.39826},
415 {0.42778, 0.99419, 0.38575},
416 {0.44321, 0.99551, 0.37345},
417 {0.45854, 0.99663, 0.36140},
418 {0.47375, 0.99755, 0.34963},
419 {0.48879, 0.99828, 0.33816},
420 {0.50362, 0.99879, 0.32701},
421 {0.51822, 0.99910, 0.31622},
422 {0.53255, 0.99919, 0.30581},
423 {0.54658, 0.99907, 0.29581},
424 {0.56026, 0.99873, 0.28623},
425 {0.57357, 0.99817, 0.27712},
426 {0.58646, 0.99739, 0.26849},
427 {0.59891, 0.99638, 0.26038},
428 {0.61088, 0.99514, 0.25280},
429 {0.62233, 0.99366, 0.24579},
430 {0.63323, 0.99195, 0.23937},
431 {0.64362, 0.98999, 0.23356},
432 {0.65394, 0.98775, 0.22835},
433 {0.66428, 0.98524, 0.22370},
434 {0.67462, 0.98246, 0.21960},
435 {0.68494, 0.97941, 0.21602},
436 {0.69525, 0.97610, 0.21294},
437 {0.70553, 0.97255, 0.21032},
438 {0.71577, 0.96875, 0.20815},
439 {0.72596, 0.96470, 0.20640},
440 {0.73610, 0.96043, 0.20504},
441 {0.74617, 0.95593, 0.20406},
442 {0.75617, 0.95121, 0.20343},
443 {0.76608, 0.94627, 0.20311},
444 {0.77591, 0.94113, 0.20310},
445 {0.78563, 0.93579, 0.20336},
446 {0.79524, 0.93025, 0.20386},
447 {0.80473, 0.92452, 0.20459},
448 {0.81410, 0.91861, 0.20552},
449 {0.82333, 0.91253, 0.20663},
450 {0.83241, 0.90627, 0.20788},
451 {0.84133, 0.89986, 0.20926},
452 {0.85010, 0.89328, 0.21074},
453 {0.85868, 0.88655, 0.21230},
454 {0.86709, 0.87968, 0.21391},
455 {0.87530, 0.87267, 0.21555},
456 {0.88331, 0.86553, 0.21719},
457 {0.89112, 0.85826, 0.21880},
458 {0.89870, 0.85087, 0.22038},
459 {0.90605, 0.84337, 0.22188},
460 {0.91317, 0.83576, 0.22328},
461 {0.92004, 0.82806, 0.22456},
462 {0.92666, 0.82025, 0.22570},
463 {0.93301, 0.81236, 0.22667},
464 {0.93909, 0.80439, 0.22744},
465 {0.94489, 0.79634, 0.22800},
466 {0.95039, 0.78823, 0.22831},
467 {0.95560, 0.78005, 0.22836},
468 {0.96049, 0.77181, 0.22811},
469 {0.96507, 0.76352, 0.22754},
470 {0.96931, 0.75519, 0.22663},
471 {0.97323, 0.74682, 0.22536},
472 {0.97679, 0.73842, 0.22369},
473 {0.98000, 0.73000, 0.22161},
474 {0.98289, 0.72140, 0.21918},
475 {0.98549, 0.71250, 0.21650},
476 {0.98781, 0.70330, 0.21358},
477 {0.98986, 0.69382, 0.21043},
478 {0.99163, 0.68408, 0.20706},
479 {0.99314, 0.67408, 0.20348},
480 {0.99438, 0.66386, 0.19971},
481 {0.99535, 0.65341, 0.19577},
482 {0.99607, 0.64277, 0.19165},
483 {0.99654, 0.63193, 0.18738},
484 {0.99675, 0.62093, 0.18297},
485 {0.99672, 0.60977, 0.17842},
486 {0.99644, 0.59846, 0.17376},
487 {0.99593, 0.58703, 0.16899},
488 {0.99517, 0.57549, 0.16412},
489 {0.99419, 0.56386, 0.15918},
490 {0.99297, 0.55214, 0.15417},
491 {0.99153, 0.54036, 0.14910},
492 {0.98987, 0.52854, 0.14398},
493 {0.98799, 0.51667, 0.13883},
494 {0.98590, 0.50479, 0.13367},
495 {0.98360, 0.49291, 0.12849},
496 {0.98108, 0.48104, 0.12332},
497 {0.97837, 0.46920, 0.11817},
498 {0.97545, 0.45740, 0.11305},
499 {0.97234, 0.44565, 0.10797},
500 {0.96904, 0.43399, 0.10294},
501 {0.96555, 0.42241, 0.09798},
502 {0.96187, 0.41093, 0.09310},
503 {0.95801, 0.39958, 0.08831},
504 {0.95398, 0.38836, 0.08362},
505 {0.94977, 0.37729, 0.07905},
506 {0.94538, 0.36638, 0.07461},
507 {0.94084, 0.35566, 0.07031},
508 {0.93612, 0.34513, 0.06616},
509 {0.93125, 0.33482, 0.06218},
510 {0.92623, 0.32473, 0.05837},
511 {0.92105, 0.31489, 0.05475},
512 {0.91572, 0.30530, 0.05134},
513 {0.91024, 0.29599, 0.04814},
514 {0.90463, 0.28696, 0.04516},
515 {0.89888, 0.27824, 0.04243},
516 {0.89298, 0.26981, 0.03993},
517 {0.88691, 0.26152, 0.03753},
518 {0.88066, 0.25334, 0.03521},
519 {0.87422, 0.24526, 0.03297},
520 {0.86760, 0.23730, 0.03082},
521 {0.86079, 0.22945, 0.02875},
522 {0.85380, 0.22170, 0.02677},
523 {0.84662, 0.21407, 0.02487},
524 {0.83926, 0.20654, 0.02305},
525 {0.83172, 0.19912, 0.02131},
526 {0.82399, 0.19182, 0.01966},
527 {0.81608, 0.18462, 0.01809},
528 {0.80799, 0.17753, 0.01660},
529 {0.79971, 0.17055, 0.01520},
530 {0.79125, 0.16368, 0.01387},
531 {0.78260, 0.15693, 0.01264},
532 {0.77377, 0.15028, 0.01148},
533 {0.76476, 0.14374, 0.01041},
534 {0.75556, 0.13731, 0.00942},
535 {0.74617, 0.13098, 0.00851},
536 {0.73661, 0.12477, 0.00769},
537 {0.72686, 0.11867, 0.00695},
538 {0.71692, 0.11268, 0.00629},
539 {0.70680, 0.10680, 0.00571},
540 {0.69650, 0.10102, 0.00522},
541 {0.68602, 0.09536, 0.00481},
542 {0.67535, 0.08980, 0.00449},
543 {0.66449, 0.08436, 0.00424},
544 {0.65345, 0.07902, 0.00408},
545 {0.64223, 0.07380, 0.00401},
546 {0.63082, 0.06868, 0.00401},
547 {0.61923, 0.06367, 0.00410},
548 {0.60746, 0.05878, 0.00427},
549 {0.59550, 0.05399, 0.00453},
550 {0.58336, 0.04931, 0.00486},
551 {0.57103, 0.04474, 0.00529},
552 {0.55852, 0.04028, 0.00579},
553 {0.54583, 0.03593, 0.00638},
554 {0.53295, 0.03169, 0.00705},
555 {0.51989, 0.02756, 0.00780},
556 {0.50664, 0.02354, 0.00863},
557 {0.49321, 0.01963, 0.00955},
558 {0.47960, 0.01583, 0.01055}};
559 int i = (int)floor(v * 255);
560 **r = cmap_data[i][0];
561 **g = cmap_data[i][1];
562 **b = cmap_data[i][2];
563 }
564
565
566 // Inferno colormap - Berkeley Institute for Data Science
get_cmap_inferno(float v,float ** r,float ** g,float ** b)567 void get_cmap_inferno(float v, float **r, float **g, float **b)
568 {
569 float cmap_data[256][3] = {
570 {1.46159096e-03, 4.66127766e-04, 1.38655200e-02},
571 {2.26726368e-03, 1.26992553e-03, 1.85703520e-02},
572 {3.29899092e-03, 2.24934863e-03, 2.42390508e-02},
573 {4.54690615e-03, 3.39180156e-03, 3.09092475e-02},
574 {6.00552565e-03, 4.69194561e-03, 3.85578980e-02},
575 {7.67578856e-03, 6.13611626e-03, 4.68360336e-02},
576 {9.56051094e-03, 7.71344131e-03, 5.51430756e-02},
577 {1.16634769e-02, 9.41675403e-03, 6.34598080e-02},
578 {1.39950388e-02, 1.12247138e-02, 7.18616890e-02},
579 {1.65605595e-02, 1.31362262e-02, 8.02817951e-02},
580 {1.93732295e-02, 1.51325789e-02, 8.87668094e-02},
581 {2.24468865e-02, 1.71991484e-02, 9.73274383e-02},
582 {2.57927373e-02, 1.93306298e-02, 1.05929835e-01},
583 {2.94324251e-02, 2.15030771e-02, 1.14621328e-01},
584 {3.33852235e-02, 2.37024271e-02, 1.23397286e-01},
585 {3.76684211e-02, 2.59207864e-02, 1.32232108e-01},
586 {4.22525554e-02, 2.81385015e-02, 1.41140519e-01},
587 {4.69146287e-02, 3.03236129e-02, 1.50163867e-01},
588 {5.16437624e-02, 3.24736172e-02, 1.59254277e-01},
589 {5.64491009e-02, 3.45691867e-02, 1.68413539e-01},
590 {6.13397200e-02, 3.65900213e-02, 1.77642172e-01},
591 {6.63312620e-02, 3.85036268e-02, 1.86961588e-01},
592 {7.14289181e-02, 4.02939095e-02, 1.96353558e-01},
593 {7.66367560e-02, 4.19053329e-02, 2.05798788e-01},
594 {8.19620773e-02, 4.33278666e-02, 2.15289113e-01},
595 {8.74113897e-02, 4.45561662e-02, 2.24813479e-01},
596 {9.29901526e-02, 4.55829503e-02, 2.34357604e-01},
597 {9.87024972e-02, 4.64018731e-02, 2.43903700e-01},
598 {1.04550936e-01, 4.70080541e-02, 2.53430300e-01},
599 {1.10536084e-01, 4.73986708e-02, 2.62912235e-01},
600 {1.16656423e-01, 4.75735920e-02, 2.72320803e-01},
601 {1.22908126e-01, 4.75360183e-02, 2.81624170e-01},
602 {1.29284984e-01, 4.72930838e-02, 2.90788012e-01},
603 {1.35778450e-01, 4.68563678e-02, 2.99776404e-01},
604 {1.42377819e-01, 4.62422566e-02, 3.08552910e-01},
605 {1.49072957e-01, 4.54676444e-02, 3.17085139e-01},
606 {1.55849711e-01, 4.45588056e-02, 3.25338414e-01},
607 {1.62688939e-01, 4.35542881e-02, 3.33276678e-01},
608 {1.69575148e-01, 4.24893149e-02, 3.40874188e-01},
609 {1.76493202e-01, 4.14017089e-02, 3.48110606e-01},
610 {1.83428775e-01, 4.03288858e-02, 3.54971391e-01},
611 {1.90367453e-01, 3.93088888e-02, 3.61446945e-01},
612 {1.97297425e-01, 3.84001825e-02, 3.67534629e-01},
613 {2.04209298e-01, 3.76322609e-02, 3.73237557e-01},
614 {2.11095463e-01, 3.70296488e-02, 3.78563264e-01},
615 {2.17948648e-01, 3.66146049e-02, 3.83522415e-01},
616 {2.24762908e-01, 3.64049901e-02, 3.88128944e-01},
617 {2.31538148e-01, 3.64052511e-02, 3.92400150e-01},
618 {2.38272961e-01, 3.66209949e-02, 3.96353388e-01},
619 {2.44966911e-01, 3.70545017e-02, 4.00006615e-01},
620 {2.51620354e-01, 3.77052832e-02, 4.03377897e-01},
621 {2.58234265e-01, 3.85706153e-02, 4.06485031e-01},
622 {2.64809649e-01, 3.96468666e-02, 4.09345373e-01},
623 {2.71346664e-01, 4.09215821e-02, 4.11976086e-01},
624 {2.77849829e-01, 4.23528741e-02, 4.14392106e-01},
625 {2.84321318e-01, 4.39325787e-02, 4.16607861e-01},
626 {2.90763373e-01, 4.56437598e-02, 4.18636756e-01},
627 {2.97178251e-01, 4.74700293e-02, 4.20491164e-01},
628 {3.03568182e-01, 4.93958927e-02, 4.22182449e-01},
629 {3.09935342e-01, 5.14069729e-02, 4.23720999e-01},
630 {3.16281835e-01, 5.34901321e-02, 4.25116277e-01},
631 {3.22609671e-01, 5.56335178e-02, 4.26376869e-01},
632 {3.28920763e-01, 5.78265505e-02, 4.27510546e-01},
633 {3.35216916e-01, 6.00598734e-02, 4.28524320e-01},
634 {3.41499828e-01, 6.23252772e-02, 4.29424503e-01},
635 {3.47771086e-01, 6.46156100e-02, 4.30216765e-01},
636 {3.54032169e-01, 6.69246832e-02, 4.30906186e-01},
637 {3.60284449e-01, 6.92471753e-02, 4.31497309e-01},
638 {3.66529195e-01, 7.15785403e-02, 4.31994185e-01},
639 {3.72767575e-01, 7.39149211e-02, 4.32400419e-01},
640 {3.79000659e-01, 7.62530701e-02, 4.32719214e-01},
641 {3.85228383e-01, 7.85914864e-02, 4.32954973e-01},
642 {3.91452659e-01, 8.09267058e-02, 4.33108763e-01},
643 {3.97674379e-01, 8.32568129e-02, 4.33182647e-01},
644 {4.03894278e-01, 8.55803445e-02, 4.33178526e-01},
645 {4.10113015e-01, 8.78961593e-02, 4.33098056e-01},
646 {4.16331169e-01, 9.02033992e-02, 4.32942678e-01},
647 {4.22549249e-01, 9.25014543e-02, 4.32713635e-01},
648 {4.28767696e-01, 9.47899342e-02, 4.32411996e-01},
649 {4.34986885e-01, 9.70686417e-02, 4.32038673e-01},
650 {4.41207124e-01, 9.93375510e-02, 4.31594438e-01},
651 {4.47428382e-01, 1.01597079e-01, 4.31080497e-01},
652 {4.53650614e-01, 1.03847716e-01, 4.30497898e-01},
653 {4.59874623e-01, 1.06089165e-01, 4.29845789e-01},
654 {4.66100494e-01, 1.08321923e-01, 4.29124507e-01},
655 {4.72328255e-01, 1.10546584e-01, 4.28334320e-01},
656 {4.78557889e-01, 1.12763831e-01, 4.27475431e-01},
657 {4.84789325e-01, 1.14974430e-01, 4.26547991e-01},
658 {4.91022448e-01, 1.17179219e-01, 4.25552106e-01},
659 {4.97257069e-01, 1.19379132e-01, 4.24487908e-01},
660 {5.03492698e-01, 1.21575414e-01, 4.23356110e-01},
661 {5.09729541e-01, 1.23768654e-01, 4.22155676e-01},
662 {5.15967304e-01, 1.25959947e-01, 4.20886594e-01},
663 {5.22205646e-01, 1.28150439e-01, 4.19548848e-01},
664 {5.28444192e-01, 1.30341324e-01, 4.18142411e-01},
665 {5.34682523e-01, 1.32533845e-01, 4.16667258e-01},
666 {5.40920186e-01, 1.34729286e-01, 4.15123366e-01},
667 {5.47156706e-01, 1.36928959e-01, 4.13510662e-01},
668 {5.53391649e-01, 1.39134147e-01, 4.11828882e-01},
669 {5.59624442e-01, 1.41346265e-01, 4.10078028e-01},
670 {5.65854477e-01, 1.43566769e-01, 4.08258132e-01},
671 {5.72081108e-01, 1.45797150e-01, 4.06369246e-01},
672 {5.78303656e-01, 1.48038934e-01, 4.04411444e-01},
673 {5.84521407e-01, 1.50293679e-01, 4.02384829e-01},
674 {5.90733615e-01, 1.52562977e-01, 4.00289528e-01},
675 {5.96939751e-01, 1.54848232e-01, 3.98124897e-01},
676 {6.03138930e-01, 1.57151161e-01, 3.95891308e-01},
677 {6.09330184e-01, 1.59473549e-01, 3.93589349e-01},
678 {6.15512627e-01, 1.61817111e-01, 3.91219295e-01},
679 {6.21685340e-01, 1.64183582e-01, 3.88781456e-01},
680 {6.27847374e-01, 1.66574724e-01, 3.86276180e-01},
681 {6.33997746e-01, 1.68992314e-01, 3.83703854e-01},
682 {6.40135447e-01, 1.71438150e-01, 3.81064906e-01},
683 {6.46259648e-01, 1.73913876e-01, 3.78358969e-01},
684 {6.52369348e-01, 1.76421271e-01, 3.75586209e-01},
685 {6.58463166e-01, 1.78962399e-01, 3.72748214e-01},
686 {6.64539964e-01, 1.81539111e-01, 3.69845599e-01},
687 {6.70598572e-01, 1.84153268e-01, 3.66879025e-01},
688 {6.76637795e-01, 1.86806728e-01, 3.63849195e-01},
689 {6.82656407e-01, 1.89501352e-01, 3.60756856e-01},
690 {6.88653158e-01, 1.92238994e-01, 3.57602797e-01},
691 {6.94626769e-01, 1.95021500e-01, 3.54387853e-01},
692 {7.00575937e-01, 1.97850703e-01, 3.51112900e-01},
693 {7.06499709e-01, 2.00728196e-01, 3.47776863e-01},
694 {7.12396345e-01, 2.03656029e-01, 3.44382594e-01},
695 {7.18264447e-01, 2.06635993e-01, 3.40931208e-01},
696 {7.24102613e-01, 2.09669834e-01, 3.37423766e-01},
697 {7.29909422e-01, 2.12759270e-01, 3.33861367e-01},
698 {7.35683432e-01, 2.15905976e-01, 3.30245147e-01},
699 {7.41423185e-01, 2.19111589e-01, 3.26576275e-01},
700 {7.47127207e-01, 2.22377697e-01, 3.22855952e-01},
701 {7.52794009e-01, 2.25705837e-01, 3.19085410e-01},
702 {7.58422090e-01, 2.29097492e-01, 3.15265910e-01},
703 {7.64009940e-01, 2.32554083e-01, 3.11398734e-01},
704 {7.69556038e-01, 2.36076967e-01, 3.07485188e-01},
705 {7.75058888e-01, 2.39667435e-01, 3.03526312e-01},
706 {7.80517023e-01, 2.43326720e-01, 2.99522665e-01},
707 {7.85928794e-01, 2.47055968e-01, 2.95476756e-01},
708 {7.91292674e-01, 2.50856232e-01, 2.91389943e-01},
709 {7.96607144e-01, 2.54728485e-01, 2.87263585e-01},
710 {8.01870689e-01, 2.58673610e-01, 2.83099033e-01},
711 {8.07081807e-01, 2.62692401e-01, 2.78897629e-01},
712 {8.12239008e-01, 2.66785558e-01, 2.74660698e-01},
713 {8.17340818e-01, 2.70953688e-01, 2.70389545e-01},
714 {8.22385784e-01, 2.75197300e-01, 2.66085445e-01},
715 {8.27372474e-01, 2.79516805e-01, 2.61749643e-01},
716 {8.32299481e-01, 2.83912516e-01, 2.57383341e-01},
717 {8.37165425e-01, 2.88384647e-01, 2.52987700e-01},
718 {8.41968959e-01, 2.92933312e-01, 2.48563825e-01},
719 {8.46708768e-01, 2.97558528e-01, 2.44112767e-01},
720 {8.51383572e-01, 3.02260213e-01, 2.39635512e-01},
721 {8.55992130e-01, 3.07038188e-01, 2.35132978e-01},
722 {8.60533241e-01, 3.11892183e-01, 2.30606009e-01},
723 {8.65005747e-01, 3.16821833e-01, 2.26055368e-01},
724 {8.69408534e-01, 3.21826685e-01, 2.21481734e-01},
725 {8.73740530e-01, 3.26906201e-01, 2.16885699e-01},
726 {8.78000715e-01, 3.32059760e-01, 2.12267762e-01},
727 {8.82188112e-01, 3.37286663e-01, 2.07628326e-01},
728 {8.86301795e-01, 3.42586137e-01, 2.02967696e-01},
729 {8.90340885e-01, 3.47957340e-01, 1.98286080e-01},
730 {8.94304553e-01, 3.53399363e-01, 1.93583583e-01},
731 {8.98192017e-01, 3.58911240e-01, 1.88860212e-01},
732 {9.02002544e-01, 3.64491949e-01, 1.84115876e-01},
733 {9.05735448e-01, 3.70140419e-01, 1.79350388e-01},
734 {9.09390090e-01, 3.75855533e-01, 1.74563472e-01},
735 {9.12965874e-01, 3.81636138e-01, 1.69754764e-01},
736 {9.16462251e-01, 3.87481044e-01, 1.64923826e-01},
737 {9.19878710e-01, 3.93389034e-01, 1.60070152e-01},
738 {9.23214783e-01, 3.99358867e-01, 1.55193185e-01},
739 {9.26470039e-01, 4.05389282e-01, 1.50292329e-01},
740 {9.29644083e-01, 4.11479007e-01, 1.45366973e-01},
741 {9.32736555e-01, 4.17626756e-01, 1.40416519e-01},
742 {9.35747126e-01, 4.23831237e-01, 1.35440416e-01},
743 {9.38675494e-01, 4.30091162e-01, 1.30438175e-01},
744 {9.41521384e-01, 4.36405243e-01, 1.25409440e-01},
745 {9.44284543e-01, 4.42772199e-01, 1.20354038e-01},
746 {9.46964741e-01, 4.49190757e-01, 1.15272059e-01},
747 {9.49561766e-01, 4.55659658e-01, 1.10163947e-01},
748 {9.52075421e-01, 4.62177656e-01, 1.05030614e-01},
749 {9.54505523e-01, 4.68743522e-01, 9.98735931e-02},
750 {9.56851903e-01, 4.75356048e-01, 9.46952268e-02},
751 {9.59114397e-01, 4.82014044e-01, 8.94989073e-02},
752 {9.61292850e-01, 4.88716345e-01, 8.42893891e-02},
753 {9.63387110e-01, 4.95461806e-01, 7.90731907e-02},
754 {9.65397031e-01, 5.02249309e-01, 7.38591143e-02},
755 {9.67322465e-01, 5.09077761e-01, 6.86589199e-02},
756 {9.69163264e-01, 5.15946092e-01, 6.34881971e-02},
757 {9.70919277e-01, 5.22853259e-01, 5.83674890e-02},
758 {9.72590351e-01, 5.29798246e-01, 5.33237243e-02},
759 {9.74176327e-01, 5.36780059e-01, 4.83920090e-02},
760 {9.75677038e-01, 5.43797733e-01, 4.36177922e-02},
761 {9.77092313e-01, 5.50850323e-01, 3.90500131e-02},
762 {9.78421971e-01, 5.57936911e-01, 3.49306227e-02},
763 {9.79665824e-01, 5.65056600e-01, 3.14091591e-02},
764 {9.80823673e-01, 5.72208516e-01, 2.85075931e-02},
765 {9.81895311e-01, 5.79391803e-01, 2.62497353e-02},
766 {9.82880522e-01, 5.86605627e-01, 2.46613416e-02},
767 {9.83779081e-01, 5.93849168e-01, 2.37702263e-02},
768 {9.84590755e-01, 6.01121626e-01, 2.36063833e-02},
769 {9.85315301e-01, 6.08422211e-01, 2.42021174e-02},
770 {9.85952471e-01, 6.15750147e-01, 2.55921853e-02},
771 {9.86502013e-01, 6.23104667e-01, 2.78139496e-02},
772 {9.86963670e-01, 6.30485011e-01, 3.09075459e-02},
773 {9.87337182e-01, 6.37890424e-01, 3.49160639e-02},
774 {9.87622296e-01, 6.45320152e-01, 3.98857472e-02},
775 {9.87818759e-01, 6.52773439e-01, 4.55808037e-02},
776 {9.87926330e-01, 6.60249526e-01, 5.17503867e-02},
777 {9.87944783e-01, 6.67747641e-01, 5.83286889e-02},
778 {9.87873910e-01, 6.75267000e-01, 6.52570167e-02},
779 {9.87713535e-01, 6.82806802e-01, 7.24892330e-02},
780 {9.87463516e-01, 6.90366218e-01, 7.99897176e-02},
781 {9.87123759e-01, 6.97944391e-01, 8.77314215e-02},
782 {9.86694229e-01, 7.05540424e-01, 9.56941797e-02},
783 {9.86174970e-01, 7.13153375e-01, 1.03863324e-01},
784 {9.85565739e-01, 7.20782460e-01, 1.12228756e-01},
785 {9.84865203e-01, 7.28427497e-01, 1.20784651e-01},
786 {9.84075129e-01, 7.36086521e-01, 1.29526579e-01},
787 {9.83195992e-01, 7.43758326e-01, 1.38453063e-01},
788 {9.82228463e-01, 7.51441596e-01, 1.47564573e-01},
789 {9.81173457e-01, 7.59134892e-01, 1.56863224e-01},
790 {9.80032178e-01, 7.66836624e-01, 1.66352544e-01},
791 {9.78806183e-01, 7.74545028e-01, 1.76037298e-01},
792 {9.77497453e-01, 7.82258138e-01, 1.85923357e-01},
793 {9.76108474e-01, 7.89973753e-01, 1.96017589e-01},
794 {9.74637842e-01, 7.97691563e-01, 2.06331925e-01},
795 {9.73087939e-01, 8.05409333e-01, 2.16876839e-01},
796 {9.71467822e-01, 8.13121725e-01, 2.27658046e-01},
797 {9.69783146e-01, 8.20825143e-01, 2.38685942e-01},
798 {9.68040817e-01, 8.28515491e-01, 2.49971582e-01},
799 {9.66242589e-01, 8.36190976e-01, 2.61533898e-01},
800 {9.64393924e-01, 8.43848069e-01, 2.73391112e-01},
801 {9.62516656e-01, 8.51476340e-01, 2.85545675e-01},
802 {9.60625545e-01, 8.59068716e-01, 2.98010219e-01},
803 {9.58720088e-01, 8.66624355e-01, 3.10820466e-01},
804 {9.56834075e-01, 8.74128569e-01, 3.23973947e-01},
805 {9.54997177e-01, 8.81568926e-01, 3.37475479e-01},
806 {9.53215092e-01, 8.88942277e-01, 3.51368713e-01},
807 {9.51546225e-01, 8.96225909e-01, 3.65627005e-01},
808 {9.50018481e-01, 9.03409063e-01, 3.80271225e-01},
809 {9.48683391e-01, 9.10472964e-01, 3.95289169e-01},
810 {9.47594362e-01, 9.17399053e-01, 4.10665194e-01},
811 {9.46809163e-01, 9.24168246e-01, 4.26373236e-01},
812 {9.46391536e-01, 9.30760752e-01, 4.42367495e-01},
813 {9.46402951e-01, 9.37158971e-01, 4.58591507e-01},
814 {9.46902568e-01, 9.43347775e-01, 4.74969778e-01},
815 {9.47936825e-01, 9.49317522e-01, 4.91426053e-01},
816 {9.49544830e-01, 9.55062900e-01, 5.07859649e-01},
817 {9.51740304e-01, 9.60586693e-01, 5.24203026e-01},
818 {9.54529281e-01, 9.65895868e-01, 5.40360752e-01},
819 {9.57896053e-01, 9.71003330e-01, 5.56275090e-01},
820 {9.61812020e-01, 9.75924241e-01, 5.71925382e-01},
821 {9.66248822e-01, 9.80678193e-01, 5.87205773e-01},
822 {9.71161622e-01, 9.85282161e-01, 6.02154330e-01},
823 {9.76510983e-01, 9.89753437e-01, 6.16760413e-01},
824 {9.82257307e-01, 9.94108844e-01, 6.31017009e-01},
825 {9.88362068e-01, 9.98364143e-01, 6.44924005e-01}};
826 int i = (int)floor(v * 255);
827 **r = cmap_data[i][0];
828 **g = cmap_data[i][1];
829 **b = cmap_data[i][2];
830 }
831
832
833 // provided by Rafal Brzegowy
get_cmap_jet(float v,float ** r,float ** g,float ** b)834 void get_cmap_jet(float v, float **r, float **g, float **b)
835 {
836 if ( v <= 0.375 ) **r = 0.;
837 else if ( v <= 0.625 ) **r = (v-.375)/.25;
838 else if ( v <= 0.875 ) **r = 1.;
839 else **r = 1.-((v-.875)/.125)*.5;
840
841 if ( v <= 0.125 ) **g = 0.;
842 else if ( v <= 0.375 ) **g = (v-.125)/.25;
843 else if ( v <= 0.625 ) **g = 1.;
844 else if ( v <= 0.875 ) **g = (.875-v)/.25;
845 else **g = 0.;
846
847 if ( v <= 0.125 ) **b = .5+(v/.125)*.5;
848 else if ( v <= 0.375 ) **b = 1.;
849 else if ( v <= 0.625 ) **b = (.625-v)/.25;
850 else **b = 0.;
851 }
852
853
854
855 // Call appropriate colormap generator
856 // v,r,g,b ∈ [0;1]
define_rgb(float v,float * r,float * g,float * b)857 void define_rgb(float v, float *r, float *g, float *b)
858 {
859 if( compare( cmap_name, "viridis", 1)==1)
860 get_cmap_viridis(v, &r, &g, &b);
861 else if( compare( cmap_name, "turbo", 1)==1)
862 get_cmap_turbo(v, &r, &g, &b);
863 else if( compare( cmap_name, "inferno", 1)==1)
864 get_cmap_inferno(v, &r, &g, &b);
865 else if( compare( cmap_name, "classic", 1)==1)
866 get_cmap_classic(v, &r, &g, &b);
867 else if( compare( cmap_name, "jet", 1)==1)
868 get_cmap_jet(v, &r, &g, &b);
869 }
870
871
872 /* schreibt einen Text (x,y,z linkes unteres Eck) */
text(double x,double y,double z,char * msg,void * glut_font)873 void text(double x, double y, double z,char *msg, void *glut_font)
874 {
875 glRasterPos3d(x, y, z);
876 while (*msg) {
877 glutBitmapCharacter(glut_font, *msg);
878 msg++;
879 }
880 }
881
882
883 /* scala verbindet Farben mit Zahlenwerten (rgb-mode)*/
884 /* kb, kh Kaestchenhoehe und Breite */
885 /* dx, dy Ursprung der Scala (linkes unteres Eck) */
886 /* divisions anzahl der Kaestchen */
scala_rgb(double dx,double dy,int divisions,double bmin,double bmax,double * col,void * glut_font,char format)887 void scala_rgb( double dx, double dy, int divisions, double bmin, double bmax, double *col, void *glut_font, char format)
888 {
889 int j, i;
890 float r, g, b;
891 double df, f;
892 static char string[13];
893 double kb, kh;
894 int flag=0;
895
896 df = (bmax-bmin)/divisions;
897 f = bmin;
898
899 kh= 1.0/divisions*1.5;
900 kb= 1.0/20.;
901
902
903 for (i=0; i<divisions; i++)
904 {
905 glBegin ( GL_POLYGON );
906 define_rgb( (float)(f-bmin)/(bmax-bmin), &r,&g,&b);
907 glColor3d ( r, g, b );
908 glVertex2d ( dx-kb*0., dy+kh*0. );
909 glVertex2d ( dx-kb*1., dy+kh*0. );
910 define_rgb( (float)(f+df-bmin)/(bmax-bmin), &r,&g,&b);
911 glColor3d ( r, g, b );
912 glVertex2d ( dx-kb*1., dy+kh*1. );
913 glVertex2d ( dx-kb*0., dy+kh*1. );
914 glEnd();
915
916 if(flag==0)
917 {
918 if(format=='f') sprintf ( string, "%-10f ", f);
919 else if(format=='i') sprintf ( string, "%-10d ", (int)f);
920 else sprintf ( string, "%-10.2e ", f);
921 glColor3dv ( col );
922 glRasterPos2d( (dx+kb*0.2), dy-kh*0.1 );
923 for ( j=0; j<10; j++) glutBitmapCharacter(glut_font, string[j]);
924 }
925 flag++;
926 if(flag>divisions/MAX_LABELS) flag=0;
927
928 dy+=kh;
929 f+=df;
930 }
931 if(flag==0)
932 {
933 if(format=='f') sprintf ( string, "%-10f ", bmax);
934 else if(format=='i') sprintf ( string, "%-10d ", (int)bmax);
935 else sprintf ( string, "%-10.2e ", bmax);
936 glColor3dv ( col );
937 glRasterPos2d( (dx+kb*0.2), dy-kh*0.1 );
938 for ( j=0; j<10; j++) glutBitmapCharacter(glut_font, string[j]);
939 }
940 }
941
942
943 /* scalai verbindet Farben mit Zahlenwerten */
944 /* kb, kh Kaestchenhoehe und Breite */
945 /* dx, dy Ursprung der Scala (linkes unteres Eck) */
946 /* divisions anzahl der Kaestchen */
scala_tex(double ratio,double dx,double dy,int divisions,double bmin,double bmax,double scale,double * col,void * glut_font,char format,char fnr,char lnr)947 void scala_tex(double ratio, double dx, double dy, int divisions, double bmin, double bmax, double scale, double *col, void *glut_font, char format, char fnr, char lnr)
948 {
949 int j, i;
950 double df, f,ds;
951 static char string[13];
952 double kb, kh;
953 int flag=0, divisor;
954
955 /* recalculate bmax,bmin if a clipped scale is to be used (fnr,lnr >0) */
956 divisor=divisions;
957 if(lnr) divisor--;
958 if(fnr) divisor--;
959 ds=(bmax-bmin)/divisor;
960 if(lnr) bmax+=ds;
961 if(fnr) bmin-=ds;
962
963 df = (bmax-bmin)/(divisions);
964 f = bmin;
965
966 kh= 1.0/divisions*1.5*ratio;
967 kb= 1.0/20.;
968
969 for (i=0; i<divisions; i++)
970 {
971 glColor3d( 1,1,1);
972 glEnable(GL_TEXTURE_1D);
973 glTexCoord1d ( (GLdouble)i/(GLdouble)divisions*scale );
974 glBegin ( GL_POLYGON );
975 glVertex2d ( dx-kb*0., dy+kh*0. );
976 glVertex2d ( dx-kb*1., dy+kh*0. );
977 glVertex2d ( dx-kb*1., dy+kh*1. );
978 glVertex2d ( dx-kb*0., dy+kh*1. );
979 glEnd();
980 glDisable(GL_TEXTURE_1D);
981
982 if(flag==0)
983 {
984 if(format=='f') sprintf ( string, "%-10f ", f);
985 else if(format=='i') sprintf ( string, "%-10d ", (int)f);
986 else if(format=='l') sprintf ( string, "1e%-.2f ", f);
987 else
988 {
989 if((fnr)&&(i==1) && (abs(f)<df*1e-4)) sprintf ( string, "%-10.2e ", 0.);
990 else sprintf ( string, "%-10.2e ", f);
991 }
992 glColor3dv ( col );
993 glRasterPos2d( (dx+kb*0.2), dy-kh*0.1 );
994 if((fnr)&&(!i)); else { for ( j=0; j<10; j++) glutBitmapCharacter(glut_font, string[j]); }
995 }
996 flag++;
997 if(flag>divisions/MAX_LABELS) flag=0;
998
999 dy+=kh;
1000 f+=df;
1001 }
1002 if((flag==0)&&(!lnr))
1003 {
1004 if(format=='f') sprintf ( string, "%-10f ", bmax);
1005 else if(format=='i') sprintf ( string, "%-10d ", (int)bmax);
1006 else if(format=='l') sprintf ( string, "1e%-.2f ", bmax);
1007 else sprintf ( string, "%-10.2e ", bmax);
1008 glColor3dv ( col );
1009 glRasterPos2d( (dx+kb*0.2), dy-kh*0.1 );
1010 for ( j=0; j<10; j++) glutBitmapCharacter(glut_font, string[j]);
1011 }
1012 }
1013
1014
1015 /* Button liefert 1 wenn maus im Button, sonst 0 */
1016 /* dx,dy Ursprung des Buttons (linkes unteres Eck) */
1017 /* bh, bb Hoehe, Breite des Buttons */
1018 /* mx, my Mauskoordinaten */
button(double dx,double dy,char * msg,double mx,double my,void * glut_font)1019 int button(double dx, double dy, char *msg, double mx, double my, void *glut_font)
1020 {
1021 register int i, n;
1022 double bh, bb;
1023
1024 i=0;
1025 bb=bh=0.05;
1026
1027 while (*msg) {i++; msg++; }
1028 bb+=0.025*i;
1029 msg-=i;
1030
1031
1032
1033 if ((mx > dx+bb*0.) & (mx < dx+bb*1.) & (my > dy+bh*0.) & (my < dy+bh*1.))
1034 {
1035 glColor3d ( 1., 0.0, 0.0 );
1036 glBegin ( GL_POLYGON );
1037 glVertex2d ( dx+bb*0., dy+bh*0. );
1038 glVertex2d ( dx+bb*1., dy+bh*0. );
1039 glVertex2d ( dx+bb*1., dy+bh*1. );
1040 glVertex2d ( dx+bb*0., dy+bh*1. );
1041 glEnd();
1042 glColor3d ( 0., 0., 0. );
1043 glRasterPos2d((dx+bh*0.3), (dy+bh*0.2));
1044 for (n=0; n<i; n++)
1045 glutBitmapCharacter(glut_font, msg[n]);
1046 glBegin ( GL_LINE_LOOP );
1047 glVertex2d ( dx+bb*0., dy+bh*0. );
1048 glVertex2d ( dx+bb*1., dy+bh*0. );
1049 glVertex2d ( dx+bb*1., dy+bh*1. );
1050 glVertex2d ( dx+bb*0., dy+bh*1. );
1051 glEnd();
1052 return (1);
1053 }
1054 else
1055 {
1056 glColor3d ( 0.7, 0.7, 0.7 );
1057 glBegin ( GL_POLYGON );
1058 glVertex2d ( dx+bb*0., dy+bh*0. );
1059 glVertex2d ( dx+bb*1., dy+bh*0. );
1060 glVertex2d ( dx+bb*1., dy+bh*1. );
1061 glVertex2d ( dx+bb*0., dy+bh*1. );
1062 glEnd();
1063 glColor3d ( 0., 0., 0. );
1064 glRasterPos2d((dx+bh*0.3), (dy+bh*0.2));
1065 for (n=0; n<i; n++)
1066 glutBitmapCharacter(glut_font, msg[n]);
1067 glBegin ( GL_LINE_LOOP );
1068 glVertex2d ( dx+bb*0., dy+bh*0. );
1069 glVertex2d ( dx+bb*1., dy+bh*0. );
1070 glVertex2d ( dx+bb*1., dy+bh*1. );
1071 glVertex2d ( dx+bb*0., dy+bh*1. );
1072 glEnd();
1073 return(0);
1074 }
1075 }
1076
1077
1078 /* Plaziert farbige Punkte */
polymark(int n,double * col_r,double * col_g,double * col_b,double * x,double * y,double * z)1079 void polymark ( int n, double *col_r, double *col_g, double *col_b, double *x,
1080 double *y, double *z )
1081 {
1082 GLint mode;
1083 int i;
1084
1085 glGetIntegerv(GL_RENDER_MODE, &mode);
1086
1087 if (mode == GL_RENDER)
1088 {
1089 for (i=1; i<=n; i++ )
1090 {
1091 glBegin ( GL_POINTS );
1092 glColor3d ( col_r[i], col_g[i], col_b[i] );
1093 glVertex3d ( x[i], y[i], z[i] );
1094 glEnd();
1095 }
1096 }
1097 if (mode == GL_SELECT)
1098 {
1099 for (i=1; i<=n; i++ )
1100 {
1101 glLoadName(i);
1102 glBegin ( GL_POINTS );
1103 glColor3d ( col_r[i], col_g[i], col_b[i] );
1104 glVertex3d ( x[i], y[i], z[i] );
1105 glEnd();
1106 }
1107 }
1108 }
1109