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

Comparing ray/src/gen/mkillum3.c (file contents):
Revision 2.4 by greg, Mon Aug 10 15:55:10 1992 UTC vs.
Revision 2.6 by greg, Wed Aug 12 14:24:08 1992 UTC

# Line 95 | Line 95 | float  *da;
95   int  n, m;
96   FVECT  u, v, w;
97   {
98 +        float  *Ninv;
99          FILE  *dfp;
99        float  col[3];
100          int  i;
101  
102 +        if ((Ninv = (float *)malloc(3*m*sizeof(float))) == NULL)
103 +                error(SYSTEM, "out of memory in flatout");
104 +        compinv(Ninv, da, m);
105          if (il->flags & IL_COLDST) {
106                  printf("\n%s %s %s%s", VOIDID, ofun[PAT_CDATA].funame,
107                                  il->matname, DSTSUF);
108 <                printf("\n9 h_red h_grn h_blu");
108 >                printf("\n9 red green blue");
109                  for (i = 0; i < 3; i++) {
110                          dfp = dfopen(il, DATORD[i]);
111                          fprintf(dfp, "2\n%f %f %d\n%f %f %d\n",
112 <                                        1.-.5/n, .5/n, n,
112 >                                        1.+.5/n, .5/n, n+1,
113                                          0., 2.*PI, m+1);
114 +                        colorout(i, Ninv, 1, m, 1./il->nsamps/il->col[i], dfp);
115                          colorout(i, da, n, m, 1./il->nsamps/il->col[i], dfp);
116 +                        fputeol(dfp);
117                          fclose(dfp);
118                          printf(" %s", dfname(il, DATORD[i]));
119                  }
120          } else {
121                  printf("\n%s %s %s%s", VOIDID, ofun[PAT_BDATA].funame,
122                                  il->matname, DSTSUF);
123 <                printf("\n5 h_gry");
123 >                printf("\n5 noneg");
124                  dfp = dfopen(il, 0);
125 <                fprintf(dfp, "2\n%f %f %d\n%f %f %d\n", 1.-.5/n, .5/n, n,
125 >                fprintf(dfp, "2\n%f %f %d\n%f %f %d\n",
126 >                                1.+.5/n, .5/n, n+1,
127                                  0., 2.*PI, m+1);
128 +                brightout(Ninv, 1, m, 1./il->nsamps/brt(il->col), dfp);
129                  brightout(da, n, m, 1./il->nsamps/brt(il->col), dfp);
130 +                fputeol(dfp);
131                  fclose(dfp);
132                  printf(" %s", dfname(il, 0));
133          }
134          printf("\n\t%s il_alth il_azih", FNCFNM);
135 <        printf("\n0\n13\n");
128 <        compavg(col, da, m, il->nsamps);
129 <        printf("\t%f\t%f\t%f\t%f\n", col[0]/il->col[0],
130 <                        col[1]/il->col[1], col[2]/il->col[2], 1.-.5/n);
135 >        printf("\n0\n9\n");
136          printf("\t%f\t%f\t%f\n", u[0], u[1], u[2]);
137          printf("\t%f\t%f\t%f\n", v[0], v[1], v[2]);
138          printf("\t%f\t%f\t%f\n", w[0], w[1], w[2]);
139          il->dfnum++;
140 +        free((char *)Ninv);
141   }
142  
143  
# Line 140 | Line 146 | struct illum_args  *il;
146   float  *da;
147   int  n, m;
148   {
149 +        float  *Ninv, *Sinv;
150          FILE  *dfp;
144        float  col[3];
151          int  i;
152  
153 +        if ((Ninv = (float *)malloc(3*m*sizeof(float))) == NULL ||
154 +                        (Sinv = (float *)malloc(3*m*sizeof(float))) == NULL)
155 +                error(SYSTEM, "out of memory in roundout");
156 +        compinv(Ninv, da, m);
157 +        compinv(Sinv, da+3*m*(n-1), m);
158          if (il->flags & IL_COLDST) {
159                  printf("\n%s %s %s%s", VOIDID, ofun[PAT_CDATA].funame,
160                                  il->matname, DSTSUF);
161 <                printf("\n9 s_red s_grn s_blu");
161 >                printf("\n9 red green blue");
162                  for (i = 0; i < 3; i++) {
163                          dfp = dfopen(il, DATORD[i]);
164                          fprintf(dfp, "2\n%f %f %d\n%f %f %d\n",
165 <                                        1.-1./n, -1.+1./n, n,
165 >                                        1.+1./n, -1.-1./n, n+2,
166                                          0., 2.*PI, m+1);
167 +                        colorout(i, Ninv, 1, m, 1./il->nsamps/il->col[i], dfp);
168                          colorout(i, da, n, m, 1./il->nsamps/il->col[i], dfp);
169 +                        colorout(i, Sinv, 1, m, 1./il->nsamps/il->col[i], dfp);
170 +                        fputeol(dfp);
171                          fclose(dfp);
172                          printf(" %s", dfname(il, DATORD[i]));
173                  }
174          } else {
175                  printf("\n%s %s %s%s", VOIDID, ofun[PAT_BDATA].funame,
176                                  il->matname, DSTSUF);
177 <                printf("\n5 s_gry");
177 >                printf("\n5 noneg");
178                  dfp = dfopen(il, 0);
179 <                fprintf(dfp, "2\n%f %f %d\n%f %f %d\n", 1.-1./n, -1.+1./n, n,
179 >                fprintf(dfp, "2\n%f %f %d\n%f %f %d\n",
180 >                                1.+1./n, -1.-1./n, n+2,
181                                  0., 2.*PI, m+1);
182 +                brightout(Ninv, 1, m, 1./il->nsamps/brt(il->col), dfp);
183                  brightout(da, n, m, 1./il->nsamps/brt(il->col), dfp);
184 +                brightout(Sinv, 1, m, 1./il->nsamps/brt(il->col), dfp);
185 +                fputeol(dfp);
186                  fclose(dfp);
187                  printf(" %s", dfname(il, 0));
188          }
189          printf("\n\t%s il_alt il_azi", FNCFNM);
190 <        printf("\n0\n7\n");
173 <        compavg(col, da, m, il->nsamps);                /* north pole */
174 <        printf("\t%f\t%f\t%f\n", col[0]/il->col[0],
175 <                        col[1]/il->col[1], col[2]/il->col[2]);
176 <        compavg(col, da+(n-1)*m*3, m, il->nsamps);      /* south pole */
177 <        printf("\t%f\t%f\t%f\n", col[0]/il->col[0],
178 <                        col[1]/il->col[1], col[2]/il->col[2]);
179 <        printf("\t%f\n", 1.-1./n);
190 >        printf("\n0\n0\n");
191          il->dfnum++;
192 +        free((char *)Ninv);
193 +        free((char *)Sinv);
194   }
195  
196  
# Line 210 | Line 223 | OBJREC  *ob;
223   }
224  
225  
226 < compavg(col, da, n, ns)         /* compute average for set of data values */
226 > compavg(col, da, n)             /* compute average for set of data values */
227   float  col[3];
228   register float  *da;
229 < int  n, ns;
229 > int  n;
230   {
231          register int  i;
232  
# Line 225 | Line 238 | int  n, ns;
238                  col[2] += *da++;
239          }
240          for (i = 0; i < 3; i++)
241 <                col[i] /= (double)(n*ns);
241 >                col[i] /= (double)n;
242   }
243  
244  
245 + compinv(rinv, rp, m)            /* compute other side of row average */
246 + register float  *rinv, *rp;
247 + int  m;
248 + {
249 +        float  avg[3];
250 +
251 +        compavg(avg, rp, m);            /* row average */
252 +        while (m-- > 0) {
253 +                *rinv++ = 2.*avg[0] - *rp++;
254 +                *rinv++ = 2.*avg[1] - *rp++;
255 +                *rinv++ = 2.*avg[2] - *rp++;
256 +        }
257 + }
258 +
259 +
260   average(il, da, n)              /* evaluate average value for distribution */
261   register struct illum_args  *il;
262   float  *da;
263   int  n;
264   {
265 <        compavg(il->col, da, n, il->nsamps);
265 >        compavg(il->col, da, n);        /* average */
266 >        if (il->nsamps > 1) {
267 >                il->col[0] /= (double)il->nsamps;
268 >                il->col[1] /= (double)il->nsamps;
269 >                il->col[2] /= (double)il->nsamps;
270 >        }
271                                          /* brighter than minimum? */
272          return(brt(il->col) > il->minbrt+FTINY);
273   }
# Line 246 | Line 279 | fputnum(d, fp)                 /* put out a number to fp */
279   double  d;
280   FILE  *fp;
281   {
282 <        if (colmcnt++ % 6 == 0)
282 >        if (colmcnt++ % 5 == 0)
283                  putc('\n', fp);
284          fprintf(fp, " %11e", d);
285   }
# Line 276 | Line 309 | FILE  *fp;
309                  }
310                  fputnum(mult*da[p-3*m], fp);    /* wrap phi */
311          }
279        fputeol(fp);
312   }
313  
314  
# Line 295 | Line 327 | FILE  *fp;
327                  }
328                  fputnum(mult*brt(da-3*m), fp);  /* wrap phi */
329          }
298        fputeol(fp);
330   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines