diff options
Diffstat (limited to 'src/un_vecd.c')
-rw-r--r-- | src/un_vecd.c | 307 |
1 files changed, 307 insertions, 0 deletions
diff --git a/src/un_vecd.c b/src/un_vecd.c new file mode 100644 index 0000000..0d138a4 --- /dev/null +++ b/src/un_vecd.c @@ -0,0 +1,307 @@ +void un_m_add2d(f64 *v, f64 *a, f64 *b) { + v[0] = a[0] + b[0]; + v[1] = a[1] + b[1]; +} + +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]; +} + +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]; +} + +void un_m_sub2d(f64 *v, f64 *a, f64 *b) { + v[0] = a[0] - b[0]; + v[1] = a[1] - b[1]; +} + +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]; +} + +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]; +} + +void un_m_add_scalar2d(f64 *v, f64 *a, f64 scalar) { + v[0] = a[0] + scalar; + v[1] = a[1] + scalar; +} + +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; +} + +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; +} + +void un_m_sub_scalar2d(f64 *v, f64 *a, f64 scalar) { + v[0] = a[0] - scalar; + v[1] = a[1] - scalar; +} + +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; +} + +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; +} + +void un_m_mul_scalar2d(f64 *v, f64 *a, f64 scalar) { + v[0] = a[0] * scalar; + v[1] = a[1] * scalar; +} + +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; +} + +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; +} + +void un_m_div_scalar2d(f64 *v, f64 *a, f64 scalar) { + v[0] = a[0] / scalar; + v[1] = a[1] / scalar; +} + +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; +} + +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; +} + +void un_m_dot2d(f64 *v, f64 *a, f64 *b) { + *v = a[0] * b[0] + a[1] * b[1]; +} + +void un_m_dot3d(f64 *v, f64 *a, f64 *b) { + *v = a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; +} + +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]; +} + +void un_m_hadamard2d(f64 *v, f64 *a, f64 *b) { + v[0] = a[0] * b[0]; + v[1] = a[1] * b[1]; +} + +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]; +} + +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]; +} + +void un_m_cross2d(f64 *v, f64 *a) { + v[0] = a[1]; + v[1] =-a[0]; +} + +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]; +} + +void un_m_magnitude2d(f64 *v, f64 *a) { + *v = sqrt(a[0] * a[0] + a[1] * a[1]); +} + +void un_m_magnitude3d(f64 *v, f64 *a) { + *v = sqrt(a[0] * a[0] + a[1] * a[1] + a[2] * a[2]); +} + +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]); +} + +void un_m_magnitude_sqr2d(f64 *v, f64 *a) { + *v = a[0] * a[0] + a[1] * a[1]; +} + +void un_m_magnitude_sqr3d(f64 *v, f64 *a) { + *v = a[0] * a[0] + a[1] * a[1] + a[2] * a[2]; +} + +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]; +} + +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]); +} + +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]); +} + +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]); +} + +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]; +} + +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]; +} + +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]; +} + +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; +} + +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; +} + +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; +} + +void un_m_project2d(f64 *v, f64 *a, f64 *onto) { + f64 dot, magn, scale; + + un_m_dot2d(&dot, a, onto); + un_m_magnitude_sqr2d(&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_project3d(f64 *v, f64 *a, f64 *onto) { + f64 dot, magn, scale; + + un_m_dot3d(&dot, a, onto); + un_m_magnitude_sqr3d(&magn, onto); + + if (magn < EPSILON_D) { + 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_project4d(f64 *v, f64 *a, f64 *onto) { + f64 dot, magn, scale; + + un_m_dot4d(&dot, a, onto); + un_m_magnitude_sqr4d(&magn, onto); + + if (magn < EPSILON_D) { + un_memory_set((void*)v, 0, sizeof(*v) * 4.0); + return; + } + + scale = dot / magn; + v[0] = onto[0] * scale; + v[1] = onto[1] * scale; + v[2] = onto[2] * scale; + v[3] = onto[3] * scale; +} + +void un_m_reflect2d(f64 *v, f64 *a, f64 *normal) { + f64 dot; + + un_m_dot2d(&dot, a, normal); + un_m_mul_scalar2d(v, normal, 2.0 * dot); + un_m_sub2d(v, v, a); +} + +void un_m_reflect3d(f64 *v, f64 *a, f64 *normal) { + f64 dot; + + un_m_dot3d(&dot, a, normal); + un_m_mul_scalar3d(v, normal, 2.0 * dot); + un_m_sub3d(v, v, a); +} + +void un_m_reflect4d(f64 *v, f64 *a, f64 *normal) { + f64 dot; + + un_m_dot4d(&dot, a, normal); + un_m_mul_scalar4d(v, normal, 2.0 * dot); + un_m_sub4d(v, v, a); +} |