ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/px/mx3.c
Revision: 2.1
Committed: Wed Oct 11 10:39:26 1995 UTC (28 years, 6 months ago) by greg
Content type: text/plain
Branch: MAIN
Log Message:
Initial revision

File Contents

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