21 #include <gtest/gtest.h>    32 #define CHECK_AND_RET_ERROR(_COND_,_MSG_)    EXPECT_FALSE(_COND_) << _MSG_;    37         const double   dat_A[] = {-0.710681653571291,0.734469323344333,-0.656414638791893,0.818771495864303,1.044946492154568,1.163592359608108,-1.069421407670914,0.307916381104872,0.185595851677470,0.116899590868673,0.507691343481809,-3.217842384231890,-0.214383515646621,-0.161495561253269,1.303923696836841,0.261535721431038};
    40         const double   dat_AInv[] = {-0.741952742824035,0.493481687552705,-0.134764164880760,0.083693424291000,0.638324207063440,0.519344439204238,0.264483337145361,0.644307267615193,-0.037800456163779,0.131794126194075,0.070338431705792,0.828591793299072,-0.025568212209135,0.068123300450057,-0.297834184749986,0.158964059763645};
    47         const double   dat_A[] = {363.769989013671875,0.000000000000000,316.429992675781250,0.000000000000000,87.266998291015625,0.000000000000000,101.540000915527344,0.000000000000000,478.709991455078125,0.000000000000000,504.540008544921875,0.000000000000000,1.000000000000000,0.000000000000000,1.000000000000000,0.000000000000000,1.000000000000000,0.000000000000000,0.000000000000000,363.769989013671875,0.000000000000000,316.429992675781250,0.000000000000000,87.266998291015625,0.000000000000000,101.540000915527344,0.000000000000000,478.709991455078125,0.000000000000000,504.540008544921875,0.000000000000000,1.000000000000000,0.000000000000000,1.000000000000000,0.000000000000000,1.000000000000000};
    51         const double   dat_AInv[] = {-0.000303131460181,-0.002689371550382,1.383348917627708,0.000000000000000,0.000000000000000,0.000000000000000,0.000000000000000,0.000000000000000,0.000000000000000,-0.000303131460181,-0.002689371550382,1.383348917627708,0.004729457992255,0.003244936115630,-2.049925698035195,0.000000000000000,0.000000000000000,0.000000000000000,0.000000000000000,0.000000000000000,0.000000000000000,0.004729457992255,0.003244936115630,-2.049925698035195,-0.004426326532074,-0.000555564565248,1.666576780407488,0.000000000000000,0.000000000000000,0.000000000000000,0.000000000000000,0.000000000000000,0.000000000000000,-0.004426326532074,-0.000555564565248,1.666576780407488};
    58         const double   dat_A[] = {363.769989013671875,0.000000000000000,316.429992675781250,0.000000000000000,87.266998291015625,0.000000000000000,101.540000915527344,0.000000000000000,478.709991455078125,0.000000000000000,504.540008544921875,0.000000000000000,1.000000000000000,0.000000000000000,1.000000000000000,0.000000000000000,1.000000000000000,0.000000000000000,0.000000000000000,363.769989013671875,0.000000000000000,316.429992675781250,0.000000000000000,87.266998291015625,0.000000000000000,101.540000915527344,0.000000000000000,478.709991455078125,0.000000000000000,504.540008544921875,0.000000000000000,1.000000000000000,0.000000000000000,1.000000000000000,0.000000000000000,1.000000000000000};
    61         const double   dat_AInv[] = {-0.000303131460181,-0.002689371550382,1.383348917627708,0.000000000000000,0.000000000000000,0.000000000000000,0.000000000000000,0.000000000000000,0.000000000000000,-0.000303131460181,-0.002689371550382,1.383348917627708,0.004729457992255,0.003244936115630,-2.049925698035195,0.000000000000000,0.000000000000000,0.000000000000000,0.000000000000000,0.000000000000000,0.000000000000000,0.004729457992255,0.003244936115630,-2.049925698035195,-0.004426326532074,-0.000555564565248,1.666576780407488,0.000000000000000,0.000000000000000,0.000000000000000,0.000000000000000,0.000000000000000,0.000000000000000,-0.004426326532074,-0.000555564565248,1.666576780407488};
    68         const double dat_A[] = {
    71         const double dat_At[] = {
    80         EXPECT_EQ(A.t().t(), A);
    86                 const double dat_A[] = {
    90                 const std::vector<double>  
v = make_vector<3>(1.0,2.0,3.0);
    94                 R.multiply_A_skew3(A,
v);
    95                 EXPECT_EQ(
R, (A*S).eval() );
    98                 const double dat_A[] = {
   101                 const double dat_v[] = { 1,2,3 };
   107                 R.multiply_A_skew3(A,
v);
   108                 EXPECT_TRUE(
R== A*S );
   115                 const double dat_A[] = {
   120                 const std::vector<double>  
v = make_vector<3>(1.0,2.0,3.0);
   124                 R.multiply_skew3_A(
v,A);
   125                 EXPECT_TRUE(
R == S*A );
   128                 const double dat_A[] = {
   132                 const double dat_v[] = { 1,2,3 };
   138                 R.multiply_skew3_A(
v,A);
   139                 EXPECT_TRUE(
R == S*A );
   146         const char* mat1 = 
"[1 2 3;-3 -6 -5]";
   147         const double vals1[] = {1,2,3,-3,-6,-5};
   149         const char* mat2 = 
" [    -8.2   9.232 ; -2e+2          +6 ; 1.000  7 ] ";    
   150         const double vals2[] = {-8.2, 9.232, -2e+2, +6, 1.000 ,7};
   152         const char* mat3 = 
"[9]";
   153         const char* mat4 = 
"[1 2 3 4 5 6 7 9 10  ; 1 2 3 4 5 6 7 8 9 10 11]";   
   154         const char* mat5 = 
"[  ]";  
   155         const char* mat6 = 
"[ -405.200 42.232 ; 1219.600    -98.696 ]";  
   157         const char* mat13 = 
"[9 8 7]";
   158         const char* mat31 = 
"[9; 8; 7]";
   162         if (! M1.fromMatlabStringFormat(mat1) ||
   164                 GTEST_FAIL() << mat1;
   168                 if (! M1b.fromMatlabStringFormat(mat1) ||
   170                         GTEST_FAIL() << mat1;
   173         if (! M2.fromMatlabStringFormat(mat2) ||
   174                 M2.cols()!=2 || M2.rows()!=3 ||
   176                 GTEST_FAIL() << mat2;
   180                 if (! M2b.fromMatlabStringFormat(mat2) ||
   182                         GTEST_FAIL() << mat2;
   185         if (! M3.fromMatlabStringFormat(mat3) )
   186                 GTEST_FAIL() << mat3;
   190                 if (! m.fromMatlabStringFormat(mat3) || m.size()!=1 ) GTEST_FAIL() << 
"CVectorDouble:" << mat3;
   194                 if (! m.fromMatlabStringFormat(mat3) ) GTEST_FAIL() << 
"CArrayDouble<1>:" << mat3;
   199                 if (! m.fromMatlabStringFormat(mat31) || m.size()!=3 ) GTEST_FAIL() << 
"CVectorDouble:" << mat31;
   203                 if (! m.fromMatlabStringFormat(mat31) ) GTEST_FAIL() << 
"CArrayDouble<3>:" << mat31;
   207                 Eigen::Matrix<double,1,3> m;
   208                 if (! m.fromMatlabStringFormat(mat13) ) GTEST_FAIL() << 
"Matrix<double,1,3>:" << mat13;
   211                 Eigen::Matrix<double,1,Eigen::Dynamic> m;
   212                 if (! m.fromMatlabStringFormat(mat13) || m.size()!=3 ) GTEST_FAIL() << 
"Matrix<double,1,Dynamic>:" << mat13;
   216         if ( M4.fromMatlabStringFormat(mat4, NULL ) )
   217                 GTEST_FAIL() << mat4;
   219         if (! M5.fromMatlabStringFormat(mat5) || 
size(M5,1)!=0 || 
size(M5,2)!=0 )
   220                 GTEST_FAIL() << mat5;
   222         if (! M6.fromMatlabStringFormat(mat6) )
   223                 GTEST_FAIL() << mat6;
   228         EXPECT_NEAR(0,(M6 - M1*M2).array().
square().
sum(), 1e-3);
 A namespace of pseudo-random numbers genrators of diferent distributions. 
 
Classes for serialization, sockets, ini-file manipulation, streams, list of properties-values, timewatch, extensions to STL. 
 
void skew_symmetric3(const VECTOR &v, MATRIX &M)
Computes the 3x3 skew symmetric matrix from a 3-vector or 3-array: . 
 
TEST(Matrices, inv_4x4_fix)
 
void multiply_skew3_A(const SKEW_3VECTOR &v, const MAT_A &A)
 
Column vector, like Eigen::MatrixX*, but automatically initialized to zeros since construction...
 
This file implements miscelaneous matrix and matrix/vector operations, and internal functions in mrpt...
 
T square(const T x)
Inline function for the square of a number. 
 
void multiply_A_skew3(const MAT_A &A, const SKEW_3VECTOR &v)
 
bool BASE_IMPEXP isNaN(float f) MRPT_NO_THROWS
Returns true if the number is NaN. 
 
A numeric matrix of compile-time fixed size. 
 
This base provides a set of functions for maths stuff. 
 
CMatrixTemplateNumeric< double > CMatrixDouble
Declares a matrix of double numbers (non serializable). 
 
CONTAINER::Scalar sum(const CONTAINER &v)
Computes the sum of all the elements. 
 
bool BASE_IMPEXP isFinite(float f) MRPT_NO_THROWS
Returns true if the number is non infinity. 
 
GLsizei GLboolean transpose
 
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries. 
 
bool fromMatlabStringFormat(const std::string &s, std::ostream *dump_errors_here=NULL)
Read a matrix from a string in Matlab-like format, for example "[1 0 2; 0 4 -1]" The string must star...
 
#define CHECK_AND_RET_ERROR(_COND_, _MSG_)