ViewDesignEngine  3.1.0
高性能 CAD 计算几何引擎
polygon.h
浏览该文件的文档.
1 #pragma once
2 #include "vde/core/point.h"
3 #include "vde/core/aabb.h"
4 #include <vector>
5 #include <array>
6 
7 namespace vde::core {
8 
20 class Polygon2D {
21 public:
23  Polygon2D() = default;
24 
30  explicit Polygon2D(std::vector<Point2D> vertices) : vertices_(std::move(vertices)) {}
31 
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(); }
38 
51  [[nodiscard]] double signed_area() const;
52 
57  [[nodiscard]] double area() const { return std::abs(signed_area()); }
58 
63  [[nodiscard]] double perimeter() const;
64 
73  [[nodiscard]] Point2D centroid() const;
74 
82  [[nodiscard]] AABB<double> bounding_box() const;
83 
95  [[nodiscard]] bool contains(const Point2D& p) const;
96 
101  [[nodiscard]] bool is_ccw() const { return signed_area() > 0; }
102 
119  [[nodiscard]] Polygon2D simplify(double tolerance) const;
120 
143  [[nodiscard]] std::vector<std::array<int, 3>> triangulate() const;
144 
156  static Polygon2D convex_hull_2d(const std::vector<Point2D>& points);
157 
158 private:
159  std::vector<Point2D> vertices_;
160 };
161 
162 } // namespace vde::core
轴对齐包围盒(AABB)
Definition: aabb.h:21
二维平面多边形
Definition: polygon.h:20
size_t size() const
获取顶点数量
Definition: polygon.h:35
const std::vector< Point2D > & vertices() const
获取顶点列表
Definition: polygon.h:33
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 个顶点视为退化)
Definition: polygon.h:37
Point2D centroid() const
面积加权质心
std::vector< std::array< int, 3 > > triangulate() const
耳切法三角剖分(Ear Clipping)
bool is_ccw() const
多边形是否为逆时针方向
Definition: polygon.h:101
double area() const
绝对面积
Definition: polygon.h:57
Polygon2D(std::vector< Point2D > vertices)
从顶点列表构造多边形
Definition: polygon.h:30
Definition: aabb.h:6
foundation::Point2D Point2D
双精度二维点(重新导出)
Definition: point.h:29