--- ray/src/util/findglare.c 1991/04/19 17:40:59 1.19 +++ ray/src/util/findglare.c 1991/05/01 16:14:13 1.23 @@ -190,7 +190,7 @@ char *argv[]; fputs(VIEWSTR, stdout); fprintview(&ourview, stdout); printf("\n"); - fputformat("ASCII", stdout); + fputformat("ascii", stdout); printf("\n"); printsources(); /* print glare sources */ printillum(); /* print illuminances */ @@ -203,6 +203,23 @@ userr: } +int +angcmp(ap1, ap2) /* compare two angles */ +ANGLE *ap1, *ap2; +{ + register int a1, a2; + + a1 = *ap1; + a2 = *ap2; + if (a1 == a2) { + fprintf(stderr, "%s: duplicate glare angle (%d)\n", + progname, a1); + exit(1); + } + return(a1-a2); +} + + init() /* initialize global variables */ { double d; @@ -214,8 +231,9 @@ init() /* initialize global variables */ /* set direction vectors */ for (i = 0; glarang[i] != AEND; i++) ; - if (i > 0 && (glarang[0] <= 0 || glarang[i-1] >= 180)) { - fprintf(stderr, "%s: glare angles must be between 1 and 179\n", + qsort(glarang, i, sizeof(ANGLE), angcmp); + if (i > 0 && (glarang[0] <= 0 || glarang[i-1] > 180)) { + fprintf(stderr, "%s: glare angles must be between 1 and 180\n", progname); exit(1); } @@ -300,14 +318,20 @@ int x, y; FVECT org; /* dummy variable */ hl = hlim(y); - if (x <= -hl) /* left region */ + if (x <= -hl) { /* left region */ + if (x <= -hl-sampdens) + return(-1); return(viewray(org, vd, &leftview, (double)(x+hl)/(2*sampdens)+.5, (double)y/(2*sampdens)+.5)); - if (x >= hl) /* right region */ + } + if (x >= hl) { /* right region */ + if (x >= hl+sampdens) + return(-1); return(viewray(org, vd, &rightview, (double)(x-hl)/(2*sampdens)+.5, (double)y/(2*sampdens)+.5)); + } /* central region */ if (viewray(org, vd, &ourview, .5, (double)y/(2*sampdens)+.5) < 0) return(-1); @@ -330,7 +354,7 @@ int x, y; xo = x-hl; else xo = 0; - disc = 1. - (xo*xo + y*y)/(sampdens*sampdens); + disc = 1. - (double)(xo*xo + y*y)/(sampdens*sampdens); if (disc <= FTINY) return(0.); return(1./(sampdens*sampdens*sqrt(disc)));