MRPT  1.9.9

Detailed Description

This base provides a set of functions for maths stuff.

mrpt_math_grp

Namespaces

 detail
 

Classes

class  CArrayNumeric
 CArrayNumeric is an array for numeric types supporting several mathematical operations (actually, just a wrapper on Eigen::Matrix<T,N,1>) More...
 
class  CAtan2LookUpTable
 A look-up-table (LUT) of atan values for any (x,y) value in a square/rectangular grid of predefined resolution. More...
 
class  CAtan2LookUpTableMultiRes
 Like CAtan2LookUpTable but with a multiresolution grid for increasingly better accuracy in points nearer to the origin. More...
 
class  CBinaryRelation
 This class models a binary relation through the elements of any given set. More...
 
class  CConstMatrixColumnAccessor
 A vector-like wrapper for a const Matrix for accessing the elements of a given column with a [] operator. More...
 
class  CConstMatrixColumnAccessorExtended
 A vector-like wrapper for a const Matrix for accessing the elements of a given column with a [] operator, with offset and custom spacing. More...
 
class  CConstMatrixRowAccessor
 A vector-like wrapper for a const Matrix for accessing the elements of a given row with a [] operator. More...
 
class  CConstMatrixRowAccessorExtended
 A vector-like wrapper for a const Matrix for accessing the elements of a given row with a [] operator, with offset and custom spacing. More...
 
struct  CExceptionNotDefPos
 Used in mrpt::math::CSparseMatrix. More...
 
class  CHistogram
 This class provides an easy way of computing histograms for unidimensional real valued variables. More...
 
class  CLevenbergMarquardtTempl
 An implementation of the Levenberg-Marquardt algorithm for least-square minimization. More...
 
class  CMatrix
 This class is a "CSerializable" wrapper for "CMatrixFloat". More...
 
class  CMatrixB
 This class is a "CSerializable" wrapper for "CMatrixBool". More...
 
class  CMatrixBool
 Declares a matrix of booleans (non serializable). More...
 
class  CMatrixColumnAccessor
 A vector-like wrapper for a Matrix for accessing the elements of a given column with a [] operator. More...
 
class  CMatrixColumnAccessorExtended
 A vector-like wrapper for a Matrix for accessing the elements of a given column with a [] operator, with offset and custom spacing. More...
 
class  CMatrixD
 This class is a "CSerializable" wrapper for "CMatrixTemplateNumeric<double>". More...
 
class  CMatrixFixedNumeric
 A numeric matrix of compile-time fixed size. More...
 
class  CMatrixRowAccessor
 A vector-like wrapper for a Matrix for accessing the elements of a given row with a [] operator. More...
 
class  CMatrixRowAccessorExtended
 A vector-like wrapper for a Matrix for accessing the elements of a given row with a [] operator, with offset and custom spacing. More...
 
class  CMatrixTemplate
 This template class provides the basic functionality for a general 2D any-size, resizable container of numerical or non-numerical elements. More...
 
class  CMatrixTemplateNumeric
 A matrix of dynamic size. More...
 
class  CMatrixTemplateObjects
 This template class extends the class "CMatrixTemplate" for storing "objects" at each matrix entry. More...
 
struct  CMatrixTemplateSize
 Auxiliary class used in CMatrixTemplate:size(), CMatrixTemplate::resize(), CMatrixFixedNumeric::size(), CMatrixFixedNumeric::resize(), to mimic the behavior of STL-containers. More...
 
class  CMonteCarlo
 Montecarlo simulation for experiments in 1D. More...
 
struct  ContainerType
 ContainerType<T>::element_t exposes the value of any STL or Eigen container. More...
 
struct  ContainerType< Eigen::EigenBase< Derived > >
 Specialization for Eigen containers. More...
 
class  CPolygon
 A wrapper of a TPolygon2D class, implementing CSerializable. More...
 
class  CProbabilityDensityFunction
 A generic template for probability density distributions (PDFs). More...
 
class  CQuaternion
 A quaternion, which can represent a 3D rotation as pair $ (r,\mathbf{u}) *$, with a real part "r" and a 3D vector $ \mathbf{u} = (x,y,z) $, or alternatively, q = r + ix + jy + kz. More...
 
class  CSparseMatrix
 A sparse matrix structure, wrapping T. More...
 
class  CSparseMatrixTemplate
 A sparse matrix container (with cells of any type), with iterators. More...
 
class  CSparseSymmetricalMatrix
 A sparse matrix container for square symmetrical content around the main diagonal. More...
 
class  CSplineInterpolator1D
 A (persistent) sequence of (x,y) coordinates, allowing queries of intermediate points through spline interpolation, where possible. More...
 
class  dynamic_vector
 Column vector, like Eigen::MatrixX*, but automatically initialized to zeros since construction. More...
 
class  FAddPoint
 
class  KDTreeCapable
 A generic adaptor class for providing Nearest Neighbor (NN) lookup via the nanoflann library. More...
 
struct  LowPassFilter_IIR1
 1-order low-pass IIR filter. More...
 
struct  MatrixBlockSparseCols
 A templated column-indexed efficient storage of block-sparse Jacobian or Hessian matrices, together with other arbitrary information. More...
 
class  ModelSearch
 Model search implementations: RANSAC and genetic algorithm. More...
 
class  RANSAC_Template
 A generic RANSAC implementation with models as matrices. More...
 
struct  RobustKernel
 
struct  RobustKernel< rkLeastSquares, T >
 No robust kernel, use standard least squares: rho(r) = r^2. More...
 
struct  RobustKernel< rkPseudoHuber, T >
 Pseudo-huber robust kernel: rho(r) = 2 * delta^2 * ( -1+sqrt( 1+ r^2/delta^2 ) ) More...
 
struct  TLine2D
 2D line without bounds, represented by its equation $Ax+By+C=0$. More...
 
struct  TLine3D
 3D line, represented by a base point and a director vector. More...
 
struct  TObject2D
 Standard type for storing any lightweight 2D type. More...
 
struct  TObject3D
 Standard object for storing any 3D lightweight object. More...
 
struct  TPlane
 3D Plane, represented by its equation $Ax+By+Cz+D=0$ More...
 
struct  TPoint2D
 Lightweight 2D point. More...
 
struct  TPoint3D
 Lightweight 3D point. More...
 
struct  TPoint3Df
 Lightweight 3D point (float version). More...
 
struct  TPointXYZfIu8
 XYZ point (float) + Intensity(u8) More...
 
struct  TPointXYZfRGBu8
 XYZ point (float) + RGB(u8) More...
 
struct  TPointXYZIu8
 XYZ point (double) + Intensity(u8) More...
 
struct  TPointXYZRGBu8
 XYZ point (double) + RGB(u8) More...
 
class  TPolygon2D
 2D polygon, inheriting from std::vector<TPoint2D>. More...
 
class  TPolygon3D
 3D polygon, inheriting from std::vector<TPoint3D> More...
 
class  TPolygonWithPlane
 Slightly heavyweight type to speed-up calculations with polygons in 3D. More...
 
struct  TPose2D
 Lightweight 2D pose. More...
 
struct  TPose3D
 Lightweight 3D pose (three spatial coordinates, plus three angular coordinates). More...
 
struct  TPose3DQuat
 Lightweight 3D pose (three spatial coordinates, plus a quaternion ). More...
 
struct  TPoseOrPoint
 Base type of all TPoseXX and TPointXX classes in mrpt::math. More...
 
struct  TSegment2D
 2D segment, consisting of two points. More...
 
struct  TSegment3D
 3D segment, consisting of two points. More...
 
struct  TTwist2D
 2D twist: 2D velocity vector (vx,vy) + planar angular velocity (omega) More...
 
struct  TTwist3D
 3D twist: 3D velocity vector (vx,vy,vz) + angular velocity (wx,wy,wz) More...
 

Typedefs

template<std::size_t N>
using CArrayFloat = CArrayNumeric< float, N >
 A partial specialization of CArrayNumeric for float numbers. More...
 
template<std::size_t N>
using CArrayDouble = CArrayNumeric< double, N >
 A partial specialization of CArrayNumeric for double numbers. More...
 
template<std::size_t N>
using CArrayInt = CArrayNumeric< int, N >
 A partial specialization of CArrayNumeric for int numbers. More...
 
template<std::size_t N>
using CArrayUInt = CArrayNumeric< unsigned int, N >
 A partial specialization of CArrayNumeric for unsigned int numbers. More...
 
using CLevenbergMarquardt = CLevenbergMarquardtTempl< mrpt::math::CVectorDouble >
 The default name for the LM class is an instantiation for "double". More...
 
using CMatrixFloat = CMatrixTemplateNumeric< float >
 Declares a matrix of float numbers (non serializable). More...
 
using CMatrixDouble = CMatrixTemplateNumeric< double >
 Declares a matrix of double numbers (non serializable). More...
 
using CMatrixUInt = CMatrixTemplateNumeric< unsigned int >
 Declares a matrix of unsigned ints (non serializable). More...
 
using CMatrixLongDouble = CMatrixTemplateNumeric< double >
 Declares a matrix of "long doubles" (non serializable), or of "doubles" if the compiler does not support "long double". More...
 
using CQuaternionDouble = CQuaternion< double >
 A quaternion of data type "double". More...
 
using CQuaternionFloat = CQuaternion< float >
 A quaternion of data type "float". More...
 
using CVectorFloat = dynamic_vector< float >
 Column vector, like Eigen::MatrixXf, but automatically initialized to zeros since construction. More...
 
using CVectorDouble = dynamic_vector< double >
 Column vector, like Eigen::MatrixXd, but automatically initialized to zeros since construction. More...
 
using TVector3D = TPoint3D
 Useful type alias for 3-vectors. More...
 
using TVector2D = TPoint2D
 Useful type alias for 2-vectors. More...
 
using TPlane3D = TPlane
 
using RANSAC = RANSAC_Template< double >
 The default instance of RANSAC, for double type. More...
 
using FFT_TYPE = float
 Copyright(C) 1997 Takuya OOURA (email: ooura.nosp@m.@mmm.nosp@m..t.u-.nosp@m.toky.nosp@m.o.ac..nosp@m.jp). More...
 
Typedefs for common sizes
using CMatrixDouble22 = CMatrixFixedNumeric< double, 2, 2 >
 
using CMatrixDouble23 = CMatrixFixedNumeric< double, 2, 3 >
 
using CMatrixDouble32 = CMatrixFixedNumeric< double, 3, 2 >
 
using CMatrixDouble33 = CMatrixFixedNumeric< double, 3, 3 >
 
using CMatrixDouble44 = CMatrixFixedNumeric< double, 4, 4 >
 
using CMatrixDouble66 = CMatrixFixedNumeric< double, 6, 6 >
 
using CMatrixDouble77 = CMatrixFixedNumeric< double, 7, 7 >
 
using CMatrixDouble13 = CMatrixFixedNumeric< double, 1, 3 >
 
using CMatrixDouble31 = CMatrixFixedNumeric< double, 3, 1 >
 
using CMatrixDouble12 = CMatrixFixedNumeric< double, 1, 2 >
 
using CMatrixDouble21 = CMatrixFixedNumeric< double, 2, 1 >
 
using CMatrixDouble61 = CMatrixFixedNumeric< double, 6, 1 >
 
using CMatrixDouble16 = CMatrixFixedNumeric< double, 1, 6 >
 
using CMatrixDouble71 = CMatrixFixedNumeric< double, 7, 1 >
 
using CMatrixDouble17 = CMatrixFixedNumeric< double, 1, 7 >
 
using CMatrixDouble51 = CMatrixFixedNumeric< double, 5, 1 >
 
using CMatrixDouble15 = CMatrixFixedNumeric< double, 1, 5 >
 
using CMatrixDouble41 = CMatrixFixedNumeric< double, 4, 1 >
 
using CMatrixDouble6_12 = CMatrixFixedNumeric< double, 6, 12 >
 
using CMatrixDouble12_6 = CMatrixFixedNumeric< double, 12, 6 >
 
using CMatrixDouble39 = CMatrixFixedNumeric< double, 3, 9 >
 
using CMatrixDouble93 = CMatrixFixedNumeric< double, 9, 3 >
 
using CMatrixFloat22 = CMatrixFixedNumeric< float, 2, 2 >
 
using CMatrixFloat23 = CMatrixFixedNumeric< float, 2, 3 >
 
using CMatrixFloat32 = CMatrixFixedNumeric< float, 3, 2 >
 
using CMatrixFloat33 = CMatrixFixedNumeric< float, 3, 3 >
 
using CMatrixFloat44 = CMatrixFixedNumeric< float, 4, 4 >
 
using CMatrixFloat66 = CMatrixFixedNumeric< float, 6, 6 >
 
using CMatrixFloat77 = CMatrixFixedNumeric< float, 7, 7 >
 
using CMatrixFloat13 = CMatrixFixedNumeric< float, 1, 3 >
 
using CMatrixFloat31 = CMatrixFixedNumeric< float, 3, 1 >
 
using CMatrixFloat12 = CMatrixFixedNumeric< float, 1, 2 >
 
using CMatrixFloat21 = CMatrixFixedNumeric< float, 2, 1 >
 
using CMatrixFloat61 = CMatrixFixedNumeric< float, 6, 1 >
 
using CMatrixFloat16 = CMatrixFixedNumeric< float, 1, 6 >
 
using CMatrixFloat71 = CMatrixFixedNumeric< float, 7, 1 >
 
using CMatrixFloat17 = CMatrixFixedNumeric< float, 1, 7 >
 
using CMatrixFloat51 = CMatrixFixedNumeric< float, 5, 1 >
 
using CMatrixFloat15 = CMatrixFixedNumeric< float, 1, 5 >
 

Enumerations

enum  TConstructorFlags_Quaternions { UNINITIALIZED_QUATERNION = 0 }
 
enum  TMatrixTextFileFormat { MATRIX_FORMAT_ENG = 0, MATRIX_FORMAT_FIXED = 1, MATRIX_FORMAT_INT = 2 }
 
enum  TConstructorFlags_Matrices { UNINITIALIZED_MATRIX = 0 }
 For usage in one of the constructors of CMatrixFixedNumeric or CMatrixTemplate (and derived classes), if it's not required to fill it with zeros at the constructor to save time. More...
 
enum  TRobustKernelType { rkLeastSquares = 0, rkPseudoHuber }
 The different types of kernels for usage within a robustified least-squares estimator. More...
 

Functions

template<class MATRIXLIKE >
size_t size (const MATRIXLIKE &m, const int dim)
 
mrpt::serialization::CArchiveoperator>> (mrpt::serialization::CArchive &in, CMatrix::Ptr &pObj)
 
mrpt::serialization::CArchiveoperator>> (mrpt::serialization::CArchive &in, CMatrixD::Ptr &pObj)
 
double normalPDF (double x, double mu, double std)
 Evaluates the univariate normal (Gaussian) distribution at a given point "x". More...
 
template<class VECTORLIKE1 , class VECTORLIKE2 , class MATRIXLIKE >
MATRIXLIKE::Scalar normalPDFInf (const VECTORLIKE1 &x, const VECTORLIKE2 &mu, const MATRIXLIKE &cov_inv, const bool scaled_pdf=false)
 Evaluates the multivariate normal (Gaussian) distribution at a given point "x". More...
 
template<class VECTORLIKE1 , class VECTORLIKE2 , class MATRIXLIKE >
MATRIXLIKE::Scalar normalPDF (const VECTORLIKE1 &x, const VECTORLIKE2 &mu, const MATRIXLIKE &cov, const bool scaled_pdf=false)
 Evaluates the multivariate normal (Gaussian) distribution at a given point "x". More...
 
template<typename VECTORLIKE , typename MATRIXLIKE >
MATRIXLIKE::Scalar normalPDF (const VECTORLIKE &d, const MATRIXLIKE &cov)
 Evaluates the multivariate normal (Gaussian) distribution at a given point given its distance vector "d" from the Gaussian mean. More...
 
template<typename VECTORLIKE1 , typename MATRIXLIKE1 , typename VECTORLIKE2 , typename MATRIXLIKE2 >
double KLD_Gaussians (const VECTORLIKE1 &mu0, const MATRIXLIKE1 &cov0, const VECTORLIKE2 &mu1, const MATRIXLIKE2 &cov1)
 Kullback-Leibler divergence (KLD) between two independent multivariate Gaussians. More...
 
double normalQuantile (double p)
 Evaluates the Gaussian distribution quantile for the probability value p=[0,1]. More...
 
double normalCDF (double p)
 Evaluates the Gaussian cumulative density function. More...
 
double chi2inv (double P, unsigned int dim=1)
 The "quantile" of the Chi-Square distribution, for dimension "dim" and probability 0<P<1 (the inverse of chi2CDF) An aproximation from the Wilson-Hilferty transformation is used. More...
 
double noncentralChi2CDF (unsigned int degreesOfFreedom, double noncentrality, double arg)
 
double chi2CDF (unsigned int degreesOfFreedom, double arg)
 
double chi2PDF (unsigned int degreesOfFreedom, double arg, double accuracy=1e-7)
 
std::pair< double, double > noncentralChi2PDF_CDF (unsigned int degreesOfFreedom, double noncentrality, double arg, double eps=1e-7)
 Returns the 'exact' PDF (first) and CDF (second) of a Non-central chi-squared probability distribution, using an iterative method. More...
 
template<typename CONTAINER >
void confidenceIntervals (const CONTAINER &data, typename mrpt::math::ContainerType< CONTAINER >::element_t &out_mean, typename mrpt::math::ContainerType< CONTAINER >::element_t &out_lower_conf_interval, typename mrpt::math::ContainerType< CONTAINER >::element_t &out_upper_conf_interval, const double confidenceInterval=0.1, const size_t histogramNumBins=1000)
 Return the mean and the 10%-90% confidence points (or with any other confidence value) of a set of samples by building the cummulative CDF of all the elements of the container. More...
 
void fft_real (CVectorFloat &in_realData, CVectorFloat &out_FFT_Re, CVectorFloat &out_FFT_Im, CVectorFloat &out_FFT_Mag)
 Computes the FFT of a 2^N-size vector of real numbers, and returns the Re+Im+Magnitude parts. More...
 
