#ifndef POLYGON_H_ #define POLYGON_H_ #include "Vertex.h" #include "Line.h" #include "Triangle.h" #include #include class Polygon : public std::vector { private: struct Intersection { size_t va1, va2, vb1, vb2; Vertex v; }; typedef Triangle::Direction Direction; int quadrant(const Vertex &v) const; float signedArea() const; bool isConcave(const Triangle::Direction &dir, const Vertex &v1, const Vertex &v2, const Vertex &v3) const; bool intersections(std::vector *intersections = NULL) const; void doTriangulate(std::vector &triangles) const; public: float area() const; float perimeter() const; bool contains(const Vertex &v) const; bool intersects(const Line &l) const; Triangle::Direction getDirection() const; bool isSimple() const; bool simplify(std::list &polygons) const; void triangulate(std::vector &triangles) const; }; #endif /*POLYGON_H_*/