00001 
00039 #ifndef _VEC3_H_
00040 #define _VEC3_H_
00041 
00042 #include <mc/mc_base.h>
00043 
00044 
00045 
00046 
00047 
00048 
00049 
00050 
00051 
00052 
00053 
00054 
00055 
00061 typedef double Vec3[3];
00062 
00068 typedef double Mat3[3][3];
00069 
00070 
00071 
00072 
00073 
00074 
00075 
00076 #if !defined(VINLINE_BAM)
00077 #else 
00078 #endif 
00079 
00088 double Vec3_nrm1(Vec3 u);
00089 
00098 double Vec3_nrm2(Vec3 u);
00099 
00108 double Vec3_nrm8(Vec3 u);
00109 
00119 double Vec3_dif1(Vec3 u, Vec3 v);
00120 
00130 double Vec3_dif2(Vec3 u, Vec3 v);
00131 
00141 double Vec3_dif8(Vec3 u, Vec3 v);
00142 
00152 double Vec3_dot(Vec3 u, Vec3 v);
00153 
00163 void Vec3_init(Vec3 u, double val);
00164 
00174 void Vec3_scal(Vec3 u, double val);
00175 
00185 void Vec3_copy(Vec3 u, Vec3 v);
00186 
00197 void Vec3_axpy(Vec3 u, Vec3 v, double val);
00198 
00209 void Vec3_xcry(Vec3 u, Vec3 v, double *w);
00210 
00220 void Vec3_nrmlize(Vec3 u, double scale);
00221 
00231 void Vec3_nrmlizeNE(Vec3 u, double scale);
00232 
00242 void Vec3_print(Vec3 u, const char *name);
00243 
00254 void Vec3_mult(Vec3 u, Mat3 A, Vec3 v);
00255 
00266 void Vec3_getCol(Vec3 u, Mat3 A, int col);
00267 
00278 void Vec3_getRow(Vec3 u, Mat3 A, int row);
00279 
00288 double Mat3_nrm1(Mat3 A);
00289 
00298 double Mat3_nrm2(Mat3 A);
00299 
00308 double Mat3_nrm8(Mat3 A);
00309 
00319 double Mat3_dif1(Mat3 A, Mat3 B);
00320 
00330 double Mat3_dif2(Mat3 A, Mat3 B);
00331 
00341 double Mat3_dif8(Mat3 A, Mat3 B);
00342 
00351 double Mat3_nrm8Low(Mat3 A);
00352 
00361 void Mat3_eye(Mat3 A);
00362 
00372 void Mat3_init(Mat3 A, double val);
00373 
00383 void Mat3_scal(Mat3 A, double val);
00384 
00394 void Mat3_copy(Mat3 A, Mat3 B);
00395 
00406 void Mat3_axpy(Mat3 A, Mat3 B, double val);
00407 
00418 void Mat3_mult(Mat3 C, Mat3 A, Mat3 B);
00419 
00430 void Mat3_putCol(Mat3 A, Vec3 u, int col);
00431 
00442 void Mat3_putRow(Mat3 A, Vec3 u, int row);
00443 
00453 void Mat3_print(Mat3 A, const char *name);
00454 
00465 double Mat3_qri(Mat3 V, Mat3 D, Mat3 A);
00466 
00477 void Mat3_gramSch(Mat3 Q, Mat3 R, Mat3 A);
00478 
00489 void Mat3_qr(Mat3 Q, Mat3 R, Mat3 A);
00490 
00499 double Mat3_det(Mat3 A);
00500 
00510 void Mat3_inverse(Mat3 A, Mat3 Ainv);
00511 
00512 #endif 
00513 
00514