ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/px/mx3.c
Revision: 2.2
Committed: Sat Feb 22 02:07:27 2003 UTC (21 years, 2 months ago) by greg
Content type: text/plain
Branch: MAIN
CVS Tags: rad3R5
Changes since 2.1: +1 -4 lines
Log Message:
Changes and check-in for 3.5 release
Includes new source files and modifications not recorded for many years
See ray/doc/notes/ReleaseNotes for notes between 3.1 and 3.5 release

File Contents

# User Rev Content
1 greg 2.1 #ifndef lint
2 greg 2.2 static const char RCSid[] = "$Id$";
3 greg 2.1 #endif
4    
5     double
6     mx3d_adjoint(a, b)
7     register double a[3][3], b[3][3];
8     {
9     b[0][0] = ((a[1][1])*( a[2][2]) - ( a[1][2])*( a[2][1]));
10     b[1][0] = ((a[1][2])*( a[2][0]) - ( a[1][0])*( a[2][2]));
11     b[2][0] = ((a[1][0])*( a[2][1]) - ( a[1][1])*( a[2][0]));
12     b[0][1] = ((a[2][1])*( a[0][2]) - ( a[2][2])*( a[0][1]));
13     b[1][1] = ((a[2][2])*( a[0][0]) - ( a[2][0])*( a[0][2]));
14     b[2][1] = ((a[2][0])*( a[0][1]) - ( a[2][1])*( a[0][0]));
15     b[0][2] = ((a[0][1])*( a[1][2]) - ( a[0][2])*( a[1][1]));
16     b[1][2] = ((a[0][2])*( a[1][0]) - ( a[0][0])*( a[1][2]));
17     b[2][2] = ((a[0][0])*( a[1][1]) - ( a[0][1])*( a[1][0]));
18     return a[0][0]*b[0][0] + a[1][0]*b[0][1] + a[2][0]*b[0][2];
19     }
20    
21    
22     mx3d_mul(a, b, c)
23     register double a[3][3], b[3][3], c[3][3];
24     {
25     c[0][0] = a[0][0]*b[0][0] + a[0][1]*b[1][0] + a[0][2]*b[2][0];
26     c[0][1] = a[0][0]*b[0][1] + a[0][1]*b[1][1] + a[0][2]*b[2][1];
27     c[0][2] = a[0][0]*b[0][2] + a[0][1]*b[1][2] + a[0][2]*b[2][2];
28     c[1][0] = a[1][0]*b[0][0] + a[1][1]*b[1][0] + a[1][2]*b[2][0];
29     c[1][1] = a[1][0]*b[0][1] + a[1][1]*b[1][1] + a[1][2]*b[2][1];
30     c[1][2] = a[1][0]*b[0][2] + a[1][1]*b[1][2] + a[1][2]*b[2][2];
31     c[2][0] = a[2][0]*b[0][0] + a[2][1]*b[1][0] + a[2][2]*b[2][0];
32     c[2][1] = a[2][0]*b[0][1] + a[2][1]*b[1][1] + a[2][2]*b[2][1];
33     c[2][2] = a[2][0]*b[0][2] + a[2][1]*b[1][2] + a[2][2]*b[2][2];
34     }
35    
36    
37     mx3d_transform(p, a, q)
38     register double p[3], q[3];
39     register double a[3][3];
40     {
41     q[0] = p[0]*a[0][0] + p[1]*a[1][0] + p[2]*a[2][0];
42     q[1] = p[0]*a[0][1] + p[1]*a[1][1] + p[2]*a[2][1];
43     q[2] = p[0]*a[0][2] + p[1]*a[1][2] + p[2]*a[2][2];
44     }
45    
46    
47     double
48     mx3d_transform_div(p, a, q)
49     register double p[3], q[2];
50     register double a[3][3];
51     {
52     double q2;
53     q2 = p[0]*a[0][2] + p[1]*a[1][2] + p[2]*a[2][2];
54     if (q2!=0.) {
55     q[0] = (p[0]*a[0][0] + p[1]*a[1][0] + p[2]*a[2][0]) / q2;
56     q[1] = (p[0]*a[0][1] + p[1]*a[1][1] + p[2]*a[2][1]) / q2;
57     }
58     return q2;
59     }
60    
61    
62     mx3d_translate_mat(tx, ty, m)
63     double tx, ty;
64     register double m[3][3];
65     {
66     m[0][0] = 1.; m[0][1] = 0.; m[0][2] = 0.;
67     m[1][0] = 0.; m[1][1] = 1.; m[1][2] = 0.;
68     m[2][0] = tx; m[2][1] = ty; m[2][2] = 1.;
69     }
70    
71    
72     mx3d_translate(m, tx, ty)
73     register double m[3][3];
74     double tx, ty;
75     {
76     m[3][0] += tx*m[0][0]+ty*m[1][0];
77     m[3][1] += tx*m[0][1]+ty*m[1][1];
78     m[3][2] += tx*m[0][2]+ty*m[1][2];
79     }
80    
81    
82     mx3d_scale_mat(sx, sy, m)
83     double sx, sy;
84     register double m[3][3];
85     {
86     m[0][0] = sx; m[0][1] = 0.; m[0][2] = 0.;
87     m[1][0] = 0.; m[1][1] = sy; m[1][2] = 0.;
88     m[2][0] = 0.; m[2][1] = 0.; m[2][2] = 1.;
89     }
90    
91    
92     mx3d_scale(m, sx, sy)
93     register double m[3][3];
94     double sx, sy;
95     {
96     m[0][0] *= sx; m[0][1] *= sx; m[0][2] *= sx;
97     m[1][0] *= sy; m[1][1] *= sy; m[1][2] *= sy;
98     }