29 float operator[](
int i );
36 r[0] =
r[1] =
r[2] =
r[3] =
r[4] =
r[5] =
r[6] =
r[7] =
r[8] = 0;
42 for (
int i = 0; i < 9; i++)
58 inline Matrix(
float r0,
float r1,
float r2,
float r3,
float r4,
float r5,
float r6,
float r7,
float r8,
QVector pos )
110 matrix.
r[0] *= scale.i;
111 matrix.
r[1] *= scale.i;
112 matrix.
r[2] *= scale.i;
113 matrix.
r[3] *= scale.j;
114 matrix.
r[4] *= scale.j;
115 matrix.
r[5] *= scale.j;
116 matrix.
r[6] *= scale.k;
117 matrix.
r[7] *= scale.k;
118 matrix.
r[8] *= scale.k;
156 matrix.
p.Set( 0, 0, 0 );
171 matrix.
p.Set( 0, 0, 0 );
178 float c = cosf( angle );
179 float s = sinf( angle );
180 #define M( a, b ) (tmp.r[b*3+a])
181 M( 0, 0 ) = axis.i*axis.i*(1-c)+c;
182 M( 0, 1 ) = axis.i*axis.j*(1-c)-axis.k*s;
183 M( 0, 2 ) = axis.i*axis.k*(1-c)+axis.j*s;
185 M( 1, 0 ) = axis.j*axis.i*(1-c)+axis.k*s;
186 M( 1, 1 ) = axis.j*axis.j*(1-c)+c;
187 M( 1, 2 ) = axis.j*axis.k*(1-c)-axis.i*s;
189 M( 2, 0 ) = axis.i*axis.k*(1-c)-axis.j*s;
190 M( 2, 1 ) = axis.j*axis.k*(1-c)+axis.i*s;
191 M( 2, 2 ) = axis.k*axis.k*(1-c)+c;
194 tmp.
p.Set( 0, 0, 0 );
216 dest.
r[0] = m1.
r[0]*m2.
r[0]+m1.
r[3]*m2.
r[1]+m1.
r[6]*m2.
r[2];
217 dest.
r[1] = m1.
r[1]*m2.
r[0]+m1.
r[4]*m2.
r[1]+m1.
r[7]*m2.
r[2];
218 dest.
r[2] = m1.
r[2]*m2.
r[0]+m1.
r[5]*m2.
r[1]+m1.
r[8]*m2.
r[2];
220 dest.
r[3] = m1.
r[0]*m2.
r[3]+m1.
r[3]*m2.
r[4]+m1.
r[6]*m2.
r[5];
221 dest.
r[4] = m1.
r[1]*m2.
r[3]+m1.
r[4]*m2.
r[4]+m1.
r[7]*m2.
r[5];
222 dest.
r[5] = m1.
r[2]*m2.
r[3]+m1.
r[5]*m2.
r[4]+m1.
r[8]*m2.
r[5];
224 dest.
r[6] = m1.
r[0]*m2.
r[6]+m1.
r[3]*m2.
r[7]+m1.
r[6]*m2.
r[8];
225 dest.
r[7] = m1.
r[1]*m2.
r[6]+m1.
r[4]*m2.
r[7]+m1.
r[7]*m2.
r[8];
226 dest.
r[8] = m1.
r[2]*m2.
r[6]+m1.
r[5]*m2.
r[7]+m1.
r[8]*m2.
r[8];
228 dest.
p.i = m1.
r[0]*m2.
p.i+m1.
r[3]*m2.
p.j+m1.
r[6]*m2.
p.k+m1.
p.i;
229 dest.
p.j = m1.
r[1]*m2.
p.i+m1.
r[4]*m2.
p.j+m1.
r[7]*m2.
p.k+m1.
p.j;
230 dest.
p.k = m1.
r[2]*m2.
p.i+m1.
r[5]*m2.
p.j+m1.
r[8]*m2.
p.k+m1.
p.k;
252 return QVector( t.
p.i+v.i*t.
r[0]+v.j*t.
r[3]+v.k*t.
r[6],
253 t.
p.j+v.i*t.
r[1]+v.j*t.
r[4]+v.k*t.
r[7],
254 t.
p.k+v.i*t.
r[2]+v.j*t.
r[5]+v.k*t.
r[8] );
258 return Vector( t.
p.i+v.i*t.
r[0]+v.j*t.
r[3]+v.k*t.
r[6],
259 t.
p.j+v.i*t.
r[1]+v.j*t.
r[4]+v.k*t.
r[7],
260 t.
p.k+v.i*t.
r[2]+v.j*t.
r[5]+v.k*t.
r[8] );
269 return Vector( ret.i, ret.j, ret.k );
275 #define M( A, B ) (t.r[B*3+A])
276 return Vector( v.i*
M( 0, 0 )+v.j*
M( 1, 0 )+v.k*
M( 2, 0 ),
277 v.i*
M( 0, 1 )+v.j*
M( 1, 1 )+v.k*
M( 2, 1 ),
278 v.i*
M( 0, 2 )+v.j*
M( 1, 2 )+v.k*
M( 2, 2 ) );
284 #define M( A, B ) (t.r[B*3+A])
285 return QVector( v.i*
M( 0, 0 )+v.j*
M( 1, 0 )+v.k*
M( 2, 0 ),
286 v.i*
M( 0, 1 )+v.j*
M( 1, 1 )+v.k*
M( 2, 1 ),
287 v.i*
M( 0, 2 )+v.j*
M( 1, 2 )+v.k*
M( 2, 2 ) );
303 return Vector( v.i*t.
r[0]+v.j*t.
r[3]+v.k*t.
r[6],
304 v.i*t.
r[1]+v.j*t.
r[4]+v.k*t.
r[7],
305 v.i*t.
r[2]+v.j*t.
r[5]+v.k*t.
r[8] );
309 return QVector( v.i*t.
r[0]+v.j*t.
r[3]+v.k*t.
r[6],
310 v.i*t.
r[1]+v.j*t.
r[4]+v.k*t.
r[7],
311 v.i*t.
r[2]+v.j*t.
r[5]+v.k*t.
r[8] );
314 int invert(
float b[],
float a[] );
318 p.Set( m.
r[0], m.
r[1], m.
r[2] );
319 q.Set( m.
r[3], m.
r[4], m.
r[5] );
320 r.Set( m.
r[6], m.
r[7], m.
r[8] );
327 #define a (trans.r[0])
328 #define b (trans.r[3])
329 #define c (trans.r[6])
330 #define d (trans.r[1])
331 #define e (trans.r[4])
332 #define f (trans.r[7])
333 #define g (trans.r[2])
334 #define h (trans.r[5])
335 #define i (trans.r[8])
353 #define a (trans.r[0])
354 #define b (trans.r[3])
355 #define c (trans.r[6])
356 #define d (trans.r[1])
357 #define e (trans.r[4])
358 #define f (trans.r[7])
359 #define g (trans.r[2])
360 #define h (trans.r[5])
361 #define i (trans.r[8])
363 o.
r[0] = factor*(
e*
i-
f*
h);
364 o.
r[3] = factor*(
c*
h-
b*
i);
365 o.
r[6] = factor*(
b*
f-
c*
e);
366 o.
r[1] = factor*(
f*
g-
d*
i);
367 o.
r[4] = factor*(
a*
i-
c*
g);
368 o.
r[7] = factor*(
c*
d-
a*
f);
369 o.
r[2] = factor*(
d*
h-
e*
g);
370 o.
r[5] = factor*(
b*
g-
a*
h);
371 o.
r[8] = factor*(
a*
e-
b*
d);
386 double c =
cos( angle );
387 double s =
sin( angle );
389 #define M( a, b ) (tmp.r[b*3+a])
390 M( 0, 0 ) = axis.i*axis.i*(1-c)+c;
391 M( 0, 1 ) = axis.i*axis.j*(1-c)-axis.k*s;
392 M( 0, 2 ) = axis.i*axis.k*(1-c)+axis.j*s;
394 M( 1, 0 ) = axis.j*axis.i*(1-c)+axis.k*s;
395 M( 1, 1 ) = axis.j*axis.j*(1-c)+c;
396 M( 1, 2 ) = axis.j*axis.k*(1-c)-axis.i*s;
398 M( 2, 0 ) = axis.i*axis.k*(1-c)-axis.j*s;
399 M( 2, 1 ) = axis.j*axis.k*(1-c)+axis.i*s;
400 M( 2, 2 ) = axis.k*axis.k*(1-c)+c;
403 tmp.
p.Set( 0, 0, 0 );