diff options
author | bonmas14 <bonmas14@gmail.com> | 2025-08-04 16:08:22 +0000 |
---|---|---|
committer | bonmas14 <bonmas14@gmail.com> | 2025-08-04 16:08:22 +0000 |
commit | b16ca14911ad5df44ae499eed2d90c3ca2da4eb0 (patch) | |
tree | 685d64ea40f66b72c994bcfd3de0c5015a9cf36a /src/ungrateful.h | |
parent | ed1cab483e49e29396178a33dea51773aa770855 (diff) | |
download | ungrateful-b16ca14911ad5df44ae499eed2d90c3ca2da4eb0.tar.gz ungrateful-b16ca14911ad5df44ae499eed2d90c3ca2da4eb0.zip |
Vecs and tests
Diffstat (limited to 'src/ungrateful.h')
-rw-r--r-- | src/ungrateful.h | 192 |
1 files changed, 168 insertions, 24 deletions
diff --git a/src/ungrateful.h b/src/ungrateful.h index ff8c24b..bbbea47 100644 --- a/src/ungrateful.h +++ b/src/ungrateful.h @@ -97,45 +97,47 @@ typedef int8_t b8; typedef float f32; typedef double f64; -#if defined(UN_DOUBLE_PRECISION) -typedef double real; - #ifndef PI -# define PI 3.14159265358979323846 +# define PI 3.14159265358979323846f #endif #ifndef EPSILON -# define EPSILON 0.000001 +# define EPSILON 0.000001f #endif #ifndef DEG2RAD -# define DEG2RAD (PI/180.0) +# define DEG2RAD (PI/180.0f) #endif #ifndef RAD2DEG -# define RAD2DEG (180.0/PI) +# define RAD2DEG (180.0f/PI) #endif +#if defined(UN_DOUBLE_PRECISION) + typedef double real; #else -typedef float real; + typedef float real; +#endif // UN_DOUBLE_PRECISION -#ifndef PI -# define PI 3.14159265358979323846f +#ifndef PI_D +# define PI_D 3.14159265358979323846 #endif -#ifndef EPSILON -# define EPSILON 0.000001f +#ifndef EPSILON_D +# define EPSILON_D 0.000000000000001 #endif -#ifndef DEG2RAD -# define DEG2RAD (PI/180.0f) +#ifndef DEG2RAD_D +# define DEG2RAD_D (PI/180.0) #endif - -#ifndef RAD2DEG -# define RAD2DEG (180.0f/PI) +#ifndef RAD2DEG_D +# define RAD2DEG_D (180.0/PI) #endif -#endif // UN_DOUBLE_PRECISION + +#define un_vec_unwrap2(vec) vec[0], vec[1] +#define un_vec_unwrap3(vec) vec[0], vec[1], vec[2] +#define un_vec_unwrap4(vec) vec[0], vec[1], vec[2], vec[3] /* ---- Memory Allocators API ---- */ @@ -232,7 +234,7 @@ real un_m_lerpr(real a, real b, real t); f32 un_m_lerpf(f32 a, f32 b, f32 t); f64 un_m_lerpd(f64 a, f64 b, f64 t); -/* 2d */ +/* 2d f32 */ void un_m_add2f(f32 *v, f32 *a, f32 *b); void un_m_sub2f(f32 *v, f32 *a, f32 *b); void un_m_add_scalar2f(f32 *v, f32 *a, f32 scalar); @@ -243,14 +245,16 @@ void un_m_div_scalar2f(f32 *v, f32 *a, f32 scalar); void un_m_dot2f(f32 *v, f32 *a, f32 *b); void un_m_hadamard2f(f32 *v, f32 *a, f32 *b); void un_m_project2f(f32 *v, f32 *a, f32 *onto); +void un_m_reflect2f(f32 *v, f32 *a, f32 *normal); void un_m_cross2f(f32 *v, f32 *a); void un_m_normalize2f(f32 *v, f32 *a); void un_m_magnitude2f(f32 *v, f32 *a); void un_m_magnitude_sqr2f(f32 *v, f32 *a); +void un_m_distance2f(f32 *v, f32 *a, f32 *b); void un_m_distance_sqr2f(f32 *v, f32 *a, f32 *b); -/* 3d */ +/* 3d f32 */ void un_m_add3f(f32 *v, f32 *a, f32 *b); void un_m_sub3f(f32 *v, f32 *a, f32 *b); void un_m_add_scalar3f(f32 *v, f32 *a, f32 scalar); @@ -261,14 +265,16 @@ void un_m_div_scalar3f(f32 *v, f32 *a, f32 scalar); void un_m_dot3f(f32 *v, f32 *a, f32 *b); void un_m_hadamard3f(f32 *v, f32 *a, f32 *b); void un_m_project3f(f32 *v, f32 *a, f32 *onto); +void un_m_reflect3f(f32 *v, f32 *a, f32 *normal); void un_m_cross3f(f32 *v, f32 *a, f32 *b); void un_m_normalize3f(f32 *v, f32 *a); void un_m_magnitude3f(f32 *v, f32 *a); void un_m_magnitude_sqr3f(f32 *v, f32 *a); +void un_m_distance3f(f32 *v, f32 *a, f32 *b); void un_m_distance_sqr3f(f32 *v, f32 *a, f32 *b); -/* 4d */ +/* 4d f32 */ void un_m_add4f(f32 *v, f32 *a, f32 *b); void un_m_sub4f(f32 *v, f32 *a, f32 *b); void un_m_add_scalar4f(f32 *v, f32 *a, f32 scalar); @@ -279,17 +285,155 @@ void un_m_div_scalar4f(f32 *v, f32 *a, f32 scalar); void un_m_dot4f(f32 *v, f32 *a, f32 *b); void un_m_hadamard4f(f32 *v, f32 *a, f32 *b); void un_m_project4f(f32 *v, f32 *a, f32 *onto); +void un_m_reflect4f(f32 *v, f32 *a, f32 *normal); void un_m_normalize4f(f32 *v, f32 *a); void un_m_magnitude4f(f32 *v, f32 *a); void un_m_magnitude_sqr4f(f32 *v, f32 *a); +void un_m_distance4f(f32 *v, f32 *a, f32 *b); void un_m_distance_sqr4f(f32 *v, f32 *a, f32 *b); + +/* 2d f64 */ +void un_m_add2d(f64 *v, f64 *a, f64 *b); +void un_m_sub2d(f64 *v, f64 *a, f64 *b); + +void un_m_add_scalar2d(f64 *v, f64 *a, f64 scalar); +void un_m_sub_scalar2d(f64 *v, f64 *a, f64 scalar); +void un_m_mul_scalar2d(f64 *v, f64 *a, f64 scalar); +void un_m_div_scalar2d(f64 *v, f64 *a, f64 scalar); + +void un_m_dot2d(f64 *v, f64 *a, f64 *b); +void un_m_hadamard2d(f64 *v, f64 *a, f64 *b); +void un_m_project2d(f64 *v, f64 *a, f64 *onto); +void un_m_reflect2d(f64 *v, f64 *a, f64 *normal); +void un_m_cross2d(f64 *v, f64 *a); + +void un_m_normalize2d(f64 *v, f64 *a); +void un_m_magnitude2d(f64 *v, f64 *a); +void un_m_magnitude_sqr2d(f64 *v, f64 *a); +void un_m_distance2d(f64 *v, f64 *a, f64 *b); +void un_m_distance_sqr2d(f64 *v, f64 *a, f64 *b); + +/* 3d f64 */ +void un_m_add3d(f64 *v, f64 *a, f64 *b); +void un_m_sub3d(f64 *v, f64 *a, f64 *b); + +void un_m_add_scalar3d(f64 *v, f64 *a, f64 scalar); +void un_m_sub_scalar3d(f64 *v, f64 *a, f64 scalar); +void un_m_mul_scalar3d(f64 *v, f64 *a, f64 scalar); +void un_m_div_scalar3d(f64 *v, f64 *a, f64 scalar); + +void un_m_dot3d(f64 *v, f64 *a, f64 *b); +void un_m_hadamard3d(f64 *v, f64 *a, f64 *b); +void un_m_project3d(f64 *v, f64 *a, f64 *onto); +void un_m_reflect3d(f64 *v, f64 *a, f64 *normal); +void un_m_cross3d(f64 *v, f64 *a, f64 *b); + +void un_m_normalize3d(f64 *v, f64 *a); +void un_m_magnitude3d(f64 *v, f64 *a); +void un_m_magnitude_sqr3d(f64 *v, f64 *a); +void un_m_distance3d(f64 *v, f64 *a, f64 *b); +void un_m_distance_sqr3d(f64 *v, f64 *a, f64 *b); + +/* 4d f64 */ +void un_m_add4d(f64 *v, f64 *a, f64 *b); +void un_m_sub4d(f64 *v, f64 *a, f64 *b); + +void un_m_add_scalar4d(f64 *v, f64 *a, f64 scalar); +void un_m_sub_scalar4d(f64 *v, f64 *a, f64 scalar); +void un_m_mul_scalar4d(f64 *v, f64 *a, f64 scalar); +void un_m_div_scalar4d(f64 *v, f64 *a, f64 scalar); + +void un_m_dot4d(f64 *v, f64 *a, f64 *b); +void un_m_hadamard4d(f64 *v, f64 *a, f64 *b); +void un_m_project4d(f64 *v, f64 *a, f64 *onto); +void un_m_reflect4d(f64 *v, f64 *a, f64 *normal); + +void un_m_normalize4d(f64 *v, f64 *a); +void un_m_magnitude4d(f64 *v, f64 *a); +void un_m_magnitude_sqr4d(f64 *v, f64 *a); +void un_m_distance4d(f64 *v, f64 *a, f64 *b); +void un_m_distance_sqr4d(f64 *v, f64 *a, f64 *b); + +/* 2d real */ +void un_m_add2r(real *v, real *a, real *b); +void un_m_sub2r(real *v, real *a, real *b); + +void un_m_add_scalar2r(real *v, real *a, real scalar); +void un_m_sub_scalar2r(real *v, real *a, real scalar); +void un_m_mul_scalar2r(real *v, real *a, real scalar); +void un_m_div_scalar2r(real *v, real *a, real scalar); + +void un_m_dot2r(real *v, real *a, real *b); +void un_m_hadamard2r(real *v, real *a, real *b); +void un_m_project2r(real *v, real *a, real *onto); +void un_m_reflect2r(real *v, real *a, real *normal); +void un_m_cross2r(real *v, real *a); + +void un_m_normalize2r(real *v, real *a); +void un_m_magnitude2r(real *v, real *a); +void un_m_magnitude_sqr2r(real *v, real *a); +void un_m_distance2r(real *v, real *a, real *b); +void un_m_distance_sqr2r(real *v, real *a, real *b); + +/* 3d real */ +void un_m_add3r(real *v, real *a, real *b); +void un_m_sub3r(real *v, real *a, real *b); + +void un_m_add_scalar3r(real *v, real *a, real scalar); +void un_m_sub_scalar3r(real *v, real *a, real scalar); +void un_m_mul_scalar3r(real *v, real *a, real scalar); +void un_m_div_scalar3r(real *v, real *a, real scalar); + +void un_m_dot3r(real *v, real *a, real *b); +void un_m_hadamard3r(real *v, real *a, real *b); +void un_m_project3r(real *v, real *a, real *onto); +void un_m_reflect3r(real *v, real *a, real *normal); +void un_m_cross3r(real *v, real *a, real *b); + +void un_m_normalize3r(real *v, real *a); +void un_m_magnitude3r(real *v, real *a); +void un_m_magnitude_sqr3r(real *v, real *a); +void un_m_distance3r(real *v, real *a, real *b); +void un_m_distance_sqr3r(real *v, real *a, real *b); + +/* 4d real */ +void un_m_add4r(real *v, real *a, real *b); +void un_m_sub4r(real *v, real *a, real *b); + +void un_m_add_scalar4r(real *v, real *a, real scalar); +void un_m_sub_scalar4r(real *v, real *a, real scalar); +void un_m_mul_scalar4r(real *v, real *a, real scalar); +void un_m_div_scalar4r(real *v, real *a, real scalar); + +void un_m_dot4r(real *v, real *a, real *b); +void un_m_hadamard4r(real *v, real *a, real *b); +void un_m_project4r(real *v, real *a, real *onto); +void un_m_reflect4r(real *v, real *a, real *normal); + +void un_m_normalize4r(real *v, real *a); +void un_m_magnitude4r(real *v, real *a); +void un_m_magnitude_sqr4r(real *v, real *a); +void un_m_distance4r(real *v, real *a, real *b); +void un_m_distance_sqr4r(real *v, real *a, real *b); + /* ---- splines ---- */ -real un_m_bezierr(real a, real q0, real q1, real b, real t); -f32 un_m_bezierf(f32 a, f32 q0, f32 q1, f32 b, f32 t); -f64 un_m_bezierd(f64 a, f64 q0, f64 q1, f64 b, f64 t); +void un_m_bezierr(real *v, real a, real q0, real q1, real b, real t); +void un_m_bezier2r(real *v, real *a, real *q0, real *q1, real *b, real t); +void un_m_bezier3r(real *v, real *a, real *q0, real *q1, real *b, real t); +void un_m_bezier4r(real *v, real *a, real *q0, real *q1, real *b, real t); + +void un_m_bezierf(f32 *v, f32 a, f32 q0, f32 q1, f32 b, f32 t); +void un_m_bezier2f(f32 *v, f32 *a, f32 *q0, f32 *q1, f32 *b, f32 t); +void un_m_bezier3f(f32 *v, f32 *a, f32 *q0, f32 *q1, f32 *b, f32 t); +void un_m_bezier4f(f32 *v, f32 *a, f32 *q0, f32 *q1, f32 *b, f32 t); + +void un_m_bezierd(f64 *v, f64 a, f64 q0, f64 q1, f64 b, f64 t); +void un_m_bezier2d(f64 *v, f64 *a, f64 *q0, f64 *q1, f64 *b, f64 t); +void un_m_bezier3d(f64 *v, f64 *a, f64 *q0, f64 *q1, f64 *b, f64 t); +void un_m_bezier4d(f64 *v, f64 *a, f64 *q0, f64 *q1, f64 *b, f64 t); /* ---- easing ---- */ |