diff options
author | bonmas14 <bonmas14@gmail.com> | 2025-09-25 14:17:07 +0300 |
---|---|---|
committer | bonmas14 <bonmas14@gmail.com> | 2025-09-25 14:17:07 +0300 |
commit | 166877cf15f6afa89c9f8a61e267d485868d0ee1 (patch) | |
tree | 9f080314edc4fb293f91227cdc1c01cfec8d7bae /src/un_vecd.c | |
parent | 8ebdc95621bc61fdf3c98cd7ae4ddca67398df23 (diff) | |
download | ungrateful-166877cf15f6afa89c9f8a61e267d485868d0ee1.tar.gz ungrateful-166877cf15f6afa89c9f8a61e267d485868d0ee1.zip |
+disgrace and rework of ungrateful.h
Diffstat (limited to 'src/un_vecd.c')
-rw-r--r-- | src/un_vecd.c | 506 |
1 files changed, 304 insertions, 202 deletions
diff --git a/src/un_vecd.c b/src/un_vecd.c index 0d138a4..6e738fc 100644 --- a/src/un_vecd.c +++ b/src/un_vecd.c @@ -1,307 +1,409 @@ -void un_m_add2d(f64 *v, f64 *a, f64 *b) { - v[0] = a[0] + b[0]; - v[1] = a[1] + b[1]; +inline double2 un_m_add2d(double2 a, double2 b) { + double2 result; + result.x = a.x + b.x; + result.y = a.y + b.y; + return result; } -void un_m_add3d(f64 *v, f64 *a, f64 *b) { - v[0] = a[0] + b[0]; - v[1] = a[1] + b[1]; - v[2] = a[2] + b[2]; +inline double3 un_m_add3d(double3 a, double3 b) { + double3 result; + result.x = a.x + b.x; + result.y = a.y + b.y; + result.z = a.z + b.z; + return result; } -void un_m_add4d(f64 *v, f64 *a, f64 *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]; +inline double4 un_m_add4d(double4 a, double4 b) { + double4 result; + result.x = a.x + b.x; + result.y = a.y + b.y; + result.z = a.z + b.z; + result.w = a.w + b.w; + return result; } -void un_m_sub2d(f64 *v, f64 *a, f64 *b) { - v[0] = a[0] - b[0]; - v[1] = a[1] - b[1]; +inline double2 un_m_sub2d(double2 a, double2 b) { + double2 result; + result.x = a.x - b.x; + result.y = a.y - b.y; + return result; } -void un_m_sub3d(f64 *v, f64 *a, f64 *b) { - v[0] = a[0] - b[0]; - v[1] = a[1] - b[1]; - v[2] = a[2] - b[2]; +inline double3 un_m_sub3d(double3 a, double3 b) { + double3 result; + result.x = a.x - b.x; + result.y = a.y - b.y; + result.z = a.z - b.z; + return result; } -void un_m_sub4d(f64 *v, f64 *a, f64 *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]; +inline double4 un_m_sub4d(double4 a, double4 b) { + double4 result; + result.x = a.x - b.x; + result.y = a.y - b.y; + result.z = a.z - b.z; + result.w = a.w - b.w; + return result; } -void un_m_add_scalar2d(f64 *v, f64 *a, f64 scalar) { - v[0] = a[0] + scalar; - v[1] = a[1] + scalar; +inline double2 un_m_add_scalar2d(double2 a, double scalar) { + double2 result; + result.x = a.x + scalar; + result.y = a.y + scalar; + return result; } -void un_m_add_scalar3d(f64 *v, f64 *a, f64 scalar) { - v[0] = a[0] + scalar; - v[1] = a[1] + scalar; - v[2] = a[2] + scalar; +inline double3 un_m_add_scalar3d(double3 a, double scalar) { + double3 result; + result.x = a.x + scalar; + result.y = a.y + scalar; + result.z = a.z + scalar; + return result; } -void un_m_add_scalar4d(f64 *v, f64 *a, f64 scalar) { - v[0] = a[0] + scalar; - v[1] = a[1] + scalar; - v[2] = a[2] + scalar; - v[3] = a[3] + scalar; +inline double4 un_m_add_scalar4d(double4 a, double scalar) { + double4 result; + result.x = a.x + scalar; + result.y = a.y + scalar; + result.z = a.z + scalar; + result.w = a.w + scalar; + return result; } -void un_m_sub_scalar2d(f64 *v, f64 *a, f64 scalar) { - v[0] = a[0] - scalar; - v[1] = a[1] - scalar; +inline double2 un_m_sub_scalar2d(double2 a, double scalar) { + double2 result; + result.x = a.x - scalar; + result.y = a.y - scalar; + return result; } -void un_m_sub_scalar3d(f64 *v, f64 *a, f64 scalar) { - v[0] = a[0] - scalar; - v[1] = a[1] - scalar; - v[2] = a[2] - scalar; +inline double3 un_m_sub_scalar3d(double3 a, double scalar) { + double3 result; + result.x = a.x - scalar; + result.y = a.y - scalar; + result.z = a.z - scalar; + return result; } -void un_m_sub_scalar4d(f64 *v, f64 *a, f64 scalar) { - v[0] = a[0] - scalar; - v[1] = a[1] - scalar; - v[2] = a[2] - scalar; - v[3] = a[3] - scalar; +inline double4 un_m_sub_scalar4d(double4 a, double scalar) { + double4 result; + result.x = a.x - scalar; + result.y = a.y - scalar; + result.z = a.z - scalar; + result.w = a.w - scalar; + return result; } -void un_m_mul_scalar2d(f64 *v, f64 *a, f64 scalar) { - v[0] = a[0] * scalar; - v[1] = a[1] * scalar; +inline double2 un_m_mul_scalar2d(double2 a, double scalar) { + double2 result; + result.x = a.x * scalar; + result.y = a.y * scalar; + return result; } -void un_m_mul_scalar3d(f64 *v, f64 *a, f64 scalar) { - v[0] = a[0] * scalar; - v[1] = a[1] * scalar; - v[2] = a[2] * scalar; +inline double3 un_m_mul_scalar3d(double3 a, double scalar) { + double3 result; + result.x = a.x * scalar; + result.y = a.y * scalar; + result.z = a.z * scalar; + return result; } -void un_m_mul_scalar4d(f64 *v, f64 *a, f64 scalar) { - v[0] = a[0] * scalar; - v[1] = a[1] * scalar; - v[2] = a[2] * scalar; - v[3] = a[3] * scalar; +inline double4 un_m_mul_scalar4d(double4 a, double scalar) { + double4 result; + result.x = a.x * scalar; + result.y = a.y * scalar; + result.z = a.z * scalar; + result.w = a.w * scalar; + return result; } -void un_m_div_scalar2d(f64 *v, f64 *a, f64 scalar) { - v[0] = a[0] / scalar; - v[1] = a[1] / scalar; +inline double2 un_m_div_scalar2d(double2 a, double scalar) { + double2 result; + result.x = a.x / scalar; + result.y = a.y / scalar; + return result; } -void un_m_div_scalar3d(f64 *v, f64 *a, f64 scalar) { - v[0] = a[0] / scalar; - v[1] = a[1] / scalar; - v[2] = a[2] / scalar; +inline double3 un_m_div_scalar3d(double3 a, double scalar) { + double3 result; + result.x = a.x / scalar; + result.y = a.y / scalar; + result.z = a.z / scalar; + return result; } -void un_m_div_scalar4d(f64 *v, f64 *a, f64 scalar) { - v[0] = a[0] / scalar; - v[1] = a[1] / scalar; - v[2] = a[2] / scalar; - v[3] = a[3] / scalar; +inline double4 un_m_div_scalar4d(double4 a, double scalar) { + double4 result; + result.x = a.x / scalar; + result.y = a.y / scalar; + result.z = a.z / scalar; + result.w = a.w / scalar; + return result; } -void un_m_dot2d(f64 *v, f64 *a, f64 *b) { - *v = a[0] * b[0] + a[1] * b[1]; +inline double un_m_dot2d(double2 a, double2 b) { + return a.x * b.x + a.y * b.y; } -void un_m_dot3d(f64 *v, f64 *a, f64 *b) { - *v = a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; +inline double un_m_dot3d(double3 a, double3 b) { + return a.x * b.x + a.y * b.y + a.z * b.z; } -void un_m_dot4d(f64 *v, f64 *a, f64 *b) { - *v = a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3]; +inline double un_m_dot4d(double4 a, double4 b) { + return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w; } -void un_m_hadamard2d(f64 *v, f64 *a, f64 *b) { - v[0] = a[0] * b[0]; - v[1] = a[1] * b[1]; +inline double2 un_m_hadamard2d(double2 a, double2 b) { + double2 result; + result.x = a.x * b.x; + result.y = a.y * b.y; + return result; } -void un_m_hadamard3d(f64 *v, f64 *a, f64 *b) { - v[0] = a[0] * b[0]; - v[1] = a[1] * b[1]; - v[2] = a[2] * b[2]; +inline double3 un_m_hadamard3d(double3 a, double3 b) { + double3 result; + result.x = a.x * b.x; + result.y = a.y * b.y; + result.z = a.z * b.z; + return result; } -void un_m_hadamard4d(f64 *v, f64 *a, f64 *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]; +inline double4 un_m_hadamard4d(double4 a, double4 b) { + double4 result; + result.x = a.x * b.x; + result.y = a.y * b.y; + result.z = a.z * b.z; + result.w = a.w * b.w; + return result; } -void un_m_cross2d(f64 *v, f64 *a) { - v[0] = a[1]; - v[1] =-a[0]; +inline double2 un_m_cross2d(double2 a) { + double2 result; + result.x = a.y; + result.y =-a.x; + return result; } -void un_m_cross3d(f64 *v, f64 *a, f64 *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]; +inline double3 un_m_cross3d(double3 a, double3 b) { + double3 result; + result.x = a.y * b.z - a.z * b.y; + result.y = a.z * b.x - a.x * b.z; + result.z = a.x * b.y - a.y * b.x; + return result; } -void un_m_magnitude2d(f64 *v, f64 *a) { - *v = sqrt(a[0] * a[0] + a[1] * a[1]); +inline double un_m_magnitude2d(double2 a) { + return sqrt(a.x * a.x + a.y * a.y); } -void un_m_magnitude3d(f64 *v, f64 *a) { - *v = sqrt(a[0] * a[0] + a[1] * a[1] + a[2] * a[2]); +inline double un_m_magnitude3d(double3 a) { + return sqrt(a.x * a.x + a.y * a.y + a.z * a.z); } -void un_m_magnitude4d(f64 *v, f64 *a) { - *v = sqrt(a[0] * a[0] + a[1] * a[1] + a[2] * a[2] + a[3] * a[3]); +inline double un_m_magnitude4d(double4 a) { + return sqrt(a.x * a.x + a.y * a.y + a.z * a.z + a.w * a.w); } -void un_m_magnitude_sqr2d(f64 *v, f64 *a) { - *v = a[0] * a[0] + a[1] * a[1]; +inline double un_m_magnitude_sqr2d(double2 a) { + return a.x * a.x + a.y * a.y; } -void un_m_magnitude_sqr3d(f64 *v, f64 *a) { - *v = a[0] * a[0] + a[1] * a[1] + a[2] * a[2]; +inline double un_m_magnitude_sqr3d(double3 a) { + return a.x * a.x + a.y * a.y + a.z * a.z; } -void un_m_magnitude_sqr4d(f64 *v, f64 *a) { - *v = a[0] * a[0] + a[1] * a[1] + a[2] * a[2] + a[3] * a[3]; +inline double un_m_magnitude_sqr4d(double4 a) { + return a.x * a.x + a.y * a.y + a.z * a.z + a.w * a.w; } -void un_m_distance2d(f64 *v, f64 *a, f64 *b) { - f64 f[2]; - un_m_sub2d(f, b, a); - *v = sqrt(f[0] * f[0] + f[1] * f[1]); +inline double un_m_distance2d(double2 a, double2 b) { + double2 result; + + result.x = b.x - a.x; + result.y = b.y - a.y; + + return sqrt(result.x * result.x + result.y * result.y); } -void un_m_distance3d(f64 *v, f64 *a, f64 *b) { - f64 f[3]; - un_m_sub3d(f, b, a); - *v = sqrt(f[0] * f[0] + f[1] * f[1] + f[2] * f[2]); +inline double un_m_distance3d(double3 a, double3 b) { + double3 result; + + result.x = b.x - a.x; + result.y = b.y - a.y; + result.z = b.z - a.z; + + return sqrt(result.x * result.x + result.y * result.y + result.z * result.z); } -void un_m_distance4d(f64 *v, f64 *a, f64 *b) { - f64 f[4]; - un_m_sub4d(f, b, a); - *v = sqrt(f[0] * f[0] + f[1] * f[1] + f[2] * f[2] + f[3] * f[3]); +inline double un_m_distance4d(double4 a, double4 b) { + double4 result; + + result.x = b.x - a.x; + result.y = b.y - a.y; + result.z = b.z - a.z; + result.w = b.w - a.w; + + return sqrt(result.x * result.x + result.y * result.y + result.z * result.z + result.w * result.w); } -void un_m_distance_sqr2d(f64 *v, f64 *a, f64 *b) { - f64 f[2]; - un_m_sub2d(f, b, a); - *v = f[0] * f[0] + f[1] * f[1]; +inline double un_m_distance_sqr2d(double2 a, double2 b) { + double2 result; + + result.x = b.x - a.x; + result.y = b.y - a.y; + + return result.x * result.x + result.y * result.y; } -void un_m_distance_sqr3d(f64 *v, f64 *a, f64 *b) { - f64 f[3]; - un_m_sub3d(f, b, a); - *v = f[0] * f[0] + f[1] * f[1] + f[2] * f[2]; +inline double un_m_distance_sqr3d(double3 a, double3 b) { + double3 result; + + result.x = b.x - a.x; + result.y = b.y - a.y; + result.z = b.z - a.z; + + return result.x * result.x + result.y * result.y + result.z * result.z; } -void un_m_distance_sqr4d(f64 *v, f64 *a, f64 *b) { - f64 f[4]; - un_m_sub4d(f, b, a); - *v = f[0] * f[0] + f[1] * f[1] + f[2] * f[2] + f[3] * f[3]; +inline double un_m_distance_sqr4d(double4 a, double4 b) { + double4 result; + + result.x = b.x - a.x; + result.y = b.y - a.y; + result.z = b.z - a.z; + result.w = b.w - a.w; + + return result.x * result.x + result.y * result.y + result.z * result.z + result.w * result.w; } -void un_m_normalize2d(f64 *v, f64 *a) { - f64 f; - un_m_magnitude2d(&f, a); - v[0] = a[0] / f; - v[1] = a[1] / f; +inline double2 un_m_normalize2d(double2 a) { + double2 result; + double mag; + + mag = sqrt(a.x * a.x + a.y * a.y); + + result.x = a.x / mag; + result.y = a.y / mag; + + return result; } -void un_m_normalize3d(f64 *v, f64 *a) { - f64 f; - un_m_magnitude3d(&f, a); - v[0] = a[0] / f; - v[1] = a[1] / f; - v[2] = a[2] / f; +inline double3 un_m_normalize3d(double3 a) { + double3 result; + double mag; + + mag = sqrt(a.x * a.x + a.y * a.y + a.z * a.z); + + result.x = a.x / mag; + result.y = a.y / mag; + result.z = a.z / mag; + + return result; } -void un_m_normalize4d(f64 *v, f64 *a) { - f64 f; - un_m_magnitude4d(&f, a); - v[0] = a[0] / f; - v[1] = a[1] / f; - v[2] = a[2] / f; - v[3] = a[3] / f; +inline double4 un_m_normalize4d(double4 a) { + double4 result; + double mag; + + mag = sqrt(a.x * a.x + a.y * a.y + a.z * a.z + a.w * a.w); + + result.x = a.x / mag; + result.y = a.y / mag; + result.z = a.z / mag; + result.w = a.w / mag; + + return result; } -void un_m_project2d(f64 *v, f64 *a, f64 *onto) { - f64 dot, magn, scale; +inline double2 un_m_project2d(double2 a, double2 onto) { + double d; + double2 result; - un_m_dot2d(&dot, a, onto); - un_m_magnitude_sqr2d(&magn, onto); + d = a.x * onto.x + a.y * onto.y; + d /= onto.x * onto.x + onto.y * onto.y; - if (magn < EPSILON) { - un_memory_set((void*)v, 0, sizeof(*v) * 2); - return; - } + result.x = onto.x * d; + result.y = onto.y * d; - scale = dot / magn; - v[0] = onto[0] * scale; - v[1] = onto[1] * scale; + return result; } -void un_m_project3d(f64 *v, f64 *a, f64 *onto) { - f64 dot, magn, scale; +inline double3 un_m_project3d(double3 a, double3 onto) { + double d; + double3 result; - un_m_dot3d(&dot, a, onto); - un_m_magnitude_sqr3d(&magn, onto); + d = a.x * onto.x + a.y * onto.y + a.z * onto.z; + d /= onto.x * onto.x + onto.y * onto.y + onto.z * onto.z; - if (magn < EPSILON_D) { - un_memory_set((void*)v, 0, sizeof(*v) * 3); - return; - } + result.x = onto.x * d; + result.y = onto.y * d; + result.z = onto.z * d; - scale = dot / magn; - v[0] = onto[0] * scale; - v[1] = onto[1] * scale; - v[2] = onto[2] * scale; + return result; } -void un_m_project4d(f64 *v, f64 *a, f64 *onto) { - f64 dot, magn, scale; +inline double4 un_m_project4d(double4 a, double4 onto) { + double d; + double4 result; - un_m_dot4d(&dot, a, onto); - un_m_magnitude_sqr4d(&magn, onto); + d = a.x * onto.x + a.y * onto.y + a.z * onto.z + a.w * onto.w; + d /= onto.x * onto.x + onto.y * onto.y + onto.z * onto.z + onto.w * onto.w; - if (magn < EPSILON_D) { - un_memory_set((void*)v, 0, sizeof(*v) * 4.0); - return; - } + result.x = onto.x * d; + result.y = onto.y * d; + result.z = onto.z * d; + result.w = onto.w * d; - scale = dot / magn; - v[0] = onto[0] * scale; - v[1] = onto[1] * scale; - v[2] = onto[2] * scale; - v[3] = onto[3] * scale; + return result; } -void un_m_reflect2d(f64 *v, f64 *a, f64 *normal) { - f64 dot; +inline double2 un_m_reflect2d(double2 a, double2 normal) { + double d; + double2 result; + + d = a.x * normal.x + a.y * normal.y; + result.x = normal.x * d * 2.0; + result.y = normal.y * d * 2.0; - un_m_dot2d(&dot, a, normal); - un_m_mul_scalar2d(v, normal, 2.0 * dot); - un_m_sub2d(v, v, a); + result.x -= a.x; + result.y -= a.y; + + return result; } -void un_m_reflect3d(f64 *v, f64 *a, f64 *normal) { - f64 dot; +inline double3 un_m_reflect3d(double3 a, double3 normal) { + double d; + double3 result; + + d = a.x * normal.x + a.y * normal.y + a.z * normal.z; + + result.x = normal.x * d * 2.0; + result.y = normal.y * d * 2.0; + result.z = normal.z * d * 2.0; + + result.x -= a.x; + result.y -= a.y; + result.z -= a.z; - un_m_dot3d(&dot, a, normal); - un_m_mul_scalar3d(v, normal, 2.0 * dot); - un_m_sub3d(v, v, a); + return result; } -void un_m_reflect4d(f64 *v, f64 *a, f64 *normal) { - f64 dot; +inline double4 un_m_reflect4d(double4 a, double4 normal) { + double d; + double4 result; + + d = a.x * normal.x + a.y * normal.y + a.z * normal.z + a.w * normal.w; + + result.x = normal.x * d * 2.0; + result.y = normal.y * d * 2.0; + result.z = normal.z * d * 2.0; + result.w = normal.w * d * 2.0; + + result.x -= a.x; + result.y -= a.y; + result.z -= a.z; + result.w -= a.w; - un_m_dot4d(&dot, a, normal); - un_m_mul_scalar4d(v, normal, 2.0 * dot); - un_m_sub4d(v, v, a); + return result; } |