From f1aebd377a2f1ca3aebd3cec47bb9d00f284d381 Mon Sep 17 00:00:00 2001 From: Franklin Wei Date: Mon, 3 Apr 2017 18:02:38 -0400 Subject: stuff --- vector.c | 78 +++++++++++++++++++++++++++++++--------------------------------- 1 file changed, 38 insertions(+), 40 deletions(-) (limited to 'vector.c') diff --git a/vector.c b/vector.c index 02cae58..7c45f26 100644 --- a/vector.c +++ b/vector.c @@ -28,7 +28,7 @@ void vect_to_sph(vector *v) { vector old = *v; v->type = SPH; - v->sph.r = vect_abs(&old); + v->sph.r = vect_abs(old); v->sph.elevation = atan2(old.rect.y, sqrt(old.rect.x*old.rect.x + old.rect.z*old.rect.z)); v->sph.azimuth = atan2(old.rect.z, old.rect.x); break; @@ -36,81 +36,79 @@ void vect_to_sph(vector *v) } } -scalar vect_abs(const vector *v) +scalar vect_abs(vector v) { - switch(v->type) + switch(v.type) { case SPH: - return v->sph.r; + return v.sph.r; case RECT: - return sqrt(v->rect.x * v->rect.x + v->rect.y * v->rect.y + v->rect.z * v->rect.z); + return sqrt(v.rect.x * v.rect.x + v.rect.y * v.rect.y + v.rect.z * v.rect.z); } } -void vect_mul(vector *v, scalar s) +vector vect_mul(vector v, scalar s) { - switch(v->type) + switch(v.type) { case SPH: - v->sph.r *= s; + v.sph.r *= s; break; case RECT: - v->rect.x *= s; - v->rect.y *= s; - v->rect.z *= s; + v.rect.x *= s; + v.rect.y *= s; + v.rect.z *= s; break; } + return v; } -void vect_add(vector *v1, const vector *v2) +vector vect_add(vector v1, vector v2) { - int old_type = v1->type; - vector tmp1 = *v1; - vector tmp2 = *v2; - vect_to_rect(&tmp1); - vect_to_rect(&tmp2); - tmp1.rect.x += tmp2.rect.x; - tmp1.rect.y += tmp2.rect.y; - tmp1.rect.z += tmp2.rect.z; + int old_type = v1.type; + vect_to_rect(&v1); + vect_to_rect(&v2); + v1.rect.x += v2.rect.x; + v1.rect.y += v2.rect.y; + v1.rect.z += v2.rect.z; - *v1 = tmp1; if(old_type == SPH) - vect_to_sph(v1); + vect_to_sph(&v1); + return v1; } -void vect_negate(vector *v) +vector vect_negate(vector v) { - switch(v->type) + switch(v.type) { case SPH: - v->sph.r = -v->sph.r; + v.sph.r = -v.sph.r; break; case RECT: - v->rect.x = -v->rect.x; - v->rect.y = -v->rect.y; - v->rect.z = -v->rect.z; + v.rect.x = -v.rect.x; + v.rect.y = -v.rect.y; + v.rect.z = -v.rect.z; break; } + return v; } /* v1 = v1 - v2 */ -void vect_sub(vector *v1, const vector *v2) +vector vect_sub(vector v1, vector v2) { - vector neg = *v2; - vect_negate(&neg); - vect_add(v1, &neg); + v2 = vect_negate(v2); + return vect_add(v1, v2); } -scalar vect_dot(const vector *v1, const vector *v2) +scalar vect_dot(vector v1, vector v2) { - vector a = *v1, b = *v2; - vect_to_rect(&a); - vect_to_rect(&b); - return a.rect.x * b.rect.x + a.rect.y * b.rect.y + a.rect.z * b.rect.z; + vect_to_rect(&v1); + vect_to_rect(&v2); + return v1.rect.x * v2.rect.x + v1.rect.y * v2.rect.y + v1.rect.z * v2.rect.z; } -void vect_normalize(vector *v) +vector vect_normalize(vector v) { - scalar abs = vect_abs(v); - vect_mul(v, 1./abs); + scalar a = vect_abs(v); + return vect_mul(v, 1./a); } -- cgit v1.1