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

Comparing ray/src/gen/mkillum2.c (file contents):
Revision 2.2 by greg, Wed Mar 11 12:25:47 1992 UTC vs.
Revision 2.6 by greg, Fri Jan 7 14:51:46 1994 UTC

# Line 66 | Line 66 | char  *nm;
66          distarr = (float *)calloc(n, 3*sizeof(float));
67          if (distarr == NULL)
68                  error(SYSTEM, "out of memory in o_face");
69 <        mkaxes(u, v, fa->norm);
69 >                                /* take first edge longer than sqrt(area) */
70 >        for (j = fa->nv-1, i = 0; i < fa->nv; j = i++) {
71 >                u[0] = VERTEX(fa,i)[0] - VERTEX(fa,j)[0];
72 >                u[1] = VERTEX(fa,i)[1] - VERTEX(fa,j)[1];
73 >                u[2] = VERTEX(fa,i)[2] - VERTEX(fa,j)[2];
74 >                if ((r1 = DOT(u,u)) >= fa->area-FTINY)
75 >                        break;
76 >        }
77 >        if (i < fa->nv) {       /* got one! -- let's align our axes */
78 >                r2 = 1.0/sqrt(r1);
79 >                u[0] *= r2; u[1] *= r2; u[2] *= r2;
80 >                fcross(v, fa->norm, u);
81 >        } else                  /* oh well, we'll just have to wing it */
82 >                mkaxes(u, v, fa->norm);
83 >                                /* now, find limits in (u,v) coordinates */
84          ur[0] = vr[0] = FHUGE;
85          ur[1] = vr[1] = -FHUGE;
86          for (i = 0; i < fa->nv; i++) {
# Line 246 | Line 260 | char  *nm;
260                      r1 = r3*cos(r2);
261                      r2 = r3*sin(r2);
262                      for (j = 0; j < 3; j++)
263 <                        org[j] = CO_P0(co)[j] + r1*u[j] + r1*v[j] +
263 >                        org[j] = CO_P0(co)[j] + r1*u[j] + r2*v[j] +
264                                          .001*co->ad[j];
265  
266                                          /* send sample */

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines