--- ray/src/ot/o_cone.c 1989/02/02 10:33:02 1.1 +++ ray/src/ot/o_cone.c 2004/03/30 16:13:00 2.4 @@ -1,9 +1,6 @@ -/* Copyright (c) 1986 Regents of the University of California */ - #ifndef lint -static char SCCSid[] = "$SunId$ LBL"; +static const char RCSid[] = "$Id: o_cone.c,v 2.4 2004/03/30 16:13:00 schorsch Exp $"; #endif - /* * o_cone.c - routines for intersecting cubes with cones. * @@ -11,11 +8,8 @@ static char SCCSid[] = "$SunId$ LBL"; */ #include "standard.h" - #include "octree.h" - #include "object.h" - #include "cone.h" #define ROOT3 1.732050808 @@ -35,19 +29,26 @@ static char SCCSid[] = "$SunId$ LBL"; extern double mincusize; /* minimum cube size */ +static double findcseg(FVECT ep0, FVECT ep1, CONE *co, FVECT p); -o_cone(o, cu) /* determine if cone intersects cube */ -OBJREC *o; -register CUBE *cu; + + +extern int +o_cone( /* determine if cone intersects cube */ + OBJREC *o, + register CUBE *cu +) { - double dist2lseg(), findcseg(); CONE *co; FVECT ep0, ep1; +#ifdef STRICT FVECT cumin, cumax; CUBE cukid; + register int j; +#endif double r; FVECT p; - register int i, j; + register int i; /* get cone arguments */ co = getcone(o, 0); /* get cube center */ @@ -59,19 +60,19 @@ register CUBE *cu; if (findcseg(ep0, ep1, co, p) > 0.0) { /* check min. distance to cone */ if (dist2lseg(p, ep0, ep1) > (r+FTINY)*(r+FTINY)) - return(0); + return(O_MISS); #ifdef STRICT /* get cube boundaries */ for (i = 0; i < 3; i++) cumax[i] = (cumin[i] = cu->cuorg[i]) + cu->cusize; /* closest segment intersects? */ if (clip(ep0, ep1, cumin, cumax)) - return(1); + return(O_HIT); } /* check sub-cubes */ cukid.cusize = cu->cusize * 0.5; if (cukid.cusize < mincusize) - return(1); /* cube too small */ + return(O_HIT); /* cube too small */ cukid.cutree = EMPTY; for (j = 0; j < 8; j++) { @@ -81,21 +82,23 @@ register CUBE *cu; cukid.cuorg[i] += cukid.cusize; } if (o_cone(o, &cukid)) - return(1); /* sub-cube intersects */ + return(O_HIT); /* sub-cube intersects */ } - return(0); /* no intersection */ + return(O_MISS); /* no intersection */ #else } - return(1); /* assume intersection */ + return(O_HIT); /* assume intersection */ #endif } -double -findcseg(ep0, ep1, co, p) /* find line segment from cone closest to p */ -FVECT ep0, ep1; -register CONE *co; -FVECT p; +static double +findcseg( /* find line segment from cone closest to p */ + FVECT ep0, + FVECT ep1, + register CONE *co, + FVECT p +) { double d; FVECT v;