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

Comparing ray/src/gen/genblinds.c (file contents):
Revision 2.10 by schorsch, Sun Jun 8 12:03:09 2003 UTC vs.
Revision 2.11 by schorsch, Sun Nov 16 10:29:38 2003 UTC

# Line 30 | Line 30 | double  height;
30   int  nslats,  nsurf;
31  
32  
33 + static void makeflat(double w, double d, double a);
34 + static void printslat(int n);
35 + static void printhead(register int  ac, register char  **av);
36  
37 < makeflat(w,d,a)
38 < double  w, d, a;
37 >
38 > void
39 > makeflat(
40 >        double w,
41 >        double d,
42 >        double a
43 > )
44   {
45          double  h;
46  
# Line 54 | Line 62 | double  w, d, a;
62   }
63  
64  
65 < printslat(n)                    /* print slat # n */
66 < int  n;
65 > void
66 > printslat(                      /* print slat # n */
67 >        int  n
68 > )
69   {
70          register int  i, k;
71  
# Line 71 | Line 81 | int  n;
81   }
82  
83  
84 < printhead(ac, av)               /* print command header */
85 < register int  ac;
86 < register char  **av;
84 > void
85 > printhead(              /* print command header */
86 >        register int  ac,
87 >        register char  **av
88 > )
89   {
90          putchar('#');
91          while (ac--) {
# Line 84 | Line 96 | register char  **av;
96   }
97  
98  
99 < main(argc, argv)
100 < int  argc;
101 < char  *argv[];
99 > int
100 > main(
101 >        int  argc,
102 >        char  *argv[]
103 > )
104   {
105 <        double  width, delem, depth, rcurv = 0.0, angle;
106 <        double  beta, gamma, theta, chi;
107 <        int     i, j, k, l;
105 >    double  width, delem, depth, rcurv = 0.0, angle;
106 >    double  beta, gamma, theta, chi = 0;
107 >    int     i, j, k, l;
108  
109  
110 <        if (argc != 8 && argc != 10)
111 <                goto userr;
112 <        material = argv[1];
113 <        name = argv[2];
114 <        depth = atof(argv[3]);
115 <        width = atof(argv[4]);
116 <        height = atof(argv[5]);
117 <        nslats  = atoi(argv[6]);
118 <        angle = atof(argv[7]);
119 <        if (argc == 10)
120 <                if (!strcmp(argv[8], "-r"))
121 <                        rcurv = atof(argv[9]);
122 <                else if (!strcmp(argv[8], "+r"))
123 <                        rcurv = -atof(argv[9]);
124 <                else
125 <                        goto userr;
110 >    if (argc != 8 && argc != 10)
111 >        goto userr;
112 >    material = argv[1];
113 >    name = argv[2];
114 >    depth = atof(argv[3]);
115 >    width = atof(argv[4]);
116 >    height = atof(argv[5]);
117 >    nslats  = atoi(argv[6]);
118 >    angle = atof(argv[7]);
119 >    if (argc == 10)
120 >        if (!strcmp(argv[8], "-r"))
121 >            rcurv = atof(argv[9]);
122 >        else if (!strcmp(argv[8], "+r"))
123 >            rcurv = -atof(argv[9]);
124 >        else
125 >            goto userr;
126  
127 < /* CURVED BLIND CALCULATION */
127 >    /* CURVED BLIND CALCULATION */
128  
129 <        if (rcurv != 0) {
129 >    if (rcurv != 0) {
130  
131          /* BLINDS SUSTAINED ANGLE */
132  
133          theta = 2*asin(depth/(2*fabs(rcurv)));
134  
135 <        /* HOW MANY ELEMENTARY SURFACES SHOULD BE CALCULATED ? */
135 >        /* HOW MANY ELEMENTARY SURFACES SHOULD BE CALCULATED ? */
136  
137          nsurf = (int)(theta / ((PI/180.)*DELTA)) + 1;
138  
# Line 132 | Line 146 | char  *argv[];
146  
147  
148          if (rcurv < 0) {
149 <                A[0]=fabs(rcurv)*cos(gamma);
150 <                A[0] *= -1;
151 <                A[1]=0.;
152 <                A[2]=fabs(rcurv)*sin(gamma);
149 >            A[0]=fabs(rcurv)*cos(gamma);
150 >            A[0] *= -1;
151 >            A[1]=0.;
152 >            A[2]=fabs(rcurv)*sin(gamma);
153          }
154          if (rcurv > 0) {
155 <                A[0]=fabs(rcurv)*cos(gamma+theta);
156 <                A[1]=0.;
157 <                A[2]=fabs(rcurv)*sin(gamma+theta);
158 <                A[2] *= -1;
155 >            A[0]=fabs(rcurv)*cos(gamma+theta);
156 >            A[1]=0.;
157 >            A[2]=fabs(rcurv)*sin(gamma+theta);
158 >            A[2] *= -1;
159          }
160  
161          for (k=0; k < nsurf; k++) {
162 <        if (rcurv < 0) {
163 <        chi=(PI/180.)*((180.-DELTA)/2.) - (gamma+(k*(PI/180.)*DELTA));
164 <        }
165 <        if (rcurv > 0) {
166 <        chi=(PI-(gamma+theta)+(k*(PI/180.)*DELTA))-(PI/180.)*  
167 <        ((180.-DELTA)/2.);
168 <        }
169 <                makeflat(width, delem, chi);
170 <        if (rcurv < 0.) {
162 >            if (rcurv < 0) {
163 >                chi=(PI/180.)*((180.-DELTA)/2.) - (gamma+(k*(PI/180.)*DELTA));
164 >            }
165 >            if (rcurv > 0) {
166 >                chi=(PI-(gamma+theta)+(k*(PI/180.)*DELTA))-(PI/180.)*  
167 >                    ((180.-DELTA)/2.);
168 >            }
169 >            makeflat(width, delem, chi);
170 >            if (rcurv < 0.) {
171                  X[0]=(-fabs(rcurv))*cos(gamma+(k*(PI/180.)*DELTA))-A[0];
172                  X[1]=0.;
173                  X[2]=fabs(rcurv)*sin(gamma+(k*(PI/180.)*DELTA))-A[2];
174 <        }
175 <        if (rcurv > 0.) {
174 >            }
175 >            if (rcurv > 0.) {
176                  X[0]=fabs(rcurv)*cos(gamma+theta-(k*(PI/180.)*DELTA))-A[0];
177                  X[1]=0.;
178                  X[2]=(-fabs(rcurv))*sin(gamma+theta-(k*(PI/180.)*DELTA))-A[2];
179 <        }
179 >            }
180  
181 <                for (i=0; i < 4; i++)  {
182 <                    for (j=0; j < 3; j++) {
183 <                        baseblind[i][j][k] = baseflat[i][j]+X[j];
184 <                    }
185 <                }      
172 <        }
181 >            for (i=0; i < 4; i++)  {
182 >                for (j=0; j < 3; j++) {
183 >                    baseblind[i][j][k] = baseflat[i][j]+X[j];
184 >                }
185 >            }  
186          }
187 +    }
188  
189 < /* FLAT BLINDS CALCULATION */
176 <        
177 <        if (rcurv == 0.) {
189 >    /* FLAT BLINDS CALCULATION */
190  
191 <                nsurf=1;
192 <                makeflat(width,depth,angle*(PI/180.));
193 <                for (i=0; i < 4; i++) {
194 <                    for (j=0; j < 3; j++) {
195 <                        baseblind[i][j][0] = baseflat[i][j];
196 <                    }
197 <                }
191 >    if (rcurv == 0.) {
192 >
193 >        nsurf=1;
194 >        makeflat(width,depth,angle*(PI/180.));
195 >        for (i=0; i < 4; i++) {
196 >            for (j=0; j < 3; j++) {
197 >                baseblind[i][j][0] = baseflat[i][j];
198 >            }
199          }
200 <        
188 <        printhead(argc, argv);
200 >    }
201  
202 +    printhead(argc, argv);
203  
191 /* REPEAT THE BASIC CURVED OR FLAT SLAT TO GET THE OVERALL BLIND */
204  
205 <        for (l = 1; l <= nslats; l++)
206 <                printslat(l);
207 <        exit(0);
205 >    /* REPEAT THE BASIC CURVED OR FLAT SLAT TO GET THE OVERALL BLIND */
206 >
207 >    for (l = 1; l <= nslats; l++)
208 >        printslat(l);
209 >    exit(0);
210   userr:
211 <        fprintf(stderr,
212 <        "Usage: %s mat name depth width height nslats angle [-r|+r rcurv]\n",
213 <                        argv[0]);
214 <        exit(1);
211 >    fprintf(stderr,
212 >            "Usage: %s mat name depth width height nslats angle [-r|+r rcurv]\n",
213 >            argv[0]);
214 >    exit(1);
215   }
216  
217  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines