diff options
| author | Franklin Wei <me@fwei.tk> | 2017-04-03 18:02:38 -0400 |
|---|---|---|
| committer | Franklin Wei <me@fwei.tk> | 2017-04-03 18:02:38 -0400 |
| commit | f1aebd377a2f1ca3aebd3cec47bb9d00f284d381 (patch) | |
| tree | 7222228c53930f61dd6d0847c96ff2dd3f779292 /vector.c | |
| parent | 929df060cbd9c0da04b8d9ce70dcea9879f42f4a (diff) | |
| download | raytrace-f1aebd377a2f1ca3aebd3cec47bb9d00f284d381.zip raytrace-f1aebd377a2f1ca3aebd3cec47bb9d00f284d381.tar.gz raytrace-f1aebd377a2f1ca3aebd3cec47bb9d00f284d381.tar.bz2 raytrace-f1aebd377a2f1ca3aebd3cec47bb9d00f284d381.tar.xz | |
stuff
Diffstat (limited to '')
| -rw-r--r-- | vector.c | 78 |
1 files changed, 38 insertions, 40 deletions
@@ -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); } |