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

Comparing ray/src/cv/lampcolor.c (file contents):
Revision 1.5 by greg, Thu Sep 12 13:26:16 1991 UTC vs.
Revision 2.2 by greg, Thu Dec 19 15:06:15 1991 UTC

# Line 10 | Line 10 | static char SCCSid[] = "$SunId$ LBL";
10  
11   #include <stdio.h>
12  
13 + #include "color.h"
14 +
15   #define PI      3.14159265358979323846
16  
17   extern char     *gets(), *strcpy();
18 + #ifndef atof
19   extern double   atof();
20 + #endif
21   extern float    *matchlamp();
22  
23                                  /* lamp parameters */
# Line 27 | Line 31 | int    typecheck(), unitcheck(), geomcheck(), outpcheck()
31  
32   float   *lampcolor;             /* the lamp color (RGB) */
33   double  unit2meter;             /* conversion from units to meters */
34 < double  projarea;               /* projected area for this geometry */
34 > double  area;                   /* radiating area for this geometry */
35   double  lumens;                 /* total lamp lumens */
36  
37   struct {
# Line 173 | Line 177 | compute()                      /* compute lamp radiance */
177   {
178          double  whiteval;
179  
180 <        whiteval = lumens/470./projarea;
180 >        whiteval = lumens/area/(WHTEFFICACY*PI);
181  
182          printf("Lamp color (RGB) = %f %f %f\n",
183                          lampcolor[0]*whiteval,
# Line 182 | Line 186 | compute()                      /* compute lamp radiance */
186   }
187  
188  
189 < getd(dp)                        /* get a positive double from stdin */
189 > getd(name, dp, help)            /* get a positive double from stdin */
190 > char    *name;
191   double  *dp;
192 + char    *help;
193   {
194          char    buf[32];
195 <
195 > again:
196 >        printf("%s [%g]: ", name, *dp);
197          if (gets(buf) == NULL)
198                  return(0);
199 +        if (buf[0] == '?') {
200 +                puts(help);
201 +                goto again;
202 +        }
203          if ((buf[0] < '0' || buf[0] > '9') && buf[0] != '.')
204                  return(0);
205          *dp = atof(buf);
# Line 198 | Line 209 | double *dp;
209  
210   getpolygon()                    /* get projected area for a polygon */
211   {
212 <        static double   area = 1.0;
212 >        static double   parea = 1.0;
213  
214 <        printf("Polygon area [%g]: ", area);
215 <        getd(&area);
216 <        projarea = PI*unit2meter*unit2meter * area;
214 >        getd("Polygon area", &parea,
215 >                "Enter the total radiating area of the polygon.");
216 >        area = unit2meter*unit2meter * parea;
217          return(1);
218   }
219  
# Line 211 | Line 222 | getsphere()                    /* get projected area for a sphere */
222   {
223          static double   radius = 1.0;
224  
225 <        printf("Sphere radius [%g]: ", radius);
226 <        getd(&radius);
227 <        projarea = 4.*PI*PI*unit2meter*unit2meter * radius*radius;
225 >        getd("Sphere radius", &radius,
226 >                "Enter the distance from the sphere's center to its surface.");
227 >        area = 4.*PI*unit2meter*unit2meter * radius*radius;
228          return(1);
229   }
230  
# Line 222 | Line 233 | getcylinder()                  /* get projected area for a cylinder *
233   {
234          static double   length = 1.0, radius = 0.1;
235  
236 <        printf("Cylinder length [%g]: ", length);
237 <        getd(&length);
238 <        printf("Cylinder radius [%g]: ", radius);
239 <        getd(&radius);
240 <        projarea = PI*PI*2.*PI*unit2meter*unit2meter * radius*length;
236 >        getd("Cylinder length", &length,
237 >                "Enter the length of the cylinder.");
238 >        getd("Cylinder radius", &radius,
239 >                "Enter the distance from the cylinder's axis to its surface.");
240 >        area = 2.*PI*unit2meter*unit2meter * radius*length;
241          return(1);
242   }
243  
# Line 235 | Line 246 | getring()                      /* get projected area for a ring */
246   {
247          static double   radius = 1.0;
248  
249 <        printf("Disk radius [%g]: ", radius);
250 <        getd(&radius);
251 <        projarea = PI*PI*unit2meter*unit2meter * radius*radius;
249 >        getd("Disk radius", &radius,
250 > "Enter the distance from the ring's center to its outer edge.\n\
251 > The inner radius must be zero.");
252 >        area = PI*unit2meter*unit2meter * radius*radius;
253          return(1);
254   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines