#ifndef CONVEX_HPP_INCLUDED
#define CONVEX_HPP_INCLUDED

#include <vector>
#include "Point.hpp"
#include "Box.hpp"

/** @addtogroup Types
* @{ */
class Convex
{
    public:
        std::vector<Point> Vertices;
        Convex();
        Convex(const std::vector<Point>& Vertices);
        Convex(const Convex& C);
        bool Valid() const;
        bool Contains(const Point& P) const;
        Point GetMiddle() const;
        Box GetBox() const;
        Point GetHybridRandomPoint(double ProbabilityX, double ProbabilityY, double StandardDeviationX, double StandardDeviationY, double PointGenAccuracy) const;
        Point GetProfileHybridRandomPoint() const;
        Point GetProfileHybridRandomPoint(double PointGenAccuracy) const;

        Convex operator+(const Point& P) const;
        Convex operator-(const Point& P) const;
        Convex& operator+=(const Point& P);
        Convex& operator-=(const Point& P);
        friend std::ostream& operator<<(std::ostream& OS, const Convex& C);
        operator bool() const;
        virtual ~Convex();
};

/** @} */

#endif // CONVEX_HPP_INCLUDED
