MRPT  1.9.9
Geometry: lines, planes, intersections, SLERP,

## Detailed Description

"lightweight" point & pose classes

Collaboration diagram for Geometry: lines, planes, intersections, SLERP,:

## Classes

class  mrpt::math::CPolygon
A wrapper of a TPolygon2D class, implementing CSerializable. More...

class  mrpt::math::TPolygonWithPlane
Slightly heavyweight type to speed-up calculations with polygons in 3D. More...

struct  mrpt::math::TPoint2D
Lightweight 2D point. More...

struct  mrpt::math::TPose2D
Lightweight 2D pose. More...

struct  mrpt::math::TPoint3Df
Lightweight 3D point (float version). More...

struct  mrpt::math::TPoint3D
Lightweight 3D point. More...

struct  mrpt::math::TPointXYZIu8
XYZ point (double) + Intensity(u8) More...

struct  mrpt::math::TPointXYZRGBu8
XYZ point (double) + RGB(u8) More...

struct  mrpt::math::TPointXYZfIu8
XYZ point (float) + Intensity(u8) More...

struct  mrpt::math::TPointXYZfRGBu8
XYZ point (float) + RGB(u8) More...

struct  mrpt::math::TPose3D
Lightweight 3D pose (three spatial coordinates, plus three angular coordinates). More...

struct  mrpt::math::TPose3DQuat
Lightweight 3D pose (three spatial coordinates, plus a quaternion ). More...

struct  mrpt::math::TSegment2D
2D segment, consisting of two points. More...

struct  mrpt::math::TSegment3D
3D segment, consisting of two points. More...

struct  mrpt::math::TLine2D
2D line without bounds, represented by its equation . More...

struct  mrpt::math::TLine3D
3D line, represented by a base point and a director vector. More...

struct  mrpt::math::TPlane
3D Plane, represented by its equation More...

class  mrpt::math::TPolygon2D
2D polygon, inheriting from std::vector<TPoint2D>. More...

class  mrpt::math::TPolygon3D
3D polygon, inheriting from std::vector<TPoint3D> More...

struct  mrpt::math::TObject2D
Standard type for storing any lightweight 2D type. More...

struct  mrpt::math::TObject3D
Standard object for storing any 3D lightweight object. More...

struct  mrpt::math::TTwist2D
2D twist: 2D velocity vector (vx,vy) + planar angular velocity (omega) More...

struct  mrpt::math::TTwist3D
3D twist: 3D velocity vector (vx,vy,vz) + angular velocity (wx,wy,wz) More...

## Typedefs

using mrpt::math::TPlane3D = TPlane

## Functions

TPose3D mrpt::math::operator- (const TPose3D &p)
Unary $$operator: computes inverse SE(3) element. More... TPose3D mrpt::math::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 & mrpt::math::operator<< (std::ostream &o, const TPoint2D &p)

std::ostream & mrpt::math::operator<< (std::ostream &o, const TPoint3D &p)

std::ostream & mrpt::math::operator<< (std::ostream &o, const TPose2D &p)

std::ostream & mrpt::math::operator<< (std::ostream &o, const TPose3D &p)

std::ostream & mrpt::math::operator<< (std::ostream &o, const TPose3DQuat &p)

constexpr TPoint3D mrpt::math::operator- (const TPoint3D &p1)
Unary minus operator for 3D points. More...

constexpr bool mrpt::math::operator== (const TPoint2D &p1, const TPoint2D &p2)
Exact comparison between 2D points. More...

constexpr bool mrpt::math::operator!= (const TPoint2D &p1, const TPoint2D &p2)
Exact comparison between 2D points. More...

constexpr bool mrpt::math::operator== (const TPoint3D &p1, const TPoint3D &p2)
Exact comparison between 3D points. More...

constexpr bool mrpt::math::operator!= (const TPoint3D &p1, const TPoint3D &p2)
Exact comparison between 3D points. More...

bool mrpt::math::operator== (const TPose2D &p1, const TPose2D &p2)
Exact comparison between 2D poses, taking possible cycles into account. More...

bool mrpt::math::operator!= (const TPose2D &p1, const TPose2D &p2)
Exact comparison between 2D poses, taking possible cycles into account. More...

bool mrpt::math::operator== (const TPose3D &p1, const TPose3D &p2)
Exact comparison between 3D poses, taking possible cycles into account. More...

bool mrpt::math::operator!= (const TPose3D &p1, const TPose3D &p2)
Exact comparison between 3D poses, taking possible cycles into account. More...

bool mrpt::math::operator== (const TSegment2D &s1, const TSegment2D &s2)

bool mrpt::math::operator!= (const TSegment2D &s1, const TSegment2D &s2)

bool mrpt::math::operator== (const TSegment3D &s1, const TSegment3D &s2)

bool mrpt::math::operator!= (const TSegment3D &s1, const TSegment3D &s2)

template<class PoseOrPoint , typename = std::enable_if_t<std::is_base_of< mrpt::math::TPoseOrPoint, PoseOrPoint>::value>>
mrpt::serialization::CArchivemrpt::math::operator>> (mrpt::serialization::CArchive &in, PoseOrPoint &o)

template<class PoseOrPoint , typename = std::enable_if_t<std::is_base_of< mrpt::math::TPoseOrPoint, PoseOrPoint>::value>>
mrpt::serialization::CArchivemrpt::math::operator<< (mrpt::serialization::CArchive &out, const PoseOrPoint &o)

mrpt::serialization::CArchivemrpt::math::operator>> (mrpt::serialization::CArchive &in, mrpt::math::TSegment2D &s)

mrpt::serialization::CArchivemrpt::math::operator<< (mrpt::serialization::CArchive &out, const mrpt::math::TSegment2D &s)

mrpt::serialization::CArchivemrpt::math::operator>> (mrpt::serialization::CArchive &in, mrpt::math::TLine2D &l)

mrpt::serialization::CArchivemrpt::math::operator<< (mrpt::serialization::CArchive &out, const mrpt::math::TLine2D &l)

mrpt::serialization::CArchivemrpt::math::operator>> (mrpt::serialization::CArchive &in, mrpt::math::TObject2D &o)

mrpt::serialization::CArchivemrpt::math::operator<< (mrpt::serialization::CArchive &out, const mrpt::math::TObject2D &o)

mrpt::serialization::CArchivemrpt::math::operator>> (mrpt::serialization::CArchive &in, mrpt::math::TSegment3D &s)

mrpt::serialization::CArchivemrpt::math::operator<< (mrpt::serialization::CArchive &out, const mrpt::math::TSegment3D &s)

mrpt::serialization::CArchivemrpt::math::operator>> (mrpt::serialization::CArchive &in, mrpt::math::TLine3D &l)

mrpt::serialization::CArchivemrpt::math::operator<< (mrpt::serialization::CArchive &out, const mrpt::math::TLine3D &l)

mrpt::serialization::CArchivemrpt::math::operator>> (mrpt::serialization::CArchive &in, mrpt::math::TPlane &p)

mrpt::serialization::CArchivemrpt::math::operator<< (mrpt::serialization::CArchive &out, const mrpt::math::TPlane &p)

mrpt::serialization::CArchivemrpt::math::operator>> (mrpt::serialization::CArchive &in, mrpt::math::TObject3D &o)

mrpt::serialization::CArchivemrpt::math::operator<< (mrpt::serialization::CArchive &out, const mrpt::math::TObject3D &o)

mrpt::serialization::CArchivemrpt::math::operator>> (mrpt::serialization::CArchive &in, mrpt::math::TTwist2D &o)

mrpt::serialization::CArchivemrpt::math::operator<< (mrpt::serialization::CArchive &out, const mrpt::math::TTwist2D &o)

mrpt::serialization::CArchivemrpt::math::operator>> (mrpt::serialization::CArchive &in, mrpt::math::TTwist3D &o)

mrpt::serialization::CArchivemrpt::math::operator<< (mrpt::serialization::CArchive &out, const mrpt::math::TTwist3D &o)

## Variables

static constexpr unsigned char mrpt::math::GEOMETRIC_TYPE_POINT = 0
Object type identifier for TPoint2D or TPoint3D. More...

static constexpr unsigned char mrpt::math::GEOMETRIC_TYPE_SEGMENT = 1
Object type identifier for TSegment2D or TSegment3D. More...

static constexpr unsigned char mrpt::math::GEOMETRIC_TYPE_LINE = 2
Object type identifier for TLine2D or TLine3D. More...

static constexpr unsigned char mrpt::math::GEOMETRIC_TYPE_POLYGON = 3
Object type identifier for TPolygon2D or TPolygon3D. More...

static constexpr unsigned char mrpt::math::GEOMETRIC_TYPE_PLANE = 4
Object type identifier for TPlane. More...

static constexpr unsigned char mrpt::math::GEOMETRIC_TYPE_UNDEFINED = 255
Object type identifier for empty TObject2D or TObject3D. More...

## Simple intersection operations, relying basically on geometrical

operations.

bool mrpt::math::intersect (const TSegment3D &s1, const TSegment3D &s2, TObject3D &obj)
Gets the intersection between two 3D segments. More...

bool mrpt::math::intersect (const TSegment3D &s1, const TPlane &p2, TObject3D &obj)
Gets the intersection between a 3D segment and a plane. More...

bool mrpt::math::intersect (const TSegment3D &s1, const TLine3D &r2, TObject3D &obj)
Gets the intersection between a 3D segment and a 3D line. More...

bool mrpt::math::intersect (const TPlane &p1, const TSegment3D &s2, TObject3D &obj)
Gets the intersection between a plane and a 3D segment. More...

bool mrpt::math::intersect (const TPlane &p1, const TPlane &p2, TObject3D &obj)
Gets the intersection between two planes. More...

bool mrpt::math::intersect (const TPlane &p1, const TLine3D &p2, TObject3D &obj)
Gets the intersection between a plane and a 3D line. More...

bool mrpt::math::intersect (const TLine3D &r1, const TSegment3D &s2, TObject3D &obj)
Gets the intersection between a 3D line and a 3D segment. More...

bool mrpt::math::intersect (const TLine3D &r1, const TPlane &p2, TObject3D &obj)
Gets the intersection between a 3D line and a plane. More...

bool mrpt::math::intersect (const TLine3D &r1, const TLine3D &r2, TObject3D &obj)
Gets the intersection between two 3D lines. More...

bool mrpt::math::intersect (const TLine2D &r1, const TLine2D &r2, TObject2D &obj)
Gets the intersection between two 2D lines. More...

bool mrpt::math::intersect (const TLine2D &r1, const TSegment2D &s2, TObject2D &obj)
Gets the intersection between a 2D line and a 2D segment. More...

bool mrpt::math::intersect (const TSegment2D &s1, const TLine2D &r2, TObject2D &obj)
Gets the intersection between a 2D line and a 2D segment. More...

bool mrpt::math::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 mrpt::math::getAngle (const TPlane &p1, const TPlane &p2)
Computes the angle between two planes. More...

double mrpt::math::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 mrpt::math::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 mrpt::math::getAngle (const TLine3D &r1, const TLine3D &r2)
Computes the angle between two 3D lines or segments (implicit constructor will be used if passing a segment instead of a line). More...

double mrpt::math::getAngle (const TLine2D &r1, const TLine2D &r2)
Computes the angle between two 2D lines or segments (implicit constructor will be used if passing a segment instead of a line). More...

## Creation of lines from poses.

void mrpt::math::createFromPoseX (const mrpt::math::TPose3D &p, TLine3D &r)
Gets a 3D line corresponding to the X axis in a given pose. More...

void mrpt::math::createFromPoseY (const mrpt::math::TPose3D &p, TLine3D &r)
Gets a 3D line corresponding to the Y axis in a given pose. More...

void mrpt::math::createFromPoseZ (const mrpt::math::TPose3D &p, TLine3D &r)
Gets a 3D line corresponding to the Z axis in a given pose. More...

void mrpt::math::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 mrpt::math::createFromPoseX (const TPose2D &p, TLine2D &r)
Gets a 2D line corresponding to the X axis in a given pose. More...

void mrpt::math::createFromPoseY (const TPose2D &p, TLine2D &r)
Gets a 2D line corresponding to the Y axis in a given pose. More...

void mrpt::math::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 mrpt::math::conformAPlane (const std::vector< TPoint3D > &points)
Checks whether this polygon or set of points acceptably fits a plane. More...

bool mrpt::math::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 mrpt::math::areAligned (const std::vector< TPoint2D > &points)
Checks whether this set of points acceptably fits a 2D line. More...

bool mrpt::math::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 mrpt::math::areAligned (const std::vector< TPoint3D > &points)
Checks whether this set of points acceptably fits a 3D line. More...

bool mrpt::math::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 mrpt::math::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 mrpt::math::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 mrpt::math::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 mrpt::math::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 mrpt::math::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 mrpt::math::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 mrpt::math::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 mrpt::math::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 mrpt::math::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 mrpt::math::project2D (const TPoint2D &point, const TPose2D &newXpose, TPoint2D &newPoint)
Uses the given pose 2D to project a point into a new base. More...

void mrpt::math::project2D (const TSegment2D &segment, const TPose2D &newXpose, TSegment2D &newSegment)
Uses the given pose 2D to project a segment into a new base. More...

void mrpt::math::project2D (const TLine2D &line, const TPose2D &newXpose, TLine2D &newLine)
Uses the given pose 2D to project a line into a new base. More...

void mrpt::math::project2D (const TPolygon2D &polygon, const TPose2D &newXpose, TPolygon2D &newPolygon)
Uses the given pose 2D to project a polygon into a new base. More...

void mrpt::math::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 mrpt::math::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 mrpt::math::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 mrpt::math::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 mrpt::math::intersect (const TPolygon2D &p1, const TSegment2D &s2, TObject2D &obj)
Gets the intersection between a 2D polygon and a 2D segment. More...

bool mrpt::math::intersect (const TPolygon2D &p1, const TLine2D &r2, TObject2D &obj)
Gets the intersection between a 2D polygon and a 2D line. More...

bool mrpt::math::intersect (const TPolygon2D &p1, const TPolygon2D &p2, TObject2D &obj)
Gets the intersection between two 2D polygons. More...

bool mrpt::math::intersect (const TSegment2D &s1, const TPolygon2D &p2, TObject2D &obj)
Gets the intersection between a 2D segment and a 2D polygon. More...

bool mrpt::math::intersect (const TLine2D &r1, const TPolygon2D &p2, TObject2D &obj)
Gets the intersection between a 2D line and a 2D polygon. More...

bool mrpt::math::intersect (const TPolygon3D &p1, const TSegment3D &s2, TObject3D &obj)
Gets the intersection between a 3D polygon and a 3D segment. More...

bool mrpt::math::intersect (const TPolygon3D &p1, const TLine3D &r2, TObject3D &obj)
Gets the intersection between a 3D polygon and a 3D line. More...

bool mrpt::math::intersect (const TPolygon3D &p1, const TPlane &p2, TObject3D &obj)
Gets the intersection between a 3D polygon and a plane. More...

bool mrpt::math::intersect (const TPolygon3D &p1, const TPolygon3D &p2, TObject3D &obj)
Gets the intersection between two 3D polygons. More...

bool mrpt::math::intersect (const TSegment3D &s1, const TPolygon3D &p2, TObject3D &obj)
Gets the intersection between a 3D segment and a 3D polygon. More...

bool mrpt::math::intersect (const TLine3D &r1, const TPolygon3D &p2, TObject3D &obj)
Gets the intersection between a 3D line and a 3D polygon. More...

bool mrpt::math::intersect (const TPlane &p1, const TPolygon3D &p2, TObject3D &obj)
Gets the intersection between a plane and a 3D polygon. More...

size_t mrpt::math::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 mrpt::math::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 mrpt::math::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 mrpt::math::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 mrpt::math::intersect (const TObject2D &o1, const TObject2D &o2, TObject2D &obj)
Gets the intersection between any pair of 2D objects. More...

bool mrpt::math::intersect (const TObject3D &o1, const TObject3D &o2, TObject3D &obj)
Gets the intersection between any pair of 3D objects. More...

## Distances

double mrpt::math::distance (const TPoint2D &p1, const TPoint2D &p2)
Gets the distance between two points in a 2D space. More...

double mrpt::math::distance (const TPoint3D &p1, const TPoint3D &p2)
Gets the distance between two points in a 3D space. More...

double mrpt::math::distance (const TLine2D &r1, const TLine2D &r2)
Gets the distance between two lines in a 2D space. More...

double mrpt::math::distance (const TLine3D &r1, const TLine3D &r2)
Gets the distance between two lines in a 3D space. More...

double mrpt::math::distance (const TPlane &p1, const TPlane &p2)
Gets the distance between two planes. More...

double mrpt::math::distance (const TPolygon2D &p1, const TPolygon2D &p2)
Gets the distance between two polygons in a 2D space. More...

double mrpt::math::distance (const TPolygon2D &p1, const TSegment2D &s2)
Gets the distance between a polygon and a segment in a 2D space. More...

double mrpt::math::distance (const TSegment2D &s1, const TPolygon2D &p2)
Gets the distance between a segment and a polygon in a 2D space. More...

double mrpt::math::distance (const TPolygon2D &p1, const TLine2D &l2)
Gets the distance between a polygon and a line in a 2D space. More...

double mrpt::math::distance (const TLine2D &l1, const TPolygon2D &p2)

double mrpt::math::distance (const TPolygon3D &p1, const TPolygon3D &p2)
Gets the distance between two polygons in a 3D space. More...

double mrpt::math::distance (const TPolygon3D &p1, const TSegment3D &s2)
Gets the distance between a polygon and a segment in a 3D space. More...

double mrpt::math::distance (const TSegment3D &s1, const TPolygon3D &p2)
Gets the distance between a segment and a polygon in a 3D space. More...

double mrpt::math::distance (const TPolygon3D &p1, const TLine3D &l2)
Gets the distance between a polygon and a line in a 3D space. More...

double mrpt::math::distance (const TLine3D &l1, const TPolygon3D &p2)
Gets the distance between a line and a polygon in a 3D space. More...

double mrpt::math::distance (const TPolygon3D &po, const TPlane &pl)
Gets the distance between a polygon and a plane. More...

double mrpt::math::distance (const TPlane &pl, const TPolygon3D &po)
Gets the distance between a plane and a polygon. More...

## Bound checkers

void mrpt::math::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 mrpt::math::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 mrpt::math::createPlaneFromPoseXY (const mrpt::math::TPose3D &pose, TPlane &plane)
Given a pose, creates a plane orthogonal to its Z vector. More...

void mrpt::math::createPlaneFromPoseXZ (const mrpt::math::TPose3D &pose, TPlane &plane)
Given a pose, creates a plane orthogonal to its Y vector. More...

void mrpt::math::createPlaneFromPoseYZ (const mrpt::math::TPose3D &pose, TPlane &plane)
Given a pose, creates a plane orthogonal to its X vector. More...

