00001 #ifndef __VECMATH_MATRIX3SVD_HPP
00002 #define __VECMATH_MATRIX3SVD_HPP
00003
00004 #ifndef __LANG_MATH_HPP
00005 #include <vecmath/Math.h>
00006 #endif
00007
00008 class Matrix3SVD {
00009 public:
00010 static const double EPS1;
00011 static const double EPS2;
00012 static const double EPS3;
00013
00014 static bool almostEqual(double d, double d1);
00015 static int compute_2X2(double d, double d1, double d2, double ad[], double ad1[],
00016 double ad2[], double ad3[], double ad4[], int i);
00017 static int compute_qr(double ad[], double ad1[], double ad2[], double ad3[], bool flag);
00018 static double compute_rot(double d, double d1, double ad[], double ad1[], int i, int j);
00019 static double compute_shift(double d, double d1, double d2);
00020 static void compute_svd(double mat[9], double scale[9], double rot[9], bool flag);
00021 static double d_sign(double d, double d1);
00022 static void mat_mul(double ad[], double ad1[], double ad2[]);
00023 static double max(double d, double d1);
00024 static double max3(double ad[3]);
00025 static double min(double d, double d1);
00026 static void print_det(double ad[9]);
00027 static void print_mat(double ad[9]);
00028 static void svdReorder(double ad[], double ad1[], double ad2[], double ad3[], double ad4[], double scale[], bool flag);
00029 static void copy(double ad[], double ad1[]);
00030 static void set(double c, double ad[]);
00031 static void transpose_mat(double ad[], double ad1[]);
00032 static void test();
00033 };
00034
00035 #endif