void dft2_real (const CMatrixFloat &in_data, CMatrixFloat &out_real, CMatrixFloat &out_imag)
 Compute the 2D Discrete Fourier Transform (DFT) of a real matrix, returning the real and imaginary parts separately. More...
 
void idft2_real (const CMatrixFloat &in_real, const CMatrixFloat &in_imag, CMatrixFloat &out_data)
 Compute the 2D inverse Discrete Fourier Transform (DFT) More...
 
void dft2_complex (const CMatrixFloat &in_real, const CMatrixFloat &in_imag, CMatrixFloat &out_real, CMatrixFloat &out_imag)
 Compute the 2D Discrete Fourier Transform (DFT) of a complex matrix, returning the real and imaginary parts separately. More...
 
void idft2_complex (const CMatrixFloat &in_real, const CMatrixFloat &in_imag, CMatrixFloat &out_real, CMatrixFloat &out_imag)
 Compute the 2D inverse Discrete Fourier Transform (DFT). More...
 
void cross_correlation_FFT (const CMatrixFloat &A, const CMatrixFloat &B, CMatrixFloat &out_corr)
 Correlation of two matrixes using 2D FFT. More...
 
double fresnel_sin_integral (double x) noexcept
 Evaluates the integral from 0 to x of sqrt(2/pi) sin(t^2) dt. More...
 
double fresnel_cos_integral (double x) noexcept
 Evaluates the integral from 0 to x of sqrt(2/pi) cos(t^2) dt. More...
 
long double lfresnel_sin_integral (long double x) noexcept
 long double version of fresnel_sin_integral More...
 
long double lfresnel_cos_integral (long double x) noexcept
 long double version of fresnel_cos_integral More...
 
template<class MATRIXLIKE1 , class MATRIXLIKE2 >
void homogeneousMatrixInverse (const MATRIXLIKE1 &M, MATRIXLIKE2 &out_inverse_M)
 Efficiently compute the inverse of a 4x4 homogeneous matrix by only transposing the rotation 3x3 part and solving the translation with dot products. More...
 
template<class IN_ROTMATRIX , class IN_XYZ , class OUT_ROTMATRIX , class OUT_XYZ >
void homogeneousMatrixInverse (const IN_ROTMATRIX &in_R, const IN_XYZ &in_xyz, OUT_ROTMATRIX &out_R, OUT_XYZ &out_xyz)
 
template<class MATRIXLIKE >
void homogeneousMatrixInverse (MATRIXLIKE &M)
 
template<class T , class VECTOR >
interpolate (const T &x, const VECTOR &ys, const T &x0, const T &x1)
 Interpolate a data sequence "ys" ranging from "x0" to "x1" (equally spaced), to obtain the approximation of the sequence at the point "x". More...
 
double interpolate2points (const double x, const double x0, const double y0, const double x1, const double y1, bool wrap2pi=false)
 Linear interpolation/extrapolation: evaluates at "x" the line (x0,y0)-(x1,y1). More...
 
template<typename NUMTYPE , class VECTORLIKE >
NUMTYPE spline (const NUMTYPE t, const VECTORLIKE &x, const VECTORLIKE &y, bool wrap2pi=false)
 Interpolates the value of a function in a point "t" given 4 SORTED points where "t" is between the two middle points If wrap2pi is true, output "y" values are wrapped to ]-pi,pi] (It is assumed that input "y" values already are in the correct range). More...
 
template<typename NUMTYPE , class VECTORLIKE , int NUM_POINTS = Eigen::Dynamic>
NUMTYPE leastSquareLinearFit (const NUMTYPE t, const VECTORLIKE &x, const VECTORLIKE &y, bool wrap2pi=false)
 Interpolates or extrapolates using a least-square linear fit of the set of values "x" and "y", evaluated at a single point "t". More...
 
template<class VECTORLIKE1 , class VECTORLIKE2 , class VECTORLIKE3 , int NUM_POINTS = Eigen::Dynamic>
void leastSquareLinearFit (const VECTORLIKE1 &ts, VECTORLIKE2 &outs, const VECTORLIKE3 &x, const VECTORLIKE3 &y, bool wrap2pi=false)
 Interpolates or extrapolates using a least-square linear fit of the set of values "x" and "y", evaluated at a sequence of points "ts" and returned at "outs". More...
 
TPose3D operator- (const TPose3D &p)
 Unary $$ operator: computes inverse SE(3) element. More...
 
TPose3D operator- (const TPose3D &b, const TPose3D &a)
 Binary $$ operator: $b a$ computes the relative SE(3) pose of b "as seen from" a More...
 
std::ostream & operator<< (std::ostream &o, const TPoint2D &p)
 
std::ostream & operator<< (std::ostream &o, const TPoint3D &p)
 
std::ostream & operator<< (std::ostream &o, const TPose2D &p)
 
std::ostream & operator<< (std::ostream &o, const TPose3D &p)
 
std::ostream & operator<< (std::ostream &o, const TPose3DQuat &p)
 
constexpr TPoint3D operator- (const TPoint3D &p1)
 Unary minus operator for 3D points. More...
 
constexpr bool operator== (const TPoint2D &p1, const TPoint2D &p2)
 Exact comparison between 2D points. More...
 
constexpr bool operator!= (const TPoint2D &p1, const TPoint2D &p2)
 Exact comparison between 2D points. More...
 
constexpr bool operator== (const TPoint3D &p1, const TPoint3D &p2)
 Exact comparison between 3D points. More...
 
constexpr bool operator!= (const TPoint3D &p1, const TPoint3D &p2)
 Exact comparison between 3D points. More...
 
bool operator== (const TPose2D &p1, const TPose2D &p2)
 Exact comparison between 2D poses, taking possible cycles into account. More...
 
bool operator!= (const TPose2D &p1, const TPose2D &p2)
 Exact comparison between 2D poses, taking possible cycles into account. More...
 
bool operator== (const TPose3D &p1, const TPose3D &p2)
 Exact comparison between 3D poses, taking possible cycles into account. More...
 
bool operator!= (const TPose3D &p1, const TPose3D &p2)
 Exact comparison between 3D poses, taking possible cycles into account. More...
 
bool operator== (const TSegment2D &s1, const TSegment2D &s2)
 
bool operator!= (const TSegment2D &s1, const TSegment2D &s2)
 
bool operator== (const TSegment3D &s1, const TSegment3D &s2)
 
bool operator!= (const TSegment3D &s1, const TSegment3D &s2)
 
template<class PoseOrPoint , typename = std::enable_if_t<std::is_base_of_v< mrpt::math::TPoseOrPoint, PoseOrPoint>>>
mrpt::serialization::CArchiveoperator>> (mrpt::serialization::CArchive &in, PoseOrPoint &o)
 
template<class PoseOrPoint , typename = std::enable_if_t<std::is_base_of_v< mrpt::math::TPoseOrPoint, PoseOrPoint>>>
mrpt::serialization::CArchiveoperator<< (mrpt::serialization::CArchive &out, const PoseOrPoint &o)
 
mrpt::serialization::CArchiveoperator>> (mrpt::serialization::CArchive &in, mrpt::math::TSegment2D &s)
 
mrpt::serialization::CArchiveoperator<< (mrpt::serialization::CArchive &out, const mrpt::math::TSegment2D &s)
 
mrpt::serialization::CArchiveoperator>> (mrpt::serialization::CArchive &in, mrpt::math::TLine2D &l)
 
mrpt::serialization::CArchiveoperator<< (mrpt::serialization::CArchive &out, const mrpt::math::TLine2D &l)
 
mrpt::serialization::CArchiveoperator>> (mrpt::serialization::CArchive &in, mrpt::math::TObject2D &o)
 
mrpt::serialization::CArchiveoperator<< (mrpt::serialization::CArchive &out, const mrpt::math::TObject2D &o)
 
mrpt::serialization::CArchiveoperator>> (mrpt::serialization::CArchive &in, mrpt::math::TSegment3D &s)
 
mrpt::serialization::CArchiveoperator<< (mrpt::serialization::CArchive &out, const mrpt::math::TSegment3D &s)
 
mrpt::serialization::CArchiveoperator>> (mrpt::serialization::CArchive &in, mrpt::math::TLine3D &l)
 
mrpt::serialization::CArchiveoperator<< (mrpt::serialization::CArchive &out, const mrpt::math::TLine3D &l)
 
mrpt::serialization::CArchiveoperator>> (mrpt::serialization::CArchive &in, mrpt::math::TPlane &p)
 
mrpt::serialization::CArchiveoperator<< (mrpt::serialization::CArchive &out, const mrpt::math::TPlane &p)
 
mrpt::serialization::CArchiveoperator>> (mrpt::serialization::CArchive &in, mrpt::math::TObject3D &o)
 
mrpt::serialization::CArchiveoperator<< (mrpt::serialization::CArchive &out, const mrpt::math::TObject3D &o)
 
mrpt::serialization::CArchiveoperator>> (mrpt::serialization::CArchive &in, mrpt::math::TTwist2D &o)
 
mrpt::serialization::CArchiveoperator<< (mrpt::serialization::CArchive &out, const mrpt::math::TTwist2D &o)
 
mrpt::serialization::CArchiveoperator>> (mrpt::serialization::CArchive &in, mrpt::math::TTwist3D &o)
 
mrpt::serialization::CArchiveoperator<< (mrpt::serialization::CArchive &out, const mrpt::math::TTwist3D &o)
 
template<class CONTAINER1 , class CONTAINER2 >
void cumsum (const CONTAINER1 &in_data, CONTAINER2 &out_cumsum)
 
template<class CONTAINER >
CONTAINER::Scalar norm (const CONTAINER &v)
 
template<class CONTAINER >
CONTAINER::Scalar norm_inf (const CONTAINER &v)
 
template<class MAT_A , class SKEW_3VECTOR , class MAT_OUT >
void multiply_A_skew3 (const MAT_A &A, const SKEW_3VECTOR &v, MAT_OUT &out)
 Only for vectors/arrays "v" of length3, compute out = A * Skew(v), where Skew(v) is the skew symmetric matric generated from v (see mrpt::math::skew_symmetric3) More...
 
template<class SKEW_3VECTOR , class MAT_A , class MAT_OUT >
void multiply_skew3_A (const SKEW_3VECTOR &v, const MAT_A &A, MAT_OUT &out)
 Only for vectors/arrays "v" of length3, compute out = Skew(v) * A, where Skew(v) is the skew symmetric matric generated from v (see mrpt::math::skew_symmetric3) More...
 
template<class T >
wrapTo2Pi (T a)
 Modifies the given angle to translate it into the [0,2pi[ range. More...
 
template<typename MAT >
CMatrixRowAccessor< MAT > getRowAccessor (MAT &m, size_t rowIdx)
 
template<typename MAT >
CMatrixRowAccessorExtended< MAT > getRowAccessor (MAT &m, size_t rowIdx, size_t offset, size_t space=1)
 
template<typename MAT >
CConstMatrixRowAccessor< MAT > getRowAccessor (const MAT &m, size_t rowIdx)
 
template<typename MAT >
CConstMatrixRowAccessorExtended< MAT > getRowAccessor (const MAT &m, size_t rowIdx, size_t offset, size_t space=1)
 
template<typename MAT >
CMatrixColumnAccessor< MAT > getColumnAccessor (MAT &m, size_t colIdx)
 
template<typename MAT >
CMatrixColumnAccessorExtended< MAT > getColumnAccessor (MAT &m, size_t colIdx, size_t offset, size_t space=1)
 
template<typename MAT >
CConstMatrixColumnAccessor< MAT > getColumnAccessor (const MAT &m, size_t colIdx)
 
template<typename MAT >
CConstMatrixColumnAccessorExtended< MAT > getColumnAccessor (const MAT &m, size_t colIdx, size_t offset, size_t space=1)
 
template<class VECTORLIKE , class VECTORLIKE2 , class VECTORLIKE3 , class MATRIXLIKE , class USERPARAM >
void estimateJacobian (const VECTORLIKE &x, const std::function< void(const VECTORLIKE &x, const USERPARAM &y, VECTORLIKE3 &out)> &functor, const VECTORLIKE2 &increments, const USERPARAM &userParam, MATRIXLIKE &out_Jacobian)
 Estimate the Jacobian of a multi-dimensional function around a point "x", using finite differences of a given size in each input dimension. More...
 
template<class CONTAINER >
std::vector< double > histogram (const CONTAINER &v, double limit_min, double limit_max, size_t number_bins, bool do_normalization=false, std::vector< double > *out_bin_centers=nullptr)
 Computes the normalized or normal histogram of a sequence of numbers given the number of bins and the limits. More...
 
template<class EIGEN_CONTAINER >
void resizeLike (EIGEN_CONTAINER &trg, const EIGEN_CONTAINER &src)
 
template<typename T >
void resizeLike (std::vector< T > &trg, const std::vector< T > &src)
 
template<class CONTAINER1 , class CONTAINER2 , typename VALUE >
void cumsum_tmpl (const CONTAINER1 &in_data, CONTAINER2 &out_cumsum)
 Computes the cumulative sum of all the elements, saving the result in another container. More...
 
template<class CONTAINER >
CONTAINER cumsum (const CONTAINER &in_data)
 Computes the cumulative sum of all the elements. More...
 
template<class CONTAINER >
CONTAINER::Scalar maximum (const CONTAINER &v)
 
template<class CONTAINER >
CONTAINER::Scalar minimum (const CONTAINER &v)
 
template<typename T >
maximum (const std::vector< T > &v)
 
template<typename T >
minimum (const std::vector< T > &v)
 
template<class Derived >
const Eigen::MatrixBase< Derived >::AdjointReturnType operator~ (const Eigen::MatrixBase< Derived > &m)
 Transpose operator for matrices. More...
 
template<class Derived >
Eigen::MatrixBase< Derived >::PlainObject operator! (const Eigen::MatrixBase< Derived > &m)
 Unary inversion operator. More...
 
template<typename MAT_H , typename MAT_C , typename MAT_R >
void multiply_HCHt (const MAT_H &H, const MAT_C &C, MAT_R &R, bool accumResultInOutput)
 R = H * C * H^t (with C symmetric) More...
 
template<typename VECTOR_H , typename MAT_C >
MAT_C::Scalar multiply_HCHt_scalar (const VECTOR_H &H, const MAT_C &C)
 r (a scalar) = H * C * H^t (with a vector H and a symmetric matrix C) More...
 
template<typename MAT_H , typename MAT_C , typename MAT_R >
void multiply_HtCH (const MAT_H &H, const MAT_C &C, MAT_R &R, bool accumResultInOutput)
 R = H^t * C * H (with C symmetric) More...
 
template<class MAT_IN , class VECTOR , class MAT_OUT >
void meanAndCovMat (const MAT_IN &v, VECTOR &out_mean, MAT_OUT &out_cov)
 Computes the mean vector and covariance from a list of samples in an NxM matrix, where each row is a sample, so the covariance is MxM. More...
 
template<class MATRIX >
Eigen::Matrix< typename MATRIX::Scalar, MATRIX::ColsAtCompileTime, MATRIX::ColsAtCompileTime > cov (const MATRIX &v)
 Computes the covariance matrix from a list of samples in an NxM matrix, where each row is a sample, so the covariance is MxM. More...
 
template<class T >
std::ostream & operator<< (std::ostream &out, const std::vector< T > &d)
 A template function for printing out the contents of a std::vector variable. More...
 
template<class T >
std::ostream & operator<< (std::ostream &out, std::vector< T > *d)
 A template function for printing out the contents of a std::vector variable. More...
 
template<typename T , size_t N>
mrpt::serialization::CArchiveoperator<< (mrpt::serialization::CArchive &ostrm, const CArrayNumeric< T, N > &a)
 Binary dump of a CArrayNumeric<T,N> to a stream. More...
 
template<typename T , size_t N>
mrpt::serialization::CArchiveoperator>> (mrpt::serialization::CArchive &istrm, CArrayNumeric< T, N > &a)
 Binary read of a CArrayNumeric<T,N> from a stream. More...
 
int solve_poly3 (double *x, double a, double b, double c) noexcept
 Solves cubic equation x^3 + a*x^2 + b*x + c = 0. More...
 
int solve_poly4 (double *x, double a, double b, double c, double d) noexcept
 Solves quartic equation x^4 + a*x^3 + b*x^2 + c*x + d = 0 by Dekart-Euler method. More...
 
int solve_poly5 (double *x, double a, double b, double c, double d, double e) noexcept
 Solves equation x^5 + a*x^4 + b*x^3 + c*x^2 + d*x + e = 0. More...
 
int solve_poly4Bi (double *x, double b, double d) noexcept
 Solve equation x^4 + b*x^2 + d = 0. More...
 
int solve_poly4De (double *x, double b, double c, double d) noexcept
 Solve equation x^4 + b*x^2 + c*x + d = 0. More...
 
int solve_poly2 (double a, double b, double c, double &r1, double &r2) noexcept
 Solves equation a*x^2 + b*x + c = 0. More...
 
template<class VECTORLIKE1 , class MATLIKE1 , class USERPARAM , class VECTORLIKE2 , class VECTORLIKE3 , class MATLIKE2 >
void transform_gaussian_unscented (const VECTORLIKE1 &x_mean, const MATLIKE1 &x_cov, void(*functor)(const VECTORLIKE1 &x, const USERPARAM &fixed_param, VECTORLIKE3 &y), const USERPARAM &fixed_param, VECTORLIKE2 &y_mean, MATLIKE2 &y_cov, const bool *elem_do_wrap2pi=nullptr, const double alpha=1e-3, const double K=0, const double beta=2.0)
 Scaled unscented transformation (SUT) for estimating the Gaussian distribution of a variable Y=f(X) for an arbitrary function f() provided by the user. More...
 
template<class VECTORLIKE1 , class MATLIKE1 , class USERPARAM , class VECTORLIKE2 , class VECTORLIKE3 , class MATLIKE2 >
void transform_gaussian_montecarlo (const VECTORLIKE1 &x_mean, const MATLIKE1 &x_cov, void(*functor)(const VECTORLIKE1 &x, const USERPARAM &fixed_param, VECTORLIKE3 &y), const USERPARAM &fixed_param, VECTORLIKE2 &y_mean, MATLIKE2 &y_cov, const size_t num_samples=1000, mrpt::aligned_std_vector< VECTORLIKE3 > *out_samples_y=nullptr)
 Simple Montecarlo-base estimation of the Gaussian distribution of a variable Y=f(X) for an arbitrary function f() provided by the user. More...
 
template<class VECTORLIKE1 , class MATLIKE1 , class USERPARAM , class VECTORLIKE2 , class VECTORLIKE3 , class MATLIKE2 >
void transform_gaussian_linear (const VECTORLIKE1 &x_mean, const MATLIKE1 &x_cov, void(*functor)(const VECTORLIKE1 &x, const USERPARAM &fixed_param, VECTORLIKE3 &y), const USERPARAM &fixed_param, VECTORLIKE2 &y_mean, MATLIKE2 &y_cov, const VECTORLIKE1 &x_increments)
 First order uncertainty propagation estimator of the Gaussian distribution of a variable Y=f(X) for an arbitrary function f() provided by the user. More...
 
mrpt::serialization::CArchiveoperator<< (mrpt::serialization::CArchive &s, const mrpt::math::CVectorFloat &a)
 
mrpt::serialization::CArchiveoperator<< (mrpt::serialization::CArchive &s, const mrpt::math::CVectorDouble &a)
 
mrpt::serialization::CArchiveoperator>> (mrpt::serialization::CArchive &in, mrpt::math::CVectorDouble &a)
 
mrpt::serialization::CArchiveoperator>> (mrpt::serialization::CArchive &in, mrpt::math::CVectorFloat &a)
 
template<class T1 , class T2 >
bool approximatelyEqual (T1 a, T1 b, T2 epsilon)
 Compare 2 floats and determine whether they are equal. More...
 
template<class T >
bool approximatelyEqual (T a, T b)
 Compare 2 floats and determine whether they are equal. More...
 
template<class T >
absDiff (const T &lhs, const T &rhs)
 Absolute difference between two numbers. More...
 
bool loadVector (std::istream &f, std::vector< int > &d)
 Loads one row of a text file as a numerical std::vector. More...
 
bool loadVector (std::istream &f, std::vector< double > &d)
 Loads one row of a text file as a numerical std::vector. More...
 
void medianFilter (const std::vector< double > &inV, std::vector< double > &outV, const int &winSize, const int &numberOfSigmas=2)
 
template<typename T , typename VECTOR >
void linspace (T first, T last, size_t count, VECTOR &out_vector)
 Generates an equidistant sequence of numbers given the first one, the last one and the desired number of points. More...
 
template<class T , T STEP>
std::vector< T > sequenceStdVec (T first, size_t length)
 Generates a sequence of values [first,first+STEP,first+2*STEP,...]. More...
 
template<class VEC1 , class VEC2 >
void normalize (const VEC1 &v, VEC2 &out_v)
 Normalize a vector, such as its norm is the unity. More...
 
template<class VECTOR_OF_VECTORS , class VECTORLIKE >
void extractColumnFromVectorOfVectors (const size_t colIndex, const VECTOR_OF_VECTORS &data, VECTORLIKE &out_column)
 Extract a column from a vector of vectors, and store it in another vector. More...
 
uint64_t factorial64 (unsigned int n)
 Computes the factorial of an integer number and returns it as a 64-bit integer number. More...
 
double factorial (unsigned int n)
 Computes the factorial of an integer number and returns it as a double value (internally it uses logarithms for avoiding overflow). More...
 
std::string MATLAB_plotCovariance2D (const CMatrixFloat &cov22, const CVectorFloat &mean, const float &stdCount, const std::string &style=std::string("b"), const size_t &nEllipsePoints=30)
 Generates a string with the MATLAB commands required to plot an confidence interval (ellipse) for a 2D Gaussian ('float' version). More...
 
std::string MATLAB_plotCovariance2D (const CMatrixDouble &cov22, const CVectorDouble &mean, const float &stdCount, const std::string &style=std::string("b"), const size_t &nEllipsePoints=30)
 Generates a string with the MATLAB commands required to plot an confidence interval (ellipse) for a 2D Gaussian ('double' version). More...
 
template<typename EIGEN_VECTOR , typename At , size_t N>
EIGEN_VECTOR & loadVector (EIGEN_VECTOR &v, At(&theArray)[N])
 Assignment operator for initializing a std::vector from a C array (The vector will be automatically set to the correct size). More...
 
template<typename T , typename At , size_t N>
std::vector< T > & loadVector (std::vector< T > &v, At(&theArray)[N])
 
template<class TRIPLET >
bool saveEigenSparseTripletsToFile (const std::string &sFile, std::vector< TRIPLET > &tri)
 Saves to a plain-text file the nonzero entries of a Eigen sparse matrix, represented as a vector of triplets. More...
 
template<typename Derived >
mxArrayconvertToMatlab (const Eigen::EigenBase< Derived > &mat)
 Convert vectors, arrays and matrices into Matlab vectors/matrices. More...
 
template<typename CONTAINER >
mxArrayconvertVectorToMatlab (const CONTAINER &vec)
 Convert std::vector<> or std::deque<> of numeric types into Matlab vectors. More...
 
template<class T >
void wrapTo2PiInPlace (T &a)
 Modifies the given angle to translate it into the [0,2pi[ range. More...
 
template<class T >
wrapToPi (T a)
 Modifies the given angle to translate it into the ]-pi,pi] range. More...
 
template<class T >
void wrapToPiInPlace (T &a)
 Modifies the given angle to translate it into the ]-pi,pi] range. More...
 