void mrpt::math::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 mrpt::math::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 mrpt::math::getRegressionLine (const std::vector< TPoint2D > &points, TLine2D &line)
Using eigenvalues, gets the best fitting line for a set of 2D points. More...

double mrpt::math::getRegressionLine (const std::vector< TPoint3D > &points, TLine3D &line)
Using eigenvalues, gets the best fitting line for a set of 3D points. More...

double mrpt::math::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 mrpt::math::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 mrpt::math::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 mrpt::math::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 mrpt::math::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 mrpt::math::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 mrpt::math::setEpsilon (double nE)
Changes the value of the geometric epsilon (default = 1e-5) More...

double mrpt::math::getEpsilon ()
Gets the value of the geometric epsilon (default = 1e-5) More...

bool mrpt::math::splitInConvexComponents (const TPolygon2D &poly, std::vector< TPolygon2D > &components)
Splits a 2D polygon into convex components. More...

bool mrpt::math::splitInConvexComponents (const TPolygon3D &poly, std::vector< TPolygon3D > &components)
Splits a 3D polygon into convex components. More...

void mrpt::math::getSegmentBisector (const TSegment2D &sgm, TLine2D &bis)
Gets the bisector of a 2D segment. More...

void mrpt::math::getSegmentBisector (const TSegment3D &sgm, TPlane &bis)
Gets the bisector of a 3D segment. More...

void mrpt::math::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 mrpt::math::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 mrpt::math::traceRay (const std::vector< TPolygonWithPlane > &vec, const mrpt::math::TPose3D &pose, double &dist)
Fast ray tracing method using polygons' properties. More...

bool mrpt::math::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 mrpt::math::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 mrpt::math::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 > mrpt::math::crossProduct3D (const VEC1 &v0, const VEC2 &v1)
overload (returning a vector of size 3 by value). More...

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

template<class VECTOR >
mrpt::math::CMatrixDouble33 mrpt::math::skew_symmetric3 (const VECTOR &v)

template<class VECTOR , class MATRIX >
void mrpt::math::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:

template<class VECTOR >
mrpt::math::CMatrixDouble33 mrpt::math::skew_symmetric3_neg (const VECTOR &v)

template<class T , class U >
bool mrpt::math::vectorsAreParallel2D (const T &v1, const U &v2)
Returns true if two 2D vectors are parallel. More...

template<class T , class U >
bool mrpt::math::vectorsAreParallel3D (const T &v1, const U &v2)
Returns true if two 3D vectors are parallel. More...

void mrpt::math::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 mrpt::math::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 mrpt::math::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 >
mrpt::math::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 >
mrpt::math::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 >
mrpt::math::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 >
mrpt::math::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 mrpt::math::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 mrpt::math::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 mrpt::math::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 mrpt::math::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 mrpt::math::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 mrpt::math::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 mrpt::math::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 mrpt::math::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 > mrpt::math::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...

## SLERP (Spherical Linear Interpolation) functions

template<typename T >
void mrpt::math::slerp (const CQuaternion< T > &q0, const CQuaternion< T > &q1, const double t, CQuaternion< T > &q)
SLERP interpolation between two quaternions. More...

void mrpt::math::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 mrpt::math::slerp_ypr (const mrpt::math::TPose3D &q0, const mrpt::math::TPose3D &q1, const double t, mrpt::math::TPose3D &p)

## ◆ TPlane3D

 using mrpt::math::TPlane3D = typedef TPlane

Definition at line 1397 of file lightweight_geom_data.h.

## ◆ areAligned() [1/4]

 bool mrpt::math::areAligned ( const std::vector< TPoint2D > & points )

Checks whether this set of points acceptably fits a 2D line.

getEpsilon

Definition at line 1014 of file geometry.cpp.

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

Referenced by mrpt::math::areAligned().

## ◆ areAligned() [2/4]

 bool mrpt::math::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.

getEpsilon

Definition at line 1029 of file geometry.cpp.

References mrpt::math::areAligned().

## ◆ areAligned() [3/4]

 bool mrpt::math::areAligned ( const std::vector< TPoint3D > & points )

Checks whether this set of points acceptably fits a 3D line.

getEpsilon

Definition at line 1043 of file geometry.cpp.

## ◆ areAligned() [4/4]

 bool mrpt::math::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.

Definition at line 1059 of file geometry.cpp.

References mrpt::math::areAligned().

## ◆ assemblePolygons() [1/5]

 void mrpt::math::assemblePolygons ( const std::vector< TSegment3D > & segms, std::vector< TPolygon3D > & polys )

Tries to assemble a set of segments into a set of closed polygons.

Definition at line 2191 of file geometry.cpp.

Referenced by mrpt::math::assemblePolygons().

## ◆ assemblePolygons() [2/5]

 void mrpt::math::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.

Definition at line 2289 of file geometry.cpp.

References depthFirstSearch(), mrpt::math::distance(), geometryEpsilon, and results.

## ◆ assemblePolygons() [3/5]

 void mrpt::math::assemblePolygons ( const std::vector< TObject3D > & objs, std::vector< TPolygon3D > & polys )

Extracts all the polygons, including those formed from segments, from the set of objects.

Definition at line 2337 of file geometry.cpp.

## ◆ assemblePolygons() [4/5]

 void mrpt::math::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.

Definition at line 2347 of file geometry.cpp.

## ◆ assemblePolygons() [5/5]

 void mrpt::math::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.

Definition at line 2360 of file geometry.cpp.

## ◆ closestFromPointToLine()

 void mrpt::math::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.

closestFromPointToSegment

Definition at line 70 of file geometry.cpp.

## ◆ closestFromPointToSegment()

 void mrpt::math::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.

closestFromPointToLine

Definition at line 32 of file geometry.cpp.

## ◆ closestSquareDistanceFromPointToLine()

 double mrpt::math::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.

Definition at line 93 of file geometry.cpp.

References mrpt::square().

Referenced by mrpt::slam::CICP::ICP_Method_LM().

## ◆ conformAPlane() [1/2]

 bool mrpt::math::conformAPlane ( const std::vector< TPoint3D > & points )

Checks whether this polygon or set of points acceptably fits a plane.

TPolygon3D,getEpsilon

Definition at line 993 of file geometry.cpp.

Referenced by mrpt::math::TPolygon3D::getPlane(), and mrpt::math::TPolygon3D::isSkew().

## ◆ conformAPlane() [2/2]

 bool mrpt::math::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.

TPolygon3D,getEpsilon

Definition at line 1009 of file geometry.cpp.

References geometryEpsilon, and mrpt::math::getRegressionPlane().

## ◆ createFromPoseAndVector() [1/2]

 void mrpt::math::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.

An implicit constructor is used if a TPose3D is given.

createFromPoseX,createFromPoseY,createFromPoseZ

Definition at line 955 of file geometry.cpp.

## ◆ createFromPoseAndVector() [2/2]

 void mrpt::math::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.

An implicit constructor is used if a CPose2D is given.

createFromPoseY,createFromPoseAndVector

Definition at line 983 of file geometry.cpp.

## ◆ createFromPoseX() [1/2]

 void mrpt::math::createFromPoseX ( const mrpt::math::TPose3D & p, TLine3D & r )

Gets a 3D line corresponding to the X axis in a given pose.

An implicit constructor is used if a TPose3D is given.

createFromPoseY,createFromPoseZ,createFromPoseAndVector

Definition at line 940 of file geometry.cpp.

References createFromPoseAndAxis().

## ◆ createFromPoseX() [2/2]

 void mrpt::math::createFromPoseX ( const TPose2D & p, TLine2D & r )

Gets a 2D line corresponding to the X axis in a given pose.

An implicit constructor is used if a CPose2D is given.

createFromPoseY,createFromPoseAndVector

Definition at line 969 of file geometry.cpp.

## ◆ createFromPoseY() [1/2]

 void mrpt::math::createFromPoseY ( const mrpt::math::TPose3D & p, TLine3D & r )

Gets a 3D line corresponding to the Y axis in a given pose.

An implicit constructor is used if a TPose3D is given.

createFromPoseX,createFromPoseZ,createFromPoseAndVector

Definition at line 945 of file geometry.cpp.

References createFromPoseAndAxis().

## ◆ createFromPoseY() [2/2]

 void mrpt::math::createFromPoseY ( const TPose2D & p, TLine2D & r )

Gets a 2D line corresponding to the Y axis in a given pose.

An implicit constructor is used if a CPose2D is given.

createFromPoseX,createFromPoseAndVector

Definition at line 976 of file geometry.cpp.

## ◆ createFromPoseZ()

 void mrpt::math::createFromPoseZ ( const mrpt::math::TPose3D & p, TLine3D & r )

Gets a 3D line corresponding to the Z axis in a given pose.

An implicit constructor is used if a TPose3D is given.

createFromPoseX,createFromPoseY,createFromPoseAndVector

Definition at line 950 of file geometry.cpp.

References createFromPoseAndAxis().

## ◆ createPlaneFromPoseAndNormal()

 void mrpt::math::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.

createPlaneFromPoseXY,createPlaneFromPoseXZ,createPlaneFromPoseYZ

Definition at line 2066 of file geometry.cpp.

## ◆ createPlaneFromPoseXY()

 void mrpt::math::createPlaneFromPoseXY ( const mrpt::math::TPose3D & pose, TPlane & plane )

Given a pose, creates a plane orthogonal to its Z vector.

createPlaneFromPoseXZ,createPlaneFromPoseYZ,createPlaneFromPoseAndNormal

