source: other-projects/playing-in-the-street/summer-2013/trunk/Playing-in-the-Street-WPF/Content/Web/mrdoob-three.js-4862f5f/src/math/Matrix3.js@ 28897

Last change on this file since 28897 was 28897, checked in by davidb, 10 years ago

GUI front-end to server base plus web page content

File size: 3.9 KB
Line 
1/**
2 * @author alteredq / http://alteredqualia.com/
3 * @author WestLangley / http://github.com/WestLangley
4 * @author bhouston / http://exocortex.com
5 */
6
7THREE.Matrix3 = function ( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {
8
9 this.elements = new Float32Array(9);
10
11 this.set(
12
13 ( n11 !== undefined ) ? n11 : 1, n12 || 0, n13 || 0,
14 n21 || 0, ( n22 !== undefined ) ? n22 : 1, n23 || 0,
15 n31 || 0, n32 || 0, ( n33 !== undefined ) ? n33 : 1
16
17 );
18};
19
20THREE.Matrix3.prototype = {
21
22 constructor: THREE.Matrix3,
23
24 set: function ( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {
25
26 var te = this.elements;
27
28 te[0] = n11; te[3] = n12; te[6] = n13;
29 te[1] = n21; te[4] = n22; te[7] = n23;
30 te[2] = n31; te[5] = n32; te[8] = n33;
31
32 return this;
33
34 },
35
36 identity: function () {
37
38 this.set(
39
40 1, 0, 0,
41 0, 1, 0,
42 0, 0, 1
43
44 );
45
46 return this;
47
48 },
49
50 copy: function ( m ) {
51
52 var me = m.elements;
53
54 this.set(
55
56 me[0], me[3], me[6],
57 me[1], me[4], me[7],
58 me[2], me[5], me[8]
59
60 );
61
62 return this;
63
64 },
65
66 multiplyVector3: function ( vector ) {
67
68 console.warn( 'DEPRECATED: Matrix3\'s .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.' );
69 return vector.applyMatrix3( this );
70
71 },
72
73 multiplyVector3Array: function() {
74
75 var v1 = new THREE.Vector3();
76
77 return function ( a ) {
78
79 for ( var i = 0, il = a.length; i < il; i += 3 ) {
80
81 v1.x = a[ i ];
82 v1.y = a[ i + 1 ];
83 v1.z = a[ i + 2 ];
84
85 v1.applyMatrix3(this);
86
87 a[ i ] = v1.x;
88 a[ i + 1 ] = v1.y;
89 a[ i + 2 ] = v1.z;
90
91 }
92
93 return a;
94
95 };
96
97 }(),
98
99 multiplyScalar: function ( s ) {
100
101 var te = this.elements;
102
103 te[0] *= s; te[3] *= s; te[6] *= s;
104 te[1] *= s; te[4] *= s; te[7] *= s;
105 te[2] *= s; te[5] *= s; te[8] *= s;
106
107 return this;
108
109 },
110
111 determinant: function () {
112
113 var te = this.elements;
114
115 var a = te[0], b = te[1], c = te[2],
116 d = te[3], e = te[4], f = te[5],
117 g = te[6], h = te[7], i = te[8];
118
119 return a*e*i - a*f*h - b*d*i + b*f*g + c*d*h - c*e*g;
120
121 },
122
123 getInverse: function ( matrix, throwOnInvertible ) {
124
125 // input: THREE.Matrix4
126 // ( based on http://code.google.com/p/webgl-mjs/ )
127
128 var me = matrix.elements;
129 var te = this.elements;
130
131 te[ 0 ] = me[10] * me[5] - me[6] * me[9];
132 te[ 1 ] = - me[10] * me[1] + me[2] * me[9];
133 te[ 2 ] = me[6] * me[1] - me[2] * me[5];
134 te[ 3 ] = - me[10] * me[4] + me[6] * me[8];
135 te[ 4 ] = me[10] * me[0] - me[2] * me[8];
136 te[ 5 ] = - me[6] * me[0] + me[2] * me[4];
137 te[ 6 ] = me[9] * me[4] - me[5] * me[8];
138 te[ 7 ] = - me[9] * me[0] + me[1] * me[8];
139 te[ 8 ] = me[5] * me[0] - me[1] * me[4];
140
141 var det = me[ 0 ] * te[ 0 ] + me[ 1 ] * te[ 3 ] + me[ 2 ] * te[ 6 ];
142
143 // no inverse
144
145 if ( det === 0 ) {
146
147 var msg = "Matrix3.getInverse(): can't invert matrix, determinant is 0";
148
149 if ( throwOnInvertible || false ) {
150
151 throw new Error( msg );
152
153 } else {
154
155 console.warn( msg );
156
157 }
158
159 this.identity();
160
161 return this;
162
163 }
164
165 this.multiplyScalar( 1.0 / det );
166
167 return this;
168
169 },
170
171 transpose: function () {
172
173 var tmp, m = this.elements;
174
175 tmp = m[1]; m[1] = m[3]; m[3] = tmp;
176 tmp = m[2]; m[2] = m[6]; m[6] = tmp;
177 tmp = m[5]; m[5] = m[7]; m[7] = tmp;
178
179 return this;
180
181 },
182
183 getNormalMatrix: function ( m ) {
184
185 // input: THREE.Matrix4
186
187 this.getInverse( m ).transpose();
188
189 return this;
190
191 },
192
193 transposeIntoArray: function ( r ) {
194
195 var m = this.elements;
196
197 r[ 0 ] = m[ 0 ];
198 r[ 1 ] = m[ 3 ];
199 r[ 2 ] = m[ 6 ];
200 r[ 3 ] = m[ 1 ];
201 r[ 4 ] = m[ 4 ];
202 r[ 5 ] = m[ 7 ];
203 r[ 6 ] = m[ 2 ];
204 r[ 7 ] = m[ 5 ];
205 r[ 8 ] = m[ 8 ];
206
207 return this;
208
209 },
210
211 fromArray: function ( array ) {
212
213 this.elements.set( array );
214
215 return this;
216
217 },
218
219 toArray: function () {
220
221 var te = this.elements;
222
223 return [
224 te[ 0 ], te[ 1 ], te[ 2 ],
225 te[ 3 ], te[ 4 ], te[ 5 ],
226 te[ 6 ], te[ 7 ], te[ 8 ]
227 ];
228
229 },
230
231 clone: function () {
232
233 var te = this.elements;
234
235 return new THREE.Matrix3(
236
237 te[0], te[3], te[6],
238 te[1], te[4], te[7],
239 te[2], te[5], te[8]
240
241 );
242
243 }
244
245};
Note: See TracBrowser for help on using the repository browser.