template<class VECTOR >
void unwrap2PiSequence (VECTOR &x)
 Modify a sequence of angle values such as no consecutive values have a jump larger than PI in absolute value. More...
 
template<class T >
angDistance (T from, T to)
 Computes the shortest angular increment (or distance) between two planar orientations, such that it is constrained to [-pi,pi] and is correct for any combination of angles (e.g. More...
 
static void four1 (float data[], unsigned long nn, int isign)
 
static void realft (float data[], unsigned long n)
 
static void makewt (int nw, int *ip, FFT_TYPE *w)
 
static void bitrv2 (int n, int *ip, FFT_TYPE *a)
 Copyright(C) 1997 Takuya OOURA (email: ooura.nosp@m.@mmm.nosp@m..t.u-.nosp@m.toky.nosp@m.o.ac..nosp@m.jp). More...
 
static void cftbsub (int n, FFT_TYPE *a, FFT_TYPE *w)
 
static void cftfsub (int n, FFT_TYPE *a, FFT_TYPE *w)
 
static void rftfsub (int n, FFT_TYPE *a, int nc, FFT_TYPE *c)
 
static void rftbsub (int n, FFT_TYPE *a, int nc, FFT_TYPE *c)
 
static void makect (int nc, int *ip, FFT_TYPE *c)
 Copyright(C) 1997 Takuya OOURA (email: ooura.nosp@m.@mmm.nosp@m..t.u-.nosp@m.toky.nosp@m.o.ac..nosp@m.jp). More...
 
static void cdft (int n, int isgn, FFT_TYPE *a, int *ip, FFT_TYPE *w)
 Copyright(C) 1997 Takuya OOURA (email: ooura.nosp@m.@mmm.nosp@m..t.u-.nosp@m.toky.nosp@m.o.ac..nosp@m.jp). More...
 
static void rdft (int n, int isgn, FFT_TYPE *a, int *ip, FFT_TYPE *w)
 
static void rdft2d (int n1, int n2, int isgn, FFT_TYPE **a, FFT_TYPE *t, int *ip, FFT_TYPE *w)
 
Copyright(C) 1997 Takuya OOURA (email: ooura.nosp@m.@mmm.nosp@m..t.u-.nosp@m.toky.nosp@m.o.ac..nosp@m.jp). More...
 
static void cdft2d (int n1, int n2, int isgn, FFT_TYPE **a, FFT_TYPE *t, int *ip, FFT_TYPE *w)
 
Copyright(C) 1997 Takuya OOURA (email: ooura.nosp@m.@mmm.nosp@m..t.u-.nosp@m.toky.nosp@m.o.ac..nosp@m.jp). More...
 
template<class T >
void removeUnusedVertices (T &poly)
 
template<class T >
void removeRepVertices (T &poly)
 
double isLeft (const mrpt::math::TPoint2D &P0, const mrpt::math::TPoint2D &P1, const mrpt::math::TPoint2D &P2)
 
template<typename T >
void ransac3Dplane_fit (const CMatrixTemplateNumeric< T > &allData, const std::vector< size_t > &useIndices, vector< CMatrixTemplateNumeric< T >> &fitModels)
 
template<typename T >
void ransac3Dplane_distance (const CMatrixTemplateNumeric< T > &allData, const vector< CMatrixTemplateNumeric< T >> &testModels, const T distanceThreshold, unsigned int &out_bestModelIndex, std::vector< size_t > &out_inlierIndices)
 
template<typename T >
bool ransac3Dplane_degenerate (const CMatrixTemplateNumeric< T > &allData, const std::vector< size_t > &useIndices)
 Return "true" if the selected points are a degenerate (invalid) case. More...
 
Probability density distributions (pdf) distance metrics
template<class VECTORLIKE1 , class VECTORLIKE2 , class MAT >
MAT::Scalar mahalanobisDistance2 (const VECTORLIKE1 &X, const VECTORLIKE2 &MU, const MAT &COV)
 Computes the squared mahalanobis distance of a vector X given the mean MU and the covariance inverse COV_inv

\[ d^2 = (X-MU)^\top \Sigma^{-1} (X-MU) \]

. More...

 
template<class VECTORLIKE1 , class VECTORLIKE2 , class MAT >
VECTORLIKE1::Scalar mahalanobisDistance (const VECTORLIKE1 &X, const VECTORLIKE2 &MU, const MAT &COV)
 Computes the mahalanobis distance of a vector X given the mean MU and the covariance inverse COV_inv

\[ d = \sqrt{ (X-MU)^\top \Sigma^{-1} (X-MU) } \]

. More...

 
template<class VECTORLIKE , class MAT1 , class MAT2 , class MAT3 >
MAT1::Scalar mahalanobisDistance2 (const VECTORLIKE &mean_diffs, const MAT1 &COV1, const MAT2 &COV2, const MAT3 &CROSS_COV12)
 Computes the squared mahalanobis distance between two non-independent Gaussians, given the two covariance matrices and the vector with the difference of their means. More...
 
template<class VECTORLIKE , class MAT1 , class MAT2 , class MAT3 >
VECTORLIKE::Scalar mahalanobisDistance (const VECTORLIKE &mean_diffs, const MAT1 &COV1, const MAT2 &COV2, const MAT3 &CROSS_COV12)
 Computes the mahalanobis distance between two non-independent Gaussians (or independent if CROSS_COV12=nullptr), given the two covariance matrices and the vector with the difference of their means. More...
 
template<class VECTORLIKE , class MATRIXLIKE >
MATRIXLIKE::Scalar mahalanobisDistance2 (const VECTORLIKE &delta_mu, const MATRIXLIKE &cov)
 Computes the squared mahalanobis distance between a point and a Gaussian, given the covariance matrix and the vector with the difference between the mean and the point. More...
 
template<class VECTORLIKE , class MATRIXLIKE >
MATRIXLIKE::Scalar mahalanobisDistance (const VECTORLIKE &delta_mu, const MATRIXLIKE &cov)
 Computes the mahalanobis distance between a point and a Gaussian, given the covariance matrix and the vector with the difference between the mean and the point. More...
 
template<typename T >
productIntegralTwoGaussians (const std::vector< T > &mean_diffs, const CMatrixTemplateNumeric< T > &COV1, const CMatrixTemplateNumeric< T > &COV2)
 Computes the integral of the product of two Gaussians, with means separated by "mean_diffs" and covariances "COV1" and "COV2". More...
 
template<typename T , size_t DIM>
productIntegralTwoGaussians (const std::vector< T > &mean_diffs, const CMatrixFixedNumeric< T, DIM, DIM > &COV1, const CMatrixFixedNumeric< T, DIM, DIM > &COV2)
 Computes the integral of the product of two Gaussians, with means separated by "mean_diffs" and covariances "COV1" and "COV2". More...
 
template<typename T , class VECLIKE , class MATLIKE1 , class MATLIKE2 >
void productIntegralAndMahalanobisTwoGaussians (const VECLIKE &mean_diffs, const MATLIKE1 &COV1, const MATLIKE2 &COV2, T &maha2_out, T &intprod_out, const MATLIKE1 *CROSS_COV12=nullptr)
 Computes both, the integral of the product of two Gaussians and their square Mahalanobis distance. More...
 
template<typename T , class VECLIKE , class MATRIXLIKE >
void mahalanobisDistance2AndLogPDF (const VECLIKE &diff_mean, const MATRIXLIKE &cov, T &maha2_out, T &log_pdf_out)
 Computes both, the logarithm of the PDF and the square Mahalanobis distance between a point (given by its difference wrt the mean) and a Gaussian. More...
 
template<typename T , class VECLIKE , class MATRIXLIKE >
void mahalanobisDistance2AndPDF (const VECLIKE &diff_mean, const MATRIXLIKE &cov, T &maha2_out, T &pdf_out)
 Computes both, the PDF and the square Mahalanobis distance between a point (given by its difference wrt the mean) and a Gaussian. More...
 
template<class VECTOR_OF_VECTORS , class MATRIXLIKE , class VECTORLIKE , class VECTORLIKE2 , class VECTORLIKE3 >
void covariancesAndMeanWeighted (const VECTOR_OF_VECTORS &elements, MATRIXLIKE &covariances, VECTORLIKE &means, const VECTORLIKE2 *weights_mean, const VECTORLIKE3 *weights_cov, const bool *elem_do_wrap2pi=nullptr)
 Computes covariances and mean of any vector of containers, given optional weights for the different samples. More...
 
template<class VECTOR_OF_VECTORS , class MATRIXLIKE , class VECTORLIKE >
void covariancesAndMean (const VECTOR_OF_VECTORS &elements, MATRIXLIKE &covariances, VECTORLIKE &means, const bool *elem_do_wrap2pi=nullptr)
 Computes covariances and mean of any vector of containers. More...
 
template<class VECTORLIKE1 , class VECTORLIKE2 >
void weightedHistogram (const VECTORLIKE1 &values, const VECTORLIKE1 &weights, float binWidth, VECTORLIKE2 &out_binCenters, VECTORLIKE2 &out_binValues)
 Computes the weighted histogram for a vector of values and their corresponding weights. More...
 
template<class VECTORLIKE1 , class VECTORLIKE2 >
void weightedHistogramLog (const VECTORLIKE1 &values, const VECTORLIKE1 &log_weights, float binWidth, VECTORLIKE2 &out_binCenters, VECTORLIKE2 &out_binValues)
 Computes the weighted histogram for a vector of values and their corresponding log-weights. More...
 
double averageLogLikelihood (const CVectorDouble &logLikelihoods)
 A numerically-stable method to compute average likelihood values with strongly different ranges (unweighted likelihoods: compute the arithmetic mean). More...
 
double averageWrap2Pi (const CVectorDouble &angles)
 Computes the average of a sequence of angles in radians taking into account the correct wrapping in the range $ ]-\pi,\pi [ $, for example, the mean of (2,-2) is $ \pi $, not 0. More...
 
double averageLogLikelihood (const CVectorDouble &logWeights, const CVectorDouble &logLikelihoods)
 A numerically-stable method to average likelihood values with strongly different ranges (weighted likelihoods). More...
 
Simple intersection operations, relying basically on geometrical

operations.

bool intersect (const TSegment3D &s1, const TSegment3D &s2, TObject3D &obj)
 Gets the intersection between two 3D segments. More...
 
bool intersect (const TSegment3D &s1, const TPlane &p2, TObject3D &obj)
 Gets the intersection between a 3D segment and a plane. More...
 
bool intersect (const TSegment3D &s1, const TLine3D &r2, TObject3D &obj)
 Gets the intersection between a 3D segment and a 3D line. More...
 
bool intersect (const TPlane &p1, const TSegment3D &s2, TObject3D &obj)
 Gets the intersection between a plane and a 3D segment. More...
 
bool intersect (const TPlane &p1, const TPlane &p2, TObject3D &obj)
 Gets the intersection between two planes. More...
 
bool intersect (const TPlane &p1, const TLine3D &p2, TObject3D &obj)
 Gets the intersection between a plane and a 3D line. More...
 
bool intersect (const TLine3D &r1, const TSegment3D &s2, TObject3D &obj)
 Gets the intersection between a 3D line and a 3D segment. More...
 
bool intersect (const TLine3D &r1, const TPlane &p2, TObject3D &obj)
 Gets the intersection between a 3D line and a plane. More...
 
bool intersect (const TLine3D &r1, const TLine3D &r2, TObject3D &obj)
 Gets the intersection between two 3D lines. More...
 
bool intersect (const TLine2D &r1, const TLine2D &r2, TObject2D &obj)
 Gets the intersection between two 2D lines. More...
 
bool intersect (const TLine2D &r1, const TSegment2D &s2, TObject2D &obj)
 Gets the intersection between a 2D line and a 2D segment. More...
 
bool intersect (const TSegment2D &s1, const TLine2D &r2, TObject2D &obj)
 Gets the intersection between a 2D line and a 2D segment. More...
 
bool intersect (const TSegment2D &s1, const TSegment2D &s2, TObject2D &obj)
 Gets the intersection between two 2D segments. More...
 
Angle retrieval methods. Methods which use TSegments will

automatically use TLines' implicit constructors.

double getAngle (const TPlane &p1, const TPlane &p2)
 Computes the angle between two planes. More...
 
double getAngle (const TPlane &p1, const TLine3D &r2)
 Computes the angle between a plane and a 3D line or segment (implicit constructor will be used if passing a segment instead of a line). More...
 
double getAngle (const TLine3D &r1, const TPlane &p2)
 Computes the angle between a 3D line or segment and a plane (implicit constructor will be used if passing a segment instead of a line). More...
 
double getAngle (const TLine3D &r1, const TLine3D &r2)
 Computes the accute relative angle (range: [-PI/2,PI/2]) between two lines. More...
 
double getAngle (const TLine2D &r1, const TLine2D &r2)
 Computes the relative angle (range: [-PI,PI]) of line 2 wrt line 1. More...
 
Creation of lines from poses.
void createFromPoseX (const mrpt::math::TPose3D &p, TLine3D &r)
 Gets a 3D line corresponding to the X axis in a given pose. More...
 
void createFromPoseY (const mrpt::math::TPose3D &p, TLine3D &r)
 Gets a 3D line corresponding to the Y axis in a given pose. More...
 
void createFromPoseZ (const mrpt::math::TPose3D &p, TLine3D &r)
 Gets a 3D line corresponding to the Z axis in a given pose. More...
 
void createFromPoseAndVector (const mrpt::math::TPose3D &p, const double(&vector)[3], TLine3D &r)
 Gets a 3D line corresponding to any arbitrary vector, in the base given by the pose. More...
 
void createFromPoseX (const TPose2D &p, TLine2D &r)
 Gets a 2D line corresponding to the X axis in a given pose. More...
 
void createFromPoseY (const TPose2D &p, TLine2D &r)
 Gets a 2D line corresponding to the Y axis in a given pose. More...
 
void createFromPoseAndVector (const TPose2D &p, const double(&vector)[2], TLine2D &r)
 Gets a 2D line corresponding to any arbitrary vector, in the base given the given pose. More...
 
Other line or plane related methods.
bool conformAPlane (const std::vector< TPoint3D > &points)
 Checks whether this polygon or set of points acceptably fits a plane. More...
 
bool conformAPlane (const std::vector< TPoint3D > &points, TPlane &p)
 Checks whether this polygon or set of points acceptably fits a plane, and if it's the case returns it in the second argument. More...
 
bool areAligned (const std::vector< TPoint2D > &points)
 Checks whether this set of points acceptably fits a 2D line. More...
 
bool areAligned (const std::vector< TPoint2D > &points, TLine2D &r)
 Checks whether this set of points acceptably fits a 2D line, and if it's the case returns it in the second argument. More...
 
bool areAligned (const std::vector< TPoint3D > &points)
 Checks whether this set of points acceptably fits a 3D line. More...
 
bool areAligned (const std::vector< TPoint3D > &points, TLine3D &r)
 Checks whether this set of points acceptably fits a 3D line, and if it's the case returns it in the second argument. More...
 
Projections
void project3D (const TPoint3D &point, const mrpt::math::TPose3D &newXYpose, TPoint3D &newPoint)
 Uses the given pose 3D to project a point into a new base. More...
 
void project3D (const TSegment3D &segment, const mrpt::math::TPose3D &newXYpose, TSegment3D &newSegment)
 Uses the given pose 3D to project a segment into a new base. More...
 
void project3D (const TLine3D &line, const mrpt::math::TPose3D &newXYpose, TLine3D &newLine)
 Uses the given pose 3D to project a line into a new base. More...
 
void project3D (const TPlane &plane, const mrpt::math::TPose3D &newXYpose, TPlane &newPlane)
 Uses the given pose 3D to project a plane into a new base. More...
 
void project3D (const TPolygon3D &polygon, const mrpt::math::TPose3D &newXYpose, TPolygon3D &newPolygon)
 Uses the given pose 3D to project a polygon into a new base. More...
 
void project3D (const TObject3D &object, const mrpt::math::TPose3D &newXYPose, TObject3D &newObject)
 Uses the given pose 3D to project any 3D object into a new base. More...
 
template<class T >
void project3D (const T &obj, const TPlane &newXYPlane, T &newObj)
 Projects any 3D object into the plane's base, using its inverse pose. More...
 
template<class T >
void project3D (const T &obj, const TPlane &newXYPlane, const TPoint3D &newOrigin, T &newObj)
 Projects any 3D object into the plane's base, using its inverse pose and forcing the position of the new coordinates origin. More...
 
template<class T >
void project3D (const std::vector< T > &objs, const mrpt::math::TPose3D &newXYpose, std::vector< T > &newObjs)
 Projects a set of 3D objects into the plane's base. More...
 
void project2D (const TPoint2D &point, const TPose2D &newXpose, TPoint2D &newPoint)
 Uses the given pose 2D to project a point into a new base. More...
 
void project2D (const TSegment2D &segment, const TPose2D &newXpose, TSegment2D &newSegment)
 Uses the given pose 2D to project a segment into a new base. More...
 
void project2D (const TLine2D &line, const TPose2D &newXpose, TLine2D &newLine)
 Uses the given pose 2D to project a line into a new base. More...
 
void project2D (const TPolygon2D &polygon, const TPose2D &newXpose, TPolygon2D &newPolygon)
 Uses the given pose 2D to project a polygon into a new base. More...
 
void project2D (const TObject2D &object, const TPose2D &newXpose, TObject2D &newObject)
 Uses the given pose 2D to project any 2D object into a new base. More...
 
template<class T , class CPOSE2D >
void project2D (const T &obj, const TLine2D &newXLine, T &newObj)
 Projects any 2D object into the line's base, using its inverse pose. More...
 
template<class T , class CPOSE2D >
void project2D (const T &obj, const TLine2D &newXLine, const TPoint2D &newOrigin, T &newObj)
 Projects any 2D object into the line's base, using its inverse pose and forcing the position of the new coordinate origin. More...
 
template<class T >
void project2D (const std::vector< T > &objs, const TPose2D &newXpose, std::vector< T > &newObjs)
 Projects a set of 2D objects into the line's base. More...
 
Polygon intersections. These operations rely more on spatial reasoning

than in raw numerical operations.

bool intersect (const TPolygon2D &p1, const TSegment2D &s2, TObject2D &obj)
 Gets the intersection between a 2D polygon and a 2D segment. More...
 
bool intersect (const TPolygon2D &p1, const TLine2D &r2, TObject2D &obj)
 Gets the intersection between a 2D polygon and a 2D line. More...
 
bool intersect (const TPolygon2D &p1, const TPolygon2D &p2, TObject2D &obj)
 Gets the intersection between two 2D polygons. More...
 
bool intersect (const TSegment2D &s1, const TPolygon2D &p2, TObject2D &obj)
 Gets the intersection between a 2D segment and a 2D polygon. More...
 
bool intersect (const TLine2D &r1, const TPolygon2D &p2, TObject2D &obj)
 Gets the intersection between a 2D line and a 2D polygon. More...
 
bool intersect (const TPolygon3D &p1, const TSegment3D &s2, TObject3D &obj)
 Gets the intersection between a 3D polygon and a 3D segment. More...
 
bool intersect (const TPolygon3D &p1, const TLine3D &r2, TObject3D &obj)
 Gets the intersection between a 3D polygon and a 3D line. More...
 
bool intersect (const TPolygon3D &p1, const TPlane &p2, TObject3D &obj)
 Gets the intersection between a 3D polygon and a plane. More...
 
bool intersect (const TPolygon3D &p1, const TPolygon3D &p2, TObject3D &obj)
 Gets the intersection between two 3D polygons. More...
 
bool intersect (const TSegment3D &s1, const TPolygon3D &p2, TObject3D &obj)
 Gets the intersection between a 3D segment and a 3D polygon. More...
 
bool intersect (const TLine3D &r1, const TPolygon3D &p2, TObject3D &obj)
 Gets the intersection between a 3D line and a 3D polygon. More...
 
bool intersect (const TPlane &p1, const TPolygon3D &p2, TObject3D &obj)
 Gets the intersection between a plane and a 3D polygon. More...
 
size_t intersect (const std::vector< TPolygon3D > &v1, const std::vector< TPolygon3D > &v2, CSparseMatrixTemplate< TObject3D > &objs)
 Gets the intersection between two sets of 3D polygons. More...
 
size_t intersect (const std::vector< TPolygon3D > &v1, const std::vector< TPolygon3D > &v2, std::vector< TObject3D > &objs)
 Gets the intersection between two sets of 3D polygons. More...
 
Other intersections
template<class T , class U , class O >
size_t intersect (const std::vector< T > &v1, const std::vector< U > &v2, CSparseMatrixTemplate< O > &objs)
 Gets the intersection between vectors of geometric objects and returns it in a sparse matrix of either TObject2D or TObject3D. More...
 
template<class T , class U , class O >
size_t intersect (const std::vector< T > &v1, const std::vector< U > &v2, std::vector< O > objs)
 Gets the intersection between vectors of geometric objects and returns it in a vector of either TObject2D or TObject3D. More...
 
bool intersect (const TObject2D &o1, const TObject2D &o2, TObject2D &obj)
 Gets the intersection between any pair of 2D objects. More...
 
bool intersect (const TObject3D &o1, const TObject3D &o2, TObject3D &obj)
 Gets the intersection between any pair of 3D objects. More...
 
Distances
double distance (const TPoint2D &p1, const TPoint2D &p2)
 Gets the distance between two points in a 2D space. More...
 
double distance (const TPoint3D &p1, const TPoint3D &p2)
 Gets the distance between two points in a 3D space. More...
 
double distance (const TLine2D &r1, const TLine2D &r2)
 Gets the distance between two lines in a 2D space. More...
 
double distance (const TLine3D &r1, const TLine3D &r2)
 Gets the distance between two lines in a 3D space. More...
 
double distance (const TPlane &p1, const TPlane &p2)
 Gets the distance between two planes. More...
 
double distance (const TPolygon2D &p1, const TPolygon2D &p2)
 Gets the distance between two polygons in a 2D space. More...
 
double distance (const TPolygon2D &p1, const TSegment2D &s2)
 Gets the distance between a polygon and a segment in a 2D space. More...
 
double distance (const TSegment2D &s1, const TPolygon2D &p2)
 Gets the distance between a segment and a polygon in a 2D space. More...
 
double distance (const TPolygon2D &p1, const TLine2D &l2)
 Gets the distance between a polygon and a line in a 2D space. More...
 
double distance (const TLine2D &l1, const TPolygon2D &p2)
 
double distance (const TPolygon3D &p1, const TPolygon3D &p2)
 Gets the distance between two polygons in a 3D space. More...
 
double distance (const TPolygon3D &p1, const TSegment3D &s2)
 Gets the distance between a polygon and a segment in a 3D space. More...
 
double distance (const TSegment3D &s1, const TPolygon3D &p2)
 Gets the distance between a segment and a polygon in a 3D space. More...
 
double distance (const TPolygon3D &p1, const TLine3D &l2)
 Gets the distance between a polygon and a line in a 3D space. More...
 
double distance (const TLine3D &l1, const TPolygon3D &p2)
 Gets the distance between a line and a polygon in a 3D space. More...
 
double distance (const TPolygon3D &po, const TPlane &pl)
 Gets the distance between a polygon and a plane. More...
 
double distance (const TPlane &pl, const TPolygon3D &po)
 Gets the distance between a plane and a polygon. More...
 
Bound checkers
void getRectangleBounds (const std::vector< TPoint2D > &poly, TPoint2D &pMin, TPoint2D &pMax)
 Gets the rectangular bounds of a 2D polygon or set of 2D points. More...
 
void getPrismBounds (const std::vector< TPoint3D > &poly, TPoint3D &pMin, TPoint3D &pMax)
 Gets the prism bounds of a 3D polygon or set of 3D points. More...
 
Creation of planes from poses
void createPlaneFromPoseXY (const mrpt::math::TPose3D &pose, TPlane &plane)
 Given a pose, creates a plane orthogonal to its Z vector. More...
 
void createPlaneFromPoseXZ (const mrpt::math::TPose3D &pose, TPlane &plane)
 Given a pose, creates a plane orthogonal to its Y vector. More...
 
void createPlaneFromPoseYZ (const mrpt::math::TPose3D &pose, TPlane &plane)
 Given a pose, creates a plane orthogonal to its X vector. More...
 
void createPlaneFromPoseAndNormal (const mrpt::math::TPose3D &pose, const double(&normal)[3], TPlane &plane)
 Given a pose and any vector, creates a plane orthogonal to that vector in the pose's coordinates. More...
 
void generateAxisBaseFromDirectionAndAxis (const double(&vec)[3], char coord, CMatrixDouble44 &matrix)
 Creates a homogeneus matrix (4x4) such that the coordinate given (0 for x, 1 for y, 2 for z) corresponds to the provided vector. More...
 
Linear regression methods
double getRegressionLine (const std::vector< TPoint2D > &points, TLine2D &line)
 Using eigenvalues, gets the best fitting line for a set of 2D points. More...
 
double getRegressionLine (const std::vector< TPoint3D > &points, TLine3D &line)
 Using eigenvalues, gets the best fitting line for a set of 3D points. More...
 
double getRegressionPlane (const std::vector< TPoint3D > &points, TPlane &plane)
 Using eigenvalues, gets the best fitting plane for a set of 3D points. More...
 
Miscellaneous Geometry methods
void assemblePolygons (const std::vector< TSegment3D > &segms, std::vector< TPolygon3D > &polys)
 Tries to assemble a set of segments into a set of closed polygons. More...
 
void assemblePolygons (const std::vector< TSegment3D > &segms, std::vector< TPolygon3D > &polys, std::vector< TSegment3D > &remainder)
 Tries to assemble a set of segments into a set of closed polygons, returning the unused segments as another out parameter. More...
 
void assemblePolygons (const std::vector< TObject3D > &objs, std::vector< TPolygon3D > &polys)
 Extracts all the polygons, including those formed from segments, from the set of objects. More...
 
void assemblePolygons (const std::vector< TObject3D > &objs, std::vector< TPolygon3D > &polys, std::vector< TObject3D > &remainder)
 Extracts all the polygons, including those formed from segments, from the set of objects. More...
 
void assemblePolygons (const std::vector< TObject3D > &objs, std::vector< TPolygon3D > &polys, std::vector< TSegment3D > &remainder1, std::vector< TObject3D > &remainder2)
 Extracts all the polygons, including those formed from segments, from the set of objects. More...
 
void setEpsilon (double nE)
 Changes the value of the geometric epsilon (default = 1e-5) More...
 
double getEpsilon ()
 Gets the value of the geometric epsilon (default = 1e-5) More...
 
bool splitInConvexComponents (const TPolygon2D &poly, std::vector< TPolygon2D > &components)
 Splits a 2D polygon into convex components. More...
 
bool splitInConvexComponents (const TPolygon3D &poly, std::vector< TPolygon3D > &components)
 Splits a 3D polygon into convex components. More...
 
void getSegmentBisector (const TSegment2D &sgm, TLine2D &bis)
 Gets the bisector of a 2D segment. More...
 
void getSegmentBisector (const TSegment3D &sgm, TPlane &bis)
 Gets the bisector of a 3D segment. More...
 
void getAngleBisector (const TLine2D &l1, const TLine2D &l2, TLine2D &bis)
 Gets the bisector of two lines or segments (implicit constructor will be used if necessary) More...
 
void getAngleBisector (const TLine3D &l1, const TLine3D &l2, TLine3D &bis)
 Gets the bisector of two lines or segments (implicit constructor will be used if necessary) More...
 
bool traceRay (const std::vector< TPolygonWithPlane > &vec, const mrpt::math::TPose3D &pose, double &dist)
 Fast ray tracing method using polygons' properties. More...
 
bool traceRay (const std::vector< TPolygon3D > &vec, const mrpt::math::TPose3D &pose, double &dist)
 Fast ray tracing method using polygons' properties. More...
 
template<class T , class U , class V >
void crossProduct3D (const T &v0, const U &v1, V &vOut)
 Computes the cross product of two 3D vectors, returning a vector normal to both. More...
 
template<class T >
void crossProduct3D (const std::vector< T > &v0, const std::vector< T > &v1, std::vector< T > &v_out)
 
template<class VEC1 , class VEC2 >
Eigen::Matrix< double, 3, 1 > crossProduct3D (const VEC1 &v0, const VEC2 &v1)
 overload (returning a vector of size 3 by value). More...
 
template<class VECTOR , class MATRIX >
void skew_symmetric3 (const VECTOR &v, MATRIX &M)
 Computes the 3x3 skew symmetric matrix from a 3-vector or 3-array:

\[ M([x ~ y ~ z]^\top) = \left( \begin{array}{c c c} 0 & -z & y \\ z & 0 & -x \\ -y & x & 0 \end{array} \right) \]

. More...

 
template<class VECTOR >
mrpt::math::CMatrixDouble33 skew_symmetric3 (const VECTOR &v)
 
template<class VECTOR , class MATRIX >
void skew_symmetric3_neg (const VECTOR &v, MATRIX &M)
 Computes the negative version of a 3x3 skew symmetric matrix from a 3-vector or 3-array:

\[ -M([x ~ y ~ z]^\top) = \left( \begin{array}{c c c} 0 & z & -y \\ -z & 0 & x \\ y & -x & 0 \end{array} \right) \]

. More...

 
template<class VECTOR >
mrpt::math::CMatrixDouble33 skew_symmetric3_neg (const VECTOR &v)
 
template<class T , class U >
bool vectorsAreParallel2D (const T &v1, const U &v2)
 Returns true if two 2D vectors are parallel. More...
 
template<class T , class U >
bool vectorsAreParallel3D (const T &v1, const U &v2)
 Returns true if two 3D vectors are parallel. More...
 
void closestFromPointToSegment (const double &Px, const double &Py, const double &x1, const double &y1, const double &x2, const double &y2, double &out_x, double &out_y)
 Computes the closest point from a given point to a segment. More...
 
void closestFromPointToLine (const double &Px, const double &Py, const double &x1, const double &y1, const double &x2, const double &y2, double &out_x, double &out_y)
 Computes the closest point from a given point to a (infinite) line. More...
 
double closestSquareDistanceFromPointToLine (const double &Px, const double &Py, const double &x1, const double &y1, const double &x2, const double &y2)
 Returns the square distance from a point to a line. More...
 
template<typename T >
distanceBetweenPoints (const T x1, const T y1, const T x2, const T y2)
 Returns the distance between 2 points in 2D. More...
 
template<typename T >
distanceBetweenPoints (const T x1, const T y1, const T z1, const T x2, const T y2, const T z2)
 Returns the distance between 2 points in 3D. More...
 
template<typename T >
distanceSqrBetweenPoints (const T x1, const T y1, const T x2, const T y2)
 Returns the square distance between 2 points in 2D. More...
 
template<typename T >
distanceSqrBetweenPoints (const T x1, const T y1, const T z1, const T x2, const T y2, const T z2)
 Returns the square distance between 2 points in 3D. More...
 
template<typename T >
double minimumDistanceFromPointToSegment (const double Px, const double Py, const double x1, const double y1, const double x2, const double y2, T &out_x, T &out_y)
 Computes the closest point from a given point to a segment, and returns that minimum distance. More...
 
bool SegmentsIntersection (const double x1, const double y1, const double x2, const double y2, const double x3, const double y3, const double x4, const double y4, double &ix, double &iy)
 Returns the intersection point, and if it exists, between two segments. More...
 
bool SegmentsIntersection (const double x1, const double y1, const double x2, const double y2, const double x3, const double y3, const double x4, const double y4, float &ix, float &iy)
 Returns the intersection point, and if it exists, between two segments. More...
 
bool pointIntoPolygon2D (const double &px, const double &py, unsigned int polyEdges, const double *poly_xs, const double *poly_ys)
 Returns true if the 2D point (px,py) falls INTO the given polygon. More...
 
template<typename T >
bool pointIntoQuadrangle (T x, T y, T v1x, T v1y, T v2x, T v2y, T v3x, T v3y, T v4x, T v4y)
 Specialized method to check whether a point (x,y) falls into a quadrangle. More...
 
double distancePointToPolygon2D (const double &px, const double &py, unsigned int polyEdges, const double *poly_xs, const double *poly_ys)
 Returns the closest distance of a given 2D point to a polygon, or "0" if the point is INTO the polygon or its perimeter. More...
 
bool minDistBetweenLines (const double &p1_x, const double &p1_y, const double &p1_z, const double &p2_x, const double &p2_y, const double &p2_z, const double &p3_x, const double &p3_y, const double &p3_z, const double &p4_x, const double &p4_y, const double &p4_z, double &x, double &y, double &z, double &dist)
 Calculates the minimum distance between a pair of lines. More...
 
bool RectanglesIntersection (const double &R1_x_min, const double &R1_x_max, const double &R1_y_min, const double &R1_y_max, const double &R2_x_min, const double &R2_x_max, const double &R2_y_min, const double &R2_y_max, const double &R2_pose_x, const double &R2_pose_y, const double &R2_pose_phi)
 Returns whether two rotated rectangles intersect. More...
 
template<class T >
CMatrixTemplateNumeric< T > generateAxisBaseFromDirection (T dx, T dy, T dz)
 Computes an axis base (a set of three 3D normal vectors) with the given vector being the first of them ("X") NOTE: Make sure of passing all floats or doubles and that the template of the receiving matrix is of the same type! More...
 
k-means algorithms
template<class LIST_OF_VECTORS1 , class LIST_OF_VECTORS2 >
double kmeans (const size_t k, const LIST_OF_VECTORS1 &points, std::vector< int > &assignments, LIST_OF_VECTORS2 *out_centers=nullptr, const size_t attempts=3)
 k-means algorithm to cluster a list of N points of arbitrary dimensionality into exactly K clusters. More...
 
template<class LIST_OF_VECTORS1 , class LIST_OF_VECTORS2 >
double kmeanspp (const size_t k, const LIST_OF_VECTORS1 &points, std::vector< int > &assignments, LIST_OF_VECTORS2 *out_centers=nullptr, const size_t attempts=3)
 k-means++ algorithm to cluster a list of N points of arbitrary dimensionality into exactly K clusters. More...
 
Container initializer from pose classes
template<class CONTAINER , class POINT_OR_POSE >
CONTAINER & containerFromPoseOrPoint (CONTAINER &C, const POINT_OR_POSE &p)
 Conversion of poses (TPose2D,TPoint2D,..., mrpt::poses::CPoint2D,CPose3D,...) to MRPT containers (vector/matrix) More...
 
Operators for binary streaming of MRPT matrices
template<size_t NROWS, size_t NCOLS>
mrpt::serialization::CArchiveoperator>> (mrpt::serialization::CArchive &in, CMatrixFixedNumeric< float, NROWS, NCOLS > &M)
 Read operator from a CStream. More...
 
template<size_t NROWS, size_t NCOLS>
mrpt::serialization::CArchiveoperator>> (mrpt::serialization::CArchive &in, CMatrixFixedNumeric< double, NROWS, NCOLS > &M)
 Read operator from a CStream. More...
 
template<size_t NROWS, size_t NCOLS>
mrpt::serialization::CArchiveoperator<< (mrpt::serialization::CArchive &out, const CMatrixFixedNumeric< float, NROWS, NCOLS > &M)
 Write operator for writing into a CStream. More...
 
template<size_t NROWS, size_t NCOLS>
mrpt::serialization::CArchiveoperator<< (mrpt::serialization::CArchive &out, const CMatrixFixedNumeric< double, NROWS, NCOLS > &M)
 Write operator for writing into a CStream. More...
 
Operators for text streaming of MRPT matrices
template<typename T , size_t NROWS, size_t NCOLS>
std::ostream & operator<< (std::ostream &s, const CMatrixFixedNumeric< T, NROWS, NCOLS > &m)
 Dumps the matrix to a text ostream, adding a final "\n" to Eigen's default output. More...
 
template<typename T >
std::ostream & operator<< (std::ostream &s, const CMatrixTemplateNumeric< T > &m)
 Dumps the matrix to a text ostream, adding a final "\n" to Eigen's default output. More...
 
template<typename MAT >
void deserializeSymmetricMatrixFrom (MAT &m, mrpt::serialization::CArchive &in)
 Binary serialization of symmetric matrices, saving the space of duplicated values. More...
 
template<typename MAT >
void serializeSymmetricMatrixTo (MAT &m, mrpt::serialization::CArchive &out)
 Binary serialization of symmetric matrices, saving the space of duplicated values. More...
 
Generic container element-wise operations - Miscelaneous
template<class CONTAINER , typename VALUE >
VALUE squareNorm_accum (const VALUE total, const CONTAINER &v)
 Accumulate the squared-norm of a vector/array/matrix into "total" (this function is compatible with std::accumulate). More...
 
template<size_t N, class T , class U >
squareNorm (const U &v)
 Compute the square norm of anything implementing []. More...
 
template<class CONTAINER1 , class CONTAINER2 >
CONTAINER1::Scalar dotProduct (const CONTAINER1 &v1, const CONTAINER1 &v2)
 v1*v2: The dot product of two containers (vectors/arrays/matrices) More...
 
template<size_t N, class T , class U , class V >
dotProduct (const U &v1, const V &v2)
 v1*v2: The dot product of any two objects supporting [] More...
 
template<class CONTAINER >
CONTAINER::Scalar sum (const CONTAINER &v)
 Computes the sum of all the elements. More...
 
template<typename T >
sum (const std::vector< T > &v)
 
template<class CONTAINER , typename RET >
RET sumRetType (const CONTAINER &v)
 Computes the sum of all the elements, with a custom return type. More...
 
template<class CONTAINER >
double mean (const CONTAINER &v)
 Computes the mean value of a vector. More...
 
template<typename T >
void minimum_maximum (const std::vector< T > &V, T &curMin, T &curMax)
 Return the maximum and minimum values of a std::vector. More...
 
template<class Derived >
void minimum_maximum (const Eigen::MatrixBase< Derived > &V, typename Eigen::MatrixBase< Derived >::Scalar &curMin, typename Eigen::MatrixBase< Derived >::Scalar &curMax)
 Return the maximum and minimum values of a Eigen-based vector or matrix. More...
 
template<class CONTAINER1 , class CONTAINER2 >
size_t countCommonElements (const CONTAINER1 &a, const CONTAINER2 &b)
 Counts the number of elements that appear in both STL-like containers (comparison through the == operator) It is assumed that no repeated elements appear within each of the containers. More...
 
template<class CONTAINER >
void adjustRange (CONTAINER &m, const typename CONTAINER::Scalar minVal, const typename CONTAINER::Scalar maxVal)
 Adjusts the range of all the elements such as the minimum and maximum values being those supplied by the user. More...
 
template<class VECTORLIKE >
void meanAndStd (const VECTORLIKE &v, double &out_mean, double &out_std, bool unbiased=true)
 Computes the standard deviation of a vector. More...
 
template<class VECTORLIKE >
double stddev (const VECTORLIKE &v, bool unbiased=true)
 Computes the standard deviation of a vector. More...
 
template<class VECTOR_OF_VECTOR , class VECTORLIKE , class MATRIXLIKE >
void meanAndCovVec (const VECTOR_OF_VECTOR &v, VECTORLIKE &out_mean, MATRIXLIKE &out_cov)
 Computes the mean vector and covariance from a list of values given as a vector of vectors, where each row is a sample. More...
 
template<class VECTOR_OF_VECTOR , class RETURN_MATRIX >
RETURN_MATRIX covVector (const VECTOR_OF_VECTOR &v)
 Computes the covariance matrix from a list of values given as a vector of vectors, where each row is a sample. More...
 
template<class CONT1 , class CONT2 >
double ncc_vector (const CONT1 &patch1, const CONT2 &patch2)
 Normalised Cross Correlation between two vector patches The Matlab code for this is a = a - mean2(a); b = b - mean2(b); r = sum(sum(a. More...
 
Generic std::vector element-wise operations
template<typename T1 , typename T2 >
std::vector< T1 > & operator*= (std::vector< T1 > &a, const std::vector< T2 > &b)
 a*=b (element-wise multiplication) More...
 
template<typename T1 >
std::vector< T1 > & operator*= (std::vector< T1 > &a, const T1 b)
 a*=k (multiplication by a constant) More...
 
template<typename T1 , typename T2 >
std::vector< T1 > operator* (const std::vector< T1 > &a, const std::vector< T2 > &b)
 a*b (element-wise multiplication) More...
 
template<typename T1 , typename T2 >
std::vector< T1 > & operator+= (std::vector< T1 > &a, const std::vector< T2 > &b)
 a+=b (element-wise sum) More...
 
template<typename T1 >
std::vector< T1 > & operator+= (std::vector< T1 > &a, const T1 b)
 a+=b (sum a constant) More...
 
template<typename T1 , typename T2 >
std::vector< T1 > operator+ (const std::vector< T1 > &a, const std::vector< T2 > &b)
 a+b (element-wise sum) More...
 
template<typename T1 , typename T2 >
std::vector< T1 > operator- (const std::vector< T1 > &v1, const std::vector< T2 > &v2)
 
RANSAC detectors
template<typename NUMTYPE >
void ransac_detect_3D_planes (const Eigen::Matrix< NUMTYPE, Eigen::Dynamic, 1 > &x, const Eigen::Matrix< NUMTYPE, Eigen::Dynamic, 1 > &y, const Eigen::Matrix< NUMTYPE, Eigen::Dynamic, 1 > &z, std::vector< std::pair< size_t, TPlane >> &out_detected_planes, const double threshold, const size_t min_inliers_for_valid_plane=10)
 Fit a number of 3-D planes to a given point cloud, automatically determining the number of existing planes by means of the provided threshold and minimum number of supporting inliers. More...
 
template<typename NUMTYPE >
void ransac_detect_2D_lines (const Eigen::Matrix< NUMTYPE, Eigen::Dynamic, 1 > &x, const Eigen::Matrix< NUMTYPE, Eigen::Dynamic, 1 > &y, std::vector< std::pair< size_t, TLine2D >> &out_detected_lines, const double threshold, const size_t min_inliers_for_valid_line=5)
 Fit a number of 2-D lines to a given point cloud, automatically determining the number of existing lines by means of the provided threshold and minimum number of supporting inliers. More...
 
template<class POINTSMAP >
void ransac_detect_3D_planes (const POINTSMAP *points_map, std::vector< std::pair< size_t, TPlane >> &out_detected_planes, const double threshold, const size_t min_inliers_for_valid_plane)
 A stub for ransac_detect_3D_planes() with the points given as a mrpt::maps::CPointsMap. More...
 
SLERP (Spherical Linear Interpolation) functions
template<typename T >
void slerp (const CQuaternion< T > &q0, const CQuaternion< T > &q1, const double t, CQuaternion< T > &q)
 SLERP interpolation between two quaternions. More...
 
void slerp (const TPose3D &q0, const TPose3D &q1, const double t, TPose3D &p)
 SLERP interpolation between two 6D poses - like mrpt::math::slerp for quaternions, but interpolates the [X,Y,Z] coordinates as well. More...
 
void slerp_ypr (const mrpt::math::TPose3D &q0, const mrpt::math::TPose3D &q1, const double t, mrpt::math::TPose3D &p)
 

Variables

static constexpr unsigned char GEOMETRIC_TYPE_POINT = 0
 Object type identifier for TPoint2D or TPoint3D. More...
 
static constexpr unsigned char GEOMETRIC_TYPE_SEGMENT = 1
 Object type identifier for TSegment2D or TSegment3D. More...
 
static constexpr unsigned char GEOMETRIC_TYPE_LINE = 2
 Object type identifier for TLine2D or TLine3D. More...
 
static constexpr unsigned char GEOMETRIC_TYPE_POLYGON = 3
 Object type identifier for TPolygon2D or TPolygon3D. More...
 
static constexpr unsigned char GEOMETRIC_TYPE_PLANE = 4
 Object type identifier for TPlane. More...
 
static constexpr unsigned char GEOMETRIC_TYPE_UNDEFINED = 255
 Object type identifier for empty TObject2D or TObject3D. More...
 

Typedef Documentation

◆ CArrayDouble

template<std::size_t N>
using mrpt::math::CArrayDouble = typedef CArrayNumeric<double, N>

A partial specialization of CArrayNumeric for double numbers.

See also
CArrayNumeric, CArray

Definition at line 64 of file CArrayNumeric.h.

◆ CArrayFloat

template<std::size_t N>
using mrpt::math::CArrayFloat = typedef CArrayNumeric<float, N>

A partial specialization of CArrayNumeric for float numbers.

See also
CArrayNumeric, CArray

Definition at line 59 of file CArrayNumeric.h.

◆ CArrayInt

template<std::size_t N>
using mrpt::math::CArrayInt = typedef CArrayNumeric<int, N>

A partial specialization of CArrayNumeric for int numbers.

See also
CArrayNumeric, CArray

Definition at line 69 of file CArrayNumeric.h.

◆ CArrayUInt

template<std::size_t N>
using mrpt::math::CArrayUInt = typedef CArrayNumeric<unsigned int, N>

A partial specialization of CArrayNumeric for unsigned int numbers.

See also
CArrayNumeric, CArray

Definition at line 74 of file CArrayNumeric.h.

◆ CLevenbergMarquardt

The default name for the LM class is an instantiation for "double".

Definition at line 258 of file CLevenbergMarquardt.h.

◆ CMatrixDouble

Declares a matrix of double numbers (non serializable).

For a serializable version, use math::CMatrixD

See also
CMatrixFloat, CMatrix, CMatrixD

Definition at line 144 of file CMatrixTemplateNumeric.h.

◆ CMatrixDouble12

using mrpt::math::CMatrixDouble12 = typedef CMatrixFixedNumeric<double, 1, 2>

Definition at line 64 of file eigen_frwds.h.

◆ CMatrixDouble12_6

using mrpt::math::CMatrixDouble12_6 = typedef CMatrixFixedNumeric<double, 12, 6>

Definition at line 74 of file eigen_frwds.h.

◆ CMatrixDouble13

using mrpt::math::CMatrixDouble13 = typedef CMatrixFixedNumeric<double, 1, 3>

Definition at line 62 of file eigen_frwds.h.

◆ CMatrixDouble15

using mrpt::math::CMatrixDouble15 = typedef CMatrixFixedNumeric<double, 1, 5>

Definition at line 71 of file eigen_frwds.h.

◆ CMatrixDouble16

using mrpt::math::CMatrixDouble16 = typedef CMatrixFixedNumeric<double, 1, 6>

Definition at line 67 of file eigen_frwds.h.

◆ CMatrixDouble17

using mrpt::math::CMatrixDouble17 = typedef CMatrixFixedNumeric<double, 1, 7>

Definition at line 69 of file eigen_frwds.h.

◆ CMatrixDouble21

using mrpt::math::CMatrixDouble21 = typedef CMatrixFixedNumeric<double, 2, 1>

Definition at line 65 of file eigen_frwds.h.

◆ CMatrixDouble22

using mrpt::math::CMatrixDouble22 = typedef CMatrixFixedNumeric<double, 2, 2>

Definition at line 55 of file eigen_frwds.h.

◆ CMatrixDouble23

using mrpt::math::CMatrixDouble23 = typedef CMatrixFixedNumeric<double, 2, 3>

Definition at line 56 of file eigen_frwds.h.

◆ CMatrixDouble31

using mrpt::math::CMatrixDouble31 = typedef CMatrixFixedNumeric<double, 3, 1>

Definition at line 63 of file eigen_frwds.h.

◆ CMatrixDouble32

using mrpt::math::CMatrixDouble32 = typedef CMatrixFixedNumeric<double, 3, 2>

Definition at line 57 of file eigen_frwds.h.

◆ CMatrixDouble33

using mrpt::math::CMatrixDouble33 = typedef CMatrixFixedNumeric<double, 3, 3>
Examples:
serialization_json_example/test.cpp.

Definition at line 58 of file eigen_frwds.h.

◆ CMatrixDouble39

using mrpt::math::CMatrixDouble39 = typedef CMatrixFixedNumeric<double, 3, 9>

Definition at line 75 of file eigen_frwds.h.

◆ CMatrixDouble41

using mrpt::math::CMatrixDouble41 = typedef CMatrixFixedNumeric<double, 4, 1>

Definition at line 72 of file eigen_frwds.h.

◆ CMatrixDouble44

using mrpt::math::CMatrixDouble44 = typedef CMatrixFixedNumeric<double, 4, 4>

Definition at line 59 of file eigen_frwds.h.

◆ CMatrixDouble51

using mrpt::math::CMatrixDouble51 = typedef CMatrixFixedNumeric<double, 5, 1>

Definition at line 70 of file eigen_frwds.h.

◆ CMatrixDouble61

using mrpt::math::CMatrixDouble61 = typedef CMatrixFixedNumeric<double, 6, 1>

Definition at line 66 of file eigen_frwds.h.

◆ CMatrixDouble66

using mrpt::math::CMatrixDouble66 = typedef CMatrixFixedNumeric<double, 6, 6>

Definition at line 60 of file eigen_frwds.h.

◆ CMatrixDouble6_12

using mrpt::math::CMatrixDouble6_12 = typedef CMatrixFixedNumeric<double, 6, 12>

Definition at line 73 of file eigen_frwds.h.

◆ CMatrixDouble71

using mrpt::math::CMatrixDouble71 = typedef CMatrixFixedNumeric<double, 7, 1>

Definition at line 68 of file eigen_frwds.h.

◆ CMatrixDouble77

using mrpt::math::CMatrixDouble77 = typedef CMatrixFixedNumeric<double, 7, 7>

Definition at line 61 of file eigen_frwds.h.

◆ CMatrixDouble93

using mrpt::math::CMatrixDouble93 = typedef CMatrixFixedNumeric<double, 9, 3>

Definition at line 76 of file eigen_frwds.h.

◆ CMatrixFloat

Declares a matrix of float numbers (non serializable).

For a serializable version, use math::CMatrix

See also
CMatrixDouble, CMatrix, CMatrixD

Definition at line 138 of file CMatrixTemplateNumeric.h.

◆ CMatrixFloat12

using mrpt::math::CMatrixFloat12 = typedef CMatrixFixedNumeric<float, 1, 2>

Definition at line 87 of file eigen_frwds.h.

◆ CMatrixFloat13

using mrpt::math::CMatrixFloat13 = typedef CMatrixFixedNumeric<float, 1, 3>

Definition at line 85 of file eigen_frwds.h.

◆ CMatrixFloat15

using mrpt::math::CMatrixFloat15 = typedef CMatrixFixedNumeric<float, 1, 5>

Definition at line 94 of file eigen_frwds.h.

◆ CMatrixFloat16

using mrpt::math::CMatrixFloat16 = typedef CMatrixFixedNumeric<float, 1, 6>

Definition at line 90 of file eigen_frwds.h.

◆ CMatrixFloat17

using mrpt::math::CMatrixFloat17 = typedef CMatrixFixedNumeric<float, 1, 7>

Definition at line 92 of file eigen_frwds.h.

◆ CMatrixFloat21

using mrpt::math::CMatrixFloat21 = typedef CMatrixFixedNumeric<float, 2, 1>

Definition at line 88 of file eigen_frwds.h.

◆ CMatrixFloat22

using mrpt::math::CMatrixFloat22 = typedef CMatrixFixedNumeric<float, 2, 2>

Definition at line 78 of file eigen_frwds.h.

◆ CMatrixFloat23

using mrpt::math::CMatrixFloat23 = typedef CMatrixFixedNumeric<float, 2, 3>

Definition at line 79 of file eigen_frwds.h.

◆ CMatrixFloat31

using mrpt::math::CMatrixFloat31 = typedef CMatrixFixedNumeric<float, 3, 1>

Definition at line 86 of file eigen_frwds.h.

◆ CMatrixFloat32

using mrpt::math::CMatrixFloat32 = typedef CMatrixFixedNumeric<float, 3, 2>

Definition at line 80 of file eigen_frwds.h.

◆ CMatrixFloat33

using mrpt::math::CMatrixFloat33 = typedef CMatrixFixedNumeric<float, 3, 3>

Definition at line 81 of file eigen_frwds.h.

◆ CMatrixFloat44

using mrpt::math::CMatrixFloat44 = typedef CMatrixFixedNumeric<float, 4, 4>

Definition at line 82 of file eigen_frwds.h.

◆ CMatrixFloat51

using mrpt::math::CMatrixFloat51 = typedef CMatrixFixedNumeric<float, 5, 1>

Definition at line 93 of file eigen_frwds.h.

◆ CMatrixFloat61

using mrpt::math::CMatrixFloat61 = typedef CMatrixFixedNumeric<float, 6, 1>

Definition at line 89 of file eigen_frwds.h.

◆ CMatrixFloat66

using mrpt::math::CMatrixFloat66 = typedef CMatrixFixedNumeric<float, 6, 6>

Definition at line 83 of file eigen_frwds.h.

◆ CMatrixFloat71

using mrpt::math::CMatrixFloat71 = typedef CMatrixFixedNumeric<float, 7, 1>

Definition at line 91 of file eigen_frwds.h.

◆ CMatrixFloat77

using mrpt::math::CMatrixFloat77 = typedef CMatrixFixedNumeric<float, 7, 7>

Definition at line 84 of file eigen_frwds.h.

◆ CMatrixLongDouble

Declares a matrix of "long doubles" (non serializable), or of "doubles" if the compiler does not support "long double".

See also
CMatrixDouble, CMatrixFloat

Definition at line 162 of file CMatrixTemplateNumeric.h.

◆ CMatrixUInt

using mrpt::math::CMatrixUInt = typedef CMatrixTemplateNumeric<unsigned int>

Declares a matrix of unsigned ints (non serializable).

See also
CMatrixDouble, CMatrixFloat

Definition at line 149 of file CMatrixTemplateNumeric.h.

◆ CQuaternionDouble

using mrpt::math::CQuaternionDouble = typedef CQuaternion<double>

A quaternion of data type "double".

Definition at line 507 of file CQuaternion.h.

◆ CQuaternionFloat

using mrpt::math::CQuaternionFloat = typedef CQuaternion<float>

A quaternion of data type "float".

Definition at line 509 of file CQuaternion.h.

◆ CVectorDouble

Column vector, like Eigen::MatrixXd, but automatically initialized to zeros since construction.

Definition at line 47 of file eigen_frwds.h.

◆ CVectorFloat

Column vector, like Eigen::MatrixXf, but automatically initialized to zeros since construction.

Definition at line 46 of file eigen_frwds.h.

◆ FFT_TYPE

using mrpt::math::FFT_TYPE = typedef float

Copyright(C) 1997 Takuya OOURA (email: ooura.nosp@m.@mmm.nosp@m..t.u-.nosp@m.toky.nosp@m.o.ac..nosp@m.jp).

You may use, copy, modify this code for any purpose and without fee. You may distribute this ORIGINAL package.

Definition at line 147 of file fourier.cpp.

Enumeration Type Documentation

◆ TConstructorFlags_Matrices

For usage in one of the constructors of CMatrixFixedNumeric or CMatrixTemplate (and derived classes), if it's not required to fill it with zeros at the constructor to save time.

Enumerator
UNINITIALIZED_MATRIX 

Definition at line 72 of file math_frwds.h.

◆ TConstructorFlags_Quaternions

Enumerator
UNINITIALIZED_QUATERNION 

Definition at line 20 of file CQuaternion.h.

◆ TMatrixTextFileFormat

Selection of the number format in CMatrixTemplate::saveToTextFile

Enumerator
MATRIX_FORMAT_ENG 

engineering format 'e'

MATRIX_FORMAT_FIXED 

fixed floating point 'f'

MATRIX_FORMAT_INT 

intergers 'i'

Definition at line 59 of file math_frwds.h.

Function Documentation

◆ absDiff()

template<class T >
T mrpt::math::absDiff ( const T &  lhs,
const T &  rhs 
)

◆ adjustRange()

template<class CONTAINER >
void mrpt::math::adjustRange ( CONTAINER &  m,
const typename CONTAINER::Scalar  minVal,
const typename CONTAINER::Scalar  maxVal 
)

Adjusts the range of all the elements such as the minimum and maximum values being those supplied by the user.

Definition at line 281 of file ops_containers.h.

References minimum_maximum().

Here is the call graph for this function:

◆ approximatelyEqual() [1/2]

template<class T1 , class T2 >
bool mrpt::math::approximatelyEqual ( T1  a,
T1  b,
T2  epsilon 
)

Compare 2 floats and determine whether they are equal.

Returns
True if equal, false otherwise
Parameters
aFist num
bSecond num
epsilonDifference below which a, b are considered equal

Definition at line 34 of file math/include/mrpt/math/utils.h.

Referenced by mrpt::graphslam::deciders::CLoopCloserERD< GRAPH_T >::addScanMatchingEdges(), approximatelyEqual(), and mrpt::graphslam::deciders::CLoopCloserERD< GRAPH_T >::computeDominantEigenVector().

Here is the caller graph for this function:

◆ approximatelyEqual() [2/2]

template<class T >
bool mrpt::math::approximatelyEqual ( a,
b 
)

Compare 2 floats and determine whether they are equal.

Returns
True if equal, false otherwise
Parameters
aFist num
bSecond num

Definition at line 45 of file math/include/mrpt/math/utils.h.

References approximatelyEqual().

Here is the call graph for this function:

◆ bitrv2()

static void mrpt::math::bitrv2 ( int  n,
int *  ip,
FFT_TYPE a 
)
static

Copyright(C) 1997 Takuya OOURA (email: ooura.nosp@m.@mmm.nosp@m..t.u-.nosp@m.toky.nosp@m.o.ac..nosp@m.jp).

You may use, copy, modify this code for any purpose and without fee. You may distribute this ORIGINAL package.

Definition at line 455 of file fourier.cpp.

Referenced by cdft(), makewt(), and rdft().

Here is the caller graph for this function:

◆ cdft()

static void mrpt::math::cdft ( int  n,
int  isgn,
FFT_TYPE a,
int *  ip,
FFT_TYPE w 
)
static

Copyright(C) 1997 Takuya OOURA (email: ooura.nosp@m.@mmm.nosp@m..t.u-.nosp@m.toky.nosp@m.o.ac..nosp@m.jp).

You may use, copy, modify this code for any purpose and without fee. You may distribute this ORIGINAL package.

Definition at line 522 of file fourier.cpp.

References bitrv2(), cftbsub(), cftfsub(), and makewt().

Referenced by cdft2d(), and rdft2d().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cdft2d()

static void mrpt::math::cdft2d ( int  n1,
int  n2,
int  isgn,
FFT_TYPE **  a,
FFT_TYPE t,
int *  ip,
FFT_TYPE w 
)
static


Copyright(C) 1997 Takuya OOURA (email: ooura.nosp@m.@mmm.nosp@m..t.u-.nosp@m.toky.nosp@m.o.ac..nosp@m.jp).

You may use, copy, modify this code for any purpose and without fee. You may distribute this ORIGINAL package.

-----— Complex DFT (Discrete Fourier Transform) -----— [definition] <case1> X[k1][k2] = sum_j1=0^n1-1 sum_j2=0^n2-1 x[j1][j2] * exp(2*pi*i*j1*k1/n1) * exp(2*pi*i*j2*k2/n2), 0<=k1<n1, 0<=k2<n2 <case2> X[k1][k2] = sum_j1=0^n1-1 sum_j2=0^n2-1 x[j1][j2] * exp(-2*pi*i*j1*k1/n1) * exp(-2*pi*i*j2*k2/n2), 0<=k1<n1, 0<=k2<n2 (notes: sum_j=0^n-1 is a summation from j=0 to n-1) [usage] <case1> ip[0] = 0; // first time only cdft2d(n1, 2*n2, 1, a, t, ip, w); <case2> ip[0] = 0; // first time only cdft2d(n1, 2*n2, -1, a, t, ip, w); [parameters] n1 :data length (int) n1 >= 1, n1 = power of 2 2*n2 :data length (int) n2 >= 1, n2 = power of 2 a[0...n1-1][0...2*n2-1] :input/output data (double **) input data a[j1][2*j2] = Re(x[j1][j2]), a[j1][2*j2+1] = Im(x[j1][j2]), 0<=j1<n1, 0<=j2<n2 output data a[k1][2*k2] = Re(X[k1][k2]), a[k1][2*k2+1] = Im(X[k1][k2]), 0<=k1<n1, 0<=k2<n2 t[0...2*n1-1] :work area (double *) ip[0...*] :work area for bit reversal (int *) length of ip >= 2+sqrt(n) ; if n % 4 == 0 2+sqrt(n/2); otherwise (n = max(n1, n2)) ip[0],ip[1] are pointers of the cos/sin table. w[0...*] :cos/sin table (double *) length of w >= max(n1/2, n2/2) w[],ip[] are initialized if ip[0] == 0. [remark] Inverse of cdft2d(n1, 2*n2, -1, a, t, ip, w); is cdft2d(n1, 2*n2, 1, a, t, ip, w); for (j1 = 0; j1 <= n1 - 1; j1++) { for (j2 = 0; j2 <= 2 * n2 - 1; j2++) { a[j1][j2] *= 1.0 / (n1 * n2); } }

Definition at line 886 of file fourier.cpp.

References cdft(), and makewt().

Referenced by dft2_complex(), and idft2_complex().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cftbsub()

static void mrpt::math::cftbsub ( int  n,
FFT_TYPE a,
FFT_TYPE w 
)
static

Definition at line 156 of file fourier.cpp.

Referenced by cdft(), and rdft().

Here is the caller graph for this function:

◆ cftfsub()

static void mrpt::math::cftfsub ( int  n,
FFT_TYPE a,
FFT_TYPE w 
)
static

Definition at line 276 of file fourier.cpp.

Referenced by cdft(), and rdft().

Here is the caller graph for this function:

◆ containerFromPoseOrPoint()

template<class CONTAINER , class POINT_OR_POSE >
CONTAINER & mrpt::math::containerFromPoseOrPoint ( CONTAINER &  C,
const POINT_OR_POSE &  p 
)

Conversion of poses (TPose2D,TPoint2D,..., mrpt::poses::CPoint2D,CPose3D,...) to MRPT containers (vector/matrix)

Conversion of poses to MRPT containers (vector/matrix)

Definition at line 21 of file point_poses2vectors.h.

References static_size.

◆ countCommonElements()

template<class CONTAINER1 , class CONTAINER2 >
size_t mrpt::math::countCommonElements ( const CONTAINER1 &  a,
const CONTAINER2 &  b 
)

Counts the number of elements that appear in both STL-like containers (comparison through the == operator) It is assumed that no repeated elements appear within each of the containers.

Definition at line 269 of file ops_containers.h.

Referenced by mrpt::slam::CRangeBearingKFSLAM::computeOffDiagonalBlocksApproximationError().

Here is the caller graph for this function:

◆ cov()

template<class MATRIX >
Eigen::Matrix< typename MATRIX::Scalar, MATRIX::ColsAtCompileTime, MATRIX::ColsAtCompileTime> mrpt::math::cov ( const MATRIX &  v)
inline

Computes the covariance matrix from a list of samples in an NxM matrix, where each row is a sample, so the covariance is MxM.

Parameters
vThe set of data, as a NxM matrix.
out_covThe output MxM matrix for the estimated covariance matrix.
See also
math::mean,math::stddev, math::cov

Definition at line 148 of file ops_matrices.h.

References meanAndCovMat().

Referenced by mrpt::poses::CPosePDFGaussianInf::bayesianFusion(), mrpt::detectors::CFaceDetection::checkIfFacePlaneCov(), mrpt::poses::CPose3DPDFGaussianInf::copyFrom(), mrpt::poses::CPosePDFSOG::copyFrom(), mrpt::random::CRandomGenerator::drawDefinitePositiveMatrix(), mrpt::random::CRandomGenerator::drawGaussianMultivariate(), mrpt::random::CRandomGenerator::drawGaussianMultivariateMany(), mrpt::poses::CPose3DPDFGaussianInf::drawManySamples(), mrpt::poses::CPosePDFGaussianInf::drawManySamples(), mrpt::poses::CPose3DPDFGaussianInf::drawSingleSample(), mrpt::poses::CPosePDFGaussianInf::drawSingleSample(), mrpt::poses::CPosePDFGaussianInf::evaluateNormalizedPDF(), PosePDFGaussTests::generateRandomPose2DPDF(), Pose3DPDFGaussTests::generateRandomPose3DPDF(), Pose3DQuatPDFGaussTests::generateRandomPose3DPDF(), mrpt::math::CProbabilityDensityFunction< CPose2D, 3 >::getCovariance(), mrpt::poses::CPosePDFGrid::getCovarianceAndMean(), mrpt::poses::CPointPDFParticles::getCovarianceAndMean(), mrpt::poses::CPose3DPDFParticles::getCovarianceAndMean(), mrpt::poses::CPose3DQuatPDFGaussianInf::getCovarianceAndMean(), mrpt::poses::CPosePDFParticles::getCovarianceAndMean(), mrpt::math::CProbabilityDensityFunction< CPose2D, 3 >::getCovarianceDynAndMean(), mrpt::math::CProbabilityDensityFunction< CPose2D, 3 >::getInformationMatrix(), mrpt::poses::CPosePDFSOG::getMostLikelyCovarianceAndMean(), mrpt::pbmap::getMultiDimMeanShift_color(), mrpt::poses::CPosePDFSOG::inverse(), mahalanobisDistance(), mahalanobisDistance2(), mahalanobisDistance2AndLogPDF(), mahalanobisDistance2AndPDF(), mrpt::poses::CPose3DPDFGaussianInf::mahalanobisDistanceTo(), MATLAB_plotCovariance2D(), mrpt::poses::CPosePDFSOG::mergeModes(), normalPDF(), mrpt::poses::CPosePDFGaussianInf::operator+=(), mrpt::obs::CActionRobotMovement2D::prepareFastDrawSingleSample_modelGaussian(), mrpt::slam::CMetricMapBuilderRBPF::processActionObservation(), mrpt::random::randomNormalMultiDimensional(), mrpt::random::randomNormalMultiDimensionalMany(), run_test_pf_localization(), mrpt::slam::CRangeBearingKFSLAM2D::saveMapAndPath2DRepresentationAsMATLABFile(), mrpt::slam::CRangeBearingKFSLAM::saveMapAndPath2DRepresentationAsMATLABFile(), mrpt::maps::CLandmarksMap::saveToMATLABScript2D(), mrpt::poses::CPoseRandomSampler::setPosePDF(), and TEST().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ covVector()

template<class VECTOR_OF_VECTOR , class RETURN_MATRIX >
RETURN_MATRIX mrpt::math::covVector ( const VECTOR_OF_VECTOR &  v)
inline

Computes the covariance matrix from a list of values given as a vector of vectors, where each row is a sample.

Parameters
vThe set of data, as a vector of N vectors of M elements.
out_covThe output MxM matrix for the estimated covariance matrix.
Template Parameters
RETURN_MATRIXThe type of the returned matrix, e.g. Eigen::MatrixXd
See also
math::mean,math::stddev, math::cov, meanAndCovVec

Definition at line 392 of file ops_containers.h.

References meanAndCovVec().

Here is the call graph for this function:

◆ cumsum() [1/2]

template<class CONTAINER1 , class CONTAINER2 >
void mrpt::math::cumsum ( const CONTAINER1 &  in_data,
CONTAINER2 &  out_cumsum 
)
inline

Definition at line 108 of file ops_containers.h.

References cumsum_tmpl().

Referenced by confidenceIntervals(), and cumsum().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cumsum() [2/2]

template<class CONTAINER >
CONTAINER mrpt::math::cumsum ( const CONTAINER &  in_data)
inline

Computes the cumulative sum of all the elements.

See also
sum

Definition at line 119 of file ops_containers.h.

References cumsum().

Here is the call graph for this function:

◆ cumsum_tmpl()

template<class CONTAINER1 , class CONTAINER2 , typename VALUE >
void mrpt::math::cumsum_tmpl ( const CONTAINER1 &  in_data,
CONTAINER2 &  out_cumsum 
)
inline

Computes the cumulative sum of all the elements, saving the result in another container.

This works for both matrices (even mixing their types) and vectores/arrays (even mixing types), and even to store the cumsum of any matrix into any vector/array, but not in opposite direction.

See also
sum

Definition at line 99 of file ops_containers.h.

References resizeLike().

Referenced by cumsum().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ dotProduct() [1/2]

template<class CONTAINER1 , class CONTAINER2 >
CONTAINER1::Scalar mrpt::math::dotProduct ( const CONTAINER1 &  v1,
const CONTAINER1 &  v2 
)
inline

v1*v2: The dot product of two containers (vectors/arrays/matrices)

Definition at line 188 of file ops_containers.h.

◆ dotProduct() [2/2]

template<size_t N, class T , class U , class V >
T mrpt::math::dotProduct ( const U &  v1,
const V &  v2 
)
inline

v1*v2: The dot product of any two objects supporting []

Definition at line 196 of file ops_containers.h.

◆ estimateJacobian()

template<class VECTORLIKE , class VECTORLIKE2 , class VECTORLIKE3 , class MATRIXLIKE , class USERPARAM >
void mrpt::math::estimateJacobian ( const VECTORLIKE &  x,
const std::function< void(const VECTORLIKE &x, const USERPARAM &y, VECTORLIKE3 &out)> &  functor,
const VECTORLIKE2 &  increments,
const USERPARAM &  userParam,
MATRIXLIKE &  out_Jacobian 
)

Estimate the Jacobian of a multi-dimensional function around a point "x", using finite differences of a given size in each input dimension.

The template argument USERPARAM is for the data can be passed to the functor. If it is not required, set to "int" or any other basic type.

This is a generic template which works with: VECTORLIKE: vector_float, CVectorDouble, CArrayNumeric<>, double [N], ... MATRIXLIKE: CMatrixTemplateNumeric, CMatrixFixedNumeric

Definition at line 30 of file num_jacobian.h.

References ASSERT_, MRPT_END, and MRPT_START.

Referenced by Pose3DTests::check_jacob_expe_e_at_0(), Pose3DTests::check_jacob_LnT_T(), mrpt::math::CLevenbergMarquardtTempl< VECTORTYPE, USERPARAM >::execute(), mrpt::vision::recompute_errors_and_Jacobians(), mrpt::bayes::CKalmanFilterCapable< 7, 3, 3, 7 >::runOneKalmanIteration(), Pose3DQuatTests::test_composePointJacob(), Pose3DTests::test_composePointJacob(), Pose3DTests::test_composePointJacob_se3(), Pose3DQuatTests::test_invComposePointJacob(), Pose3DTests::test_invComposePointJacob(), Pose3DTests::test_invComposePointJacob_se3(), Pose3DTests::test_Jacob_dAexpeD_de(), Pose3DTests::test_Jacob_dDexpe_de(), Pose3DTests::test_Jacob_dexpeD_de(), SE_traits_tests< POSE_TYPE >::test_jacobs_AB(), SE_traits_tests< POSE_TYPE >::test_jacobs_DinvP1InvP2(), Pose3DQuatTests::test_normalizeJacob(), Pose3DQuatTests::test_sphericalCoords(), Pose3DQuatPDFGaussTests::testCompositionJacobian(), Pose3DPDFGaussTests::testCompositionJacobian(), and transform_gaussian_linear().

Here is the caller graph for this function:

◆ four1()

static void mrpt::math::four1 ( float  data[],
unsigned long  nn,
int  isign 
)
static

Definition at line 31 of file fourier.cpp.

Referenced by realft().

Here is the caller graph for this function:

◆ getColumnAccessor() [1/4]

template<typename MAT >
CMatrixColumnAccessor<MAT> mrpt::math::getColumnAccessor ( MAT &  m,
size_t  colIdx 
)
inline

Definition at line 547 of file matrix_adaptors.h.

◆ getColumnAccessor() [2/4]

template<typename MAT >
CMatrixColumnAccessorExtended<MAT> mrpt::math::getColumnAccessor ( MAT &  m,
size_t  colIdx,
size_t  offset,
size_t  space = 1 
)
inline

Definition at line 622 of file matrix_adaptors.h.

◆ getColumnAccessor() [3/4]

template<typename MAT >
CConstMatrixColumnAccessor<MAT> mrpt::math::getColumnAccessor ( const MAT &  m,
size_t  colIdx 
)
inline

Definition at line 678 of file matrix_adaptors.h.

◆ getColumnAccessor() [4/4]

template<typename MAT >
CConstMatrixColumnAccessorExtended<MAT> mrpt::math::getColumnAccessor ( const MAT &  m,
size_t  colIdx,
size_t  offset,
size_t  space = 1 
)
inline

Definition at line 739 of file matrix_adaptors.h.

◆ getRowAccessor() [1/4]

template<typename MAT >
CMatrixRowAccessor<MAT> mrpt::math::getRowAccessor ( MAT &  m,
size_t  rowIdx 
)
inline

Definition at line 279 of file matrix_adaptors.h.

◆ getRowAccessor() [2/4]

template<typename MAT >
CMatrixRowAccessorExtended<MAT> mrpt::math::getRowAccessor ( MAT &  m,
size_t  rowIdx,
size_t  offset,
size_t  space = 1 
)
inline

Definition at line 356 of file matrix_adaptors.h.

◆ getRowAccessor() [3/4]

template<typename MAT >
CConstMatrixRowAccessor<MAT> mrpt::math::getRowAccessor ( const MAT &  m,
size_t  rowIdx 
)
inline

Definition at line 414 of file matrix_adaptors.h.

◆ getRowAccessor() [4/4]

template<typename MAT >
CConstMatrixRowAccessorExtended<MAT> mrpt::math::getRowAccessor ( const MAT &  m,
size_t  rowIdx,
size_t  offset,
size_t  space = 1 
)
inline

Definition at line 476 of file matrix_adaptors.h.

◆ histogram()

template<class CONTAINER >
std::vector<double> mrpt::math::histogram ( const CONTAINER &  v,
double  limit_min,
double  limit_max,
size_t  number_bins,
bool  do_normalization = false,
std::vector< double > *  out_bin_centers = nullptr 
)

Computes the normalized or normal histogram of a sequence of numbers given the number of bins and the limits.

In any case this is a "linear" histogram, i.e. for matrices, all the elements are taken as if they were a plain sequence, not taking into account they were in columns or rows. If desired, out_bin_centers can be set to receive the bins centers.

Definition at line 62 of file ops_containers.h.

References mrpt::math::CHistogram::add(), mrpt::math::CHistogram::getHistogram(), and mrpt::math::CHistogram::getHistogramNormalized().

Referenced by confidenceIntervals(), and mrpt::pbmap::getMode().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ homogeneousMatrixInverse() [1/3]

template<class MATRIXLIKE1 , class MATRIXLIKE2 >
void mrpt::math::homogeneousMatrixInverse ( const MATRIXLIKE1 &  M,
MATRIXLIKE2 &  out_inverse_M 
)

Efficiently compute the inverse of a 4x4 homogeneous matrix by only transposing the rotation 3x3 part and solving the translation with dot products.

This is a generic template which works with: MATRIXLIKE: CMatrixTemplateNumeric, CMatrixFixedNumeric

Definition at line 22 of file homog_matrices.h.

References ASSERT_, MRPT_END, and MRPT_START.

Referenced by mrpt::poses::CPoseOrPoint< CPoint3D >::getInverseHomogeneousMatrix(), mrpt::math::TPose3D::getInverseHomogeneousMatrix(), mrpt::poses::CPose3D::inverse(), mrpt::poses::CPose3D::inverseComposeFrom(), mrpt::poses::CPose3D::inverseComposePoint(), and mrpt::obs::detail::project3DPointsFromDepthImageInto().

Here is the caller graph for this function:

◆ homogeneousMatrixInverse() [2/3]

template<class IN_ROTMATRIX , class IN_XYZ , class OUT_ROTMATRIX , class OUT_XYZ >
void mrpt::math::homogeneousMatrixInverse ( const IN_ROTMATRIX &  in_R,
const IN_XYZ &  in_xyz,
OUT_ROTMATRIX &  out_R,
OUT_XYZ &  out_xyz 
)

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Definition at line 77 of file homog_matrices.h.

References ASSERT_, MRPT_END, and MRPT_START.

◆ homogeneousMatrixInverse() [3/3]

template<class MATRIXLIKE >
void mrpt::math::homogeneousMatrixInverse ( MATRIXLIKE &  M)
inline

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Definition at line 106 of file homog_matrices.h.

References ASSERTDEB_.

◆ isLeft()

double mrpt::math::isLeft ( const mrpt::math::TPoint2D P0,
const mrpt::math::TPoint2D P1,
const mrpt::math::TPoint2D P2 
)
inline

Definition at line 1064 of file lightweight_geom_data.cpp.

References mrpt::math::TPoint2D::x, and mrpt::math::TPoint2D::y.

Referenced by mrpt::math::TPolygon2D::contains().

Here is the caller graph for this function:

◆ kmeans()

template<class LIST_OF_VECTORS1 , class LIST_OF_VECTORS2 >
double mrpt::math::kmeans ( const size_t  k,
const LIST_OF_VECTORS1 &  points,
std::vector< int > &  assignments,
LIST_OF_VECTORS2 *  out_centers = nullptr,
const size_t  attempts = 3 
)
inline

k-means algorithm to cluster a list of N points of arbitrary dimensionality into exactly K clusters.

The list of input points can be any template CONTAINER<POINT> with:

  • CONTAINER can be: Any STL container: std::vector,std::list,std::deque,...
  • POINT can be:
    • std::vector<double/float>
    • CArrayDouble<N> / CArrayFloat<N>
Parameters
k[IN] Number of cluster to look for.
points[IN] The list of N input points. It can be any STL-like containers of std::vector<float/double>, for example a std::vector<mrpt::math::CVectorDouble>, a std::list<CVectorFloat>, etc...
assignments[OUT] At output it will have a number [0,k-1] for each of the N input points.
out_centers[OUT] If not nullptr, at output will have the centers of each group. Can be of any of the supported types of "points", but the basic coordinates should be float or double exactly as in "points".
attempts[IN] Number of attempts.
See also
A more advanced algorithm, see: kmeanspp
Note
Uses the kmeans++ implementation by David Arthur (2009, http://www.stanford.edu/~darthur/kmpp.zip).

Definition at line 123 of file include/mrpt/math/kmeans.h.

References mrpt::math::detail::stub_kmeans().

Here is the call graph for this function:

◆ kmeanspp()

template<class LIST_OF_VECTORS1 , class LIST_OF_VECTORS2 >
double mrpt::math::kmeanspp ( const size_t  k,
const LIST_OF_VECTORS1 &  points,
std::vector< int > &  assignments,
LIST_OF_VECTORS2 *  out_centers = nullptr,
const size_t  attempts = 3 
)
inline

k-means++ algorithm to cluster a list of N points of arbitrary dimensionality into exactly K clusters.

The list of input points can be any template CONTAINER<POINT> with:

  • CONTAINER can be: Any STL container: std::vector,std::list,std::deque,...
  • POINT can be:
    • std::vector<double/float>
    • CArrayDouble<N> / CArrayFloat<N>
Parameters
k[IN] Number of cluster to look for.
points[IN] The list of N input points. It can be any STL-like containers of std::vector<float/double>, for example a std::vector<mrpt::math::CVectorDouble>, a std::list<CVectorFloat>, etc...
assignments[OUT] At output it will have a number [0,k-1] for each of the N input points.
out_centers[OUT] If not nullptr, at output will have the centers of each group. Can be of any of the supported types of "points", but the basic coordinates should be float or double exactly as in "points".
attempts[IN] Number of attempts.
See also
The standard kmeans algorithm, see: kmeans
Note
Uses the kmeans++ implementation by David Arthur (2009, http://www.stanford.edu/~darthur/kmpp.zip).

Definition at line 158 of file include/mrpt/math/kmeans.h.

References mrpt::math::detail::stub_kmeans().

Referenced by find_chessboard_corners_multiple().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ makect()

static void mrpt::math::makect ( int  nc,
int *  ip,
FFT_TYPE c 
)
static

Copyright(C) 1997 Takuya OOURA (email: ooura.nosp@m.@mmm.nosp@m..t.u-.nosp@m.toky.nosp@m.o.ac..nosp@m.jp).

You may use, copy, modify this code for any purpose and without fee. You may distribute this ORIGINAL package.

Definition at line 430 of file fourier.cpp.

Referenced by rdft(), and rdft2d().

Here is the caller graph for this function:

◆ makewt()

static void mrpt::math::makewt ( int  nw,
int *  ip,
FFT_TYPE w 
)
static

Definition at line 396 of file fourier.cpp.

References bitrv2().

Referenced by cdft(), cdft2d(), rdft(), and rdft2d().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ maximum() [1/2]

◆ maximum() [2/2]

template<typename T >
T mrpt::math::maximum ( const std::vector< T > &  v)
inline

Definition at line 148 of file ops_containers.h.

References ASSERT_, and mrpt::keep_max().

Here is the call graph for this function:

◆ mean()

template<class CONTAINER >
double mrpt::math::mean ( const CONTAINER &  v)
inline

Computes the mean value of a vector.

Returns
The mean, as a double number.
See also
math::stddev,math::meanAndStd

Definition at line 232 of file ops_containers.h.

References sum().

Referenced by mrpt::slam::CGridMapAligner::AlignPDF_robustMatch(), confidenceIntervals(), mrpt::maps::CGasConcentrationGridMap2D::internal_insertObservation(), MATLAB_plotCovariance2D(), mrpt::slam::PF_implementation< mrpt::math::TPose3D, CMonteCarloLocalization3D, mrpt::bayes::particle_storage_mode::VALUE >::PF_SLAM_implementation_pfAuxiliaryPFStandardAndOptimal(), and mrpt::hmtslam::CLSLAM_RBPF_2DLASER::prediction_and_update_pfAuxiliaryPFOptimal().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ meanAndCovMat()

template<class MAT_IN , class VECTOR , class MAT_OUT >
void mrpt::math::meanAndCovMat ( const MAT_IN &  v,
VECTOR &  out_mean,
MAT_OUT &  out_cov 
)

Computes the mean vector and covariance from a list of samples in an NxM matrix, where each row is a sample, so the covariance is MxM.

Parameters
vThe set of data as a NxM matrix, of types: CMatrixTemplateNumeric or CMatrixFixedNumeric
out_meanThe output M-vector for the estimated mean.
out_covThe output MxM matrix for the estimated covariance matrix, this can also be either a fixed-size of dynamic size matrix.
See also
mrpt::math::meanAndCovVec, math::mean,math::stddev, math::cov

Definition at line 102 of file ops_matrices.h.

References ASSERTMSG_, and mrpt::square().

Referenced by cov().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ meanAndCovVec()

template<class VECTOR_OF_VECTOR , class VECTORLIKE , class MATRIXLIKE >
void mrpt::math::meanAndCovVec ( const VECTOR_OF_VECTOR &  v,
VECTORLIKE &  out_mean,
MATRIXLIKE &  out_cov 
)

Computes the mean vector and covariance from a list of values given as a vector of vectors, where each row is a sample.

Parameters
vThe set of data, as a vector of N vectors of M elements.
out_meanThe output M-vector for the estimated mean.
out_covThe output MxM matrix for the estimated covariance matrix.
See also
mrpt::math::meanAndCovMat, math::mean,math::stddev, math::cov

Definition at line 347 of file ops_containers.h.

References ASSERTMSG_, and mrpt::square().

Referenced by covVector().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ meanAndStd()

template<class VECTORLIKE >
void mrpt::math::meanAndStd ( const VECTORLIKE &  v,
double &  out_mean,
double &  out_std,
bool  unbiased = true 
)

Computes the standard deviation of a vector.

Parameters
vThe set of data
out_meanThe output for the estimated mean
out_stdThe output for the estimated standard deviation
unbiasedIf set to true or false the std is normalized by "N-1" or "N", respectively.
See also
math::mean,math::stddev

Definition at line 302 of file ops_containers.h.

References mrpt::square(), and sum().

Referenced by mrpt::vision::CFeature::internal_distanceBetweenPolarImages(), stddev(), and mrpt::vision::updateBaseList().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ minimum() [1/2]

template<class CONTAINER >
CONTAINER::Scalar mrpt::math::minimum ( const CONTAINER &  v)
inline

◆ minimum() [2/2]

template<typename T >
T mrpt::math::minimum ( const std::vector< T > &  v)
inline

Definition at line 156 of file ops_containers.h.

References ASSERT_, and mrpt::keep_min().

Here is the call graph for this function:

◆ minimum_maximum() [1/2]

template<typename T >
void mrpt::math::minimum_maximum ( const std::vector< T > &  V,
T &  curMin,
T &  curMax 
)
inline

Return the maximum and minimum values of a std::vector.

Definition at line 242 of file ops_containers.h.

References ASSERT_, mrpt::keep_max(), and mrpt::keep_min().

Referenced by adjustRange(), confidenceIntervals(), and mrpt::opengl::CPointCloud::render().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ minimum_maximum() [2/2]

template<class Derived >
void mrpt::math::minimum_maximum ( const Eigen::MatrixBase< Derived > &  V,
typename Eigen::MatrixBase< Derived >::Scalar curMin,
typename Eigen::MatrixBase< Derived >::Scalar curMax 
)
inline

Return the maximum and minimum values of a Eigen-based vector or matrix.

Definition at line 256 of file ops_containers.h.

◆ multiply_A_skew3()

template<class MAT_A , class SKEW_3VECTOR , class MAT_OUT >
void mrpt::math::multiply_A_skew3 ( const MAT_A &  A,
const SKEW_3VECTOR &  v,
MAT_OUT &  out 
)

Only for vectors/arrays "v" of length3, compute out = A * Skew(v), where Skew(v) is the skew symmetric matric generated from v (see mrpt::math::skew_symmetric3)

Definition at line 167 of file ops_matrices.h.

References ASSERT_EQUAL_, MRPT_END, and MRPT_START.

Referenced by multiply_A_skew3().

Here is the caller graph for this function:

◆ multiply_HCHt()

template<typename MAT_H , typename MAT_C , typename MAT_R >
void mrpt::math::multiply_HCHt ( const MAT_H &  H,
const MAT_C &  C,
MAT_R &  R,
bool  accumResultInOutput 
)
inline

R = H * C * H^t (with C symmetric)

Definition at line 50 of file ops_matrices.h.

References R.

◆ multiply_HCHt_scalar()

template<typename VECTOR_H , typename MAT_C >
MAT_C::Scalar mrpt::math::multiply_HCHt_scalar ( const VECTOR_H &  H,
const MAT_C &  C 
)

r (a scalar) = H * C * H^t (with a vector H and a symmetric matrix C)

Definition at line 68 of file ops_matrices.h.

Referenced by mrpt::graphs::detail::graph_ops< graph_t >::auxMaha2Dist(), mrpt::slam::joint_pdf_metric(), KLD_Gaussians(), mahalanobisDistance2(), mahalanobisDistance2AndLogPDF(), mrpt::poses::CPosePDFGaussian::mahalanobisDistanceTo(), mrpt::poses::CPosePDFGaussianInf::mahalanobisDistanceTo(), normalPDF(), and normalPDFInf().

Here is the caller graph for this function:

◆ multiply_HtCH()

template<typename MAT_H , typename MAT_C , typename MAT_R >
void mrpt::math::multiply_HtCH ( const MAT_H &  H,
const MAT_C &  C,
MAT_R &  R,
bool  accumResultInOutput 
)

R = H^t * C * H (with C symmetric)

Definition at line 75 of file ops_matrices.h.

References R.

◆ multiply_skew3_A()

template<class SKEW_3VECTOR , class MAT_A , class MAT_OUT >
void mrpt::math::multiply_skew3_A ( const SKEW_3VECTOR &  v,
const MAT_A &  A,
MAT_OUT &  out 
)

Only for vectors/arrays "v" of length3, compute out = Skew(v) * A, where Skew(v) is the skew symmetric matric generated from v (see mrpt::math::skew_symmetric3)

Definition at line 191 of file ops_matrices.h.

References ASSERT_EQUAL_, MRPT_END, and MRPT_START.

Referenced by multiply_skew3_A().

Here is the caller graph for this function:

◆ ncc_vector()

template<class CONT1 , class CONT2 >
double mrpt::math::ncc_vector ( const CONT1 &  patch1,
const CONT2 &  patch2 
)

Normalised Cross Correlation between two vector patches The Matlab code for this is a = a - mean2(a); b = b - mean2(b); r = sum(sum(a.

*b))/sqrt(sum(sum(a.*a))*sum(sum(b.*b)));

Definition at line 407 of file ops_containers.h.

References ASSERT_, ASSERTMSG_, and mrpt::square().

Here is the call graph for this function:

◆ norm()

◆ norm_inf()

template<class CONTAINER >
CONTAINER::Scalar mrpt::math::norm_inf ( const CONTAINER &  v)
inline

Definition at line 127 of file ops_containers.h.

Referenced by mrpt::math::CLevenbergMarquardtTempl< VECTORTYPE, USERPARAM >::execute(), and mrpt::graphslam::optimize_graph_spa_levmarq().

Here is the caller graph for this function:

◆ operator<<() [1/2]

CArchive & mrpt::math::operator<< ( mrpt::serialization::CArchive s,
const mrpt::math::CVectorFloat a 
)

Definition at line 627 of file math.cpp.

◆ operator<<() [2/2]

CArchive & mrpt::math::operator<< ( mrpt::serialization::CArchive s,
const mrpt::math::CVectorDouble a 
)

Definition at line 633 of file math.cpp.

◆ operator>>() [1/4]

mrpt::serialization::CArchive& mrpt::math::operator>> ( mrpt::serialization::CArchive in,
CMatrixD::Ptr pObj 
)

◆ operator>>() [2/4]

mrpt::serialization::CArchive& mrpt::math::operator>> ( mrpt::serialization::CArchive in,
CMatrix::Ptr pObj 
)

◆ operator>>() [3/4]

CArchive & mrpt::math::operator>> ( mrpt::serialization::CArchive in,
mrpt::math::CVectorDouble a 
)

Definition at line 621 of file math.cpp.

References mrpt::serialization::CArchive::ReadBufferFixEndianness().

Here is the call graph for this function:

◆ operator>>() [4/4]

CArchive & mrpt::math::operator>> ( mrpt::serialization::CArchive in,
mrpt::math::CVectorFloat a 
)

Definition at line 615 of file math.cpp.

References mrpt::serialization::CArchive::ReadBufferFixEndianness().

Here is the call graph for this function:

◆ ransac3Dplane_degenerate()

template<typename T >
bool mrpt::math::ransac3Dplane_degenerate ( const CMatrixTemplateNumeric< T > &  allData,
const std::vector< size_t > &  useIndices 
)

Return "true" if the selected points are a degenerate (invalid) case.

Definition at line 93 of file ransac_applications.cpp.

References MRPT_UNUSED_PARAM.

◆ ransac3Dplane_distance()

template<typename T >
void mrpt::math::ransac3Dplane_distance ( const CMatrixTemplateNumeric< T > &  allData,
const vector< CMatrixTemplateNumeric< T >> &  testModels,
const T  distanceThreshold,
unsigned int &  out_bestModelIndex,
std::vector< size_t > &  out_inlierIndices 
)

Definition at line 60 of file ransac_applications.cpp.

References ASSERT_, and mrpt::math::TPlane::coefs.

◆ ransac3Dplane_fit()

template<typename T >
void mrpt::math::ransac3Dplane_fit ( const CMatrixTemplateNumeric< T > &  allData,
const std::vector< size_t > &  useIndices,
vector< CMatrixTemplateNumeric< T >> &  fitModels 
)

Definition at line 26 of file ransac_applications.cpp.

References ASSERT_, and mrpt::math::TPlane::coefs.

◆ rdft()

static void mrpt::math::rdft ( int  n,
int  isgn,
FFT_TYPE a,
int *  ip,
FFT_TYPE w 
)
static

Definition at line 566 of file fourier.cpp.

References bitrv2(), cftbsub(), cftfsub(), makect(), makewt(), rftbsub(), and rftfsub().

Referenced by rdft2d().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rdft2d()

static void mrpt::math::rdft2d ( int  n1,
int  n2,
int  isgn,
FFT_TYPE **  a,
FFT_TYPE t,
int *  ip,
FFT_TYPE w 
)
static


Copyright(C) 1997 Takuya OOURA (email: ooura.nosp@m.@mmm.nosp@m..t.u-.nosp@m.toky.nosp@m.o.ac..nosp@m.jp).

You may use, copy, modify this code for any purpose and without fee. You may distribute this ORIGINAL package.

-----— Real DFT / Inverse of Real DFT -----— [definition] <case1> RDFT R[k1][k2] = sum_j1=0^n1-1 sum_j2=0^n2-1 a[j1][j2] * cos(2*pi*j1*k1/n1 + 2*pi*j2*k2/n2), 0<=k1<n1, 0<=k2<n2 I[k1][k2] = sum_j1=0^n1-1 sum_j2=0^n2-1 a[j1][j2] * sin(2*pi*j1*k1/n1 + 2*pi*j2*k2/n2), 0<=k1<n1, 0<=k2<n2 <case2> IRDFT (excluding scale) a[k1][k2] = (1/2) * sum_j1=0^n1-1 sum_j2=0^n2-1 (R[j1][j2] * cos(2*pi*j1*k1/n1 + 2*pi*j2*k2/n2) + I[j1][j2] * sin(2*pi*j1*k1/n1 + 2*pi*j2*k2/n2)), 0<=k1<n1, 0<=k2<n2 (notes: R[n1-k1][n2-k2] = R[k1][k2], I[n1-k1][n2-k2] = -I[k1][k2], R[n1-k1][0] = R[k1][0], I[n1-k1][0] = -I[k1][0], R[0][n2-k2] = R[0][k2], I[0][n2-k2] = -I[0][k2], 0<k1<n1, 0<k2<n2) [usage] <case1> ip[0] = 0; // first time only rdft2d(n1, n2, 1, a, t, ip, w); <case2> ip[0] = 0; // first time only rdft2d(n1, n2, -1, a, t, ip, w); [parameters] n1 :data length (int) n1 >= 2, n1 = power of 2 n2 :data length (int) n2 >= 2, n2 = power of 2 a[0...n1-1][0...n2-1] :input/output data (FFT_TYPE **) <case1> output data a[k1][2*k2] = R[k1][k2] = R[n1-k1][n2-k2], a[k1][2*k2+1] = I[k1][k2] = -I[n1-k1][n2-k2], 0<k1<n1, 0<k2<n2/2, a[0][2*k2] = R[0][k2] = R[0][n2-k2], a[0][2*k2+1] = I[0][k2] = -I[0][n2-k2], 0<k2<n2/2, a[k1][0] = R[k1][0] = R[n1-k1][0], a[k1][1] = I[k1][0] = -I[n1-k1][0], a[n1-k1][1] = R[k1][n2/2] = R[n1-k1][n2/2], a[n1-k1][0] = -I[k1][n2/2] = I[n1-k1][n2/2], 0<k1<n1/2, a[0][0] = R[0][0], a[0][1] = R[0][n2/2], a[n1/2][0] = R[n1/2][0], a[n1/2][1] = R[n1/2][n2/2] <case2> input data a[j1][2*j2] = R[j1][j2] = R[n1-j1][n2-j2], a[j1][2*j2+1] = I[j1][j2] = -I[n1-j1][n2-j2], 0<j1<n1, 0<j2<n2/2, a[0][2*j2] = R[0][j2] = R[0][n2-j2], a[0][2*j2+1] = I[0][j2] = -I[0][n2-j2], 0<j2<n2/2, a[j1][0] = R[j1][0] = R[n1-j1][0], a[j1][1] = I[j1][0] = -I[n1-j1][0], a[n1-j1][1] = R[j1][n2/2] = R[n1-j1][n2/2], a[n1-j1][0] = -I[j1][n2/2] = I[n1-j1][n2/2], 0<j1<n1/2, a[0][0] = R[0][0], a[0][1] = R[0][n2/2], a[n1/2][0] = R[n1/2][0], a[n1/2][1] = R[n1/2][n2/2] t[0...2*n1-1] :work area (FFT_TYPE *) ip[0...*] :work area for bit reversal (int *) length of ip >= 2+sqrt(n) ; if n % 4 == 0 2+sqrt(n/2); otherwise (n = max(n1, n2/2)) ip[0],ip[1] are pointers of the cos/sin table. w[0...*] :cos/sin table (FFT_TYPE *) length of w >= max(n1/2, n2/4) + n2/4 w[],ip[] are initialized if ip[0] == 0. [remark] Inverse of rdft2d(n1, n2, 1, a, t, ip, w); is rdft2d(n1, n2, -1, a, t, ip, w); for (j1 = 0; j1 <= n1 - 1; j1++) { for (j2 = 0; j2 <= n2 - 1; j2++) { a[j1][j2] *= 2.0 / (n1 * n2); } }

Definition at line 734 of file fourier.cpp.

References cdft(), makect(), makewt(), and rdft().

Referenced by dft2_real(), and idft2_real().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ realft()

static void mrpt::math::realft ( float  data[],
unsigned long  n 
)
static

Definition at line 100 of file fourier.cpp.

References four1().

Referenced by fft_real().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ removeRepVertices()

template<class T >
void mrpt::math::removeRepVertices ( T &  poly)
inline

Definition at line 1003 of file lightweight_geom_data.cpp.

References distance(), and getEpsilon().

Referenced by mrpt::math::TPolygon2D::removeRepeatedVertices(), and mrpt::math::TPolygon3D::removeRepeatedVertices().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ removeUnusedVertices()

template<class T >
void mrpt::math::removeUnusedVertices ( T &  poly)
inline

Definition at line 971 of file lightweight_geom_data.cpp.

References distance(), and getEpsilon().

Referenced by mrpt::math::TPolygon2D::removeRedundantVertices(), and mrpt::math::TPolygon3D::removeRedundantVertices().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ resizeLike() [1/2]

template<class EIGEN_CONTAINER >
void mrpt::math::resizeLike ( EIGEN_CONTAINER &  trg,
const EIGEN_CONTAINER &  src 
)

Definition at line 81 of file ops_containers.h.

Referenced by cumsum_tmpl().

Here is the caller graph for this function:

◆ resizeLike() [2/2]

template<typename T >
void mrpt::math::resizeLike ( std::vector< T > &  trg,
const std::vector< T > &  src 
)

Definition at line 86 of file ops_containers.h.

◆ rftbsub()

static void mrpt::math::rftbsub ( int  n,
FFT_TYPE a,
int  nc,
FFT_TYPE c 
)
static

Definition at line 611 of file fourier.cpp.

Referenced by rdft().

Here is the caller graph for this function:

◆ rftfsub()

static void mrpt::math::rftfsub ( int  n,
FFT_TYPE a,
int  nc,
FFT_TYPE c 
)
static

Definition at line 542 of file fourier.cpp.

Referenced by rdft().

Here is the caller graph for this function:

◆ size()

template<class MATRIXLIKE >
size_t mrpt::math::size ( const MATRIXLIKE &  m,
const int  dim 
)
inline

◆ squareNorm()

template<size_t N, class T , class U >
T mrpt::math::squareNorm ( const U &  v)
inline

Compute the square norm of anything implementing [].

See also
norm

Definition at line 179 of file ops_containers.h.

References mrpt::square().

Here is the call graph for this function:

◆ squareNorm_accum()

template<class CONTAINER , typename VALUE >
VALUE mrpt::math::squareNorm_accum ( const VALUE  total,
const CONTAINER &  v 
)

Accumulate the squared-norm of a vector/array/matrix into "total" (this function is compatible with std::accumulate).

Definition at line 171 of file ops_containers.h.

◆ stddev()

template<class VECTORLIKE >
double mrpt::math::stddev ( const VECTORLIKE &  v,
bool  unbiased = true 
)
inline

Computes the standard deviation of a vector.

Parameters
vThe set of data
unbiasedIf set to true or false the std is normalized by "N-1" or "N", respectively.
See also
math::mean,math::meanAndStd

Definition at line 332 of file ops_containers.h.

References meanAndStd().

Referenced by mrpt::pbmap::getHistogramMeanShift().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sum() [1/2]

template<class CONTAINER >
CONTAINER::Scalar mrpt::math::sum ( const CONTAINER &  v)
inline

Computes the sum of all the elements.

Note
If used with containers of integer types (uint8_t, int, etc...) this could overflow. In those cases, use sumRetType the second argument RET to specify a larger type to hold the sum.
See also
cumsum

Definition at line 209 of file ops_containers.h.

Referenced by mrpt::vision::CDifodo::buildCoordinatesPyramid(), mrpt::vision::CDifodo::buildCoordinatesPyramidFast(), Pose3DTests::check_jacob_LnT_T(), mrpt::detectors::CFaceDetection::checkIfFaceRegions(), mrpt::vision::computeHistogramOfOrientations(), mrpt::slam::CRangeBearingKFSLAM::computeOffDiagonalBlocksApproximationError(), mrpt::nav::CHolonomicND::evaluateGaps(), mrpt::detectors::CFaceDetection::experimental_viewFacePointsAndEigenVects(), mrpt::pbmap::getHistogramMeanShift(), mrpt::pbmap::getMultiDimMeanShift_color(), mrpt::graphslam::detail::CEdgeCounter::getTotalNumOfEdges(), mrpt::slam::CICP::ICP_Method_LM(), mrpt::vision::pnp::p3p::jacobi_4x4(), mean(), meanAndStd(), meanAndStd(), meanAndStdAll(), noncentralChi2PDF_CDF(), mrpt::vision::pnp::epnp::qr_solve(), mrpt::vision::pnp::upnp::qr_solve(), mrpt::vision::reprojectionResiduals(), reprojectionResidualsElement(), run_test_so3_avrg(), mrpt::bayes::CKalmanFilterCapable< 7, 3, 3, 7 >::runOneKalmanIteration(), TEST(), Pose3DQuatTests::test_composePointJacob(), Pose3DTests::test_composePointJacob(), Pose3DTests::test_composePointJacob_se3(), QuaternionTests::test_ExpAndLnMatches(), TEST_F(), QuaternionTests::test_gimbalLock(), Pose3DQuatTests::test_invComposePointJacob(), Pose3DTests::test_invComposePointJacob(), Pose3DTests::test_invComposePointJacob_se3(), Pose3DTests::test_inverse(), SE_traits_tests< POSE_TYPE >::test_jacobs_AB(), SE_traits_tests< POSE_TYPE >::test_jacobs_DinvP1InvP2(), QuaternionTests::test_lnAndExpMatches(), Pose3DQuatTests::test_normalizeJacob(), Pose3DQuatTests::test_sphericalCoords(), Pose3DQuatPDFGaussTests::testCompositionJacobian(), Pose3DPDFGaussTests::testCompositionJacobian(), and mrpt::graphs::ScalarFactorGraph::updateEstimation().

Here is the caller graph for this function:

◆ sum() [2/2]

template<typename T >
T mrpt::math::sum ( const std::vector< T > &  v)
inline

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Definition at line 216 of file ops_containers.h.

◆ sumRetType()

template<class CONTAINER , typename RET >
RET mrpt::math::sumRetType ( const CONTAINER &  v)
inline

Computes the sum of all the elements, with a custom return type.

See also
sum, cumsum

Definition at line 224 of file ops_containers.h.




Page generated by Doxygen 1.8.14 for MRPT 1.9.9 Git: 58f856185 Mon May 20 11:43:57 2019 +0200 at lun may 20 11:50:17 CEST 2019