Definition at line 2051 of file geometry.cpp.

References createPlaneFromPoseAndAxis().

## ◆ createPlaneFromPoseXZ()

 void mrpt::math::createPlaneFromPoseXZ ( const mrpt::math::TPose3D & pose, TPlane & plane )

Given a pose, creates a plane orthogonal to its Y vector.

createPlaneFromPoseXY,createPlaneFromPoseYZ,createPlaneFromPoseAndNormal

Definition at line 2056 of file geometry.cpp.

References createPlaneFromPoseAndAxis().

## ◆ createPlaneFromPoseYZ()

 void mrpt::math::createPlaneFromPoseYZ ( const mrpt::math::TPose3D & pose, TPlane & plane )

Given a pose, creates a plane orthogonal to its X vector.

createPlaneFromPoseXY,createPlaneFromPoseXZ,createPlaneFromPoseAndNormal

Definition at line 2061 of file geometry.cpp.

References createPlaneFromPoseAndAxis().

## ◆ crossProduct3D() [1/3]

template<class T , class U , class V >
 void mrpt::math::crossProduct3D ( const T & v0, const U & v1, V & vOut )
inline

Computes the cross product of two 3D vectors, returning a vector normal to both.

It uses the simple implementation:

Definition at line 801 of file geometry.h.

## ◆ crossProduct3D() [2/3]

template<class T >
 void mrpt::math::crossProduct3D ( const std::vector< T > & v0, const std::vector< T > & v1, std::vector< T > & v_out )
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 810 of file geometry.h.

## ◆ crossProduct3D() [3/3]

template<class VEC1 , class VEC2 >
 Eigen::Matrix mrpt::math::crossProduct3D ( const VEC1 & v0, const VEC2 & v1 )
inline

overload (returning a vector of size 3 by value).

Definition at line 823 of file geometry.h.

References ASSERT_.

## ◆ distance() [2/17]

 double mrpt::math::distance ( const TPoint3D & p1, const TPoint3D & p2 )

Gets the distance between two points in a 3D space.

Definition at line 1898 of file geometry.cpp.

## ◆ distance() [3/17]

 double mrpt::math::distance ( const TLine2D & r1, const TLine2D & r2 )

Gets the distance between two lines in a 2D space.

Definition at line 1922 of file geometry.cpp.

## ◆ distance() [4/17]

 double mrpt::math::distance ( const TLine3D & r1, const TLine3D & r2 )

Gets the distance between two lines in a 3D space.

Definition at line 1938 of file geometry.cpp.

## ◆ distance() [5/17]

 double mrpt::math::distance ( const TPlane & p1, const TPlane & p2 )

Gets the distance between two planes.

It will be zero if the planes are not parallel.

Definition at line 1954 of file geometry.cpp.

## ◆ distance() [6/17]

 double mrpt::math::distance ( const TPolygon2D & p1, const TPolygon2D & p2 )

Gets the distance between two polygons in a 2D space.

Definition at line 1972 of file geometry.cpp.

References MRPT_UNUSED_PARAM, and THROW_EXCEPTION.

## ◆ distance() [7/17]

 double mrpt::math::distance ( const TPolygon2D & p1, const TSegment2D & s2 )

Gets the distance between a polygon and a segment in a 2D space.

Definition at line 1979 of file geometry.cpp.

References MRPT_UNUSED_PARAM, and THROW_EXCEPTION.

## ◆ distance() [8/17]

 double mrpt::math::distance ( const TSegment2D & s1, const TPolygon2D & p2 )
inline

Gets the distance between a segment and a polygon in a 2D space.

Definition at line 586 of file geometry.h.

## ◆ distance() [9/17]

 double mrpt::math::distance ( const TPolygon2D & p1, const TLine2D & l2 )

Gets the distance between a polygon and a line in a 2D space.

Definition at line 1986 of file geometry.cpp.

References MRPT_UNUSED_PARAM, and THROW_EXCEPTION.

## ◆ distance() [10/17]

 double mrpt::math::distance ( const TLine2D & l1, const TPolygon2D & p2 )
inline

Definition at line 592 of file geometry.h.

References mrpt::math::distance().

## ◆ distance() [11/17]

 double mrpt::math::distance ( const TPolygon3D & p1, const TPolygon3D & p2 )

Gets the distance between two polygons in a 3D space.

Definition at line 1993 of file geometry.cpp.

References MRPT_UNUSED_PARAM, and THROW_EXCEPTION.

## ◆ distance() [12/17]

 double mrpt::math::distance ( const TPolygon3D & p1, const TSegment3D & s2 )

Gets the distance between a polygon and a segment in a 3D space.

Definition at line 2000 of file geometry.cpp.

References MRPT_UNUSED_PARAM, and THROW_EXCEPTION.

## ◆ distance() [13/17]

 double mrpt::math::distance ( const TSegment3D & s1, const TPolygon3D & p2 )
inline

Gets the distance between a segment and a polygon in a 3D space.

Definition at line 601 of file geometry.h.

## ◆ distance() [14/17]

 double mrpt::math::distance ( const TPolygon3D & p1, const TLine3D & l2 )

Gets the distance between a polygon and a line in a 3D space.

Definition at line 2007 of file geometry.cpp.

References MRPT_UNUSED_PARAM, and THROW_EXCEPTION.

## ◆ distance() [15/17]

 double mrpt::math::distance ( const TLine3D & l1, const TPolygon3D & p2 )
inline

Gets the distance between a line and a polygon in a 3D space.

Definition at line 608 of file geometry.h.

References mrpt::math::distance().

## ◆ distance() [16/17]

 double mrpt::math::distance ( const TPolygon3D & po, const TPlane & pl )

Gets the distance between a polygon and a plane.

Definition at line 2014 of file geometry.cpp.

References MRPT_UNUSED_PARAM, and THROW_EXCEPTION.

## ◆ distance() [17/17]

 double mrpt::math::distance ( const TPlane & pl, const TPolygon3D & po )
inline

Gets the distance between a plane and a polygon.

Definition at line 615 of file geometry.h.

References mrpt::math::distance().

## ◆ distanceBetweenPoints() [1/2]

template<typename T >
 T mrpt::math::distanceBetweenPoints ( const T x1, const T y1, const T x2, const T y2 )

Returns the distance between 2 points in 2D.

Definition at line 944 of file geometry.h.

## ◆ distanceBetweenPoints() [2/2]

template<typename T >
 T mrpt::math::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.

Definition at line 951 of file geometry.h.

## ◆ distancePointToPolygon2D()

 double mrpt::math::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.

Definition at line 258 of file geometry.cpp.

## ◆ distanceSqrBetweenPoints() [1/2]

template<typename T >
 T mrpt::math::distanceSqrBetweenPoints ( const T x1, const T y1, const T x2, const T y2 )

Returns the square distance between 2 points in 2D.

Definition at line 959 of file geometry.h.

References mrpt::square().

## ◆ distanceSqrBetweenPoints() [2/2]

template<typename T >
 T mrpt::math::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.

Definition at line 966 of file geometry.h.

## ◆ generateAxisBaseFromDirection()

template<class T >
 CMatrixTemplateNumeric mrpt::math::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!

If is the input vector, then this function returns a matrix such as:

And the three normal vectors are computed as:

If (dx!=0 or dy!=0):

otherwise (the direction vector is vertical):

And finally, the third vector is the cross product of the others:

Returns
The 3x3 matrix (CMatrixTemplateNumeric<T>), containing one vector per column. Throws an std::exception on invalid input (i.e. null direction vector)
generateAxisBaseFromDirectionAndAxis()

(JLB @ 18-SEP-2007)

Definition at line 1111 of file geometry.h.

References mrpt::math::crossProduct3D(), MRPT_END, MRPT_START, mrpt::square(), and THROW_EXCEPTION.

## ◆ generateAxisBaseFromDirectionAndAxis()

 void mrpt::math::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.

Parameters
 [in] vec must be a unitary vector
generateAxisBaseFromDirectionAndAxis()

Definition at line 2081 of file geometry.cpp.

References geometryEpsilon.

## ◆ getAngle() [1/5]

 double mrpt::math::getAngle ( const TPlane & p1, const TPlane & p2 )

Computes the angle between two planes.

Definition at line 859 of file geometry.cpp.

References mrpt::math::TPlane::coefs, geometryEpsilon, and M_PI.

## ◆ getAngle() [2/5]

 double mrpt::math::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).

Definition at line 876 of file geometry.cpp.

## ◆ getAngle() [3/5]

 double mrpt::math::getAngle ( const TLine3D & r1, const TPlane & p2 )
inline

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).

Definition at line 220 of file geometry.h.

References mrpt::math::getAngle().

## ◆ getAngle() [4/5]

 double mrpt::math::getAngle ( const TLine3D & r1, const TLine3D & r2 )

Computes the angle between two 3D lines or segments (implicit constructor will be used if passing a segment instead of a line).

Definition at line 893 of file geometry.cpp.

References mrpt::math::TLine3D::director, geometryEpsilon, and M_PI.

## ◆ getAngle() [5/5]

 double mrpt::math::getAngle ( const TLine2D & r1, const TLine2D & r2 )

Computes the angle between two 2D lines or segments (implicit constructor will be used if passing a segment instead of a line).

Definition at line 910 of file geometry.cpp.

References mrpt::math::TLine2D::coefs, geometryEpsilon, and M_PI.

## ◆ getAngleBisector() [1/2]

 void mrpt::math::getAngleBisector ( const TLine2D & l1, const TLine2D & l2, TLine2D & bis )

Gets the bisector of two lines or segments (implicit constructor will be used if necessary)

Definition at line 2538 of file geometry.cpp.

Referenced by mrpt::math::getAngleBisector().

## ◆ getAngleBisector() [2/2]

 void mrpt::math::getAngleBisector ( const TLine3D & l1, const TLine3D & l2, TLine3D & bis )

Gets the bisector of two lines or segments (implicit constructor will be used if necessary)

Exceptions
 std::logic_error if the lines do not fit in a single plane.

Definition at line 2576 of file geometry.cpp.

References mrpt::math::getAngleBisector(), and mrpt::math::project3D().

## ◆ getEpsilon()

 double mrpt::math::getEpsilon ( )

## ◆ getPrismBounds()

 void mrpt::math::getPrismBounds ( const std::vector< TPoint3D > & poly, TPoint3D & pMin, TPoint3D & pMax )

Gets the prism bounds of a 3D polygon or set of 3D points.

Definition at line 2021 of file geometry.cpp.

References min, mrpt::math::TPoint3D::x, mrpt::math::TPoint3D::y, and mrpt::math::TPoint3D::z.

Referenced by mrpt::math::TPolygon3D::contains(), getMinAndMaxBounds(), and mrpt::math::intersect().

## ◆ getRectangleBounds()

 void mrpt::math::getRectangleBounds ( const std::vector< TPoint2D > & poly, TPoint2D & pMin, TPoint2D & pMax )

Gets the rectangular bounds of a 2D polygon or set of 2D points.

Definition at line 1906 of file geometry.cpp.

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

## ◆ getRegressionLine() [1/2]

 double mrpt::math::getRegressionLine ( const std::vector< TPoint2D > & points, TLine2D & line )

Using eigenvalues, gets the best fitting line for a set of 2D points.

Returns an estimation of the error.

spline, leastSquareLinearFit

Definition at line 2117 of file geometry.cpp.

References mrpt::math::TLine2D::coefs, and mrpt::math::covariancesAndMean().

## ◆ getRegressionLine() [2/2]

 double mrpt::math::getRegressionLine ( const std::vector< TPoint3D > & points, TLine3D & line )

Using eigenvalues, gets the best fitting line for a set of 3D points.

Returns an estimation of the error.

spline, leastSquareLinearFit

Definition at line 2145 of file geometry.cpp.

## ◆ getRegressionPlane()

 double mrpt::math::getRegressionPlane ( const std::vector< TPoint3D > & points, TPlane & plane )

Using eigenvalues, gets the best fitting plane for a set of 3D points.

Returns an estimation of the error.

spline, leastSquareLinearFit

Definition at line 2165 of file geometry.cpp.

## ◆ getSegmentBisector() [1/2]

 void mrpt::math::getSegmentBisector ( const TSegment2D & sgm, TLine2D & bis )

Gets the bisector of a 2D segment.

Definition at line 2516 of file geometry.cpp.

## ◆ getSegmentBisector() [2/2]

 void mrpt::math::getSegmentBisector ( const TSegment3D & sgm, TPlane & bis )

Gets the bisector of a 3D segment.

Definition at line 2526 of file geometry.cpp.

## ◆ intersect() [1/31]

 bool mrpt::math::intersect ( const TSegment3D & s1, const TSegment3D & s2, TObject3D & obj )

Gets the intersection between two 3D segments.

Possible outcomes:

• Segments intersect: Return=true, obj.getType()=GEOMETRIC_TYPE_POINT
• Segments don't intersect & are parallel: Return=true, obj.getType()=GEOMETRIC_TYPE_SEGMENT, obj is the segment "in between" both segments.
• Segments don't intersect & aren't parallel: Return=false.
TObject3D

Definition at line 631 of file geometry.cpp.

## ◆ intersect() [2/31]

 bool mrpt::math::intersect ( const TSegment3D & s1, const TPlane & p2, TObject3D & obj )

Gets the intersection between a 3D segment and a plane.

Possible outcomes:

• Don't intersect: Return=false
• s1 is within the plane: Return=true, obj.getType()=GEOMETRIC_TYPE_SEGMENT
• s1 intersects the plane at one point: Return=true, obj.getType()=GEOMETRIC_TYPE_POINT
TObject3D

Definition at line 653 of file geometry.cpp.

References mrpt::math::TSegment3D::contains(), and mrpt::math::intersect().

## ◆ intersect() [3/31]

 bool mrpt::math::intersect ( const TSegment3D & s1, const TLine3D & r2, TObject3D & obj )

Gets the intersection between a 3D segment and a 3D line.

Possible outcomes:

• They don't intersect : Return=false
• s1 lies within the line: Return=true, obj.getType()=GEOMETRIC_TYPE_SEGMENT
• s1 intersects the line at a point: Return=true, obj.getType()=GEOMETRIC_TYPE_POINT
TObject3D

Definition at line 672 of file geometry.cpp.

References mrpt::math::TSegment3D::contains(), and mrpt::math::intersect().

## ◆ intersect() [4/31]

 bool mrpt::math::intersect ( const TPlane & p1, const TSegment3D & s2, TObject3D & obj )
inline

Gets the intersection between a plane and a 3D segment.

Possible outcomes:

• Don't intersect: Return=false
• s2 is within the plane: Return=true, obj.getType()=GEOMETRIC_TYPE_SEGMENT
• s2 intersects the plane at one point: Return=true, obj.getType()=GEOMETRIC_TYPE_POINT
TObject3D

Definition at line 97 of file geometry.h.

References mrpt::math::intersect().

## ◆ intersect() [5/31]

 bool mrpt::math::intersect ( const TPlane & p1, const TPlane & p2, TObject3D & obj )

Gets the intersection between two planes.

Possible outcomes:

• Planes are parallel: Return=false
• Planes intersect into a line: Return=true, obj.getType()=GEOMETRIC_TYPE_LINE
TObject3D

Definition at line 691 of file geometry.cpp.

## ◆ intersect() [6/31]

 bool mrpt::math::intersect ( const TPlane & p1, const TLine3D & p2, TObject3D & obj )

Gets the intersection between a plane and a 3D line.

Possible outcomes:

• Line is parallel to plane but not within it: Return=false
• Line is contained in the plane: Return=true, obj.getType()=GEOMETRIC_TYPE_LINE
• Line intersects the plane at one point: Return=true, obj.getType()=GEOMETRIC_TYPE_POINT
TObject3D

Definition at line 734 of file geometry.cpp.

## ◆ intersect() [7/31]

 bool mrpt::math::intersect ( const TLine3D & r1, const TSegment3D & s2, TObject3D & obj )
inline

Gets the intersection between a 3D line and a 3D segment.

Possible outcomes:

• They don't intersect : Return=false
• s2 lies within the line: Return=true, obj.getType()=GEOMETRIC_TYPE_SEGMENT
• s2 intersects the line at a point: Return=true, obj.getType()=GEOMETRIC_TYPE_POINT
TObject3D

Definition at line 128 of file geometry.h.

References mrpt::math::intersect().

## ◆ intersect() [8/31]

 bool mrpt::math::intersect ( const TLine3D & r1, const TPlane & p2, TObject3D & obj )
inline

Gets the intersection between a 3D line and a plane.

Possible outcomes:

• Line is parallel to plane but not within it: Return=false
• Line is contained in the plane: Return=true, obj.getType()=GEOMETRIC_TYPE_LINE
• Line intersects the plane at one point: Return=true, obj.getType()=GEOMETRIC_TYPE_POINT
TObject3D

Definition at line 141 of file geometry.h.

References mrpt::math::intersect().

## ◆ intersect() [9/31]

 bool mrpt::math::intersect ( const TLine3D & r1, const TLine3D & r2, TObject3D & obj )

Gets the intersection between two 3D lines.

Possible outcomes:

• Lines do not intersect: Return=false
• Lines are parallel and do not coincide: Return=false
• Lines coincide (are the same): Return=true, obj.getType()=GEOMETRIC_TYPE_LINE
• Lines intesect in a point: Return=true, obj.getType()=GEOMETRIC_TYPE_POINT
TObject3D

Definition at line 766 of file geometry.cpp.

## ◆ intersect() [10/31]

 bool mrpt::math::intersect ( const TLine2D & r1, const TLine2D & r2, TObject2D & obj )

Gets the intersection between two 2D lines.

Possible outcomes:

• Lines do not intersect: Return=false
• Lines are parallel and do not coincide: Return=false
• Lines coincide (are the same): Return=true, obj.getType()=GEOMETRIC_TYPE_LINE
• Lines intesect in a point: Return=true, obj.getType()=GEOMETRIC_TYPE_POINT
TObject2D

Definition at line 803 of file geometry.cpp.

References mrpt::math::TLine2D::coefs, and geometryEpsilon.

## ◆ intersect() [11/31]

 bool mrpt::math::intersect ( const TLine2D & r1, const TSegment2D & s2, TObject2D & obj )

Gets the intersection between a 2D line and a 2D segment.

Possible outcomes:

• They don't intersect: Return=false
• s2 lies within the line: Return=true, obj.getType()=GEOMETRIC_TYPE_SEGMENT
• Both intersects in one point: Return=true, obj.getType()=GEOMETRIC_TYPE_POINT
TObject2D

Definition at line 830 of file geometry.cpp.

References mrpt::math::TSegment2D::contains(), and mrpt::math::intersect().

## ◆ intersect() [12/31]

 bool mrpt::math::intersect ( const TSegment2D & s1, const TLine2D & r2, TObject2D & obj )
inline

Gets the intersection between a 2D line and a 2D segment.

Possible outcomes:

• They don't intersect: Return=false
• s1 lies within the line: Return=true, obj.getType()=GEOMETRIC_TYPE_SEGMENT
• Both intersects in one point: Return=true, obj.getType()=GEOMETRIC_TYPE_POINT
TObject2D

Definition at line 186 of file geometry.h.

References mrpt::math::intersect().

## ◆ intersect() [13/31]

 bool mrpt::math::intersect ( const TSegment2D & s1, const TSegment2D & s2, TObject2D & obj )

Gets the intersection between two 2D segments.

Possible outcomes:

• Segments intersect: Return=true, obj.getType()=GEOMETRIC_TYPE_POINT
• Segments don't intersect & are parallel: Return=true, obj.getType()=GEOMETRIC_TYPE_SEGMENT, obj is the segment "in between" both segments.
• Segments don't intersect & aren't parallel: Return=false.
TObject2D

Definition at line 845 of file geometry.cpp.

## ◆ intersect() [14/31]

 bool mrpt::math::intersect ( const TPolygon2D & p1, const TSegment2D & s2, TObject2D & obj )

Gets the intersection between a 2D polygon and a 2D segment.

TObject2D

Definition at line 1242 of file geometry.cpp.

## ◆ intersect() [15/31]

 bool mrpt::math::intersect ( const TPolygon2D & p1, const TLine2D & r2, TObject2D & obj )

Gets the intersection between a 2D polygon and a 2D line.

TObject2D

Definition at line 1255 of file geometry.cpp.

## ◆ intersect() [16/31]

 bool mrpt::math::intersect ( const TPolygon2D & p1, const TPolygon2D & p2, TObject2D & obj )

Gets the intersection between two 2D polygons.

TObject2D

Definition at line 1464 of file geometry.cpp.

## ◆ intersect() [17/31]

 bool mrpt::math::intersect ( const TSegment2D & s1, const TPolygon2D & p2, TObject2D & obj )
inline

Gets the intersection between a 2D segment and a 2D polygon.

TObject2D

Definition at line 467 of file geometry.h.

## ◆ intersect() [18/31]

 bool mrpt::math::intersect ( const TLine2D & r1, const TPolygon2D & p2, TObject2D & obj )
inline

Gets the intersection between a 2D line and a 2D polygon.

TObject2D

Definition at line 473 of file geometry.h.

References mrpt::math::intersect().

## ◆ intersect() [19/31]

 bool mrpt::math::intersect ( const TPolygon3D & p1, const TSegment3D & s2, TObject3D & obj )

Gets the intersection between a 3D polygon and a 3D segment.

TObject3D

Definition at line 1512 of file geometry.cpp.

## ◆ intersect() [20/31]

 bool mrpt::math::intersect ( const TPolygon3D & p1, const TLine3D & r2, TObject3D & obj )

Gets the intersection between a 3D polygon and a 3D line.

TObject3D

Definition at line 1538 of file geometry.cpp.

## ◆ intersect() [21/31]

 bool mrpt::math::intersect ( const TPolygon3D & p1, const TPlane & p2, TObject3D & obj )

Gets the intersection between a 3D polygon and a plane.

TObject3D

Definition at line 1563 of file geometry.cpp.

References mrpt::math::TPolygon3D::getPlane(), and mrpt::math::intersect().

## ◆ intersect() [22/31]

 bool mrpt::math::intersect ( const TPolygon3D & p1, const TPolygon3D & p2, TObject3D & obj )

Gets the intersection between two 3D polygons.

TObject3D

Definition at line 1622 of file geometry.cpp.

## ◆ intersect() [23/31]

 bool mrpt::math::intersect ( const TSegment3D & s1, const TPolygon3D & p2, TObject3D & obj )
inline

Gets the intersection between a 3D segment and a 3D polygon.

TObject3D

Definition at line 488 of file geometry.h.

## ◆ intersect() [24/31]

 bool mrpt::math::intersect ( const TLine3D & r1, const TPolygon3D & p2, TObject3D & obj )
inline

Gets the intersection between a 3D line and a 3D polygon.

TObject3D

Definition at line 494 of file geometry.h.

References mrpt::math::intersect().

## ◆ intersect() [25/31]

 bool mrpt::math::intersect ( const TPlane & p1, const TPolygon3D & p2, TObject3D & obj )
inline

Gets the intersection between a plane and a 3D polygon.

TObject3D

Definition at line 499 of file geometry.h.

References mrpt::math::intersect().

## ◆ intersect() [26/31]

 size_t mrpt::math::intersect ( const std::vector< TPolygon3D > & v1, const std::vector< TPolygon3D > & v2, CSparseMatrixTemplate< TObject3D > & objs )

Gets the intersection between two sets of 3D polygons.

The intersection is returned as an sparse matrix with each pair of polygons' intersections, and the return value is the amount of intersections found.

TObject3D,CSparseMatrixTemplate

Definition at line 1663 of file geometry.cpp.

## ◆ intersect() [27/31]

 size_t mrpt::math::intersect ( const std::vector< TPolygon3D > & v1, const std::vector< TPolygon3D > & v2, std::vector< TObject3D > & objs )

Gets the intersection between two sets of 3D polygons.

The intersection is returned as a vector with every intersection found, and the return value is the amount of intersections found.

TObject3D

Definition at line 1687 of file geometry.cpp.

References compatibleBounds(), getMinAndMaxBounds(), getPlanes(), and intersectAux().

## ◆ intersect() [28/31]

template<class T , class U , class O >
 size_t mrpt::math::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.

TObject2D,TObject3D,CSparseMatrix

Definition at line 527 of file geometry.h.

## ◆ intersect() [29/31]

template<class T , class U , class O >
 size_t mrpt::math::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.

TObject2D,TObject3D

Definition at line 545 of file geometry.h.

## ◆ intersect() [30/31]

 bool mrpt::math::intersect ( const TObject2D & o1, const TObject2D & o2, TObject2D & obj )

Gets the intersection between any pair of 2D objects.

Definition at line 1721 of file geometry.cpp.

## ◆ intersect() [31/31]

 bool mrpt::math::intersect ( const TObject3D & o1, const TObject3D & o2, TObject3D & obj )

Gets the intersection between any pair of 3D objects.

Definition at line 1793 of file geometry.cpp.

## ◆ minDistBetweenLines()

 bool mrpt::math::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.

The lines are given by:

• Line 1 = P1 + f (P2-P1)
• Line 2 = P3 + f (P4-P3) The Euclidean distance is returned in "dist", and the mid point between the lines in (x,y,z)
Returns
It returns false if there is no solution, i.e. lines are (almost, up to EPS) parallel.

Definition at line 292 of file geometry.cpp.

References mrpt::square().

## ◆ minimumDistanceFromPointToSegment()

template<typename T >
 double mrpt::math::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.

Definition at line 976 of file geometry.h.

References mrpt::square().

## ◆ operator!=() [1/6]

 constexpr bool mrpt::math::operator!= ( const TPoint2D & p1, const TPoint2D & p2 )

Exact comparison between 2D points.

Definition at line 887 of file lightweight_geom_data.h.

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

## ◆ operator!=() [2/6]

 constexpr bool mrpt::math::operator!= ( const TPoint3D & p1, const TPoint3D & p2 )

Exact comparison between 3D points.

Definition at line 901 of file lightweight_geom_data.h.

## ◆ operator!=() [3/6]

 bool mrpt::math::operator!= ( const TPose2D & p1, const TPose2D & p2 )
inline

Exact comparison between 2D poses, taking possible cycles into account.

Definition at line 917 of file lightweight_geom_data.h.

## ◆ operator!=() [4/6]

 bool mrpt::math::operator!= ( const TPose3D & p1, const TPose3D & p2 )
inline

Exact comparison between 3D poses, taking possible cycles into account.

Definition at line 938 of file lightweight_geom_data.h.

## ◆ operator!=() [5/6]

 bool mrpt::math::operator!= ( const TSegment2D & s1, const TSegment2D & s2 )
inline

## ◆ operator!=() [6/6]

 bool mrpt::math::operator!= ( const TSegment3D & s1, const TSegment3D & s2 )
inline

## ◆ operator-() [1/3]

 TPose3D mrpt::math::operator- ( const TPose3D & p )

Unary $$operator: computes inverse SE(3) element. Definition at line 417 of file lightweight_geom_data.cpp. References mrpt::math::TPose3D::fromHomogeneousMatrix(). ## ◆ operator-() [2/3]  TPose3D mrpt::math::operator- ( const TPose3D & b, const TPose3D & a ) Binary$$ operator: $b a$ computes the relative SE(3) pose of b "as seen from" a

Definition at line 425 of file lightweight_geom_data.cpp.

References mrpt::math::TPose3D::fromHomogeneousMatrix().

## ◆ operator-() [3/3]

 constexpr TPoint3D mrpt::math::operator- ( const TPoint3D & p1 )

Unary minus operator for 3D points.

Definition at line 873 of file lightweight_geom_data.h.

## ◆ operator<<() [1/15]

 std::ostream & mrpt::math::operator<< ( std::ostream & o, const TPoint2D & p )

Definition at line 437 of file lightweight_geom_data.cpp.

## ◆ operator<<() [2/15]

 std::ostream & mrpt::math::operator<< ( std::ostream & o, const TPoint3D & p )

Definition at line 441 of file lightweight_geom_data.cpp.

## ◆ operator<<() [3/15]

 std::ostream & mrpt::math::operator<< ( std::ostream & o, const TPose2D & p )

Definition at line 445 of file lightweight_geom_data.cpp.

## ◆ operator<<() [4/15]

 std::ostream & mrpt::math::operator<< ( std::ostream & o, const TPose3D & p )

Definition at line 449 of file lightweight_geom_data.cpp.

## ◆ operator<<() [5/15]

 std::ostream & mrpt::math::operator<< ( std::ostream & o, const TPose3DQuat & p )

Definition at line 453 of file lightweight_geom_data.cpp.

## ◆ operator<<() [6/15]

template<class PoseOrPoint , typename = std::enable_if_t<std::is_base_of< mrpt::math::TPoseOrPoint, PoseOrPoint>::value>>
 mrpt::serialization::CArchive& mrpt::math::operator<< ( mrpt::serialization::CArchive & out, const PoseOrPoint & o )

Definition at line 2339 of file lightweight_geom_data.h.

## ◆ operator<<() [7/15]

 CArchive & mrpt::math::operator<< ( mrpt::serialization::CArchive & out, const mrpt::math::TSegment2D & s )

Definition at line 462 of file lightweight_geom_data.cpp.

## ◆ operator<<() [8/15]

 CArchive & mrpt::math::operator<< ( mrpt::serialization::CArchive & out, const mrpt::math::TLine2D & l )

Definition at line 470 of file lightweight_geom_data.cpp.

References mrpt::math::TLine2D::coefs.

## ◆ operator<<() [9/15]

 CArchive & mrpt::math::operator<< ( mrpt::serialization::CArchive & out, const mrpt::math::TObject2D & o )

## ◆ operator<<() [10/15]

 CArchive & mrpt::math::operator<< ( mrpt::serialization::CArchive & out, const mrpt::math::TSegment3D & s )

Definition at line 479 of file lightweight_geom_data.cpp.

## ◆ operator<<() [11/15]

 CArchive & mrpt::math::operator<< ( mrpt::serialization::CArchive & out, const mrpt::math::TLine3D & l )

## ◆ operator<<() [12/15]

 CArchive & mrpt::math::operator<< ( mrpt::serialization::CArchive & out, const mrpt::math::TPlane & p )

Definition at line 495 of file lightweight_geom_data.cpp.

## ◆ operator<<() [13/15]

 CArchive & mrpt::math::operator<< ( mrpt::serialization::CArchive & out, const mrpt::math::TObject3D & o )

## ◆ operator<<() [14/15]

 CArchive & mrpt::math::operator<< ( mrpt::serialization::CArchive & out, const mrpt::math::TTwist2D & o )

Definition at line 1445 of file lightweight_geom_data.cpp.

References mrpt::math::TTwist2D::size().

## ◆ operator<<() [15/15]

 CArchive & mrpt::math::operator<< ( mrpt::serialization::CArchive & out, const mrpt::math::TTwist3D & o )

Definition at line 1456 of file lightweight_geom_data.cpp.

References mrpt::math::TTwist3D::size().

## ◆ operator==() [1/6]

 constexpr bool mrpt::math::operator== ( const TPoint2D & p1, const TPoint2D & p2 )

Exact comparison between 2D points.

Definition at line 880 of file lightweight_geom_data.h.

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

## ◆ operator==() [2/6]

 constexpr bool mrpt::math::operator== ( const TPoint3D & p1, const TPoint3D & p2 )

Exact comparison between 3D points.

Definition at line 894 of file lightweight_geom_data.h.

## ◆ operator==() [3/6]

 bool mrpt::math::operator== ( const TPose2D & p1, const TPose2D & p2 )
inline

Exact comparison between 2D poses, taking possible cycles into account.

Definition at line 908 of file lightweight_geom_data.h.

## ◆ operator==() [4/6]

 bool mrpt::math::operator== ( const TPose3D & p1, const TPose3D & p2 )
inline

Exact comparison between 3D poses, taking possible cycles into account.

Definition at line 926 of file lightweight_geom_data.h.

## ◆ operator==() [5/6]

 bool mrpt::math::operator== ( const TSegment2D & s1, const TSegment2D & s2 )
inline

## ◆ operator==() [6/6]

 bool mrpt::math::operator== ( const TSegment3D & s1, const TSegment3D & s2 )
inline

## ◆ operator>>() [1/10]

template<class PoseOrPoint , typename = std::enable_if_t<std::is_base_of< mrpt::math::TPoseOrPoint, PoseOrPoint>::value>>
 mrpt::serialization::CArchive& mrpt::math::operator>> ( mrpt::serialization::CArchive & in, PoseOrPoint & o )

Definition at line 2331 of file lightweight_geom_data.h.

## ◆ operator>>() [2/10]

 CArchive & mrpt::math::operator>> ( mrpt::serialization::CArchive & in, mrpt::math::TSegment2D & s )

Definition at line 458 of file lightweight_geom_data.cpp.

## ◆ operator>>() [3/10]

 CArchive & mrpt::math::operator>> ( mrpt::serialization::CArchive & in, mrpt::math::TLine2D & l )

Definition at line 466 of file lightweight_geom_data.cpp.

References mrpt::math::TLine2D::coefs.

## ◆ operator>>() [4/10]

 CArchive & mrpt::math::operator>> ( mrpt::serialization::CArchive & in, mrpt::math::TObject2D & o )

Definition at line 1462 of file lightweight_geom_data.cpp.

## ◆ operator>>() [5/10]

 CArchive & mrpt::math::operator>> ( mrpt::serialization::CArchive & in, mrpt::math::TSegment3D & s )

Definition at line 475 of file lightweight_geom_data.cpp.

## ◆ operator>>() [6/10]

 CArchive & mrpt::math::operator>> ( mrpt::serialization::CArchive & in, mrpt::math::TLine3D & l )

## ◆ operator>>() [7/10]

 CArchive & mrpt::math::operator>> ( mrpt::serialization::CArchive & in, mrpt::math::TPlane & p )

Definition at line 491 of file lightweight_geom_data.cpp.

## ◆ operator>>() [8/10]

 CArchive & mrpt::math::operator>> ( mrpt::serialization::CArchive & in, mrpt::math::TObject3D & o )

## ◆ operator>>() [9/10]

 CArchive & mrpt::math::operator>> ( mrpt::serialization::CArchive & in, mrpt::math::TTwist2D & o )

Definition at line 1440 of file lightweight_geom_data.cpp.

References mrpt::math::TTwist2D::size().

## ◆ operator>>() [10/10]

 CArchive & mrpt::math::operator>> ( mrpt::serialization::CArchive & in, mrpt::math::TTwist3D & o )

Definition at line 1451 of file lightweight_geom_data.cpp.

References mrpt::math::TTwist3D::size().

## ◆ pointIntoPolygon2D()

 bool mrpt::math::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.

Definition at line 227 of file geometry.cpp.

Referenced by mrpt::math::distancePointToPolygon2D().

template<typename T >
 bool mrpt::math::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.

pointIntoPolygon2D

Definition at line 1012 of file geometry.h.

## ◆ project2D() [1/8]

 void mrpt::math::project2D ( const TPoint2D & point, const TPose2D & newXpose, TPoint2D & newPoint )

Uses the given pose 2D to project a point into a new base.

Definition at line 1173 of file geometry.cpp.

References mrpt::math::TPose2D::composePoint().

Referenced by mrpt::math::intersect(), and mrpt::math::project2D().

## ◆ project2D() [2/8]

 void mrpt::math::project2D ( const TSegment2D & segment, const TPose2D & newXpose, TSegment2D & newSegment )
inline

Uses the given pose 2D to project a segment into a new base.

Definition at line 399 of file geometry.h.

## ◆ project2D() [3/8]

 void mrpt::math::project2D ( const TLine2D & line, const TPose2D & newXpose, TLine2D & newLine )

Uses the given pose 2D to project a line into a new base.

Definition at line 1179 of file geometry.cpp.

## ◆ project2D() [4/8]

 void mrpt::math::project2D ( const TPolygon2D & polygon, const TPose2D & newXpose, TPolygon2D & newPolygon )

Uses the given pose 2D to project a polygon into a new base.

Definition at line 1191 of file geometry.cpp.

## ◆ project2D() [5/8]

 void mrpt::math::project2D ( const TObject2D & object, const TPose2D & newXpose, TObject2D & newObject )

Uses the given pose 2D to project any 2D object into a new base.

Definition at line 1200 of file geometry.cpp.

## ◆ project2D() [6/8]

template<class T , class CPOSE2D >
 void mrpt::math::project2D ( const T & obj, const TLine2D & newXLine, T & newObj )

Projects any 2D object into the line's base, using its inverse pose.

If the object is exactly inside the line, this projection will zero its Y coordinate.

Template Parameters
 CPOSE2D set to TPose2D

Definition at line 421 of file geometry.h.

References mrpt::math::TLine2D::getAsPose2D(), and mrpt::math::project2D().

## ◆ project2D() [7/8]

template<class T , class CPOSE2D >
 void mrpt::math::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.

If the object is exactly inside the line, this projection will zero its Y coordinate.

Template Parameters
 CPOSE2D set to TPose2D

Definition at line 434 of file geometry.h.

## ◆ project2D() [8/8]

template<class T >
 void mrpt::math::project2D ( const std::vector< T > & objs, const TPose2D & newXpose, std::vector< T > & newObjs )

Projects a set of 2D objects into the line's base.

Definition at line 444 of file geometry.h.

## ◆ project3D() [1/9]

 void mrpt::math::project3D ( const TPoint3D & point, const mrpt::math::TPose3D & newXYpose, TPoint3D & newPoint )
