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

Comparing ray/src/cal/cal/sphsamp.cal (file contents):
Revision 1.1 by greg, Sat Feb 22 02:07:21 2003 UTC vs.
Revision 1.3 by greg, Tue Feb 15 23:45:14 2005 UTC

# Line 1 | Line 1
1 + { RCSid $Id$ }
2   {
3 <        Uniform sampling of sphere
3 >        Jittered sampling of a sphere
4  
5 <        Define:
5 <                N       - total number of samples
6 <                i       - sample number
5 >        2/15/2005       G. Ward
6  
7 +        Constant:
8 +                N -             total number of samples on sphere
9 +        Input:
10 +                i -             sample number [0,N-1]
11          Output:
12 <                theta   - polar angle (degrees)
13 <                phi     - azimuthal angle (degrees)
12 >                theta   - polar angle (0-PI)
13 >                phi_un  - azimuthal angle (unnormalized)
14 >                phi     - azimuthal angle (0-2*PI)
15                  Dx      - X-component of direction vector
16                  Dy      - Y-component of direction vector
17                  Dz      - Z-component of direction vector
18   }
19 + S : .7;                 { jitter amount (0-1) }
20  
21 < DEGREE : PI/180;
17 < bound(a,x,b) : if(a-x, a, if(x-b, b, x));
18 < Acos(x) : acos(bound(-1,x,1));
19 < Sqrt(x) : if(x, sqrt(x), 0);
21 > k : 2*sqrt(PI/N);       { k^2 is solid angle of each sample }
22  
23 < nalt = floor(sqrt(2/PI*N) + .5);
22 < nazi = floor(PI/2*nalt + .5);
23 > mod(n,d) : n - floor(n/d)*d;
24  
25 < cond = nalt*nazi-.9999 - i;
25 > alpha0 = asin(2/N*(i+.5) - 1);
26  
27 < ialt = floor(i/nazi);
28 < iazi = i - ialt*nazi;
27 > theta = alpha0 + PI/2 + k*S*(rand(.35*i+10.3) - .5);
28 > phi_un = sqrt(PI*N)*alpha0 + k*S*(rand(-.83*i-17.9) - .5);
29 > phi = mod(phi_un, 2*PI);
30  
31 < ralt = (ialt + rand(i*.328+.112))/nalt;
32 < razi = (iazi + rand(i*-.731+.318))/nazi;
33 <
34 < rtheta = Acos(Dz);
33 < rphi = 2*PI*razi;
34 < Dxy = Sqrt(1 - Dz*Dz);
35 < theta = rtheta/DEGREE;
36 < phi = rphi/DEGREE;
37 < Dx = Dxy*cos(rphi);
38 < Dy = Dxy*sin(rphi);
39 < Dz = 1 - 2*ralt;
31 > sint = sin(theta);
32 > Dx = cos(phi)*sint;
33 > Dy = sin(phi)*sint;
34 > Dz = cos(theta);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines