16   return (
int)(max*(rand()/(RAND_MAX+1.0)));
    21   return min + (rand() / (double)RAND_MAX) * (max - 
min);
    38     do { r = drand48(); } 
while (r == 0.0);
    40     do { r = drand48(); } 
while (r == 0.0);
    41     x2 = 2.0 * drand48() - 1.0;
    43   } 
while(w > 1.0 || w==0.0);
    45   return(sigma * x2 * sqrt(-2.0*log(w)/w));
    71         return exp(-.5*delta*delta/sigmaSquare)/sqrt(2*M_PI*sigmaSquare);
    78         return -.5*delta*delta/sigmaSquare-.5*log(2*M_PI*sigmaSquare);
    99         static gsl_eigen_symmv_workspace * m_eigenspace=NULL;
   100         static gsl_matrix * m_cmat=NULL;
   101         static gsl_matrix * m_evec=NULL;
   102         static gsl_vector * m_eval=NULL;
   103         static gsl_vector * m_noise=NULL;
   104         static gsl_vector * m_pnoise=NULL;
   106         if (m_eigenspace==NULL){
   107                 m_eigenspace=gsl_eigen_symmv_alloc(3);
   108                 m_cmat=gsl_matrix_alloc(3,3);
   109                 m_evec=gsl_matrix_alloc(3,3);
   110                 m_eval=gsl_vector_alloc(3);
   111                 m_noise=gsl_vector_alloc(3);
   112                 m_pnoise=gsl_vector_alloc(3);
   115         gsl_matrix_set(m_cmat,0,0,cov.
xx); gsl_matrix_set(m_cmat,0,1,cov.
xy); gsl_matrix_set(m_cmat,0,2,cov.
xt);
   116         gsl_matrix_set(m_cmat,1,0,cov.
xy); gsl_matrix_set(m_cmat,1,1,cov.
yy); gsl_matrix_set(m_cmat,1,2,cov.
yt);
   117         gsl_matrix_set(m_cmat,2,0,cov.
xt); gsl_matrix_set(m_cmat,2,1,cov.
yt); gsl_matrix_set(m_cmat,2,2,cov.
tt);
   118         gsl_eigen_symmv (m_cmat, m_eval,  m_evec, m_eigenspace);
   119         for (
int i=0; i<3; i++){
   120                 eval[i]=gsl_vector_get(m_eval,i);
   121                 for (
int j=0; j<3; j++)
   122                         evec[i][j]=gsl_matrix_get(m_evec,i,j);
   127         static gsl_matrix * m_rmat=NULL;
   128         static gsl_matrix * m_vmat=NULL;
   129         static gsl_matrix * m_result=NULL;
   131                 m_rmat=gsl_matrix_alloc(3,3);
   132                 m_vmat=gsl_matrix_alloc(3,3);
   133                 m_result=gsl_matrix_alloc(3,3);
   138         gsl_matrix_set(m_rmat,0,0, c ); gsl_matrix_set(m_rmat,0,1, -s); gsl_matrix_set(m_rmat,0,2, 0.);
   139         gsl_matrix_set(m_rmat,1,0, s ); gsl_matrix_set(m_rmat,1,1,  c); gsl_matrix_set(m_rmat,1,2, 0.);
   140         gsl_matrix_set(m_rmat,2,0, 0.); gsl_matrix_set(m_rmat,2,1, 0.); gsl_matrix_set(m_rmat,2,2, 1.);
   142         for (
unsigned int i=0; i<3; i++)
   143                 for (
unsigned int j=0; j<3; j++)
   144                         gsl_matrix_set(m_vmat,i,j,evec[i][j]);
   145         gsl_blas_dgemm (CblasNoTrans, CblasNoTrans, 1., m_rmat, m_vmat, 0., m_result);
   147         for (
int i=0; i<3; i++){
   148                 for (
int j=0; j<3; j++)
   149                         ecov.
evec[i][j]=gsl_matrix_get(m_result,i,j);
   155         static gsl_matrix * m_evec=NULL;
   156         static gsl_vector * m_noise=NULL;
   157         static gsl_vector * m_pnoise=NULL;
   159                 m_evec=gsl_matrix_alloc(3,3);
   160                 m_noise=gsl_vector_alloc(3);
   161                 m_pnoise=gsl_vector_alloc(3);
   163         for (
int i=0; i<3; i++){
   164                 for (
int j=0; j<3; j++)
   165                         gsl_matrix_set(m_evec,i,j, evec[i][j]);
   167         for (
int i=0; i<3; i++){
   171                 gsl_vector_set(m_pnoise,i, v);
   173         gsl_blas_dgemv (CblasNoTrans, 1., m_evec, m_pnoise, 0, m_noise);
   174         OrientedPoint ret(gsl_vector_get(m_noise,0),gsl_vector_get(m_noise,1),gsl_vector_get(m_noise,2));
   185         v1 = covariance.evec[0][0]*q.
x+covariance.evec[1][0]*q.
y+covariance.evec[2][0]*q.
theta;
   186         v2 = covariance.evec[0][1]*q.
x+covariance.evec[1][1]*q.
y+covariance.evec[2][1]*q.
theta;
   187         v3 = covariance.evec[0][2]*q.
x+covariance.evec[1][2]*q.
y+covariance.evec[2][2]*q.
theta;
   196         std::vector<double>::const_iterator w=weights.begin();
   197         for (std::vector<OrientedPoint>::const_iterator p=poses.begin(); p!=poses.end(); p++){
   213         for (std::vector<OrientedPoint>::const_iterator p=poses.begin(); p!=poses.end(); p++){
   216                 cov.
xx+=*w*delta.
x*delta.
x;
   217                 cov.
yy+=*w*delta.
y*delta.
y;
   219                 cov.
xy+=*w*delta.
x*delta.
y;
   232         this->covariance=ecov;
   240         for (std::vector<OrientedPoint>::const_iterator p=poses.begin(); p!=poses.end(); p++){
   254         for (std::vector<OrientedPoint>::const_iterator p=poses.begin(); p!=poses.end(); p++){
   257                 cov.
xx+=delta.
x*delta.
x;
   258                 cov.
yy+=delta.
y*delta.
y;
   260                 cov.
xy+=delta.
x*delta.
y;
   272         this->covariance=ecov;
 const char *const  *argv double delta
double UTILS_EXPORT sampleUniformDouble(double min, double max)
point< T > min(const point< T > &p1, const point< T > &p2)
Covariance3 operator+(const Covariance3 &cov) const
OrientedPoint sample() const
double UTILS_EXPORT sampleGaussian(double sigma, unsigned long int S=0)
point< T > max(const point< T > &p1, const point< T > &p2)
double UTILS_EXPORT evalGaussian(double sigmaSquare, double delta)
void computeFromSamples(const std::vector< OrientedPoint > &poses)
double UTILS_EXPORT eval(const OrientedPoint &p) const
double UTILS_EXPORT evalLogGaussian(double sigmaSquare, double delta)
int UTILS_EXPORT sampleUniformInt(int max)
double pf_ran_gaussian(double sigma)
orientedpoint< double, double > OrientedPoint
EigenCovariance3 rotate(double angle) const