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

Comparing ray/src/cv/bsdfpeaks.c (file contents):
Revision 2.1 by greg, Wed May 21 17:23:07 2025 UTC vs.
Revision 2.3 by greg, Wed May 21 23:10:55 2025 UTC

# Line 13 | Line 13 | static const char RCSid[] = "$Id$";
13   #include "bsdfrep.h"
14  
15   typedef struct {
16 <        float   peakv;          /* peak BSDF value */
17 <        float   width;          /* smallest FWHM (deg) */
18 <        RBFNODE *rbs;           /* incident system */
19 <        int     ndx;            /* peak index for RBFVAL */
16 >        float           peakv;          /* peak BSDF value */
17 >        float           width;          /* smallest FWHM (deg) */
18 >        const RBFNODE   *rbs;           /* incident system */
19 >        int             ndx;            /* peak index for RBFVAL */
20   } FWHM;                 /* struct to hold peak value */
21  
22 < typedef double  eval_f(const FVECT vin, const FVECT vout, void *p);
22 > typedef double  eval_f(const FVECT vin, const FVECT vout, const void *p);
23  
24   char    *progname;              /* needed by bsdfrep.c */
25  
# Line 37 | Line 37 | cmpFWHM(const void *p0, const void *p1)
37  
38   /* BSDF evaluation function for RBF system */
39   double
40 < rbf_eval(const FVECT vin, const FVECT vout, void *p)
40 > rbf_eval(const FVECT vin, const FVECT vout, const void *p)
41   {
42          /* XXX verify vin == p->invec ? */
43 <        return(eval_rbfrep((RBFNODE *)p, vout));
43 >        return(eval_rbfrep((const RBFNODE *)p, vout));
44   }
45  
46   /* BSDF evaluation for XML input */
47   double
48 < bsdf_eval(const FVECT vin, const FVECT vout, void *p)
48 > bsdf_eval(const FVECT vin, const FVECT vout, const void *p)
49   {
50          SDValue sv;
51  
52          if (SDreportError(
53 <                        SDevalBSDF(&sv, vin, vout, (SDData *)p),
53 >                        SDevalBSDF(&sv, vin, vout, (const SDData *)p),
54                          stderr))
55                  exit(1);
56  
# Line 59 | Line 59 | bsdf_eval(const FVECT vin, const FVECT vout, void *p)
59  
60   /* Find full-width, half-maximum in radians around BSDF direction */
61   double
62 < getFWHM(const FVECT vin, const FVECT vc, double rad0, eval_f *ev, void *p)
62 > getFWHM(const FVECT vin, const FVECT vc, double rad0, eval_f *ev, const void *p)
63   {
64          const double    peakv = (*ev)(vin, vc, p);
65          double          rad1 = rad0;                    /* current radii */
# Line 73 | Line 73 | getFWHM(const FVECT vin, const FVECT vc, double rad0,
73                  spinvector(vt, v0, vc, phi);
74                  if ((*ev)(vin, vt, p) <= .5*peakv) {    /* found one side? */
75                      FVECT       vt1;
76 <                    while (rad1 < M_PI/2.) {            /* find opposite */
76 >                    while (rad1 < M_PI/2.) {            /* bracket peak */
77                          geodesic(vt1, vt, vc, rad0+rad1, GEOD_RAD);
78                          if ((*ev)(vin, vt1, p) <= .5*peakv)
79                              return(rad0+rad1);          /* got both! */
# Line 90 | Line 90 | getFWHM(const FVECT vin, const FVECT vc, double rad0,
90   void
91   getOutDir(FVECT vo, FWHM *dp)
92   {
93 <        RBFVAL  *vp = dp->rbs->rbfa + dp->ndx;
93 >        const RBFVAL    *vp = dp->rbs->rbfa + dp->ndx;
94  
95          ovec_from_pos(vo, vp->gx, vp->gy);
96   }
97  
98   /* Assign FWHM record for specified RBF system */
99   void
100 < assignFWHM(FWHM *dp, RBFNODE *rbf)
100 > assignFWHM(FWHM *dp, const RBFNODE *rbf)
101   {
102          FVECT   vo;
103          int     j;
# Line 121 | Line 121 | assignFWHM(FWHM *dp, RBFNODE *rbf)
121   int
122   main(int argc, char *argv[])
123   {
124 <        RBFNODE *rbf;
125 <        SDData  *sdp;
126 <        FILE    *fp;
127 <        int     ndirs;
128 <        FWHM    *peaka;
129 <        int     i;
124 >        const RBFNODE   *rbf;
125 >        SDData          *sdp;
126 >        FILE            *fp;
127 >        int             ndirs;
128 >        FWHM            *peaka;
129 >        int             i;
130  
131          progname = argv[0];
132          if (argc < 2)
# Line 193 | Line 193 | main(int argc, char *argv[])
193  
194                          printf("\t%.1f", 180./M_PI * getFWHM(peaka[i].rbs->invec,
195                                                  vout, sqrt(psa/M_PI),
196 <                                                bsdf_eval, (void *)sd));
196 >                                                bsdf_eval, sd));
197                  }
198                  fputc('\n', stdout);
199          }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines