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