/* ray.h  (Steve Hill)  1.2  5/24/90$ */

/* ray.h
 * 
 * Header file for ray.c
 */

typedef struct ray_s
{
	point_t		*point;
	vector_t	*vector;
	index_list_t	*list;
}
ray_t;

#define RayNull	((ray_t *) NULL)

ray_t		*Ray PROTO((point_t *, vector_t *)),
		*RaySet PROTO((ray_t *, point_t *, vector_t *, index_list_t *)),
		*RayListCopy PROTO((ray_t *, point_t *, vector_t *,
				    index_list_t *));

void		RayFree PROTO((ray_t *)),
		RayListFree PROTO((ray_t *)),
		RayPrint PROTO((FILE *, ray_t *));

point_t		*RayInstantiate PROTO((real_t, ray_t *));

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

bool_t		Refract PROTO((vector_t *, real_t,
			       real_t, vector_t *, vector_t *));

real_t		RayDistance PROTO((ray_t *, point_t *));