inline

Uses the given pose 3D to project a point into a new base.

Definition at line 326 of file geometry.h.

## ◆ project3D() [2/9]

 void mrpt::math::project3D ( const TSegment3D & segment, const mrpt::math::TPose3D & newXYpose, TSegment3D & newSegment )
inline

Uses the given pose 3D to project a segment into a new base.

Definition at line 333 of file geometry.h.

References mrpt::math::TPose3D::composePoint().

## ◆ project3D() [3/9]

 void mrpt::math::project3D ( const TLine3D & line, const mrpt::math::TPose3D & newXYpose, TLine3D & newLine )

Uses the given pose 3D to project a line into a new base.

Definition at line 1073 of file geometry.cpp.

## ◆ project3D() [4/9]

 void mrpt::math::project3D ( const TPlane & plane, const mrpt::math::TPose3D & newXYpose, TPlane & newPlane )

Uses the given pose 3D to project a plane into a new base.

Definition at line 1088 of file geometry.cpp.

## ◆ project3D() [5/9]

 void mrpt::math::project3D ( const TPolygon3D & polygon, const mrpt::math::TPose3D & newXYpose, TPolygon3D & newPolygon )

Uses the given pose 3D to project a polygon into a new base.

Definition at line 1114 of file geometry.cpp.

References mrpt::math::project3D().

## ◆ project3D() [6/9]

 void mrpt::math::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.

Definition at line 1123 of file geometry.cpp.

## ◆ project3D() [7/9]

template<class T >
 void mrpt::math::project3D ( const T & obj, const TPlane & newXYPlane, T & newObj )

Projects any 3D object into the plane's base, using its inverse pose.

If the object is exactly inside the plane, this projection will zero its Z coordinates

Definition at line 362 of file geometry.h.

References mrpt::math::TPlane::getAsPose3D(), and mrpt::math::project3D().

## ◆ project3D() [8/9]

template<class T >
 void mrpt::math::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.

If the object is exactly inside the plane, this projection will zero its Z coordinates

Definition at line 373 of file geometry.h.

References mrpt::math::TPlane::getAsPose3D(), and mrpt::math::project3D().

## ◆ project3D() [9/9]

template<class T >
 void mrpt::math::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.

Definition at line 385 of file geometry.h.

## ◆ RectanglesIntersection()

 bool mrpt::math::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.

The first rectangle is not rotated and given by (R1_x_min,R1_x_max)-(R1_y_min,R1_y_max). The second rectangle is given is a similar way, but it is internally rotated according to the given coordinates translation (R2_pose_x,R2_pose_y,R2_pose_phi(radians)), relative to the coordinates system of rectangle 1.

Definition at line 363 of file geometry.cpp.

## ◆ SegmentsIntersection() [1/2]

 bool mrpt::math::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.

Definition at line 114 of file geometry.cpp.

Referenced by mrpt::math::RectanglesIntersection(), and mrpt::math::SegmentsIntersection().

## ◆ SegmentsIntersection() [2/2]

 bool mrpt::math::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.

Definition at line 212 of file geometry.cpp.

References mrpt::math::SegmentsIntersection().

## ◆ setEpsilon()

 void mrpt::math::setEpsilon ( double nE )

Changes the value of the geometric epsilon (default = 1e-5)

geometryEpsilon,getEpsilon

Definition at line 28 of file geometry.cpp.

References eps, and geometryEpsilon.

## ◆ skew_symmetric3() [1/2]

template<class VECTOR , class MATRIX >
 void mrpt::math::skew_symmetric3 ( const VECTOR & v, MATRIX & M )
inline

Computes the 3x3 skew symmetric matrix from a 3-vector or 3-array:

.

Definition at line 843 of file geometry.h.

References ASSERT_.

## ◆ skew_symmetric3() [2/2]

template<class VECTOR >
 mrpt::math::CMatrixDouble33 mrpt::math::skew_symmetric3 ( const VECTOR & 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 859 of file geometry.h.

## ◆ skew_symmetric3_neg() [1/2]

template<class VECTOR , class MATRIX >
 void mrpt::math::skew_symmetric3_neg ( const VECTOR & v, MATRIX & M )
inline

Computes the negative version of a 3x3 skew symmetric matrix from a 3-vector or 3-array:

.

Definition at line 877 of file geometry.h.

References ASSERT_.

## ◆ skew_symmetric3_neg() [2/2]

template<class VECTOR >
 mrpt::math::CMatrixDouble33 mrpt::math::skew_symmetric3_neg ( const VECTOR & 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 893 of file geometry.h.

## ◆ slerp() [1/2]

template<typename T >
 void mrpt::math::slerp ( const CQuaternion< T > & q0, const CQuaternion< T > & q1, const double t, CQuaternion< T > & q )

SLERP interpolation between two quaternions.

Parameters
 [in] q0 The quaternion for t=0 [in] q1 The quaternion for t=1 [in] t A "time" parameter, in the range [0,1]. [out] q The output, interpolated quaternion.
Template Parameters
 T The type of the quaternion (e.g. float, double).
Exceptions
 std::exception Only in Debug, if t is not in the valid range.
http://en.wikipedia.org/wiki/Slerp

Definition at line 32 of file slerp.h.

References ASSERTDEB_, and mrpt::square().

Referenced by mrpt::math::slerp(), mrpt::math::slerp_ypr(), and TEST().

## ◆ slerp() [2/2]

 void mrpt::math::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.

Parameters
 [in] p0 The pose for t=0 [in] p1 The pose for t=1 [in] t A "time" parameter, in the range [0,1]. [out] p The output, interpolated pose.
Exceptions
 std::exception Only in Debug, if t is not in the valid range.

Definition at line 17 of file slerp.cpp.

## ◆ slerp_ypr()

 void mrpt::math::slerp_ypr ( const mrpt::math::TPose3D & q0, const mrpt::math::TPose3D & q1, const double t, mrpt::math::TPose3D & p )

Definition at line 32 of file slerp.cpp.

Referenced by mrpt::poses::CPoseInterpolatorBase< 3 >::impl_interpolation(), and TEST().

## ◆ splitInConvexComponents() [1/2]

 bool mrpt::math::splitInConvexComponents ( const TPolygon2D & poly, std::vector< TPolygon2D > & components )

Splits a 2D polygon into convex components.

Definition at line 2397 of file geometry.cpp.

## ◆ splitInConvexComponents() [2/2]

 bool mrpt::math::splitInConvexComponents ( const TPolygon3D & poly, std::vector< TPolygon3D > & components )

Splits a 3D polygon into convex components.

Exceptions
 std::logic_error if the polygon can't be fit into a plane.

Definition at line 2492 of file geometry.cpp.

## ◆ traceRay() [1/2]

 bool mrpt::math::traceRay ( const std::vector< TPolygonWithPlane > & vec, const mrpt::math::TPose3D & pose, double & dist )

Fast ray tracing method using polygons' properties.

CRenderizable::rayTrace

Definition at line 2590 of file geometry.cpp.

## ◆ traceRay() [2/2]

 bool mrpt::math::traceRay ( const std::vector< TPolygon3D > & vec, const mrpt::math::TPose3D & pose, double & dist )
inline

Fast ray tracing method using polygons' properties.

CRenderizable::rayTrace

Definition at line 779 of file geometry.h.

## ◆ vectorsAreParallel2D()

template<class T , class U >
 bool mrpt::math::vectorsAreParallel2D ( const T & v1, const U & v2 )
inline

Returns true if two 2D vectors are parallel.

The arguments may be points, arrays, etc.

Definition at line 905 of file geometry.h.

## ◆ vectorsAreParallel3D()

template<class T , class U >
 bool mrpt::math::vectorsAreParallel3D ( const T & v1, const U & v2 )
inline

Returns true if two 3D vectors are parallel.

The arguments may be points, arrays, etc.

Definition at line 915 of file geometry.h.

References mrpt::math::getEpsilon().

## ◆ GEOMETRIC_TYPE_LINE

 constexpr unsigned char mrpt::math::GEOMETRIC_TYPE_LINE = 2
static

Object type identifier for TLine2D or TLine3D.

TObject2D,TObject3D

Definition at line 1523 of file lightweight_geom_data.h.

## ◆ GEOMETRIC_TYPE_PLANE

 constexpr unsigned char mrpt::math::GEOMETRIC_TYPE_PLANE = 4
static

Object type identifier for TPlane.

TObject3D

Definition at line 1533 of file lightweight_geom_data.h.

## ◆ GEOMETRIC_TYPE_POINT

 constexpr unsigned char mrpt::math::GEOMETRIC_TYPE_POINT = 0
static

Object type identifier for TPoint2D or TPoint3D.

TObject2D,TObject3D

Definition at line 1513 of file lightweight_geom_data.h.

## ◆ GEOMETRIC_TYPE_POLYGON

 constexpr unsigned char mrpt::math::GEOMETRIC_TYPE_POLYGON = 3
static

## ◆ GEOMETRIC_TYPE_SEGMENT

 constexpr unsigned char mrpt::math::GEOMETRIC_TYPE_SEGMENT = 1
static

Object type identifier for TSegment2D or TSegment3D.

TObject2D,TObject3D

Definition at line 1518 of file lightweight_geom_data.h.

## ◆ GEOMETRIC_TYPE_UNDEFINED

 constexpr unsigned char mrpt::math::GEOMETRIC_TYPE_UNDEFINED = 255
static

Object type identifier for empty TObject2D or TObject3D.