aboutsummaryrefslogtreecommitdiff
path: root/src/ungrateful.h
diff options
context:
space:
mode:
authorbonmas14 <bonmas14@gmail.com>2025-08-04 13:33:47 +0000
committerbonmas14 <bonmas14@gmail.com>2025-08-04 13:33:47 +0000
commited1cab483e49e29396178a33dea51773aa770855 (patch)
tree78102102f7f7d07be0e6bef4b10ef69576f0c23e /src/ungrateful.h
parent471b539bdbf658ff7924b7500f89fd237df8be9b (diff)
downloadungrateful-ed1cab483e49e29396178a33dea51773aa770855.tar.gz
ungrateful-ed1cab483e49e29396178a33dea51773aa770855.zip
Math, not tested
Diffstat (limited to 'src/ungrateful.h')
-rw-r--r--src/ungrateful.h130
1 files changed, 129 insertions, 1 deletions
diff --git a/src/ungrateful.h b/src/ungrateful.h
index e3c52cf..ff8c24b 100644
--- a/src/ungrateful.h
+++ b/src/ungrateful.h
@@ -60,6 +60,7 @@
#include <stdarg.h>
#include <limits.h>
#include <assert.h>
+#include <math.h>
#define UNUSED(x) (void)(x)
@@ -80,7 +81,6 @@
extern "C" {
#endif
-
typedef uint64_t u64;
typedef uint32_t u32;
typedef uint16_t u16;
@@ -97,6 +97,46 @@ typedef int8_t b8;
typedef float f32;
typedef double f64;
+#if defined(UN_DOUBLE_PRECISION)
+typedef double real;
+
+#ifndef PI
+# define PI 3.14159265358979323846
+#endif
+
+#ifndef EPSILON
+# define EPSILON 0.000001
+#endif
+
+#ifndef DEG2RAD
+# define DEG2RAD (PI/180.0)
+#endif
+
+#ifndef RAD2DEG
+# define RAD2DEG (180.0/PI)
+#endif
+
+#else
+typedef float real;
+
+#ifndef PI
+# define PI 3.14159265358979323846f
+#endif
+
+#ifndef EPSILON
+# define EPSILON 0.000001f
+#endif
+
+#ifndef DEG2RAD
+# define DEG2RAD (PI/180.0f)
+#endif
+
+#ifndef RAD2DEG
+# define RAD2DEG (180.0f/PI)
+#endif
+
+#endif // UN_DOUBLE_PRECISION
+
/* ---- Memory Allocators API ---- */
typedef enum {
@@ -186,6 +226,94 @@ extern s64 un_string_index_of_last(String input, u8 value);
extern String un_string_format(Allocator alloc, String buffer, ...);
extern String un_string_vformat(Allocator alloc, String buffer, va_list args);
+/* ---- math, and vecmath ---- */
+
+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 */
+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);
+void un_m_sub_scalar2f(f32 *v, f32 *a, f32 scalar);
+void un_m_mul_scalar2f(f32 *v, f32 *a, f32 scalar);
+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_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_distance_sqr2f(f32 *v, f32 *a, f32 *b);
+
+/* 3d */
+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);
+void un_m_sub_scalar3f(f32 *v, f32 *a, f32 scalar);
+void un_m_mul_scalar3f(f32 *v, f32 *a, f32 scalar);
+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_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_distance_sqr3f(f32 *v, f32 *a, f32 *b);
+
+/* 4d */
+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);
+void un_m_sub_scalar4f(f32 *v, f32 *a, f32 scalar);
+void un_m_mul_scalar4f(f32 *v, f32 *a, f32 scalar);
+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_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_distance_sqr4f(f32 *v, f32 *a, f32 *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);
+
+/* ---- easing ---- */
+
+real un_m_ease_isiner(real t);
+real un_m_ease_iosiner(real t);
+real un_m_ease_osiner(real t);
+real un_m_ease_iquadr(real t);
+real un_m_ease_ioquadr(real t);
+real un_m_ease_oquadr(real t);
+
+f32 un_m_ease_isinef(f32 t);
+f32 un_m_ease_iosinef(f32 t);
+f32 un_m_ease_osinef(f32 t);
+f32 un_m_ease_iquadf(f32 t);
+f32 un_m_ease_ioquadf(f32 t);
+f32 un_m_ease_oquadf(f32 t);
+
+f64 un_m_ease_isined(f64 t);
+f64 un_m_ease_iosined(f64 t);
+f64 un_m_ease_osined(f64 t);
+f64 un_m_ease_iquadd(f64 t);
+f64 un_m_ease_ioquadd(f64 t);
+f64 un_m_ease_oquadd(f64 t);
+
#if defined(__cplusplus)
}
#endif