ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/test/renders/prism.cal
Revision: 1.1
Committed: Sat Nov 17 22:09:12 2018 UTC (6 years, 5 months ago) by greg
Branch: MAIN
CVS Tags: rad5R4, rad5R3, HEAD
Log Message:
Created rendering tests

File Contents

# User Rev Content
1 greg 1.1 { RCSid $Id$ }
2     {
3     Calculation of relay directions for prismatic glazing
4    
5     31 July 1991 Greg Ward
6    
7     Prism is oriented with flat side in xz plane
8     and normal in -y direction. The prism is
9     extruded along the x axis.
10    
11     Reflections are not computed.
12    
13     Parameters:
14     A1 - index of refraction
15     A2 - thickness of prism triangle
16     A3 - height of upper side (segment 1)
17     A4 - height of lower side (segment 2)
18    
19     Computes:
20     coef1 - transmission coefficient for upper side
21     dx1, dy1,
22     dz1 - transmission direction for upper side
23     coef2 - transmission coefficient for lower side
24     dx2, dy2,
25     dz2 - transmission direction for lower side
26     }
27     { required formulae }
28     tan2sin(a) = sqrt(a*a/(1+a*a));
29     stb(sta,ca,sa) = ca*sta - sa*sqrt(A1*A1-sta*sta);
30     cos_p = Sqrt(1-Dx*Dx);
31     dtrans(c1,c2) = dtransb(c1, sqrt(1+(c1*c1-1)/A1/A1),
32     c2, sqrt(1+(c2*c2-1)/A1/A1));
33     dtransb(c1o,c1i,c2o,c2i) = 8*A1*A1 *
34     ( c1o*c1i*c2o*c2i/sq((A1*c1o+c1i)*(A1*c2o+c2i)) +
35     1/c1o/c1i/c2o/c2i/sq((A1/c1o+1/c1i)*(A1/c2o+1/c2i)) );
36    
37     {************************************************
38     Definitions for Segment 1
39     }
40     { slope angle (always positive) }
41     sin_a1 = tan2sin(A2/A3/cos_p);
42     cos_a1 = Sqrt(1-sin_a1*sin_a1);
43     { computed coefficeint }
44     coef1 = A3/(A3+A4) * if(Dy,
45     if(1-abs(sin_tB1o),
46     dtrans(cos_tA1i, cos_tB1o),
47     0),
48     if (Dy*cos_a1 + Dz*sin_a1,
49     0,
50     if (1-abs(sin_tA1o),
51     dtrans(cos_tB1i, cos_tA1o),
52     0)));
53     { computed direction }
54     dx1 = Dx;
55     dy1 = if(Dy,
56     (cos_a1*cos_tB1o-sin_a1*sin_tB1o)*cos_p,
57     -cos_tA1o*cos_p);
58     dz1 = if(Dy,
59     (sin_a1*cos_tB1o+cos_a1*sin_tB1o)*cos_p,
60     -sin_tA1o*cos_p);
61     { incident angle (flat side) }
62     sin_tA1i = Dz/cos_p;
63     cos_tA1i = Sqrt(1-sin_tA1i*sin_tA1i);
64     { transmitted angle (steep side) }
65     sin_tB1o = stb(sin_tA1i, cos_a1, sin_a1);
66     cos_tB1o = Sqrt(1-sin_tB1o*sin_tB1o);
67     { incident angle (steep side) }
68     sin_tB1i = -Dz/cos_p*cos_a1 -
69     Sqrt(1-sq(Dz/cos_p))*sin_a1;
70     cos_tB1i = Sqrt(1-sin_tB1i*sin_tB1i);
71     { transmitted angle (flat side) }
72     sin_tA1o = stb(sin_tB1i, cos_a1, -sin_a1);
73     cos_tA1o = Sqrt(1-sin_tA1o*sin_tA1o);
74    
75     {************************************************
76     Definitions for Segment 2
77     }
78     { slope angle (always negative) }
79     sin_a2 = -tan2sin(A2/A4/cos_p);
80     cos_a2 = Sqrt(1-sin_a2*sin_a2);
81     { computed coefficeint }
82     coef2 = A4/(A3+A4) * if(Dy,
83     if(1-abs(sin_tB2o),
84     dtrans(cos_tA2i, cos_tB2o),
85     0),
86     if (Dy*cos_a2 + Dz*sin_a2,
87     0,
88     if (1-abs(sin_tA2o),
89     dtrans(cos_tB2i, cos_tA2o),
90     0)));
91     { computed direction }
92     dx2 = Dx;
93     dy2 = if(Dy,
94     (cos_a2*cos_tB2o-sin_a2*sin_tB2o)*cos_p,
95     -cos_tA2o*cos_p);
96     dz2 = if(Dy,
97     (sin_a2*cos_tB2o+cos_a2*sin_tB2o)*cos_p,
98     -sin_tA2o*cos_p);
99     { incident angle (flat side) }
100     sin_tA2i = Dz/cos_p;
101     cos_tA2i = Sqrt(1-sin_tA2i*sin_tA2i);
102     { transmitted angle (steep side) }
103     sin_tB2o = stb(sin_tA2i, cos_a2, sin_a2);
104     cos_tB2o = Sqrt(1-sin_tB2o*sin_tB2o);
105     { incident angle (steep side) }
106     sin_tB2i = -Dz/cos_p*cos_a2 -
107     Sqrt(1-sq(Dz/cos_p))*sin_a2;
108     cos_tB2i = Sqrt(1-sin_tB2i*sin_tB2i);
109     { transmitted angle (flat side) }
110     sin_tA2o = stb(sin_tB2i, cos_a2, -sin_a2);
111     cos_tA2o = Sqrt(1-sin_tA2o*sin_tA2o);