| CGAL 4.4 - 2D Polygons | 
#include <CGAL/Polygon_2.h>
The class Polygon_2 implements polygons.
The Polygon_2 is parameterized by a traits class and a container class. The latter can be any class that fulfills the requirements for an STL container. It defaults to the std::vector class.
Implementation
The methods is_simple(), is_convex(), orientation(), oriented_side(), bounded_side(), bbox(), area(), left_vertex(), right_vertex(), top_vertex() and bottom_vertex() are all implemented using the algorithms on sequences of 2D points. See the corresponding global functions for information about which algorithms were used and what complexity they have. 
| Global Operators | |
| template<class Traits_P , class Container1_P , class Container2_P > | |
| bool | operator== (const Polygon_2< Traits_P, Container1_P > &p1, const Polygon_2< Traits_P, Container2_P > &p2) | 
| Test for equality: two polygons are equal iff there exists a cyclic permutation of the vertices of p2such that they are equal to the vertices ofp1.  More... | |
| template<class Traits_P , class Container1_P , class Container2_P > | |
| bool | operator!= (const Polygon_2< Traits_P, Container1_P > &p1, const Polygon_2< Traits_P, Container2_P > &p2) | 
| Test for inequality. | |
| template<class Transformation , class Traits_P , class Container_P > | |
| Polygon_2< Traits_P, Container_P > | transform (const Transformation &t, const Polygon_2< Traits_P, Container_P > &p) | 
| Returns the image of the polygon punder the transformationt. | |
| I/O | |
| The information output in the  | |
| template<class Traits_P , class Container_P > | |
| std::istream & | operator>> (std::istream &is, Polygon_2< Traits_P, Container_P > &p) | 
| Inserts the polygon pinto the streamos.  More... | |
| template<class Traits_P , class Container_P > | |
| std::ostream & | operator<< (std::ostream &os, const Polygon_2< Traits_P, Container_P > &p) | 
| Reads a polygon from stream isand assigns it top.  More... | |
| Types | |
| typedef Container_P | Container | 
| The container type. | |
| typedef Traits_P::FT | FT | 
| The number type of the coordinates of the points of the polygon. | |
| typedef Traits_P::Point_2 | Point_2 | 
| The point type of the polygon. | |
| typedef Traits_P::Segment_2 | Segment_2 | 
| The type of a segment between two points of the polygon. | |
| Iterators | |
| The following types denote iterators that allow to traverse the vertices and edges of a polygon. Since a polygon can be viewed as a circular as well as a linear data structure both circulators and iterators are defined. 
 | |
| typedef Container::iterator | Vertex_iterator | 
| typedef unspecified_type | Vertex_circulator | 
| typedef unspecified_type | Edge_const_iterator | 
| typedef unspecified_type | Edge_const_circulator | 
| Creation | |
| Polygon_2 (const Traits &p_traits=Traits()) | |
| Creates an empty polygon. | |
| Polygon_2 (const Polygon_2< Traits_P, Container_P > &polygon) | |
| Copy constructor. | |
| template<class InputIterator > | |
| Polygon_2 (InputIterator first, InputIterator last, Traits p_traits=Traits()) | |
| Introduces a polygon with vertices from the sequence defined by the range [first,last).  More... | |
| Modifiers | |
| void | set (Vertex_iterator i, const Point_2 &q) | 
| Acts as *i = q, except that that would be illegal because the iterator is not mutable.  More... | |
| void | set (Polygon_circulator< Container >const &i, const Point_2 &q) | 
| Vertex_iterator | insert (Vertex_iterator i, const Point_2 &q) | 
| Inserts the vertex qbeforei.  More... | |
| Vertex_iterator | insert (Vertex_circulator i, const Point_2 &q) | 
| Access Functions | |
| The following methods of the class Polygon_2 return circulators and iterators that allow to traverse the vertices and edges. | |
| Vertex_const_iterator | vertices_begin () const | 
| Returns a constant iterator that allows to traverse the vertices of the polygon.  More... | |
| Vertex_const_iterator | vertices_end () const | 
| Returns the corresponding past-the-end iterator. | |
| Vertex_const_circulator | vertices_circulator () const | 
| Returns a mutable circulator that allows to traverse the vertices of the polygon.  More... | |
| Edge_const_iterator | edges_begin () const | 
| Returns a non-mutable iterator that allows to traverse the edges of the polygon.  More... | |
| Edge_const_iterator | edges_end () const | 
| Returns the corresponding past-the-end iterator. | |
| Edge_const_circulator | edges_circulator () const | 
| Returns a non-mutable circulator that allows to traverse the edges of the polygon.  More... | |
| Predicates | |
| bool | is_simple () const | 
| Returns whether this is a simple polygon. | |
| bool | is_convex () const | 
| Returns whether this is convex. | |
| Orientation | orientation () const | 
| Returns the orientation.  More... | |
| Oriented_side | oriented_side (const Point_2 &value) const | 
| Returns POSITIVE_SIDE, orNEGATIVE_SIDE, orON_ORIENTED_BOUNDARY, depending on where pointqis.  More... | |
| Bounded_side | bounded_side (const Point_2 &value) const | 
| Returns the symbolic constant ON_BOUNDED_SIDE,ON_BOUNDARYorON_UNBOUNDED_SIDE, depending on where pointqis.  More... | |
| Bbox_2 | bbox () const | 
| Returns the smallest bounding box containing this polygon. | |
| FT | area () const | 
| Returns the signed area of the polygon.  More... | |
| Vertex_const_iterator | left_vertex () const | 
| Returns the leftmost vertex of the polygon with the smallest x-coordinate.  More... | |
| Vertex_const_iterator | right_vertex () const | 
| Returns the rightmost vertex of the polygon with the largest x-coordinate.  More... | |
| Vertex_const_iterator | top_vertex () const | 
| Returns topmost vertex of the polygon with the largest y-coordinate.  More... | |
| Vertex_const_iterator | bottom_vertex () const | 
| Returns the bottommost vertex of the polygon with the smallest y-coordinate.  More... | |
| bool | is_counterclockwise_oriented () const | 
| bool | is_clockwise_oriented () const | 
| bool | is_collinear_oriented () const | 
| bool | has_on_positive_side (const Point_2 &q) const | 
| bool | has_on_negative_side (const Point_2 &q) const | 
| bool | has_on_boundary (const Point_2 &q) const | 
| bool | has_on_bounded_side (const Point_2 &q) const | 
| bool | has_on_unbounded_side (const Point_2 &q) const | 
| Random Access Methods | |
| const Point_2 & | vertex (std::size_t i) const | 
| Returns a (const) reference to the i-th vertex. | |
| const Point_2 & | operator[] (std::size_t i) const | 
| Returns a (const) reference to the i-th vertex. | |
| Segment_2 | edge (std::size_t i) const | 
| Returns the i-th edge. | |
| Miscellaneous | |
| std::size_t | size () const | 
| Returns the number of vertices of the polygon. | |
| bool | is_empty () const | 
| Returns size() == 0. | |
| const Container_P & | container () const | 
| Returns a const reference to the sequence of vertices of the polygon. | |
| CGAL::Polygon_2< _Traits, _Container >::Polygon_2 | ( | InputIterator | first, | 
| InputIterator | last, | ||
| Traits | p_traits = Traits() | ||
| ) | 
Introduces a polygon with vertices from the sequence defined by the range [first,last). 
The value type of InputIterator must be Point_2. 
| FT CGAL::Polygon_2< _Traits, _Container >::area | ( | ) | const | 
Returns the signed area of the polygon.
This means that the area is positive for counter clockwise polygons and negative for clockwise polygons.
| Vertex_const_iterator CGAL::Polygon_2< _Traits, _Container >::bottom_vertex | ( | ) | const | 
Returns the bottommost vertex of the polygon with the smallest y-coordinate. 
| Bounded_side CGAL::Polygon_2< _Traits, _Container >::bounded_side | ( | const Point_2 & | value | ) | const | 
Returns the symbolic constant ON_BOUNDED_SIDE, ON_BOUNDARY or ON_UNBOUNDED_SIDE, depending on where point q is. 
p.is_simple(). | Edge_const_iterator CGAL::Polygon_2< _Traits, _Container >::edges_begin | ( | ) | const | 
Returns a non-mutable iterator that allows to traverse the edges of the polygon.
| Edge_const_circulator CGAL::Polygon_2< _Traits, _Container >::edges_circulator | ( | ) | const | 
Returns a non-mutable circulator that allows to traverse the edges of the polygon.
| Vertex_iterator CGAL::Polygon_2< _Traits, _Container >::insert | ( | Vertex_iterator | i, | 
| const Point_2 & | q | ||
| ) | 
Inserts the vertex q before i. 
The return value points to the inserted vertex.
| Vertex_const_iterator CGAL::Polygon_2< _Traits, _Container >::left_vertex | ( | ) | const | 
Returns the leftmost vertex of the polygon with the smallest x-coordinate. 
| std::ostream & operator<< | ( | std::ostream & | os, | 
| const Polygon_2< Traits_P, Container_P > & | p | ||
| ) | 
Reads a polygon from stream is and assigns it to p. 
Point_2. | bool operator== | ( | const Polygon_2< Traits_P, Container1_P > & | p1, | 
| const Polygon_2< Traits_P, Container2_P > & | p2 | ||
| ) | 
Test for equality: two polygons are equal iff there exists a cyclic permutation of the vertices of p2 such that they are equal to the vertices of p1. 
Note that the template argument Container of p1 and p2 may be different. 
| std::istream & operator>> | ( | std::istream & | is, | 
| Polygon_2< Traits_P, Container_P > & | p | ||
| ) | 
Inserts the polygon p into the stream os. 
Point_2. | Orientation CGAL::Polygon_2< _Traits, _Container >::orientation | ( | ) | const | 
Returns the orientation.
If the number of vertices p.size() < 3 then COLLINEAR is returned. 
p.is_simple(). | Oriented_side CGAL::Polygon_2< _Traits, _Container >::oriented_side | ( | const Point_2 & | value | ) | const | 
Returns POSITIVE_SIDE, or NEGATIVE_SIDE, or ON_ORIENTED_BOUNDARY, depending on where point q is. 
p.is_simple(). | Vertex_const_iterator CGAL::Polygon_2< _Traits, _Container >::right_vertex | ( | ) | const | 
Returns the rightmost vertex of the polygon with the largest x-coordinate. 
| void CGAL::Polygon_2< _Traits, _Container >::set | ( | Vertex_iterator | i, | 
| const Point_2 & | q | ||
| ) | 
Acts as *i = q, except that that would be illegal because the iterator is not mutable. 
| Vertex_const_iterator CGAL::Polygon_2< _Traits, _Container >::top_vertex | ( | ) | const | 
Returns topmost vertex of the polygon with the largest y-coordinate. 
| Vertex_const_iterator CGAL::Polygon_2< _Traits, _Container >::vertices_begin | ( | ) | const | 
Returns a constant iterator that allows to traverse the vertices of the polygon.
| Vertex_const_circulator CGAL::Polygon_2< _Traits, _Container >::vertices_circulator | ( | ) | const | 
Returns a mutable circulator that allows to traverse the vertices of the polygon.