ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/fvect.c
(Generate patch)

Comparing ray/src/common/fvect.c (file contents):
Revision 2.4 by gwlarson, Wed Aug 12 17:57:19 1998 UTC vs.
Revision 2.5 by gwlarson, Wed Nov 25 16:56:33 1998 UTC

# Line 31 | Line 31 | register FVECT  p1, p2;
31          delta[0] = p2[0] - p1[0];
32          delta[1] = p2[1] - p1[1];
33          delta[2] = p2[2] - p1[2];
34 +
35          return(DOT(delta, delta));
36   }
37  
# Line 44 | Line 45 | FVECT  ep1, ep2;       /* points on the line */
45  
46          d = dist2(ep1, ep2);
47          d1 = dist2(ep1, p);
48 <        d2 = dist2(ep2, p);
48 >        d2 = d + d1 - dist2(ep2, p);
49  
50 <        return(d1 - (d+d1-d2)*(d+d1-d2)/d/4);
50 >        return(d1 - 0.25*d2*d2/d);
51   }
52  
53  
# Line 68 | Line 69 | FVECT  ep1, ep2;       /* the end points */
69                  if (d1 - d2 > d)
70                          return(d2);
71          }
72 +        d2 = d + d1 - d2;
73  
74 <        return(d1 - (d+d1-d2)*(d+d1-d2)/d/4);   /* distance to line */
74 >        return(d1 - 0.25*d2*d2/d);      /* distance to line */
75   }
76  
77  
# Line 83 | Line 85 | register FVECT  vres, v1, v2;
85  
86  
87   fvsum(vres, v0, v1, f)          /* vres = v0 + f*v1 */
88 < FVECT  vres, v0, v1;
89 < double  f;
88 > register FVECT  vres, v0, v1;
89 > register double  f;
90   {
91          vres[0] = v0[0] + f*v1[0];
92          vres[1] = v0[1] + f*v1[1];
# Line 96 | Line 98 | double
98   normalize(v)                    /* normalize a vector, return old magnitude */
99   register FVECT  v;
100   {
101 <        register double  len;
101 >        register double  len, d;
102          
103 <        len = DOT(v, v);
103 >        d = DOT(v, v);
104          
105 <        if (len <= 0.0)
105 >        if (d <= 0.0)
106                  return(0.0);
107          
108 <        if (len <= 1.0+FTINY && len >= 1.0-FTINY)
109 <                len = 0.5 + 0.5*len;    /* first order approximation */
108 >        if (d <= 1.0+FTINY && d >= 1.0-FTINY)
109 >                len = 0.5 + 0.5*d;      /* first order approximation */
110          else
111 <                len = sqrt(len);
111 >                len = sqrt(d);
112  
113 <        v[0] /= len;
114 <        v[1] /= len;
115 <        v[2] /= len;
113 >        v[0] *= d = 1.0/len;
114 >        v[1] *= d;
115 >        v[2] *= d;
116  
117          return(len);
118   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines