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

# Content
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 }