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, 1 month 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

# User Rev Content
1 greg 2.1 #ifndef lint
2 schorsch 2.3 static const char RCSid[] = "$Id: mx3.c,v 2.2 2003/02/22 02:07:27 greg Exp $";
3 greg 2.1 #endif
4    
5 schorsch 2.3 #include "mx3.h"
6    
7     extern double
8     mx3d_adjoint(
9     register double a[3][3],
10     register double b[3][3]
11     )
12 greg 2.1 {
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 schorsch 2.3 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 greg 2.1 {
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 schorsch 2.3 extern void
46     mx3d_transform(
47     register double p[3],
48     register double a[3][3],
49     register double q[3]
50     )
51 greg 2.1 {
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 schorsch 2.3 extern double
59     mx3d_transform_div(
60     register double p[3],
61     register double a[3][3],
62     register double q[2]
63     )
64 greg 2.1 {
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 schorsch 2.3 extern void
76     mx3d_translate_mat(
77     double tx,
78     double ty,
79     register double m[3][3]
80     )
81 greg 2.1 {
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 schorsch 2.3 extern void
89     mx3d_translate(
90     register double m[3][3],
91     double tx,
92     double ty
93     )
94 greg 2.1 {
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 schorsch 2.3 extern void
102     mx3d_scale_mat(
103     double sx,
104     double sy,
105     register double m[3][3]
106     )
107 greg 2.1 {
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 schorsch 2.3 extern void
115     mx3d_scale(
116     register double m[3][3],
117     double sx,
118     double sy
119     )
120 greg 2.1 {
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     }