AXOM
Axom provides a robust, flexible software infrastructure for the development of multi-physics applications and computational tools.
axom::primal::Polygon< T, NDIMS > Class Template Reference

Represents a polygon defined by an array of points. More...

#include </home/docs/checkouts/readthedocs.org/user_builds/axom/checkouts/develop/src/axom/primal/geometry/Polygon.hpp>

Public Types

using PointType = Point< T, NDIMS >
 
using VectorType = Vector< T, NDIMS >
 

Public Member Functions

 Polygon ()
 Default constructor for an empty polygon. More...
 
 Polygon (int numExpectedVerts)
 Constructor for an empty polygon that reserves space for the given number of vertices. More...
 
 Polygon (const axom::Array< PointType > &vertices)
 Constructor for a polygon with the given vertices. More...
 
int numVertices () const
 Return the number of vertices in the polygon. More...
 
void addVertex (const PointType &pt)
 Appends a vertex to the list of vertices. More...
 
void clear ()
 Clears the list of vertices. More...
 
PointTypeoperator[] (int idx)
 Retrieves the vertex at index idx. More...
 
const PointTypeoperator[] (int idx) const
 Retrieves the vertex at index idx. More...
 
template<int TDIM = NDIMS>
std::enable_if< TDIM==3, VectorType >::type normal () const
 Robustly returns the normal of the polygon (not normalized) More...
 
PointType vertexMean () const
 Computes the average of the polygon's vertex positions. More...
 
template<int TDIM = NDIMS>
std::enable_if< TDIM==3, double >::type area () const
 Returns the area of the polygon (3D specialization) More...
 
template<int TDIM = NDIMS>
std::enable_if< TDIM==2, double >::type area () const
 Returns the area of a planar polygon (2D specialization) More...
 
template<int TDIM = NDIMS>
std::enable_if< TDIM==2, double >::type signedArea () const
 Returns the signed area of a 2D polygon. More...
 
std::ostream & print (std::ostream &os) const
 Simple formatted print of a polygon instance. More...
 
bool isValid () const
 Simple check for validity of a polygon. More...
 

Detailed Description

template<typename T, int NDIMS>
class axom::primal::Polygon< T, NDIMS >

Represents a polygon defined by an array of points.

Template Parameters
Tthe coordinate type, e.g., double, float, etc.
NDIMSthe number of dimensions
Note
The polygon vertices should be ordered in a counter clockwise orientation with respect to the polygon's desired normal vector

Member Typedef Documentation

◆ PointType

template<typename T , int NDIMS>
using axom::primal::Polygon< T, NDIMS >::PointType = Point<T, NDIMS>

◆ VectorType

template<typename T , int NDIMS>
using axom::primal::Polygon< T, NDIMS >::VectorType = Vector<T, NDIMS>

Constructor & Destructor Documentation

◆ Polygon() [1/3]

template<typename T , int NDIMS>
axom::primal::Polygon< T, NDIMS >::Polygon ( )
inline

Default constructor for an empty polygon.

◆ Polygon() [2/3]

template<typename T , int NDIMS>
axom::primal::Polygon< T, NDIMS >::Polygon ( int  numExpectedVerts)
inlineexplicit

Constructor for an empty polygon that reserves space for the given number of vertices.

Parameters
[in]numExpectedVertsnumber of vertices for which to reserve space
Precondition
numExpectedVerts is not negative

References axom::Array< T, DIM, SPACE >::reserve(), and SLIC_ASSERT.

◆ Polygon() [3/3]

template<typename T , int NDIMS>
axom::primal::Polygon< T, NDIMS >::Polygon ( const axom::Array< PointType > &  vertices)
inline

Constructor for a polygon with the given vertices.

Member Function Documentation

◆ numVertices()

template<typename T , int NDIMS>
int axom::primal::Polygon< T, NDIMS >::numVertices ( ) const
inline

Return the number of vertices in the polygon.

References axom::Array< T, DIM, SPACE >::size().

◆ addVertex()

template<typename T , int NDIMS>
void axom::primal::Polygon< T, NDIMS >::addVertex ( const PointType pt)
inline

Appends a vertex to the list of vertices.

References axom::Array< T, DIM, SPACE >::push_back().

