aboutsummaryrefslogtreecommitdiff
path: root/src/un_vec.c
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/un_vec.c
parent471b539bdbf658ff7924b7500f89fd237df8be9b (diff)
downloadungrateful-ed1cab483e49e29396178a33dea51773aa770855.tar.gz
ungrateful-ed1cab483e49e29396178a33dea51773aa770855.zip
Math, not tested
Diffstat (limited to 'src/un_vec.c')
-rw-r--r--src/un_vec.c294
1 files changed, 294 insertions, 0 deletions
diff --git a/src/un_vec.c b/src/un_vec.c
new file mode 100644
index 0000000..1e1ccda
--- /dev/null
+++ b/src/un_vec.c
@@ -0,0 +1,294 @@
+
+
+
+/*
+ *
+ * vector from two vectors
+ *
+ * add
+ * sub
+ *
+ * add scalar
+ * sub scalar
+ *
+ * mul scalar
+ * div scalar
+ *
+ * distance
+ * discance sqr
+ *
+ * magnitude
+ * magnitude sqr
+ *
+ * dot, cross, surface_cross, normalize, reflect, flatten, project
+ *
+ *
+ *
+ */
+
+void un_m_add2f(f32 *v, f32 *a, f32 *b) {
+ v[0] = a[0] + b[0];
+ v[1] = a[1] + b[1];
+}
+
+void un_m_add3f(f32 *v, f32 *a, f32 *b) {
+ v[0] = a[0] + b[0];
+ v[1] = a[1] + b[1];
+ v[2] = a[2] + b[2];
+}
+
+void un_m_add4f(f32 *v, f32 *a, f32 *b) {
+ v[0] = a[0] + b[0];
+ v[1] = a[1] + b[1];
+ v[2] = a[2] + b[2];
+ v[3] = a[3] + b[3];
+}
+
+void un_m_sub2f(f32 *v, f32 *a, f32 *b) {
+ v[0] = a[0] - b[0];
+ v[1] = a[1] - b[1];
+}
+
+void un_m_sub3f(f32 *v, f32 *a, f32 *b) {
+ v[0] = a[0] - b[0];
+ v[1] = a[1] - b[1];
+ v[2] = a[2] - b[2];
+}
+
+void un_m_sub4f(f32 *v, f32 *a, f32 *b) {
+ v[0] = a[0] - b[0];
+ v[1] = a[1] - b[1];
+ v[2] = a[2] - b[2];
+ v[3] = a[3] - b[3];
+}
+
+void un_m_add_scalar2f(f32 *v, f32 *a, f32 scalar) {
+ v[0] = a[0] + scalar;
+ v[1] = a[1] + scalar;
+}
+
+void un_m_add_scalar3f(f32 *v, f32 *a, f32 scalar) {
+ v[0] = a[0] + scalar;
+ v[1] = a[1] + scalar;
+ v[2] = a[2] + scalar;
+}
+
+void un_m_add_scalar4f(f32 *v, f32 *a, f32 scalar) {
+ v[0] = a[0] + scalar;
+ v[1] = a[1] + scalar;
+ v[2] = a[2] + scalar;
+ v[3] = a[3] + scalar;
+}
+
+void un_m_sub_scalar2f(f32 *v, f32 *a, f32 scalar) {
+ v[0] = a[0] - scalar;
+ v[1] = a[1] - scalar;
+}
+
+void un_m_sub_scalar3f(f32 *v, f32 *a, f32 scalar) {
+ v[0] = a[0] - scalar;
+ v[1] = a[1] - scalar;
+ v[2] = a[2] - scalar;
+}
+
+void un_m_sub_scalar4f(f32 *v, f32 *a, f32 scalar) {
+ v[0] = a[0] - scalar;
+ v[1] = a[1] - scalar;
+ v[2] = a[2] - scalar;
+ v[3] = a[3] - scalar;
+}
+
+void un_m_mul_scalar2f(f32 *v, f32 *a, f32 scalar) {
+ v[0] = a[0] * scalar;
+ v[1] = a[1] * scalar;
+}
+
+void un_m_mul_scalar3f(f32 *v, f32 *a, f32 scalar) {
+ v[0] = a[0] * scalar;
+ v[1] = a[1] * scalar;
+ v[2] = a[2] * scalar;
+}
+
+void un_m_mul_scalar4f(f32 *v, f32 *a, f32 scalar) {
+ v[0] = a[0] * scalar;
+ v[1] = a[1] * scalar;
+ v[2] = a[2] * scalar;
+ v[3] = a[3] * scalar;
+}
+
+void un_m_div_scalar2f(f32 *v, f32 *a, f32 scalar) {
+ v[0] = a[0] / scalar;
+ v[1] = a[1] / scalar;
+}
+
+void un_m_div_scalar3f(f32 *v, f32 *a, f32 scalar) {
+ v[0] = a[0] / scalar;
+ v[1] = a[1] / scalar;
+ v[2] = a[2] / scalar;
+}
+
+void un_m_div_scalar4f(f32 *v, f32 *a, f32 scalar) {
+ v[0] = a[0] / scalar;
+ v[1] = a[1] / scalar;
+ v[2] = a[2] / scalar;
+ v[3] = a[3] / scalar;
+}
+
+void un_m_dot2f(f32 *v, f32 *a, f32 *b) {
+ *v = a[0] * b[0] + a[1] * b[1];
+}
+
+void un_m_dot3f(f32 *v, f32 *a, f32 *b) {
+ *v = a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
+}
+
+void un_m_dot4f(f32 *v, f32 *a, f32 *b) {
+ *v = a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];
+}
+
+void un_m_hadamard2f(f32 *v, f32 *a, f32 *b) {
+ v[0] = a[0] * b[0];
+ v[1] = a[1] * b[1];
+}
+
+void un_m_hadamard3f(f32 *v, f32 *a, f32 *b) {
+ v[0] = a[0] * b[0];
+ v[1] = a[1] * b[1];
+ v[2] = a[2] * b[2];
+}
+
+void un_m_hadamard4f(f32 *v, f32 *a, f32 *b) {
+ v[0] = a[0] * b[0];
+ v[1] = a[1] * b[1];
+ v[2] = a[2] * b[2];
+ v[3] = a[3] * b[3];
+}
+
+void un_m_cross2f(f32 *v, f32 *a) {
+ v[0] = a[1];
+ v[1] =-a[0];
+}
+
+void un_m_cross3f(f32 *v, f32 *a, f32 *b) {
+ v[0] = a[1] * b[2] - a[2] * b[1];
+ v[1] = a[2] * b[0] - a[0] * b[2];
+ v[2] = a[0] * b[1] - a[1] * b[0];
+}
+
+void un_m_magnitude2f(f32 *v, f32 *a) {
+ *v = sqrtf(a[0] * a[0] + a[1] * a[1]);
+}
+
+void un_m_magnitude3f(f32 *v, f32 *a) {
+ *v = sqrtf(a[0] * a[0] + a[1] * a[1] + a[2] * a[2]);
+}
+
+void un_m_magnitude4f(f32 *v, f32 *a) {
+ *v = sqrtf(a[0] * a[0] + a[1] * a[1] + a[2] * a[2] + a[3] * a[3]);
+}
+
+void un_m_magnitude_sqr2f(f32 *v, f32 *a) {
+ *v = a[0] * a[0] + a[1] * a[1];
+}
+
+void un_m_magnitude_sqr3f(f32 *v, f32 *a) {
+ *v = a[0] * a[0] + a[1] * a[1] + a[2] * a[2];
+}
+
+void un_m_magnitude_sqr4f(f32 *v, f32 *a) {
+ *v = a[0] * a[0] + a[1] * a[1] + a[2] * a[2] + a[3] * a[3];
+}
+
+
+void un_m_distance_sqr2f(f32 *v, f32 *a, f32 *b) {
+ f32 f[2];
+ un_m_sub2f(f, b, a);
+ *v = f[0] * f[0] + f[1] * f[1];
+}
+
+void un_m_distance_sqr3f(f32 *v, f32 *a, f32 *b) {
+ f32 f[3];
+ un_m_sub3f(f, b, a);
+ *v = f[0] * f[0] + f[1] * f[1] + f[2] * f[2];
+}
+
+void un_m_distance_sqr4f(f32 *v, f32 *a, f32 *b) {
+ f32 f[4];
+ un_m_sub4f(f, b, a);
+ *v = f[0] * f[0] + f[1] * f[1] + f[2] * f[2] + f[3] * f[3];
+}
+
+void un_m_normalize2f(f32 *v, f32 *a) {
+ f32 f;
+ un_m_magnitude2f(&f, a);
+ v[0] /= f;
+ v[1] /= f;
+}
+
+void un_m_normalize3f(f32 *v, f32 *a) {
+ f32 f;
+ un_m_magnitude3f(&f, a);
+ v[0] /= f;
+ v[1] /= f;
+ v[2] /= f;
+}
+
+void un_m_normalize4f(f32 *v, f32 *a) {
+ f32 f;
+ un_m_magnitude4f(&f, a);
+ v[0] /= f;
+ v[1] /= f;
+ v[2] /= f;
+ v[3] /= f;
+}
+
+void un_m_project2f(f32 *v, f32 *a, f32 *onto) {
+ f32 dot, magn, scale;
+
+ un_m_dot2f(&dot, a, onto);
+ un_m_magnitude_sqr2f(&magn, onto);
+
+ if (magn < EPSILON) {
+ un_memory_set((void*)v, 0, sizeof(*v) * 2);
+ return;
+ }
+
+ scale = dot / magn;
+ v[0] = onto[0] * scale;
+ v[1] = onto[1] * scale;
+}
+
+void un_m_project3f(f32 *v, f32 *a, f32 *onto) {
+ f32 dot, magn, scale;
+
+ un_m_dot3f(&dot, a, onto);
+ un_m_magnitude_sqr3f(&magn, onto);
+
+ if (magn < EPSILON) {
+ un_memory_set((void*)v, 0, sizeof(*v) * 3);
+ return;
+ }
+
+ scale = dot / magn;
+ v[0] = onto[0] * scale;
+ v[1] = onto[1] * scale;
+ v[2] = onto[2] * scale;
+}
+
+void un_m_project4f(f32 *v, f32 *a, f32 *onto) {
+ f32 dot, magn, scale;
+
+ un_m_dot4f(&dot, a, onto);
+ un_m_magnitude_sqr4f(&magn, onto);
+
+ if (magn < EPSILON) {
+ un_memory_set((void*)v, 0, sizeof(*v) * 4);
+ return;
+ }
+
+ scale = dot / magn;
+ v[0] = onto[0] * scale;
+ v[1] = onto[1] * scale;
+ v[2] = onto[2] * scale;
+ v[3] = onto[3] * scale;
+}