定义Polygon类,作为多边形,这是一个常用的几何对象。Polygon是有相同首尾点的Polyline,因此我选择在Polyline的尾部添加一个和头部点相同的点作为尾部点,而非像某些实现那样在获取第尾部点时返回头部点。
下面给出Polygon的声明。
class Polygon : public Polyline
{
public:
Polygon() {};
Polygon(const Polygon &polygon);
Polygon(std::vector<Point>::const_iterator begin, std::vector<Point>::const_iterator end);
Polygon(const std::initializer_list<Point> &points);
Polygon(const Polyline &polyline);
Polygon(const AABBRect &rect);
Polygon &operator=(const Polygon &polygon);
const Type type() const override;
Polygon *clone() const override;
void reorder_points(const bool cw = true);
// 判断点顺序是否为顺时针
bool is_cw() const;
void append(const Point &point) override;
void append(const Polyline &polyline) override;
void append(std::vector<Point>::const_iterator begin, std::vector<Point>::const_iterator end) override;
void insert(const size_t index, const Point &point) override;
void insert(const size_t index, const Polyline &polyline) override;
void insert(const size_t index, std::vector<Point>::const_iterator begin, std::vector<Point>::const_iterator end) override;
void remove(const size_t index) override;
void remove(const size_t index, const size_t count) override;
Point pop(const size_t index) override;
Polygon operator+(const Point &point) const;
Polygon operator-(const Point &point) const;
void operator+=(const Point &point);
void operator-=(const Point &point);
const double area() const;
size_t next_point_index(const size_t index) const;
const Point &next_point(const size_t index) const;
Point &next_point(const size_t index);
size_t last_point_index(const size_t