◆ clear()

template<typename T , int NDIMS>
void axom::primal::Polygon< T, NDIMS >::clear ( )
inline

Clears the list of vertices.

References axom::Array< T, DIM, SPACE >::clear().

◆ operator[]() [1/2]

template<typename T , int NDIMS>
PointType& axom::primal::Polygon< T, NDIMS >::operator[] ( int  idx)
inline

Retrieves the vertex at index idx.

◆ operator[]() [2/2]

template<typename T , int NDIMS>
const PointType& axom::primal::Polygon< T, NDIMS >::operator[] ( int  idx) const
inline

Retrieves the vertex at index idx.

◆ normal()

template<typename T , int NDIMS>
template<int TDIM = NDIMS>
std::enable_if<TDIM == 3, VectorType>::type axom::primal::Polygon< T, NDIMS >::normal ( ) const
inline

Robustly returns the normal of the polygon (not normalized)

Precondition
This function is only valid when NDIMS = 3 and the polygon is valid
Returns
normal polygon normal vector

References axom::primal::Vector< T, NDIMS >::cross_product(), axom::primal::Polygon< T, NDIMS >::isValid(), axom::primal::Polygon< T, NDIMS >::numVertices(), and SLIC_ASSERT.

◆ vertexMean()

template<typename T , int NDIMS>
PointType axom::primal::Polygon< T, NDIMS >::vertexMean ( ) const
inline

Computes the average of the polygon's vertex positions.

Returns
A point at the mean of the polygon's vertices
Precondition
polygon.isValid() is true

References axom::primal::Point< T, NDIMS >::array(), axom::primal::Polygon< T, NDIMS >::isValid(), axom::primal::Polygon< T, NDIMS >::numVertices(), and SLIC_ASSERT.

◆ area() [1/2]

template<typename T , int NDIMS>
template<int TDIM = NDIMS>
std::enable_if<TDIM == 3, double>::type axom::primal::Polygon< T, NDIMS >::area ( ) const
inline

Returns the area of the polygon (3D specialization)

The algorithm sums up contributions from triangles defined by each edge of the polygon and a local origin (at the Polygon's vertexMean()). The algorithm assumes a planar polygon embedded in 3D, however it will return a value for non-planar polygons.

The area is always non-negative since 3D polygons do not have a unique orientation.

References axom::utilities::abs(), axom::primal::Vector< T, NDIMS >::cross_product(), axom::primal::Vector< T, NDIMS >::norm(), axom::primal::Polygon< T, NDIMS >::numVertices(), and axom::primal::Polygon< T, NDIMS >::vertexMean().

◆ area() [2/2]

template<typename T , int NDIMS>
template<int TDIM = NDIMS>
std::enable_if<TDIM == 2, double>::type axom::primal::Polygon< T, NDIMS >::area ( ) const
inline

Returns the area of a planar polygon (2D specialization)

The area is always non-negative.

See also
signedArea()

References axom::utilities::abs(), and axom::primal::Polygon< T, NDIMS >::signedArea().

◆ signedArea()

template<typename T , int NDIMS>
template<int TDIM = NDIMS>
std::enable_if<TDIM == 2, double>::type axom::primal::Polygon< T, NDIMS >::signedArea ( ) const
inline

Returns the signed area of a 2D polygon.

The signed area accounts for the orientation of the polygon. It is positive when the vertices are oriented counter-clockwise and negative when the vertices are oriented clockwise.

Note
Signed area is only defined in 2D.
See also
area()

References axom::primal::Polygon< T, NDIMS >::numVertices().

◆ print()

template<typename T , int NDIMS>
std::ostream& axom::primal::Polygon< T, NDIMS >::print ( std::ostream &  os) const
inline

Simple formatted print of a polygon instance.

Parameters
osThe output stream to write to
Returns
A reference to the modified ostream

References axom::primal::Polygon< T, NDIMS >::numVertices().

◆ isValid()

template<typename T , int NDIMS>
bool axom::primal::Polygon< T, NDIMS >::isValid ( ) const
inline

Simple check for validity of a polygon.

Initial check is that the polygon has three or more vertices

Returns
True, if the polygon is valid, False otherwise

References axom::Array< T, DIM, SPACE >::size().


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