1 #ifndef HELPERS_H
2 #define HELPERS_H
3 
4 #include <stdint.h>
5 #include "rng-double.h"
6 
7 #define MAX(a, b)  (((a) > (b)) ? (a) : (b))
8 #define MIN(a, b)  (((a) < (b)) ? (a) : (b))
9 #define ROUND(x) ((int) ((x) + 0.5))
10 #define SIGN(x) ((x)>0?1:(-1))
11 #define SQR(x) ((x)*(x))
12 #define CLAMP(x, low, high)  (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x)))
13 #define MAX3(a, b, c) ((a)>(b)?MAX((a),(c)):MAX((b),(c)))
14 #define MIN3(a, b, c) ((a)<(b)?MIN((a),(c)):MIN((b),(c)))
15 #define WGM_EPSILON 0.001
16 
17 #ifndef M_PI
18 #define M_PI 3.14159265358979323846
19 #endif
20 
21 void
22 hsl_to_rgb_float (float *h_, float *s_, float *l_);
23 void
24 rgb_to_hsl_float (float *r_, float *g_, float *b_);
25 
26 void
27 hsv_to_rgb_float (float *h_, float *s_, float *v_);
28 
29 void
30 rgb_to_hsv_float (float *r_ /*h*/, float *g_ /*s*/, float *b_ /*v*/);
31 
32 void
33 hcy_to_rgb_float (float *h_, float *c_, float *y_);
34 
35 void
36 rgb_to_hcy_float (float *r_, float *g_, float *b_);
37 
38 float rand_gauss (RngDouble * rng);
39 
40 float mod_arith(float a, float N);
41 
42 float smallest_angular_difference(float angleA, float angleB);
43 
44 float * mix_colors(float *a, float *b, float fac, float paint_mode);
45 
46 void
47 rgb_to_spectral (float r, float g, float b, float *spectral_);
48 
49 void
50 spectral_to_rgb (float *spectral, float *rgb_);
51 
52 #endif // HELPERS_H
53