25 namespace mrpt  {       
namespace math  {
    47         if (
x<
p.x) 
return true;
    48         else if (
x>
p.x) 
return false;
    54         if (!m.fromMatlabStringFormat(
s)) 
THROW_EXCEPTION(
"Malformed expression in ::fromString");
    56         x = m.get_unsafe(0,0);
    57         y = m.get_unsafe(0,1);
    70         if (!m.fromMatlabStringFormat(
s)) 
THROW_EXCEPTION(
"Malformed expression in ::fromString");
    72         x = m.get_unsafe(0,0);
    73         y = m.get_unsafe(0,1);
    78         const double A_cosphi = cos(this->phi), A_sinphi = sin(this->phi);
    80         const double new_x = this->
x + 
b.x * A_cosphi - 
b.y * A_sinphi;
    81         const double new_y = this->
y + 
b.x * A_cosphi + 
b.y * A_sinphi;
    89         const double B_cosphi = cos(
b.phi), B_sinphi = sin(
b.phi);
    91         const double new_x = (this->
x - 
b.x) * B_cosphi + (this->
y - 
b.y) * B_sinphi;
    92         const double new_y = -(this->
x - 
b.x) * B_sinphi + (this->
y - 
b.y) * B_cosphi;
   105         if (!m.fromMatlabStringFormat(
s)) 
THROW_EXCEPTION(
"Malformed expression in ::fromString");
   107         vx = m.get_unsafe(0,0);
   108         vy = m.get_unsafe(0,1);
   114         const double nvx = 
vx * cos(ang) - 
vy * sin(ang);
   115         const double nvy = 
vx * sin(ang) + 
vy * cos(ang);
   138         if (!m.fromMatlabStringFormat(
s)) 
THROW_EXCEPTION(
"Malformed expression in ::fromString");
   140         for (
int i=0;i<3;i++) (*
this)[i] = m.get_unsafe(0,i);
   141         for (
int i=0;i<3;i++) (*
this)[3+i] = 
DEG2RAD(m.get_unsafe(0,3+i));
   149         vx=
R(0,0)*
t.vx+
R(0,1)*
t.vy+
R(0,2)*
t.vz;
   150         vy=
R(1,0)*
t.vx+
R(1,1)*
t.vy+
R(1,2)*
t.vz;
   151         vz=
R(2,0)*
t.vx+
R(2,1)*
t.vy+
R(2,2)*
t.vz;
   153         wx=
R(0,0)*
t.wx+
R(0,1)*
t.wy+
R(0,2)*
t.wz;
   154         wy=
R(1,0)*
t.wx+
R(1,1)*
t.wy+
R(1,2)*
t.wz;
   155         wz=
R(2,0)*
t.wx+
R(2,1)*
t.wy+
R(2,2)*
t.wz;
   162         return !(*
this == o);
   171         if (
x<
p.x) 
return true;
   172         else if (
x>
p.x) 
return false;
   173         else if (
y<
p.y) 
return true;
   174         else if (
y>
p.y) 
return false;
   180         if (!m.fromMatlabStringFormat(
s)) 
THROW_EXCEPTION(
"Malformed expression in ::fromString");
   182         x = m.get_unsafe(0,0);
   183         y = m.get_unsafe(0,1);
   184         z = m.get_unsafe(0,2);
   197         const double cy = cos(
yaw*0.5),  sy = sin(
yaw*0.5);
   198         const double cp = cos(
pitch*0.5),sp = sin(
pitch*0.5);
   199         const double cr = cos(
roll*0.5), sr = sin(
roll*0.5);
   201         const double ccc = cr*cp*cy;
   202         const double ccs = cr*cp*sy;
   203         const double css = cr*sp*sy;
   204         const double sss = sr*sp*sy;
   205         const double scc = sr*cp*cy;
   206         const double ssc = sr*sp*cy;
   207         const double csc = cr*sp*cy;
   208         const double scs = sr*cp*sy;
   221                         -0.5*
q[3], 0.5*(-csc + scs), -0.5*
q[1],
   222                         -0.5*
q[2],  0.5*(-ssc - ccs), 0.5* 
q[0],
   223                         0.5*
q[1], 0.5*(ccc - sss),  0.5*
q[3],
   224                         0.5* 
q[0], 0.5*(-css - scc), -0.5*
q[2]
   232         if (!m.fromMatlabStringFormat(
s)) 
THROW_EXCEPTION(
"Malformed expression in ::fromString");
   248         if (!m.fromMatlabStringFormat(
s)) 
THROW_EXCEPTION(
"Malformed expression in ::fromString");
   250         for (
size_t i=0;i<m.getColCount();i++)
   251                 (*
this)[i] = m.get_unsafe(0,i);
   288         const double d3 = 
length();
   289         const double ds1 = 
square(d1);
   290         const double ds2 = 
square(d2);
   291         const double ds3 = 
square(d3);
   292         if ( ds1 > (ds2 + ds3) || ds2 > (ds1 + ds3) )
   306         if (
point1==
point2) 
throw std::logic_error(
"Segment is normal to projection plane");
   310         if (
point1<
s.point1) 
return true;
   311         else if (
s.point1<
point1) 
return false;
   322     Eigen::Vector3d u, 
v, 
w;
   334     double D = 
a*
c - 
b*
b;       
   335     double sc, sN, sD = D;      
   336     double tc, tN, tD = D;      
   339     if (D < 0.00000001) { 
   377         else if ((-d + 
b) > 
a)
   385     sc = (fabs(sN) < 0.00000001 ? 0.0 : sN / sD);
   386     tc = (fabs(tN) < 0.00000001 ? 0.0 : tN / tD);
   399         if (
point1<
s.point1) 
return true;
   400         else if (
s.point1<
point1) 
return false;
   422         for (
size_t i=0;i<3;i++) 
coefs[i]/=
s;
   444         if (!
contains(origin)) 
throw std::logic_error(
"Base point is not contained in the line");
   450         if (p1==p2) 
throw logic_error(
"Both points are the same");
   456         coefs[0]=
s.point2.y-
s.point1.y;
   457         coefs[1]=
s.point1.x-
s.point2.x;
   458         coefs[2]=
s.point2.x*
s.point1.y-
s.point2.y*
s.point1.x;
   483         double dv=0,d2=0,
v2=0;
   484         for (
size_t i=0;i<3;i++)        {
   489         return sqrt(d2-(dv*dv)/
v2);
   492         double s=sqrt(squareNorm<3,double>(
director));
   524         return dotProduct<3,double>(
coefs,point)+
coefs[3];
   546         double s=sqrt(squareNorm<3,double>(
coefs));
   547         for (
size_t i=0;i<4;i++) 
coefs[i]/=
s;
   563         if (!
contains(newOrigin)) 
throw std::logic_error(
"Base point is not in the plane.");
   568         for (
size_t i=0;i<3;i++) AXIS.set_unsafe(i,3,newOrigin[i]);
   572         double dx1=p2.
x-p1.
x;
   573         double dy1=p2.
y-p1.
y;
   574         double dz1=p2.
z-p1.
z;
   575         double dx2=p3.
x-p1.
x;
   576         double dy2=p3.
y-p1.
y;
   577         double dz2=p3.
z-p1.
z;
   578         coefs[0]=dy1*dz2-dy2*dz1;
   579         coefs[1]=dz1*dx2-dz2*dx1;
   580         coefs[2]=dx1*dy2-dx2*dy1;
   599                 if (r1.
contains(r2.
pBase)) 
throw std::logic_error(
"Lines are the same");
   602                 for (
size_t i=0;i<3;i++) d[i]=r1.
pBase[i]-r2.
pBase[i];
   610         size_t N=poly.size();
   612         std::vector<size_t> unused;
   618         for (
size_t i=0;i<unused.size()-1;i++)  {
   619                 size_t last=unused[i+1];
   620                 for (
size_t j=unused[i]+1-diff;j<last-diff;j++) poly[j]=poly[j+diff];
   622         poly.resize(N+1-unused.size());
   626         size_t N=poly.size();
   628         std::vector<size_t> rep;
   633         for (
size_t i=0;i<rep.size()-1;i++)     {
   634                 size_t last=rep[i+1];
   635                 for (
size_t j=rep[i]+1-diff;j<last-diff;j++) poly[j]=poly[j+diff];
   637         poly.resize(N+1-rep.size());
   643         std::vector<TSegment2D> sgs;
   649         double distance = std::numeric_limits<double>::max();
   653                 double d = (*it).distance(point);
   662         ASSERTMSG_(!this->
empty(),
"getBoundingBox() called on an empty polygon!");
   663         min_coords.
x = min_coords.
y =  std::numeric_limits<double>::max();
   664         max_coords.
x = max_coords.
y = -std::numeric_limits<double>::max();
   665         for (
size_t i=0;i<
size();i++)
   682         return ( (P1.
x - P0.
x) * (P2.
y - P0.
y) - (P2.
x -  P0.
x) * (P1.
y - P0.
y) );
   690         const size_t n = this->
size();
   691         for (
size_t i=0; i<
n; i++) 
   693                 if ((*
this)[i].
y <= P.
y)
   696                         if ((*
this)[(i+1) % 
n].
y  > P.
y)      
   697                                 if (
isLeft( (*
this)[i], (*
this)[(i+1)%
n], P) > 0)  
   703                 if ((*
this)[(i+1)%
n].
y  <= P.
y)     
   704                         if (
isLeft( (*
this)[i], (*
this)[(i+1)%
n], P) < 0)  
   715         for (
size_t i=0;i<N-1;i++) 
v[i]=
TSegment2D(
operator[](i),
operator[](i+1));
   723 template<
class T,
int N>
   728                 for (
size_t i=0;i<N;i++) 
object[i]=0.0;
   731                 for (
size_t i=0;i<N;i++) 
object[i]+=o[i];
   742         if (N<=3) 
return true;
   743         vector<TSegment2D> sgms;
   745         for (
size_t i=0;i<N;i++)        {
   748                 for (
size_t j=0;j<N;j++)        {
   751                         else if (!
s) 
s=(d>0)?1:-1;
   752                         else if (
s!=((d>0)?1:-1)) 
return false;
   768         for (
size_t i=0;i<N;i++)        {
   778         for (
size_t i=0;i<N;i++) 
operator[](i)=
TPoint2D(
p[i]);
   781         if (numEdges<3||abs(radius)<
geometryEpsilon) 
throw std::logic_error(
"Invalid arguments for regular polygon creations");
   782         poly.resize(numEdges);
   783         for (
size_t i=0;i<numEdges;i++) {
   784                 double angle=i*
M_PI*2/numEdges;
   785                 poly[i]=
TPoint2D(radius*cos(angle),radius*sin(angle));
   790         for (
size_t i=0;i<numEdges;i++) poly[i]=pose+poly[i];
   795         if (!
getPlane(pl)) 
throw std::logic_error(
"Polygon does not conform a plane");
   803         return sqrt(newPoint.
z*newPoint.
z+distance2D*distance2D);
   810         if (!
getPlane(plane)) 
throw std::logic_error(
"Polygon does not conform a plane");
   825         for (
size_t i=0;i<N-1;i++) 
v[i]=
TSegment3D(
operator[](i),
operator[](i+1));
   854         for (
size_t i=0;i<N;i++) 
operator[](i)=
p[i];
   857         if (numEdges<3||abs(radius)<
geometryEpsilon) 
throw std::logic_error(
"Invalid arguments for regular polygon creations");
   858         poly.resize(numEdges);
   859         for (
size_t i=0;i<numEdges;i++) {
   860                 double angle=i*2*
M_PI/numEdges;
   861                 poly[i]=
TPoint3D(radius*cos(angle),radius*sin(angle),0);
   866         for (
size_t i=0;i<numEdges;i++) pose.
composePoint(poly[i][0],poly[i][1],poly[i][2],poly[i][0],poly[i][1],poly[i][2]);
   900 void TObject2D::getPoints(
const std::vector<TObject2D> &objs,std::vector<TPoint2D> &pnts,std::vector<TObject2D> &remainder)     {
   902         else remainder.push_back(*it);
   904 void TObject2D::getSegments(
const std::vector<TObject2D> &objs,std::vector<TSegment2D> &sgms,std::vector<TObject2D> &remainder) {
   906         else remainder.push_back(*it);
   908 void TObject2D::getLines(
const std::vector<TObject2D> &objs,std::vector<TLine2D> &lins,std::vector<TObject2D> &remainder)       {
   910         else remainder.push_back(*it);
   912 void TObject2D::getPolygons(
const std::vector<TObject2D> &objs,std::vector<TPolygon2D> &polys,vector<TObject2D> &remainder)     {
   914         else remainder.push_back(*it);
   931 void TObject3D::getPoints(
const std::vector<TObject3D> &objs,std::vector<TPoint3D> &pnts,std::vector<TObject3D> &remainder)     {
   933         else remainder.push_back(*it);
   935 void TObject3D::getSegments(
const std::vector<TObject3D> &objs,std::vector<TSegment3D> &sgms,std::vector<TObject3D> &remainder) {
   937         else remainder.push_back(*it);
   939 void TObject3D::getLines(
const std::vector<TObject3D> &objs,std::vector<TLine3D> &lins,std::vector<TObject3D> &remainder)       {
   941         else remainder.push_back(*it);
   943 void TObject3D::getPlanes(
const std::vector<TObject3D> &objs,std::vector<TPlane> &plns,std::vector<TObject3D> &remainder)       {
   945         else remainder.push_back(*it);
   947 void TObject3D::getPolygons(
const std::vector<TObject3D> &objs,std::vector<TPolygon3D> &polys,vector<TObject3D> &remainder)     {
   949         else remainder.push_back(*it);
   965         in >> o.
x >> o.
y >> o.
z;
   970         out << o.
x << o.
y << o.
z;
   981         out << o.
x << o.
y << o.
phi;
   987     for (
unsigned int i=0;i<o.
size();i++) 
in >> o[i];
   992     for (
unsigned int i=0;i<o.
size();i++) out << o[i];
   998     for (
unsigned int i=0;i<o.
size();i++) 
in >> o[i];
  1003     for (
unsigned int i=0;i<o.
size();i++) out << o[i];
  1028         switch (static_cast<unsigned char>(
type))       {
  1053                         throw std::logic_error(
"Unknown TObject2D type found while reading stream");
  1058         out<<static_cast<uint16_t>(o.
getType());
  1087         switch (static_cast<unsigned char>(
type))       {
  1117                         throw std::logic_error(
"Unknown TObject3D type found while reading stream");
  1122         out<<static_cast<uint16_t>(o.
getType());
 const unsigned char GEOMETRIC_TYPE_PLANE
Object type identifier for TPlane. 
 
static void getSegments(const std::vector< TObject2D > &objs, std::vector< TSegment2D > &sgms)
Static method to retrieve all the segments in a vector of TObject2D. 
 
bool getPoint(TPoint2D &p) const
Gets the content as a point, returning false if the type is inadequate. 
 
double x() const
Common members of all points & poses classes. 
 
static void createRegularPolygon(size_t numEdges, double radius, TPolygon3D &poly)
Static method to create a regular polygon, given its size and radius. 
 
static void createRegularPolygon(size_t numEdges, double radius, TPolygon2D &poly)
Static method to create a regular polygon, given its size and radius. 
 
void fromString(const std::string &s)
Set the current object value from a string generated by 'asString' (eg: "[0.02 1.04]" ) ...
 
bool getPolygon(TPolygon2D &p) const
Gets the content as a polygon, returning false if the type is inadequate. 
 
void rotate(const double ang)
Transform the (vx,vy) components for a counterclockwise rotation of ang radians. 
 
EIGEN_STRONG_INLINE bool empty() const
 
Classes for serialization, sockets, ini-file manipulation, streams, list of properties-values, timewatch, extensions to STL. 
 
const unsigned char GEOMETRIC_TYPE_LINE
Object type identifier for TLine2D or TLine3D. 
 
unsigned __int16 uint16_t
 
void BASE_IMPEXP generateAxisBaseFromDirectionAndAxis(const double(&vec)[3], char coord, CMatrixDouble &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. 
 
unsigned char getType() const
Gets content type. 
 
TPoint2D BASE_IMPEXP lightFromPose(const mrpt::poses::CPoint2D &p)
Convert a pose into a light-weight structure (functional form, needed for forward declarations) ...
 
const unsigned char GEOMETRIC_TYPE_POINT
Object type identifier for TPoint2D or TPoint3D. 
 
bool operator==(const TTwist3D &o) const
 
double wz
Angular velocity (rad/s) 
 
double distance(const TPoint3D &point) const
Distance between the line and a point. 
 
void getPlotData(std::vector< double > &x, std::vector< double > &y) const
Gets plot data, ready to use on a 2D plot. 
 
size_t size(const MATRIXLIKE &m, const int dim)
 
bool isSkew() const
Check whether the polygon is skew. Returns true if there doesn't exist a plane in which the polygon c...
 
TLine2D()
Fast default constructor. 
 
bool getSegment(TSegment3D &s) const
Gets the content as a segment, returning false if the type is not adequate. 
 
bool contains(const TPoint2D &point) const
Check whether a point is inside a segment. 
 
double roll
Roll coordinate (rotation angle over X coordinate). 
 
static void getPolygons(const std::vector< TObject2D > &objs, std::vector< TPolygon2D > &polys)
Static method to retrieve all the polygons in a vector of TObject2D. 
 
TPolygon3D()
Default constructor. 
 
#define THROW_EXCEPTION(msg)
 
GLdouble GLdouble GLdouble GLdouble q
 
double distance(const TPoint2D &point) const
Distance to point. 
 
static void getLines(const std::vector< TObject2D > &objs, std::vector< TLine2D > &lins)
Static method to retrieve all the lines in a vector of TObject2D. 
 
This file implements several operations that operate element-wise on individual or pairs of container...
 
void getAsQuaternion(mrpt::math::CQuaternion< double > &q, mrpt::math::CMatrixFixedNumeric< double, 4, 3 > *out_dq_dr=NULL) const
Returns the quaternion associated to the rotation of this object (NOTE: XYZ translation is ignored)  ...
 
EIGEN_STRONG_INLINE iterator begin()
 
Column vector, like Eigen::MatrixX*, but automatically initialized to zeros since construction...
 
TPoint3D()
Default fast constructor. 
 
double signedDistance(const TPoint2D &point) const
Distance with sign from a given point (sign indicates side). 
 
Standard type for storing any lightweight 2D type. 
 
TLine3D()
Fast default constructor. 
 
bool getLine(TLine2D &r) const
Gets the content as a line, returning false if the type is inadequate. 
 
void getAsPose3D(mrpt::poses::CPose3D &outPose)
Gets a pose whose XY plane corresponds to this plane. 
 
void getAsSegmentList(std::vector< TSegment2D > &v) const
Gets as set of segments, instead of points. 
 
bool getPlane(TPlane &p) const
Gets the content as a plane, returning false if the type is not adequate. 
 
TPoint3D pBase
Base point. 
 
Standard object for storing any 3D lightweight object. 
 
bool getSegment(TSegment2D &s) const
Gets the content as a segment, returning false if the type is inadequate. 
 
bool contains(const TPoint2D &point) const
Check whether a point is inside the line. 
 
void removeRepeatedVertices()
Erase repeated vertices. 
 
double signedDistance(const TPoint2D &point) const
Distance with sign to point (sign indicates which side the point is). 
 
const Scalar * const_iterator
 
void generate3DObject(TLine3D &l) const
Project into 3D space, setting the z to 0. 
 
void removeRepVertices(T &poly)
 
void fromString(const std::string &s)
Set the current object value from a string generated by 'asString' (eg: "[0.02 1.04 -45...
 
double z
X,Y,Z coordinates. 
 
double distance(const TPoint3D &point) const
Distance to 3D point. 
 
struct BASE_IMPEXP TObject3D
 
double yaw
Yaw coordinate (rotation angle over Z axis). 
 
double vz
Velocity components: X,Y (m/s) 
 
GLsizei GLsizei GLuint * obj
 
void fromString(const std::string &s)
Set the current object value from a string generated by 'asString' (eg: "[vx vy vz wx wy wz]" ) ...
 
struct BASE_IMPEXP TSegment3D
 
bool operator<(const TSegment3D &s) const
 
void keep_min(T &var, const K test_val)
If the second argument is below the first one, set the first argument to this lower value...
 
GLubyte GLubyte GLubyte GLubyte w
 
3D twist: 3D velocity vector (vx,vy,vz) + angular velocity (wx,wy,wz) 
 
void crossProduct3D(const T &v0, const U &v1, V &vOut)
Computes the cross product of two 3D vectors, returning a vector normal to both. 
 
TPoint3D point1
Origin point. 
 
T square(const T x)
Inline function for the square of a number. 
 
bool BASE_IMPEXP conformAPlane(const std::vector< TPoint3D > &points)
Checks whether this polygon or set of points acceptably fits a plane. 
 
static void getSegments(const std::vector< TObject3D > &objs, std::vector< TSegment3D > &sgms)
Static method to retrieve every segment included in a vector of objects. 
 
TPose3D()
Default fast constructor. 
 
2D twist: 2D velocity vector (vx,vy) + planar angular velocity (omega) 
 
void getNormalVector(double(&vector)[2]) const
Get line's normal vector. 
 
void generate3DObject(TPolygon3D &p) const
Projects into 3D space, zeroing the z. 
 
bool contains(const TPoint3D &point) const
Check whether a point is inside the line. 
 
double isLeft(const mrpt::math::TPoint2D &P0, const mrpt::math::TPoint2D &P1, const mrpt::math::TPoint2D &P2)
 
void composePoint(double lx, double ly, double lz, double &gx, double &gy, double &gz, mrpt::math::CMatrixFixedNumeric< double, 3, 3 > *out_jacobian_df_dpoint=NULL, mrpt::math::CMatrixFixedNumeric< double, 3, 6 > *out_jacobian_df_dpose=NULL, mrpt::math::CMatrixFixedNumeric< double, 3, 6 > *out_jacobian_df_dse3=NULL, bool use_small_rot_approx=false) const
An alternative, slightly more efficient way of doing  with G and L being 3D points and P this 6D pose...
 
This base class is used to provide a unified interface to files,memory buffers,..Please see the deriv...
 
void unitarize()
Unitarize line's normal vector. 
 
std::string asString() const
 
void getBoundingBox(TPoint2D &min_coords, TPoint2D &max_coords) const
Get polygon bounding box. 
 
bool getPolygon(TPolygon3D &p) const
Gets the content as a polygon, returning false if the type is not adequate. 
 
2D segment, consisting of two points. 
 
double distance(const TPoint3D &point) const
Distance to point. 
 
void fromString(const std::string &s)
Set the current object value from a string generated by 'asString' (eg: "[0.02 1.04 -45...
 
double RAD2DEG(const double x)
Radians to degrees. 
 
3D segment, consisting of two points. 
 
double length() const
Segment length. 
 
TPoint3D point2
Destiny point. 
 
bool operator<(const TSegment2D &s) const
 
std::ostream BASE_IMPEXP & operator<<(std::ostream &o, const TPoint2D &p)
 
mrpt::math::TPose2D operator+(const mrpt::math::TPose2D &b) const
Operator "oplus" pose composition: "ret=this \oplus b". 
 
void rotate(const mrpt::poses::CPose3D &rot)
Transform all 6 components for a change of reference frame from "A" to another frame "B" whose rotati...
 
static void getLines(const std::vector< TObject3D > &objs, std::vector< TLine3D > &lins)
Static method to retrieve every line included in a vector of objects. 
 
void unitarize()
Unitarize normal vector. 
 
mrpt::math::TPose2D operator*(const double dt) const
Returns the pose increment of multiplying each twist component times "dt" seconds. 
 
const unsigned char GEOMETRIC_TYPE_SEGMENT
Object type identifier for TSegment2D or TSegment3D. 
 
VALUE & operator[](const KEY &key)
Write/read via [i] operator, that creates an element if it didn't exist already. 
 
static void getPolygons(const std::vector< TObject3D > &objs, std::vector< TPolygon3D > &polys)
Static method to retrieve every polygon included in a vector of objects. 
 
3D Plane, represented by its equation  
 
double vy
Velocity components: X,Y (m/s) 
 
bool getPlane(TPlane &p) const
Gets a plane which contains the polygon. Returns false if the polygon is skew and cannot be fit insid...
 
double coefs[3]
Line coefficients, stored as an array: . 
 
class BASE_IMPEXP TPolygon3D
 
double BASE_IMPEXP getRegressionPlane(const std::vector< TPoint3D > &points, TPlane &plane)
Using eigenvalues, gets the best fitting plane for a set of 3D points. 
 
TPolygon2D()
Default constructor. 
 
void removeRedundantVertices()
Erase every redundant vertex, thus saving space. 
 
TPose3DQuat()
Default fast constructor. 
 
TPoint2D point2
Destiny point. 
 
A class used to store a 3D pose as a translation (x,y,z) and a quaternion (qr,qx,qy,qz). 
 
std::string BASE_IMPEXP format(const char *fmt,...) MRPT_printf_format_check(1
A std::string version of C sprintf. 
 
void getCenter(TPoint2D &p) const
Polygon's central point. 
 
double BASE_IMPEXP getAngle(const TPlane &p1, const TPlane &p2)
Computes the angle between two planes. 
 
GLsizei const GLchar ** string
 
T wrapToPi(T a)
Modifies the given angle to translate it into the ]-pi,pi] range. 
 
A class used to store a 2D point. 
 
A class used to store a 3D point. 
 
void unitarize()
Unitarize director vector. 
 
Classes for 2D/3D geometry representation, both of single values and probability density distribution...
 
bool contains(const TPoint3D &point) const
Check whether a point is inside (or within geometryEpsilon of a polygon edge). This works for concave...
 
bool getPoint(TPoint3D &p) const
Gets the content as a point, returning false if the type is not adequate. 
 
double pitch
Pitch coordinate (rotation angle over Y axis). 
 
void loadFromArray(const T *vals)
 
Lightweight 3D pose (three spatial coordinates, plus a quaternion ). 
 
double distance(const TPoint3D &point) const
Distance to point (always >=0) 
 
double director[3]
Director vector. 
 
TPoint2D point1
Origin point. 
 
bool isConvex() const
Checks whether is convex. 
 
TPoint2D()
Default fast constructor. 
 
void generate3DObject(TSegment3D &s) const
Project into 3D space, setting the z to 0. 
 
bool contains(const TPoint2D &point) const
Check whether a point is inside (or within geometryEpsilon of a polygon edge). This works for concave...
 
BASE_IMPEXP ::mrpt::utils::CStream & operator>>(mrpt::utils::CStream &in, CMatrixPtr &pObj)
 
void removeUnusedVertices(T &poly)
 
double distance(const TPoint2D &point) const
Distance to a point (always >=0) 
 
void getAsPose2D(mrpt::poses::CPose2D &outPose) const
Get a pose2D whose X axis corresponds to the line. 
 
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries. 
 
TPlane()
Fast default constructor. 
 
GLdouble GLdouble GLdouble r
 
size_t size(const MATRIXLIKE &m, const int dim)
 
void generate3DObject(TObject3D &obj) const
Project into 3D space. 
 
A class used to store a 2D pose, including the 2D coordinate point and a heading (phi) angle...
 
A class used to store a 3D pose (a 3D translation + a rotation in 3D). 
 
struct BASE_IMPEXP TLine3D
 
static void getPoints(const std::vector< TObject2D > &objs, std::vector< TPoint2D > &pnts)
Static method to retrieve all the points in a vector of TObject2D. 
 
void BASE_IMPEXP getPrismBounds(const std::vector< TPoint3D > &poly, TPoint3D &pMin, TPoint3D &pMax)
Gets the prism bounds of a 3D polygon or set of 3D points. 
 
void getUnitaryNormalVector(double(&vec)[3])
Unitarize, then get normal vector. 
 
double coefs[4]
Plane coefficients, stored as an array: . 
 
TSegment2D()
Fast default constructor. 
 
const double & phi() const
Get the phi angle of the 2D pose (in radians) 
 
void fromString(const std::string &s)
Set the current object value from a string generated by 'asString' (eg: "[0.02 1.04 -0...
 
bool operator!=(const TTwist3D &o) const
 
void project3D(const TPoint3D &point, const mrpt::poses::CPose3D &newXYpose, TPoint3D &newPoint)
Uses the given pose 3D to project a point into a new base. 
 
Lightweight 3D pose (three spatial coordinates, plus three angular coordinates). 
 
void removeRedundantVertices()
Erase every redundant vertex from the polygon, saving space. 
 
void removeRepeatedVertices()
Remove polygon's repeated vertices. 
 
bool contains(const TPoint3D &point) const
Check whether a point is inside the segment. 
 
bool getLine(TLine3D &r) const
Gets the content as a line, returning false if the type is not adequate. 
 
double evaluatePoint(const TPoint3D &point) const
Evaluate a point in the plane's equation. 
 
std::string asString() const
 
void fromString(const std::string &s)
Set the current object value from a string generated by 'asString' (eg: "[0.02 1.04 -0...
 
bool operator<(const TPoint3D &p) const
 
double evaluatePoint(const TPoint2D &point) const
Evaluate point in the line's equation. 
 
void getAsPose2DForcingOrigin(const TPoint2D &origin, mrpt::poses::CPose2D &outPose) const
Get a pose2D whose X axis corresponds to the line, forcing the base point to one given. 
 
TPose2D()
Default fast constructor. 
 
GLfloat GLfloat GLfloat v2
 
unsigned char getType() const
Gets object type. 
 
const unsigned char GEOMETRIC_TYPE_UNDEFINED
Object type identifier for empty TObject2D or TObject3D. 
 
mrpt::math::TPose2D operator-(const mrpt::math::TPose2D &b) const
Operator "ominus" pose composition: "ret=this \ominus b". 
 
A quaternion, which can represent a 3D rotation as pair , with a real part "r" and a 3D vector ...
 
void getRotationMatrix(mrpt::math::CMatrixDouble33 &ROT) const
Get the 3x3 rotation matrix. 
 
double distance(const TPoint2D &point) const
Distance from a given point. 
 
void getAsSegmentList(std::vector< TSegment3D > &v) const
Gets as set of segments, instead of set of points. 
 
void getBestFittingPlane(TPlane &p) const
Gets the best fitting plane, disregarding whether the polygon actually fits inside or not...
 
void getDirectorVector(double(&vector)[2]) const
Get line's director vector. 
 
std::string asString() const
 
const unsigned char GEOMETRIC_TYPE_POLYGON
Object type identifier for TPolygon2D or TPolygon3D. 
 
void getAsPose3DForcingOrigin(const TPoint3D &newOrigin, mrpt::poses::CPose3D &pose)
Gets a pose whose XY plane corresponds to this, forcing an exact point as its spatial coordinates...
 
#define ASSERTMSG_(f, __ERROR_MSG)
 
GLsizei GLsizei GLenum GLenum const GLvoid * data
 
std::string asString() const
 
GLubyte GLubyte GLubyte a
 
static void getPlanes(const std::vector< TObject3D > &objs, std::vector< TPlane > &plns)
Static method to retrieve every plane included in a vector of objects. 
 
double phi
Orientation (rads) 
 
bool operator<(const TPoint2D &p) const
 
GLuint GLuint GLsizei GLenum type
 
void keep_max(T &var, const K test_val)
If the second argument is above the first one, set the first argument to this higher value...
 
void getAsVector(VECTORLIKE &v) const
Transformation into vector. 
 
void operator()(const T &o)
 
2D polygon, inheriting from std::vector<TPoint2D>. 
 
3D polygon, inheriting from std::vector<TPoint3D> 
 
double BASE_IMPEXP distance(const TPoint2D &p1, const TPoint2D &p2)
Gets the distance between two points in a 2D space. 
 
void getCenter(TPoint3D &p) const
Get polygon's central point. 
 
double omega
Angular velocity (rad/s) 
 
bool contains(const TPoint3D &point) const
Check whether a point is contained into the plane. 
 
double length() const
Segment length. 
 
double BASE_IMPEXP geometryEpsilon
Global epsilon to overcome small precision errors (Default=1e-5) 
 
bool operator!=(const TTwist2D &o) const
 
void fromString(const std::string &s)
Set the current object value from a string generated by 'asString' (eg: "[0.02 1.04 -0...
 
bool operator==(const TTwist2D &o) const
 
void getNormalVector(double(&vec)[3]) const
Get plane's normal vector. 
 
3D line, represented by a base point and a director vector. 
 
2D line without bounds, represented by its equation . 
 
static void getPoints(const std::vector< TObject3D > &objs, std::vector< TPoint3D > &pnts)
Static method to retrieve every point included in a vector of objects.