summaryrefslogtreecommitdiff
path: root/vector.c
diff options
context:
space:
mode:
Diffstat (limited to 'vector.c')
-rw-r--r--vector.c78
1 files changed, 38 insertions, 40 deletions
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);
}