/* Vector routines for 3d-vectors */

#ifndef H_VECTOR

#define EPSILON 0.001

typedef double scalar;

typedef struct
{
  scalar x,y,z;
} vector;

vector vassign(scalar x, scalar y, scalar z);
vector vadd(vector u, vector v);
vector vsub(vector u, vector v);
vector smul(scalar k, vector v);
scalar dot(vector u, vector v);
scalar vdotv(vector v);
vector cross(vector u, vector v);
scalar norm(vector v);
vector unit(vector v);
vector vneg(vector v);
vector zero(void);
int iszero(vector v);
vector vrotate(vector v, vector y, vector z);
void vwrite(char *string1, vector v, char *string2);
vector vread(char *string);
void swrite(char *string1, scalar s, char *string2);
scalar sread(char *string);

#define H_VECTOR
#endif

