33 [[nodiscard]]
const std::vector<Point2D>&
vertices()
const {
return vertices_; }
35 [[nodiscard]]
size_t size()
const {
return vertices_.size(); }
37 [[nodiscard]]
bool empty()
const {
return vertices_.empty(); }
143 [[nodiscard]] std::vector<std::array<int, 3>>
triangulate()
const;
159 std::vector<Point2D> vertices_;
size_t size() const
获取顶点数量
const std::vector< Point2D > & vertices() const
获取顶点列表
Polygon2D()=default
构造空多边形
double perimeter() const
周长(各边长之和)
Polygon2D simplify(double tolerance) const
Douglas-Peucker 简化
bool contains(const Point2D &p) const
点包含测试(射线法)
AABB< double > bounding_box() const
二维轴对齐包围盒
double signed_area() const
有向面积(Shoelace 公式)
static Polygon2D convex_hull_2d(const std::vector< Point2D > &points)
Andrew's Monotone Chain 二维凸包
bool empty() const
多边形是否为空(< 3 个顶点视为退化)
Point2D centroid() const
面积加权质心
std::vector< std::array< int, 3 > > triangulate() const
耳切法三角剖分(Ear Clipping)
bool is_ccw() const
多边形是否为逆时针方向
Polygon2D(std::vector< Point2D > vertices)
从顶点列表构造多边形
foundation::Point2D Point2D
双精度二维点(重新导出)