Class Polygon

Class Documentation

class Polygon

Public Types

enum class TriangulationMethods

Values:

enumerator FAN

Public Functions

Polygon()

Default constructor.

explicit Polygon(std::vector<Position> vertices)

Constructor with vertices.

Parameters:

vertices – the points of the polygon.

virtual ~Polygon() = default

Destructor.

bool isInside(const Position &point) const

Check if point is inside polygon.

Parameters:

point – the point to be checked.

Returns:

true if inside, false otherwise.

void addVertex(const Position &vertex)

Add a vertex to the polygon

Parameters:

vertex – the point to be added.

const Position &getVertex(const size_t index) const

Get the vertex with index.

Parameters:

index – the index of the requested vertex.

Returns:

the requested vertex.

void removeVertices()

Removes all vertices from the polygon.

const Position &operator[](const size_t index) const

Get vertex operator overload.

Parameters:

index – the index of the requested vertex.

Returns:

the requested vertex.

const std::vector<Position> &getVertices() const

Returns the vertices of the polygon.

Returns:

the vertices of the polygon.

size_t nVertices() const

Returns the number of vertices.

Returns:

the number of vertices.

void setTimestamp(const uint64_t timestamp)

Set the timestamp of the polygon.

Parameters:

timestamp – the timestamp to set (in nanoseconds).

uint64_t getTimestamp() const

Get the timestamp of the polygon.

Returns:

timestamp in nanoseconds.

void resetTimestamp()

Resets the timestamp of the polygon (to zero).

void setFrameId(const std::string &frameId)

Set the frame id of the polygon.

Parameters:

frameId – the frame id to set.

const std::string &getFrameId() const

Get the frameId of the polygon.

Returns:

frameId.

double getArea() const

Get the area of the polygon. The polygon has to be “simple”, i.e. not crossing itself.

Returns:

area of the polygon.

Position getCentroid() const

Get the centroid of polygon. The polygon has to be “simple”, i.e. not crossing itself.

Returns:

centroid of polygon.

void getBoundingBox(Position &center, Length &length) const

Gets the bounding box of the polygon.

Parameters:
  • center – the center of the bounding box.

  • length – the side lengths of the bounding box.

bool convertToInequalityConstraints(Eigen::MatrixXd &A, Eigen::VectorXd &b) const

Convert polygon to inequality constraints which most tightly contain the points; i.e., create constraints to bound the convex hull of polygon. The inequality constraints are represented as A and b, a set of constraints such that A*x <= b defining the region of space enclosing the convex hull. Based on the VERT2CON MATLAB method by Michael Kleder: http://www.mathworks.com/matlabcentral/fileexchange/7895-vert2con-vertices-to-constraints

Parameters:
  • A – the A matrix in of the inequality constraint.

  • b – the b matrix in of the inequality constraint.

Returns:

true if conversion successful, false otherwise.

bool offsetInward(const double margin)

Offsets the polygon inward (buffering) by a margin. Use a negative margin to offset the polygon outward.

Parameters:

margin – the margin to offset the polygon by (in [m]).

Returns:

true if successful, false otherwise.

bool thickenLine(const double thickness)

If only two verices are given, this methods generates a thickened line polygon with four vertices.

Parameters:

thickness – the desired thickness of the line.

Returns:

true if successful, false otherwise.

std::vector<Polygon> triangulate(const TriangulationMethods &method = TriangulationMethods::FAN) const

Return a triangulated version of the polygon.

Returns:

a list of triangle polygons covering the same polygon.

Public Static Functions

static Polygon fromCircle(const Position center, const double radius, const int nVertices = 20)

Approximates a circle with a polygon.

Parameters:
  • center[in] the center position of the circle.

  • radius[in] radius of the circle.

  • nVertices[in] number of vertices of the approximation polygon. Default = 20.

Returns:

circle as polygon.

static Polygon convexHullOfTwoCircles(const Position center1, const Position center2, const double radius, const int nVertices = 20)

Approximates two circles with a convex hull and returns it as polygon.

Parameters:
  • center1[in] the center position of the first circle.

  • center2[in] the center position of the second circle.

  • radius[in] radius of the circles.

  • nVertices[in] number of vertices of the approximation polygon. Default = 20.

Returns:

convex hull of the two circles as polygon.

static Polygon convexHull(Polygon &polygon1, Polygon &polygon2)

Computes the convex hull of two polygons and returns it as polygon.

Parameters:
  • polygon1[in] the first input polygon.

  • polygon2[in] the second input polygon.

Returns:

convex hull as polygon.

static Polygon monotoneChainConvexHullOfPoints(const std::vector<Position> &points)

Computes the convex hull of given points, using Andrew’s monotone chain convex hull algorithm, and returns it as polygon.

Parameters:

points[in] points to use to compute the convex hull used to create the polygon.

Returns:

convex hull as polygon.

Protected Attributes

std::string frameId_

Frame id of the polygon.

uint64_t timestamp_

Timestamp of the polygon (nanoseconds).

std::vector<Position> vertices_

Vertices of the polygon.

Protected Static Functions

static bool sortVertices(const Eigen::Vector2d &vector1, const Eigen::Vector2d &vector2)

Returns true if the vector1 and vector2 are sorted lexicographically.

Parameters:
  • vector1[in] the first input vector.

  • vector2[in] the second input vector.

static double computeCrossProduct2D(const Eigen::Vector2d &vector1, const Eigen::Vector2d &vector2)

Returns the 2D cross product of vector1 and vector2.

Parameters:
  • vector1[in] the first input vector.

  • vector2[in] the second input vector.

static double vectorsMakeClockwiseTurn(const Eigen::Vector2d &pointO, const Eigen::Vector2d &pointA, const Eigen::Vector2d &pointB)

Returns true if OAB makes a clockwise turn or if the OA and OB vectors are collinear.

Parameters:
  • pointO[in] point of the origin O, used to compute OA and OB.

  • pointA[in] input point A, used to compute OA.

  • pointB[in] input point B, used to compute OB.