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