aboutsummaryrefslogtreecommitdiff
path: root/src/un_vec.c
diff options
context:
space:
mode:
authorbonmas14 <bonmas14@gmail.com>2025-08-04 16:08:22 +0000
committerbonmas14 <bonmas14@gmail.com>2025-08-04 16:08:22 +0000
commitb16ca14911ad5df44ae499eed2d90c3ca2da4eb0 (patch)
tree685d64ea40f66b72c994bcfd3de0c5015a9cf36a /src/un_vec.c
parented1cab483e49e29396178a33dea51773aa770855 (diff)
downloadungrateful-b16ca14911ad5df44ae499eed2d90c3ca2da4eb0.tar.gz
ungrateful-b16ca14911ad5df44ae499eed2d90c3ca2da4eb0.zip
Vecs and tests
Diffstat (limited to 'src/un_vec.c')
-rw-r--r--src/un_vec.c87
1 files changed, 50 insertions, 37 deletions
diff --git a/src/un_vec.c b/src/un_vec.c
index 1e1ccda..d6c984e 100644
--- a/src/un_vec.c
+++ b/src/un_vec.c
@@ -1,31 +1,3 @@
-
-
-
-/*
- *
- * 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];
@@ -199,6 +171,23 @@ 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_distance2f(f32 *v, f32 *a, f32 *b) {
+ f32 f[2];
+ un_m_sub2f(f, b, a);
+ *v = sqrtf(f[0] * f[0] + f[1] * f[1]);
+}
+
+void un_m_distance3f(f32 *v, f32 *a, f32 *b) {
+ f32 f[3];
+ un_m_sub3f(f, b, a);
+ *v = sqrtf(f[0] * f[0] + f[1] * f[1] + f[2] * f[2]);
+}
+
+void un_m_distance4f(f32 *v, f32 *a, f32 *b) {
+ f32 f[4];
+ un_m_sub4f(f, b, a);
+ *v = sqrtf(f[0] * f[0] + f[1] * f[1] + f[2] * f[2] + f[3] * f[3]);
+}
void un_m_distance_sqr2f(f32 *v, f32 *a, f32 *b) {
f32 f[2];
@@ -221,25 +210,25 @@ void un_m_distance_sqr4f(f32 *v, f32 *a, f32 *b) {
void un_m_normalize2f(f32 *v, f32 *a) {
f32 f;
un_m_magnitude2f(&f, a);
- v[0] /= f;
- v[1] /= f;
+ v[0] = a[0] / f;
+ v[1] = a[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;
+ v[0] = a[0] / f;
+ v[1] = a[1] / f;
+ v[2] = a[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;
+ v[0] = a[0] / f;
+ v[1] = a[1] / f;
+ v[2] = a[2] / f;
+ v[3] = a[3] / f;
}
void un_m_project2f(f32 *v, f32 *a, f32 *onto) {
@@ -292,3 +281,27 @@ void un_m_project4f(f32 *v, f32 *a, f32 *onto) {
v[2] = onto[2] * scale;
v[3] = onto[3] * scale;
}
+
+void un_m_reflect2f(f32 *v, f32 *a, f32 *normal) {
+ f32 dot;
+
+ un_m_dot2f(&dot, a, normal);
+ un_m_mul_scalar2f(v, normal, 2.0f * dot);
+ un_m_sub2f(v, v, a);
+}
+
+void un_m_reflect3f(f32 *v, f32 *a, f32 *normal) {
+ f32 dot;
+
+ un_m_dot3f(&dot, a, normal);
+ un_m_mul_scalar3f(v, normal, 2.0f * dot);
+ un_m_sub3f(v, v, a);
+}
+
+void un_m_reflect4f(f32 *v, f32 *a, f32 *normal) {
+ f32 dot;
+
+ un_m_dot4f(&dot, a, normal);
+ un_m_mul_scalar4f(v, normal, 2.0f * dot);
+ un_m_sub4f(v, v, a);
+}