31 |
|
|
32 |
|
ANGLE glarang[180] = {AEND}; /* glare calculation angles */ |
33 |
|
int nglarangs = 0; |
34 |
+ |
double maxtheta; /* maximum angle (in radians) */ |
35 |
|
int hsize; /* horizontal size */ |
36 |
|
int hlim; /* central limit of horizontal */ |
37 |
|
|
194 |
|
/* set direction vectors */ |
195 |
|
for (i = 0; glarang[i] != AEND; i++) |
196 |
|
; |
197 |
< |
if (glarang[0] <= 0 || glarang[i-1] >= 180) { |
197 |
> |
if (i > 0 && glarang[0] <= 0 || glarang[i-1] >= 180) { |
198 |
|
fprintf(stderr, "%s: glare angles must be between 1 and 179\n", |
199 |
|
progname); |
200 |
|
exit(1); |
201 |
|
} |
202 |
|
nglarangs = i; |
203 |
|
/* nglardirs = 2*nglarangs + 1; */ |
203 |
– |
/* maxtheta = (PI/180.)*glarang[nglarangs-1]; */ |
204 |
|
/* vsize = SAMPDENS; */ |
205 |
+ |
if (nglarangs > 0) |
206 |
+ |
maxtheta = (PI/180.)*glarang[nglarangs-1]; |
207 |
+ |
else |
208 |
+ |
maxtheta = 0.0; |
209 |
|
hlim = SAMPDENS*maxtheta; |
210 |
|
hsize = SAMPDENS + hlim; |
211 |
|
if (hsize > (int)(PI*SAMPDENS)) |
215 |
|
memerr("indirect illuminances"); |
216 |
|
copystruct(&leftview, &ourview); |
217 |
|
copystruct(&rightview, &ourview); |
218 |
< |
spinvector(leftview.vdir, ourview.vdir, ourview.vup, -maxtheta); |
219 |
< |
spinvector(rightview.vdir, ourview.vdir, ourview.vup, maxtheta); |
218 |
> |
spinvector(leftview.vdir, ourview.vdir, ourview.vup, maxtheta); |
219 |
> |
spinvector(rightview.vdir, ourview.vdir, ourview.vup, -maxtheta); |
220 |
|
setview(&leftview); |
221 |
|
setview(&rightview); |
222 |
|
indirect[nglarangs].lcos = |
337 |
|
|
338 |
|
printf("BEGIN indirect illuminance\n"); |
339 |
|
for (i = 0; i < nglardirs; i++) |
340 |
< |
printf("\t%f\t%f\n", (180.0/PI)*indirect[i].theta, |
340 |
> |
printf("\t%.0f\t%f\n", (180.0/PI)*indirect[i].theta, |
341 |
|
PI * indirect[i].sum / (double)indirect[i].n); |
342 |
< |
printf("END indirect illuminances\n"); |
342 |
> |
printf("END indirect illuminance\n"); |
343 |
|
} |