ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/px/mx3.c
Revision: 2.3
Committed: Sun Mar 28 20:33:14 2004 UTC (20 years ago) by schorsch
Content type: text/plain
Branch: MAIN
CVS Tags: rad5R4, rad5R2, rad4R2P2, rad5R0, rad5R1, rad3R7P2, rad3R7P1, rad4R2, rad4R1, rad4R0, rad3R6, rad3R6P1, rad3R8, rad3R9, rad4R2P1, rad5R3, HEAD
Changes since 2.2: +50 -25 lines
Log Message:
Continued ANSIfication, and other fixes and clarifications.

File Contents

# Content
1 #ifndef lint
2 static const char RCSid[] = "$Id: mx3.c,v 2.2 2003/02/22 02:07:27 greg Exp $";
3 #endif
4
5 #include "mx3.h"
6
7 extern double
8 mx3d_adjoint(
9 register double a[3][3],
10 register double b[3][3]
11 )
12 {
13 b[0][0] = ((a[1][1])*( a[2][2]) - ( a[1][2])*( a[2][1]));
14 b[1][0] = ((a[1][2])*( a[2][0]) - ( a[1][0])*( a[2][2]));
15 b[2][0] = ((a[1][0])*( a[2][1]) - ( a[1][1])*( a[2][0]));
16 b[0][1] = ((a[2][1])*( a[0][2]) - ( a[2][2])*( a[0][1]));
17 b[1][1] = ((a[2][2])*( a[0][0]) - ( a[2][0])*( a[0][2]));
18 b[2][1] = ((a[2][0])*( a[0][1]) - ( a[2][1])*( a[0][0]));
19 b[0][2] = ((a[0][1])*( a[1][2]) - ( a[0][2])*( a[1][1]));
20 b[1][2] = ((a[0][2])*( a[1][0]) - ( a[0][0])*( a[1][2]));
21 b[2][2] = ((a[0][0])*( a[1][1]) - ( a[0][1])*( a[1][0]));
22 return a[0][0]*b[0][0] + a[1][0]*b[0][1] + a[2][0]*b[0][2];
23 }
24
25
26 extern void
27 mx3d_mul(
28 register double a[3][3],
29 register double b[3][3],
30 register double c[3][3]
31 )
32 {
33 c[0][0] = a[0][0]*b[0][0] + a[0][1]*b[1][0] + a[0][2]*b[2][0];
34 c[0][1] = a[0][0]*b[0][1] + a[0][1]*b[1][1] + a[0][2]*b[2][1];
35 c[0][2] = a[0][0]*b[0][2] + a[0][1]*b[1][2] + a[0][2]*b[2][2];
36 c[1][0] = a[1][0]*b[0][0] + a[1][1]*b[1][0] + a[1][2]*b[2][0];
37 c[1][1] = a[1][0]*b[0][1] + a[1][1]*b[1][1] + a[1][2]*b[2][1];
38 c[1][2] = a[1][0]*b[0][2] + a[1][1]*b[1][2] + a[1][2]*b[2][2];
39 c[2][0] = a[2][0]*b[0][0] + a[2][1]*b[1][0] + a[2][2]*b[2][0];
40 c[2][1] = a[2][0]*b[0][1] + a[2][1]*b[1][1] + a[2][2]*b[2][1];
41 c[2][2] = a[2][0]*b[0][2] + a[2][1]*b[1][2] + a[2][2]*b[2][2];
42 }
43
44
45 extern void
46 mx3d_transform(
47 register double p[3],
48 register double a[3][3],
49 register double q[3]
50 )
51 {
52 q[0] = p[0]*a[0][0] + p[1]*a[1][0] + p[2]*a[2][0];
53 q[1] = p[0]*a[0][1] + p[1]*a[1][1] + p[2]*a[2][1];
54 q[2] = p[0]*a[0][2] + p[1]*a[1][2] + p[2]*a[2][2];
55 }
56
57
58 extern double
59 mx3d_transform_div(
60 register double p[3],
61 register double a[3][3],
62 register double q[2]
63 )
64 {
65 double q2;
66 q2 = p[0]*a[0][2] + p[1]*a[1][2] + p[2]*a[2][2];
67 if (q2!=0.) {
68 q[0] = (p[0]*a[0][0] + p[1]*a[1][0] + p[2]*a[2][0]) / q2;
69 q[1] = (p[0]*a[0][1] + p[1]*a[1][1] + p[2]*a[2][1]) / q2;
70 }
71 return q2;
72 }
73
74
75 extern void
76 mx3d_translate_mat(
77 double tx,
78 double ty,
79 register double m[3][3]
80 )
81 {
82 m[0][0] = 1.; m[0][1] = 0.; m[0][2] = 0.;
83 m[1][0] = 0.; m[1][1] = 1.; m[1][2] = 0.;
84 m[2][0] = tx; m[2][1] = ty; m[2][2] = 1.;
85 }
86
87
88 extern void
89 mx3d_translate(
90 register double m[3][3],
91 double tx,
92 double ty
93 )
94 {
95 m[3][0] += tx*m[0][0]+ty*m[1][0];
96 m[3][1] += tx*m[0][1]+ty*m[1][1];
97 m[3][2] += tx*m[0][2]+ty*m[1][2];
98 }
99
100
101 extern void
102 mx3d_scale_mat(
103 double sx,
104 double sy,
105 register double m[3][3]
106 )
107 {
108 m[0][0] = sx; m[0][1] = 0.; m[0][2] = 0.;
109 m[1][0] = 0.; m[1][1] = sy; m[1][2] = 0.;
110 m[2][0] = 0.; m[2][1] = 0.; m[2][2] = 1.;
111 }
112
113
114 extern void
115 mx3d_scale(
116 register double m[3][3],
117 double sx,
118 double sy
119 )
120 {
121 m[0][0] *= sx; m[0][1] *= sx; m[0][2] *= sx;
122 m[1][0] *= sy; m[1][1] *= sy; m[1][2] *= sy;
123 }