--- ray/src/gen/genblinds.c 1989/02/02 11:16:25 1.1 +++ ray/src/gen/genblinds.c 2003/06/08 12:03:09 2.10 @@ -1,9 +1,6 @@ -/* Copyright (c) 1986 Regents of the University of California */ - #ifndef lint -static char SCCSid[] = "$SunId$ LBL"; +static const char RCSid[] = "$Id: genblinds.c,v 2.10 2003/06/08 12:03:09 schorsch Exp $"; #endif - /* * genblind2.c - make some curved or flat venetian blinds. * @@ -19,10 +16,12 @@ static char SCCSid[] = "$SunId$ LBL"; */ #include +#include #include +#include -#define PI 3.141592653589793 -#define DELTA 5. /* MINIMAL SUSTAINED ANGLE IN DEGREES */ +#define PI 3.14159265358979323846 +#define DELTA 10. /* MINIMAL SUSTAINED ANGLE IN DEGREES */ double baseflat[4][3], baseblind[4][3][180]; double A[3],X[3]; @@ -31,11 +30,64 @@ double height; int nslats, nsurf; + +makeflat(w,d,a) +double w, d, a; +{ + double h; + + h = d*sin(a); + d *= cos(a); + baseflat[0][0] = 0.0; + baseflat[0][1] = 0.0; + baseflat[0][2] = 0.0; + baseflat[1][0] = 0.0; + baseflat[1][1] = w; + baseflat[1][2] = 0.0; + baseflat[2][0] = d; + baseflat[2][1] = w; + baseflat[2][2] = h; + baseflat[3][0] = d; + baseflat[3][1] = 0.0; + baseflat[3][2] = h; + +} + + +printslat(n) /* print slat # n */ +int n; +{ + register int i, k; + + for (k=0; k < nsurf; k++) { + printf("\n%s polygon %s.%d.%d\n", material, name, n, k); + printf("0\n0\n12\n"); + for (i = 0; i < 4; i++) + printf("\t%18.12g\t%18.12g\t%18.12g\n", + baseblind[i][0][k], + baseblind[i][1][k], + baseblind[i][2][k] + height*(n-.5)/nslats); + } +} + + +printhead(ac, av) /* print command header */ +register int ac; +register char **av; +{ + putchar('#'); + while (ac--) { + putchar(' '); + fputs(*av++, stdout); + } + putchar('\n'); +} + + main(argc, argv) int argc; char *argv[]; { - double atof(), fabs(); double width, delem, depth, rcurv = 0.0, angle; double beta, gamma, theta, chi; int i, j, k, l; @@ -52,9 +104,9 @@ char *argv[]; angle = atof(argv[7]); if (argc == 10) if (!strcmp(argv[8], "-r")) - rcurv = atof(argv[8]); + rcurv = atof(argv[9]); else if (!strcmp(argv[8], "+r")) - rcurv = -atof(argv[8]); + rcurv = -atof(argv[9]); else goto userr; @@ -68,7 +120,7 @@ char *argv[]; /* HOW MANY ELEMENTARY SURFACES SHOULD BE CALCULATED ? */ - nsurf = (theta / ((PI/180.)*DELTA)); + nsurf = (int)(theta / ((PI/180.)*DELTA)) + 1; /* WHAT IS THE DEPTH OF THE ELEMENTARY SURFACES ? */ @@ -149,55 +201,4 @@ userr: } -makeflat(w,d,a) -double w, d, a; -{ - double sin(), cos(); - double h; - h = d*sin(a); - d *= cos(a); - baseflat[0][0] = 0.0; - baseflat[0][1] = 0.0; - baseflat[0][2] = 0.0; - baseflat[1][0] = 0.0; - baseflat[1][1] = w; - baseflat[1][2] = 0.0; - baseflat[2][0] = d; - baseflat[2][1] = w; - baseflat[2][2] = h; - baseflat[3][0] = d; - baseflat[3][1] = 0.0; - baseflat[3][2] = h; - -} - - -printslat(n) /* print slat # n */ -int n; -{ - register int i, k; - - for (k=0; k < nsurf; k++) { - printf("\n%s polygon %s.%d.%d\n", material, name, n, k); - printf("0\n0\n12\n"); - for (i = 0; i < 4; i++) - printf("\t%18.12g\t%18.12g\t%18.12g\n", - baseblind[i][0][k], - baseblind[i][1][k], - baseblind[i][2][k] + height*(n-.5)/nslats); - } -} - - -printhead(ac, av) /* print command header */ -register int ac; -register char **av; -{ - putchar('#'); - while (ac--) { - putchar(' '); - fputs(*av++, stdout); - } - putchar('\n'); -}