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

Comparing ray/src/util/glarendx.c (file contents):
Revision 1.6 by greg, Mon Apr 22 10:11:21 1991 UTC vs.
Revision 1.8 by greg, Thu May 2 13:17:41 1991 UTC

# Line 9 | Line 9 | static char SCCSid[] = "$SunId$ LBL";
9   *
10   *      guth_dgr -      Guth discomfort glare rating
11   *      guth_vcp -      Guth visual comfort probability
12 + *      cie_cgi -       CIE Glare Index (1983)
13   *
14   *              12 April 1991   Greg Ward       EPFL
15   */
# Line 21 | Line 22 | extern double  erfc();
22   double  posindex();
23   int     headline();
24  
25 < double  direct(), guth_dgr(), guth_vcp();
25 > double  direct(), guth_dgr(), guth_vcp(), cie_cgi();
26  
27   struct named_func {
28          char    *name;
# Line 30 | Line 31 | struct named_func {
31          {"direct", direct},
32          {"guth_dgr", guth_dgr},
33          {"guth_vcp", guth_vcp},
34 +        {"cie_cgi", cie_cgi},
35          {NULL}
36   };
37  
# Line 273 | Line 275 | struct glare_dir       *gd;
275   {
276   #define q(w)    (20.4*w+1.52*pow(w,.2)-.075)
277          register struct glare_src       *gs;
278 +        FVECT   mydir;
279          double  p;
280          double  sum;
281          double  wtot, brsum;
282          int     n;
283  
284 +        spinvector(mydir, midview.vdir, midview.vup, gd->ang);
285          sum = wtot = brsum = 0.0; n = 0;
286          for (gs = all_srcs; gs != NULL; gs = gs->next) {
287 <                p = posindex(gs->dir, midview.vdir, midview.vup);
287 >                p = posindex(gs->dir, mydir, midview.vup);
288                  if (p <= FTINY)
289                          continue;
290                  sum += gs->lum * q(gs->dom) / p;
# Line 290 | Line 294 | struct glare_dir       *gd;
294          }
295          if (n == 0)
296                  return(0.0);
297 <        else
298 <                return( pow(
295 <                        .5*sum/pow((brsum+(5.-wtot)*gd->indirect/PI)/5.,.44),
297 >
298 >        return( pow(.5*sum/pow((brsum+(5.-wtot)*gd->indirect/PI)/5.,.44),
299                          pow((double)n, -.0914) ) );
300   #undef q
301   }
# Line 311 | Line 314 | double
314   guth_vcp(gd)            /* compute Guth visual comfort probability */
315   struct glare_dir        *gd;
316   {
317 <        return(100.*norm_integral(6.374-1.3227*log(guth_dgr(gd))));
317 >        double  dgr;
318 >
319 >        dgr = guth_dgr(gd);
320 >        if (dgr <= FTINY)
321 >                return(100.0);
322 >        return(100.*norm_integral(6.374-1.3227*log(dgr)));
323 > }
324 >
325 >
326 > double
327 > cie_cgi(gd)             /* compute CIE Glare Index */
328 > struct glare_dir        *gd;
329 > {
330 >        register struct glare_src       *gs;
331 >        FVECT   mydir;
332 >        double  dillum;
333 >        double  p;
334 >        double  sum;
335 >
336 >        spinvector(mydir, midview.vdir, midview.vup, gd->ang);
337 >        sum = 0.0;
338 >        for (gs = all_srcs; gs != NULL; gs = gs->next) {
339 >                p = posindex(gs->dir, mydir, midview.vup);
340 >                if (p <= FTINY)
341 >                        continue;
342 >                sum += gs->lum*gs->lum * gs->dom / (p*p);
343 >        }
344 >        if (sum <= FTINY)
345 >                return(0.0);
346 >        dillum = direct(gd);
347 >        return(8.*log10(2.*sum*(1.+dillum/500.)/(dillum+gd->indirect)));
348   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines