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

# Content
1 #ifndef lint
2 static const char RCSid[] = "$Id$";
3 #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 }