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

Comparing ray/src/rt/func.c (file contents):
Revision 1.15 by greg, Fri May 24 13:52:10 1991 UTC vs.
Revision 1.19 by greg, Wed Jun 19 15:08:39 1991 UTC

# Line 33 | Line 33 | OBJREC  *m;
33   register RAY  *r;
34   XF  *bx;
35   {
36 <        extern double  l_arg();
36 >        extern double  l_arg(), l_erf(), l_erfc();
37          extern long  eclock;
38          static char  *initfile = "rayinit.cal";
39 +        static long  lastrno = -1;
40 +                                        /* check to see if already set */
41 +        if (m == fobj && r->rno == lastrno)
42 +                return(0);
43                                          /* initialize if first call */
44          if (initfile != NULL) {
45                  loadfunc(initfile);
# Line 48 | Line 52 | XF  *bx;
52                  scompile("Jx=$19;Jy=$20;Jz=$21;", NULL, 0);
53                  scompile("Kx=$22;Ky=$23;Kz=$24;", NULL, 0);
54                  funset("arg", 1, '=', l_arg);
55 +                funset("erf", 1, ':', l_erf);
56 +                funset("erfc", 1, ':', l_erfc);
57                  setnoisefuncs();
58                  initfile = NULL;
59          }
# Line 61 | Line 67 | XF  *bx;
67                          copystruct(&funcxf, &r->rox->b);
68          else
69                  copystruct(&funcxf, bx);
70 +        lastrno = r->rno;
71          eclock++;               /* notify expression evaluator */
72 +        return(1);
73   }
74  
75  
# Line 91 | Line 99 | RAY  *r;
99                  }
100                  m->os = (char *)mxf;
101          }
102 <        setmap(m, r, mxf);
95 <        return;
102 >        return(setmap(m, r, mxf));
103   memerr:
104          error(SYSTEM, "out of memory in setfunc");
105   }
# Line 132 | Line 139 | l_arg()                                /* return nth real argument */
139  
140  
141   double
142 + l_erf()                         /* error function */
143 + {
144 +        extern double  erf();
145 +
146 +        return(erf(argument(1)));
147 + }
148 +
149 +
150 + double
151 + l_erfc()                        /* cumulative error function */
152 + {
153 +        extern double  erfc();
154 +
155 +        return(erfc(argument(1)));
156 + }
157 +
158 +
159 + double
160   chanvalue(n)                    /* return channel n to calcomp */
161   register int  n;
162   {
# Line 170 | Line 195 | register int  n;
195                  return(sum * funcxf.sca);
196  
197          }
198 <        if (n == 10)                    /* dot product */
199 <                return(fray->rod);
198 >        if (n == 10)                    /* dot product (range [-1,1]) */
199 >                return( fray->rod <= -1.0 ? -1.0 :
200 >                        fray->rod >= 1.0 ? 1.0 :
201 >                        fray->rod );
202  
203          if (n == 11)                    /* scale */
204                  return(funcxf.sca);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines