1 #ifndef VTESTBED_GEOMETRY_POLYGON_HH     2 #define VTESTBED_GEOMETRY_POLYGON_HH     8 #include <vtestbed/geometry/line_segment.hh>     9 #include <vtestbed/geometry/math.hh>    10 #include <vtestbed/geometry/plane.hh>    11 #include <vtestbed/geometry/types.hh>    17         template <
class T, 
int N>
    24             using scalar_type = T;
    25             static constexpr 
const int dimensions = N;
    26             using value_type = 
typename base_type::value_type;
    27             using pointer = 
typename base_type::pointer;
    28             using const_pointer = 
typename base_type::const_pointer;
    29             using reference = 
typename base_type::reference;
    30             using const_reference = 
typename base_type::const_reference;
    31             using iterator = 
typename base_type::iterator;
    32             using const_iterator = 
typename base_type::const_iterator;
    33             using size_type = 
typename base_type::size_type;
    34             using difference_type = 
typename base_type::difference_type;
    35             using reverse_iterator = 
typename base_type::reverse_iterator;
    36             using const_reverse_iterator = 
typename base_type::const_reverse_iterator;
    41             using base_type::base_type;
    42             using base_type::operator=;
    43             using base_type::operator[];
    47                 return !this->empty() && all(this->front() == this->back());
    52                 if (this->empty()) { 
return; }
    53                 if (all(this->front() == this->back())) { 
return; }
    54                 this->emplace_back(this->front());
    58             find(
const value_type& vertex)
 const {
    59                 const auto& vertices = *
this;
    60                 const auto nvertices = vertices.size();
    61                 for (
size_t i=0; i<nvertices; ++i) {
    62                     const auto& v = vertices[i];
    63                     if (all(v == vertex)) {
    70             inline void flip() { std::reverse(this->begin(), this->end()); }
    74             bool degenerate(scalar_type eps) 
const;
    87             void gift_wrap(scalar_type eps, size_type count);
    92         template <
class T, 
int N>
    95         template <
class T> Vertex<T,2> centroid(
const Polygon<T,2>& p);
   101 #endif // vim:filetype=cpp 
A polygon composed of line segments.
 
triangle_array triangles() const
Uses ear-clipping triangulation.
 
Three- and two-dimensional plane.