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/un_vec.c | |
parent | ed1cab483e49e29396178a33dea51773aa770855 (diff) | |
download | ungrateful-b16ca14911ad5df44ae499eed2d90c3ca2da4eb0.tar.gz ungrateful-b16ca14911ad5df44ae499eed2d90c3ca2da4eb0.zip |
Vecs and tests
Diffstat (limited to 'src/un_vec.c')
-rw-r--r-- | src/un_vec.c | 87 |
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); +} |