|
ViewDesignEngine
3.1.0
高性能 CAD 计算几何引擎
|
点/向量/变换、多边形、凸包、Voronoi、ICP、距离计算 更多...
类 | |
| class | vde::core::AABB< T > |
| 轴对齐包围盒(AABB) 更多... | |
| struct | vde::core::ICPResult |
| ICP(迭代最近点)配准结果 更多... | |
| class | vde::core::Line3D< T > |
| 三维无限直线 更多... | |
| class | vde::core::Segment3D< T > |
| 三维线段 更多... | |
| class | vde::core::Ray3D< T > |
| 三维射线 更多... | |
| class | vde::core::Plane< T > |
| 三维平面 更多... | |
| class | vde::core::Polygon2D |
| 二维平面多边形 更多... | |
| class | vde::core::Triangle< T > |
| 三维三角形 更多... | |
| struct | vde::core::VoronoiCell |
| Voronoi 单元格 更多... | |
类型定义 | |
| using | vde::core::Transform3D = Eigen::Transform< double, 3, Eigen::Affine > |
| 三维仿射变换类型 更多... | |
函数 | |
| std::vector< Point2D > | vde::core::convex_hull_2d (const std::vector< Point2D > &points) |
| 二维凸包计算(Graham Scan 算法) 更多... | |
| std::vector< std::array< Point3D, 3 > > | vde::core::convex_hull_3d (const std::vector< Point3D > &points) |
| 三维凸包计算(QuickHull 算法) 更多... | |
| double | vde::core::distance (const Point3D &a, const Point3D &b) |
| 两点之间的欧氏距离 更多... | |
| double | vde::core::distance (const Point3D &p, const Line3D< double > &line) |
| 点到直线的距离 更多... | |
| double | vde::core::distance (const Point3D &p, const Segment3D< double > &seg) |
| 点到线段的距离 更多... | |
| double | vde::core::distance (const Point3D &p, const Plane< double > &plane) |
| 点到平面的距离 更多... | |
| double | vde::core::distance (const Point3D &p, const Triangle< double > &tri) |
| 点到三角形的距离 更多... | |
| double | vde::core::distance (const Point3D &p, const AABB< double > &box) |
| 点到包围盒的距离 更多... | |
| double | vde::core::distance (const Segment3D< double > &a, const Segment3D< double > &b) |
| 两条线段之间的最短距离 更多... | |
| double | vde::core::distance (const Line3D< double > &a, const Line3D< double > &b) |
| 两条直线之间的最短距离 更多... | |
| double | vde::core::distance (const AABB< double > &a, const AABB< double > &b) |
| 两个包围盒之间的最短距离 更多... | |
| double | vde::core::distance (const Triangle< double > &a, const Triangle< double > &b) |
| 两个三角形之间的最短距离 更多... | |
| Point3D | vde::core::closest_point (const Point3D &p, const Triangle< double > &tri) |
| 三角形上距给定点最近的点 更多... | |
| Point3D | vde::core::closest_point (const Point3D &p, const Segment3D< double > &seg) |
| 线段上距给定点最近的点 更多... | |
| Point3D | vde::core::closest_point (const Point3D &p, const AABB< double > &box) |
| 包围盒上距给定点最近的点 更多... | |
| Point3D | vde::core::closest_point (const Point3D &p, const Plane< double > &plane) |
| 平面上距给定点最近的点(正交投影) 更多... | |
| ICPResult | vde::core::icp_register (const std::vector< Point3D > &source, const std::vector< Point3D > &target, int max_iter=50, double tolerance=1e-6) |
| 迭代最近点(ICP)刚体点云配准 更多... | |
| Transform3D | vde::core::translate (const Vector3D &v) |
| 创建平移变换 更多... | |
| Transform3D | vde::core::translate (double x, double y, double z) |
| 创建平移变换(分量形式) 更多... | |
| Transform3D | vde::core::rotate (const Vector3D &axis, double angle_rad) |
| 创建旋转变换(轴-角表示) 更多... | |
| Transform3D | vde::core::rotate_x (double rad) |
| 绕 X 轴旋转 更多... | |
| Transform3D | vde::core::rotate_y (double rad) |
| 绕 Y 轴旋转 更多... | |
| Transform3D | vde::core::rotate_z (double rad) |
| 绕 Z 轴旋转 更多... | |
| Transform3D | vde::core::scale (double sx, double sy, double sz) |
| 创建非均匀缩放变换 更多... | |
| Transform3D | vde::core::scale (double s) |
| 创建均匀缩放变换 更多... | |
| std::vector< VoronoiCell > | vde::core::voronoi_2d (const std::vector< Point2D > &points) |
| 二维 Voronoi 图生成(通过 Delaunay 对偶图) 更多... | |
点/向量/变换、多边形、凸包、Voronoi、ICP、距离计算
核心模块提供 VDE 引擎的几何操作 API:
| using vde::core::Transform3D = typedef Eigen::Transform<double, 3, Eigen::Affine> |
包围盒上距给定点最近的点
对每个坐标分量做 clamp 到 [min, max]。
| p | 查询点 |
| box | 包围盒 |
线段上距给定点最近的点
通过参数 t = clamp(投影, 0, 1) 实现。
| p | 查询点 |
| seg | 线段 |
三角形上距给定点最近的点
使用重心坐标将投影点截断到三角形内部。 若投影在三角形外,返回最近边或顶点上的点。
| p | 查询点 |
| tri | 三角形 |
二维凸包计算(Graham Scan 算法)
使用 Graham 扫描算法计算点集的凸包,时间复杂度 O(n log n)。 以极角排序点为预处理,然后用栈维护凸包边界。
| points | 输入点集(至少 3 个不共线点) |
| std::vector<std::array<Point3D, 3> > vde::core::convex_hull_3d | ( | const std::vector< Point3D > & | points | ) |
三维凸包计算(QuickHull 算法)
使用 QuickHull 算法计算三维点集的凸包。 先构造初始四面体,然后递归地将外部点添加到凸包上。 平均复杂度 O(n log n),最坏情况 O(n²)。
| points | 输入点集(至少 4 个不共面点) |
两个包围盒之间的最短距离
若相交则返回 0。
| a | 第一个包围盒 |
| b | 第二个包围盒 |
两条直线之间的最短距离
若相交则为 0;若平行则返回任意垂线段长度;若异面则返回公垂线长度。
| a | 第一条直线 |
| b | 第二条直线 |
两点之间的欧氏距离
| a | 第一个点 |
| b | 第二个点 |
点到包围盒的距离
若点在包围盒内,返回 0;否则返回到最近面的距离。
| p | 测试点 |
| box | 包围盒 |
点到直线的距离
计算点到无限直线的垂直距离。
| p | 测试点 |
| line | 直线 |
点到线段的距离
若投影点落在线段内部,返回垂直距离;否则返回到最近端点的距离。
| p | 测试点 |
| seg | 线段 |
点到三角形的距离
若投影点在三角形内部,返回垂直距离;否则返回到最近的边或顶点的距离。
| p | 测试点 |
| tri | 三角形 |
两条线段之间的最短距离
处理平行、相交、最近端点到端点等多种情况。
| a | 第一条线段 |
| b | 第二条线段 |
两个三角形之间的最短距离
处理分离、边相交、面重叠等情况。
| a | 第一个三角形 |
| b | 第二个三角形 |
| ICPResult vde::core::icp_register | ( | const std::vector< Point3D > & | source, |
| const std::vector< Point3D > & | target, | ||
| int | max_iter = 50, |
||
| double | tolerance = 1e-6 |
||
| ) |
迭代最近点(ICP)刚体点云配准
使用标准 ICP 算法将 source 点云配准到 target 点云。 每步迭代:
| source | 源点云(将被移动) |
| target | 目标点云(固定参考) |
| max_iter | 最大迭代次数(默认 50) |
| tolerance | 收敛容差:相邻两次 RMS 变化的阈值(默认 1e-6) |
|
inline |
创建旋转变换(轴-角表示)
| axis | 旋转轴(自动归一化) |
| angle_rad | 旋转角度(弧度) |
在文件 transform.h 第 62 行定义.
被这些函数引用 vde::core::rotate_x(), vde::core::rotate_y() , 以及 vde::core::rotate_z().
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
创建非均匀缩放变换
| sx | X 方向缩放因子 |
| sy | Y 方向缩放因子 |
| sz | Z 方向缩放因子 |
在文件 transform.h 第 108 行定义.
被这些函数引用 vde::core::scale().
|
inline |
|
inline |
| std::vector<VoronoiCell> vde::core::voronoi_2d | ( | const std::vector< Point2D > & | points | ) |
二维 Voronoi 图生成(通过 Delaunay 对偶图)
从输入点集的 Delaunay 三角剖分构造其对偶 Voronoi 图。 每个输入点对应一个 VoronoiCell。
| points | 输入点集(站点) |