Gazebo Math

API Reference

8.1.0
Line2< T > Class Template Reference

A two dimensional line segment. The line is defined by a start and end point. More...

#include <gz/math/Line2.hh>

Public Member Functions

 Line2 (const math::Vector2< T > &_ptA, const math::Vector2< T > &_ptB)
 Constructor.
 
 Line2 (double _x1, double _y1, double _x2, double _y2)
 Constructor.
 
bool Collinear (const math::Line2< T > &_line, double _epsilon=1e-6) const
 Check if the given line is collinear with this line. This is the AND of Parallel and Intersect.
 
bool Collinear (const math::Vector2< T > &_pt, double _epsilon=1e-6) const
 Check if the given point is collinear with this line.
 
double CrossProduct (const Line2< T > &_line) const
 Return the cross product of this line and the given line. Give 'a' as this line and 'b' as given line, the equation is: (a.start.x - a.end.x) * (b.start.y - b.end.y) - (a.start.y - a.end.y) * (b.start.x - b.end.x)
 
double CrossProduct (const Vector2< T > &_pt) const
 Return the cross product of this line and the given point. Given 'a' and 'b' as the start and end points, the equation is:
 
bool Intersect (const Line2< T > &_line, double _epsilon=1e-6) const
 Check if this line intersects the given line segment.
 
bool Intersect (const Line2< T > &_line, math::Vector2< T > &_pt, double _epsilon=1e-6) const
 Check if this line intersects the given line segment. The point of intersection is returned in the _result parameter.
 
Length () const
 Get the length of the line.
 
bool OnSegment (const math::Vector2< T > &_pt, double _epsilon=1e-6) const
 Return whether the given point is on this line segment.
 
bool operator!= (const Line2< T > &_line) const
 Inequality operator.
 
bool operator== (const Line2< T > &_line) const
 Equality operator.
 
math::Vector2< T > operator[] (size_t _index) const
 Get the start or end point.
 
bool Parallel (const math::Line2< T > &_line, double _epsilon=1e-6) const
 Check if the given line is parallel with this line.
 
void Set (const math::Vector2< T > &_ptA, const math::Vector2< T > &_ptB)
 Set the start and end point of the line segment.
 
void Set (double _x1, double _y1, double _x2, double _y2)
 Set the start and end point of the line segment.
 
double Slope () const
 Get the slope of the line.
 
bool Within (const math::Vector2< T > &_pt, double _epsilon=1e-6) const
 Check if the given point is between the start and end points of the line segment. This does not imply that the point is on the segment.
 

Detailed Description

template<typename T>
class gz::math::Line2< T >

A two dimensional line segment. The line is defined by a start and end point.

Constructor & Destructor Documentation

◆ Line2() [1/2]

template<typename T >
Line2 ( const math::Vector2< T > &  _ptA,
const math::Vector2< T > &  _ptB 
)
inline

Constructor.

Parameters
[in]_ptAStart point of the line segment
[in]_ptBEnd point of the line segment

References Line2< T >::Set().

◆ Line2() [2/2]

template<typename T >
Line2 ( double  _x1,
double  _y1,
double  _x2,
double  _y2 
)
inline

Constructor.

Parameters
[in]_x1X coordinate of the start point.
[in]_y1Y coordinate of the start point.
[in]_x2X coordinate of the end point.
[in]_y2Y coordinate of the end point.

References Line2< T >::Set().

Member Function Documentation

◆ Collinear() [1/2]

template<typename T >
bool Collinear ( const math::Line2< T > &  _line,
double  _epsilon = 1e-6 
) const
inline

Check if the given line is collinear with this line. This is the AND of Parallel and Intersect.

Parameters
[in]_lineThe line to check.
[in]_epsilonThe error bounds within which the collinear check will return true.
Returns
Return true if the line is collinear with this line, false otherwise.

References Line2< T >::Intersect(), and Line2< T >::Parallel().

◆ Collinear() [2/2]

template<typename T >
bool Collinear ( const math::Vector2< T > &  _pt,
double  _epsilon = 1e-6 
) const
inline

Check if the given point is collinear with this line.

Parameters
[in]_ptThe point to check.
[in]_epsilonThe error bounds within which the collinear check will return true.
Returns
Return true if the point is collinear with this line, false otherwise.

References Line2< T >::CrossProduct(), and gz::math::equal().

Referenced by Line2< T >::OnSegment().

◆ CrossProduct() [1/2]

template<typename T >
double CrossProduct ( const Line2< T > &  _line) const
inline

Return the cross product of this line and the given line. Give 'a' as this line and 'b' as given line, the equation is: (a.start.x - a.end.x) * (b.start.y - b.end.y) - (a.start.y - a.end.y) * (b.start.x - b.end.x)

Parameters
[in]_lineLine for the cross product computation.
Returns
Return the cross product of this line and the given line.

