--- ray/src/common/fvect.c 1989/10/17 13:35:30 1.4 +++ ray/src/common/fvect.c 1991/03/19 13:14:19 1.5 @@ -116,3 +116,26 @@ register FVECT v; v[2] /= len; return(len); } + + +spinvector(vres, vorig, vnorm, theta) /* rotate vector around normal */ +FVECT vres, vorig, vnorm; +double theta; +{ + extern double sin(), cos(); + double sint, cost, dotp; + FVECT vperp; + register int i; + + if (theta == 0.0) { + VCOPY(vres, vorig); + return; + } + sint = sin(theta); + cost = cos(theta); + dotp = DOT(vorig, vnorm); + fcross(vperp, vnorm, vorig); + for (i = 0; i < 3; i++) + vres[i] = vnorm[i]*dotp*(1.-cost) + + vorig[i]*cost + vperp[i]*sint; +}