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