home *** CD-ROM | disk | FTP | other *** search
- /*
- * Convert Leicester sky luminance data to Radiance input.
- */
-
- #include <stdio.h>
-
- #include "color.h"
-
-
- #define PI 3.14159265358979323846
-
- #define MAXLUMINANCE 60000.0
- #define LUMERR 99997.5
-
- #define MAXSAMP 30
- #define NROWS 8
-
- short nv_row[NROWS] = {30, 30, 24, 24, 18, 12, 6, 6};
-
-
- main(argc, argv)
- int argc;
- char **argv;
- {
- extern double sin(), cos();
- char fbuf[64];
- int day, hour, minute;
- double v[3], d;
- double sill, salt, sazi;
-
- if (argc == 3 && !strcmp(argv[1], "-s"))
- sill = atof(argv[2]);
- else
- sill = 0.0;
-
- while (scanf("%d %d %d %lf %lf", &day, &hour, &minute,
- &salt, &sazi) == 5) {
- sprintf(fbuf, "day%03d_%02d:%02d.dat", day,hour,minute);
- printf("\nvoid brightdata sky%03d_%02d:%02d\n",day,hour,minute);
- printf("5 noneg %s . Asin(Dz)/DEGREE ", fbuf);
- printf("mod(atan2(Dx,Dy)/DEGREE-%g,360)\n", sazi);
- printf("0\n0\n");
- cvdata(fbuf);
- }
- if (sill > 0.0) {
- salt *= PI/180.0;
- sazi *= PI/180.0;
- v[0] = cos(salt);
- v[1] = v[0]*cos(sazi);
- v[0] *= sin(sazi);
- v[2] = sin(salt);
- d = sill/5.981e-5/SUNEFFICACY/v[2];
- printf("\nvoid light solar\n");
- printf("0\n0\n3 %f %f %f\n", d, d, d);
- printf("\nsolar source sun\n");
- printf("0\n0\n4 %f %f %f 0.5\n", v[0], v[1], v[2]);
- }
- exit(0);
- }
-
-
- cvdata(fname) /* convert data to Radiance format */
- char *fname;
- {
- double row[MAXSAMP];
- int i;
- register int j;
- FILE *fp;
-
- if ((fp = fopen(fname, "w")) == NULL) {
- perror(fname);
- exit(1);
- }
- fprintf(fp, "2\n6 90 %d\n0 360 %d\n", NROWS, MAXSAMP+1);
- for (i = 0; i < NROWS; i++) {
- for (j = 0; j < nv_row[i]; j++) {
- if (scanf("%lf", &row[j]) != 1) {
- fprintf(stderr, "%s: data format error\n",
- fname);
- exit(1);
- }
- if (row[j] >= LUMERR) /* overrange */
- row[j] = j ? row[j-1] : MAXLUMINANCE;
- }
- if (i == NROWS-1) { /* average zenith values */
- for (j = 1; j < nv_row[i]; j++)
- row[0] += row[j];
- row[0] /= (double)nv_row[i];
- cvrow(row, 1, fp);
- } else
- cvrow(row, nv_row[i], fp);
- }
- putc('\n', fp);
- if (fclose(fp) == -1) {
- perror(fname);
- exit(1);
- }
- }
-
-
- cvrow(rp, n, fp) /* resample and print row to fp */
- register double *rp;
- int n;
- FILE *fp;
- {
- double nrow[MAXSAMP+1];
- double x;
- register int i, j;
- /* resample row if necessary */
- if (n < MAXSAMP)
- for (i = 0; i < MAXSAMP; i++) {
- j = x = (double)i*n/MAXSAMP;
- if (j > n-2)
- j = n-2;
- x -= (double)j;
- nrow[i] = rp[j]*(1.-x) + rp[j+1]*x;
- }
- else
- for (i = 0; i < MAXSAMP; i++)
- nrow[i] = rp[i];
- nrow[MAXSAMP] = rp[0];
- /* print full row */
- for (i = 0; i <= MAXSAMP; i++) {
- if (i%5 == 0)
- putc('\n', fp);
- fprintf(fp, " %4.4f", nrow[i]/SKYEFFICACY);
- }
- }
-