31 |
|
* A spectral function is given as: |
32 |
|
* |
33 |
|
* modifier specfunc name |
34 |
< |
* 2+ sval filename xf |
34 |
> |
* 2+ sfunc filename xf |
35 |
|
* 0 |
36 |
|
* 2+ nmA nmB A3 .. |
37 |
|
* |
39 |
|
* can be found. The list of real arguments can be accessed by |
40 |
|
* definitions in the file. The xf is a transformation |
41 |
|
* to get from the original coordinates to the current coordinates. |
42 |
< |
* For the "specfunc" primitive, sval(nm) is a function of wavelength |
42 |
> |
* For the "specfunc" primitive, sfunc(nm) is a function of wavelength |
43 |
|
* and must be defined from nmA to nmB, and should average to 1 over |
44 |
|
* its range. |
45 |
|
*/ |
105 |
|
SCOLOR scval; |
106 |
|
double wl, wlmin, wlmax, wlstep; |
107 |
|
int ns, i; |
108 |
– |
MFUNC *mf; |
108 |
|
|
109 |
|
if ((m->oargs.nsargs < 2) | (m->oargs.nfargs < 2)) |
110 |
|
objerror(m, USER, "bad # arguments"); |
122 |
|
return(0); |
123 |
|
} |
124 |
|
wlstep = (wlmax - wlmin)/(double)MAXCSAMP; |
125 |
< |
mf = getfunc(m, 1, 0, 0); |
125 |
> |
getfunc(m, 1, 0, 0); |
126 |
|
setfunc(m, r); |
127 |
|
errno = 0; |
128 |
|
ns = (wlmax - wlmin)/wlstep + .1; |
129 |
|
wl = wlmax - .5*wlstep; |
130 |
|
for (i = ns; i-- > 0; wl -= wlstep) { |
131 |
< |
double ws = wl + 0.9*(1.-frandom())*wlstep; |
131 |
> |
double ws = wl + 0.9*(.5-frandom())*wlstep; |
132 |
|
scsamp[i] = funvalue(m->oargs.sarg[0], 1, &ws); |
133 |
|
if ((errno == EDOM) | (errno == ERANGE)) { |
134 |
|
objerror(m, WARNING, "compute error"); |