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

Comparing ray/src/hd/rholo2.c (file contents):
Revision 3.16 by gwlarson, Tue Nov 24 17:05:36 1998 UTC vs.
Revision 3.17 by gwlarson, Tue Nov 24 17:38:09 1998 UTC

# Line 21 | Line 21 | register float *rod;
21   register PACKET *p;
22   {
23          short   packord[RPACKSIZ];
24 <        float   packdc[RPACKSIZ];
24 >        float   packdc2[RPACKSIZ];
25          int     iterleft = 3*p->nr;
26          BYTE    rpos[2][2];
27          FVECT   ro, rd, rp1;
28          GCOORD  gc[2];
29 <        double  d, dc, meandist;
29 >        double  d, dc2, md2, td2;
30          int     i;
31          register int    ii;
32  
33          if (!hdbcoord(gc, hdlist[p->hd], p->bi))
34                  error(CONSISTENCY, "bad beam index in packrays");
35 <        for (i = 0, meandist = 0.; i < p->nr || meandist > myeye.rng+FTINY; ) {
35 >        td2 = (myeye.rng+FTINY)*(myeye.rng+FTINY);
36 >        for (i = 0, md2 = 0.; i < p->nr || md2 > td2; ) {
37                  rpos[0][0] = frandom() * 256.;
38                  rpos[0][1] = frandom() * 256.;
39                  rpos[1][0] = frandom() * 256.;
# Line 42 | Line 43 | register PACKET        *p;
43                          register int    nexti;
44  
45                          VSUM(rp1, ro, rd, d);
46 <                        dc = sqrt(dist2line(myeye.vpt, ro, rp1)) / p->nr;
46 >                        dc2 = dist2line(myeye.vpt, ro, rp1);
47 >                        dc2 /= (double)(p->nr*p->nr);
48                          if (i == p->nr) {               /* packet full */
49                                  nexti = packord[i-1];
50                                  if (!iterleft--)
51                                          break;          /* tried enough! */
52 <                                if (dc >= packdc[nexti])
52 >                                if (dc2 >= packdc2[nexti])
53                                          continue;       /* worse than worst */
54 <                                meandist -= packdc[nexti];
54 >                                md2 -= packdc2[nexti];
55                          } else
56                                  nexti = i++;
57 <                        meandist += packdc[nexti] = dc; /* new distance */
57 >                        md2 += packdc2[nexti] = dc2;    /* new distance */
58                          for (ii = i; --ii; ) {          /* insertion sort */
59 <                                if (dc > packdc[packord[ii-1]])
59 >                                if (dc2 > packdc2[packord[ii-1]])
60                                          break;
61                                  packord[ii] = packord[ii-1];
62                          }
# Line 76 | Line 78 | register PACKET        *p;
78                  VCOPY(rod+6*ii+3, rd);
79          }
80   #ifdef DEBUG
81 <        fprintf(stderr, "%f mean distance for target %f (%d iterations)\n",
82 <                        meandist, myeye.rng, 3*p->nr - iterleft);
81 >        fprintf(stderr, "%f mean distance for target %f (%d iterations left)\n",
82 >                        sqrt(md2), myeye.rng, iterleft);
83   #endif
84   }
85  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines