/* vector.h  (Steve Hill)  1.2  4/6/90$ */

/* VECTOR.H
 *
 * Contains the type vector_t and prototypes of vector functions.
 */


/* vector_t
 *
 * A vector in 3-space, defined by three measures.
 */

typedef struct vector_s
{
	real_t	x, y, z;
}
vector_t;

#define VectorNull	((vector_t *) NULL)

#define VectorGet(V, X, Y, Z)	{X = (V)->x; Y = (V)->y; Z = (V)->z;}


vector_t	*Vector PROTO((real_t, real_t, real_t)),
		*VectorCopy PROTO((vector_t *)),
		*VectorUnit PROTO((axis_t)),
		*VectorLet PROTO((vector_t *, vector_t *)),
		*VectorZero PROTO((void)),
		*VectorNeg PROTO((vector_t *, vector_t *)),
		*VectorAdd PROTO((vector_t *, vector_t *, vector_t *)),
		*VectorSub PROTO((vector_t *, vector_t *, vector_t *)),
		*VectorMul PROTO((vector_t *, vector_t *, vector_t *)),
		*VectorCross PROTO((vector_t *, vector_t *, vector_t *)),
		*VectorScale PROTO((vector_t *, real_t, vector_t *)),
		*VectorNormalise PROTO((vector_t *, vector_t *));

real_t		VectorDot PROTO((vector_t *, vector_t *));

void		VectorFree PROTO((vector_t *)),
		VectorPrint PROTO((FILE *, vector_t *));