Referenced by Line2< T >::Collinear(), Line2< T >::Intersect(), and Line2< T >::Parallel().

◆ CrossProduct() [2/2]

template<typename T >
double CrossProduct ( const Vector2< T > &  _pt) const
inline

Return the cross product of this line and the given point. Given 'a' and 'b' as the start and end points, the equation is:

Parameters
[in]_ptPoint for the cross product computation.
Returns
Return the cross product of this line and the given point.

◆ Intersect() [1/2]

template<typename T >
bool Intersect ( const Line2< T > &  _line,
double  _epsilon = 1e-6 
) const
inline

Check if this line intersects the given line segment.

Parameters
[in]_lineThe line to check for intersection.
[in]_epsilonThe error bounds within which the intersection check will return true.
Returns
True if an intersection was found.

References Line2< T >::Intersect().

Referenced by Line2< T >::Collinear(), and Line2< T >::Intersect().

◆ Intersect() [2/2]

template<typename T >
bool Intersect ( const Line2< T > &  _line,
math::Vector2< T > &  _pt,
double  _epsilon = 1e-6 
) const
inline

Check if this line intersects the given line segment. The point of intersection is returned in the _result parameter.

Parameters
[in]_lineThe line to check for intersection.
[out]_ptThe point of intersection. This value is only valid if the return value is true.
[in]_epsilonThe error bounds within which the intersection check will return true.
Returns
True if an intersection was found.

References Line2< T >::CrossProduct(), gz::math::equal(), std::max(), std::min(), and Line2< T >::Within().

◆ Length()

template<typename T >
T Length ( ) const
inline

Get the length of the line.

Returns
The length of the line.

◆ OnSegment()

template<typename T >
bool OnSegment ( const math::Vector2< T > &  _pt,
double  _epsilon = 1e-6 
) const
inline

Return whether the given point is on this line segment.

Parameters
[in]_ptPoint to check.
[in]_epsilonThe error bounds within which the OnSegment check will return true.
Returns
True if the point is on the segement.

References Line2< T >::Collinear(), and Line2< T >::Within().

◆ operator!=()

template<typename T >
bool operator!= ( const Line2< T > &  _line) const
inline

Inequality operator.

Parameters
[in]_lineLine to compare for inequality.
Returns
True if the given line is not to this line

◆ operator==()

template<typename T >
bool operator== ( const Line2< T > &  _line) const
inline

Equality operator.

Parameters
[in]_lineLine to compare for equality.
Returns
True if the given line is equal to this line

◆ operator[]()

template<typename T >
math::Vector2< T > operator[] ( size_t  _index) const
inline

Get the start or end point.

Parameters
[in]_index0 = start point, 1 = end point. The _index is clamped to the range [0, 1]

References gz::math::clamp(), gz::math::GZ_ONE_SIZE_T, and gz::math::GZ_ZERO_SIZE_T.

◆ Parallel()

template<typename T >
bool Parallel ( const math::Line2< T > &  _line,
double  _epsilon = 1e-6 
) const
inline

Check if the given line is parallel with this line.

Parameters
[in]_lineThe line to check.
[in]_epsilonThe error bounds within which the parallel check will return true.
Returns
Return true if the line is parallel with this line, false otherwise. Return true if either line is a point (line with zero length).

References Line2< T >::CrossProduct(), and gz::math::equal().

Referenced by Line2< T >::Collinear().

◆ Set() [1/2]

template<typename T >
void Set ( const math::Vector2< T > &  _ptA,
const math::Vector2< T > &  _ptB 
)
inline

Set the start and end point of the line segment.

Parameters
[in]_ptAStart point of the line segment
[in]_ptBEnd point of the line segment

Referenced by Line2< T >::Line2(), and Line2< T >::Line2().

◆ Set() [2/2]

template<typename T >
void Set ( double  _x1,
double  _y1,
double  _x2,
double  _y2 
)
inline

Set the start and end point of the line segment.

Parameters
[in]_x1X coordinate of the start point.
[in]_y1Y coordinate of the start point.
[in]_x2X coordinate of the end point.
[in]_y2Y coordinate of the end point.

References Matrix6< T >::Set().

◆ Slope()

template<typename T >
double Slope ( ) const
inline

Get the slope of the line.

Returns
The slope of the line, NAN_D if the line is vertical.

References gz::math::equal(), and gz::math::NAN_D.

◆ Within()

template<typename T >
bool Within ( const math::Vector2< T > &  _pt,
double  _epsilon = 1e-6 
) const
inline

Check if the given point is between the start and end points of the line segment. This does not imply that the point is on the segment.

Parameters
[in]_ptPoint to check.
[in]_epsilonThe error bounds within which the within check will return true.
Returns
True if the point is on the segement.

References std::max(), and std::min().

Referenced by Line2< T >::Intersect(), and Line2< T >::OnSegment().


The documentation for this class was generated from the following file: