需求规格说明书
目录
- 引言
- 功能需求
- 非功能需求
1. 引言
1.1 目的
本文档定义 ViewDesignEngine 几何算法引擎的功能需求与非功能需求,作为后续设计、实现与测试的基线。
1.2 范围
本引擎提供底层几何计算能力,覆盖二维和三维空间的基础几何运算、曲线曲面建模、网格处理、布尔运算、空间索引和碰撞检测。
1.3 术语定义
| 术语 |
定义 |
| CSG |
构造实体几何(Constructive Solid Geometry) |
| NURBS |
非均匀有理 B 样条(Non-Uniform Rational B-Spline) |
| BVH |
包围体层次结构(Bounding Volume Hierarchy) |
| GJK |
Gilbert-Johnson-Keerthi 碰撞检测算法 |
| Delaunay |
Delaunay 三角剖分 |
| B-Rep |
边界表示法(Boundary Representation) |
| QEM |
二次误差度量(Quadric Error Metrics) |
2. 功能需求
FR-01:基本几何类型
| 编号 |
需求 |
优先级 |
| FR-01.1 |
Point2D / Point3D:二维/三维点,支持算术运算 |
P0 |
| FR-01.2 |
Vector2D / Vector3D:向量运算(加减、点积、叉积、归一化) |
P0 |
| FR-01.3 |
Line2D / Line3D / Ray / Segment:直线、射线、线段 |
P0 |
| FR-01.4 |
Plane:平面定义与运算 |
P0 |
| FR-01.5 |
Triangle / Polygon:三角形与多边形(法向量、面积、点包含判断) |
P0 |
| FR-01.6 |
BoundingBox:轴对齐包围盒(AABB)与定向包围盒(OBB) |
P0 |
FR-02:几何变换
| 编号 |
需求 |
优先级 |
| FR-02.1 |
平移、旋转、缩放 |
P0 |
| FR-02.2 |
变换矩阵(4×4 齐次坐标) |
P0 |
| FR-02.3 |
组合变换(变换链) |
P1 |
| FR-02.4 |
反射、剪切、投影 |
P2 |
FR-03:曲线建模
| 编号 |
需求 |
优先级 |
| FR-03.1 |
Bezier 曲线(任意阶) |
P0 |
| FR-03.2 |
B-Spline 曲线 |
P0 |
| FR-03.3 |
NURBS 曲线 |
P0 |
| FR-03.4 |
曲线求值(de Casteljau / Cox-de Boor 算法) |
P0 |
| FR-03.5 |
曲线求导(一阶/二阶导数) |
P1 |
| FR-03.6 |
曲线分割与拼接 |
P1 |
| FR-03.7 |
弧长参数化 |
P2 |
FR-04:曲面建模
| 编号 |
需求 |
优先级 |
| FR-04.1 |
Bezier 曲面 |
P1 |
| FR-04.2 |
B-Spline 曲面 |
P1 |
| FR-04.3 |
NURBS 曲面 |
P1 |
| FR-04.4 |
曲面求值与求导 |
P1 |
| FR-04.5 |
曲面离散化(三角网格化) |
P1 |
FR-05:网格处理
| 编号 |
需求 |
优先级 |
| FR-05.1 |
半边数据结构(Half-Edge) |
P0 |
| FR-05.2 |
Delaunay 三角剖分(2D) |
P0 |
| FR-05.3 |
约束 Delaunay 三角剖分(2D) |
P2 |
| FR-05.4 |
网格简化(QEM 算法) |
P1 |
| FR-05.5 |
网格平滑(Laplacian / Taubin) |
P1 |
| FR-05.6 |
网格布尔运算(并、交、差) |
P1 |
| FR-05.7 |
网格质量评估 |
P1 |
| FR-05.8 |
网格修复(孔洞填充、非流形修复) |
P2 |
FR-06:布尔运算(CSG)
| 编号 |
需求 |
优先级 |
| FR-06.1 |
二维多边形布尔运算(并、交、差、异或) |
P0 |
| FR-06.2 |
三维网格布尔运算 |
P1 |
| FR-06.3 |
B-Rep 实体布尔运算 |
P2 |
FR-07:空间索引
| 编号 |
需求 |
优先级 |
| FR-07.1 |
包围体层次结构(BVH) |
P0 |
| FR-07.2 |
八叉树(Octree) |
P1 |
| FR-07.3 |
KD-Tree |
P1 |
| FR-07.4 |
R-Tree |
P2 |
FR-08:碰撞检测
| 编号 |
需求 |
优先级 |
| FR-08.1 |
GJK 算法(凸体距离/碰撞检测) |
P0 |
| FR-08.2 |
SAT 分离轴定理(多面体) |
P1 |
| FR-08.3 |
射线-三角形相交(Möller-Trumbore) |
P0 |
| FR-08.4 |
三角形-三角形相交 |
P1 |
| FR-08.5 |
AABB / OBB 相交测试 |
P1 |
FR-09:几何计算
| 编号 |
需求 |
优先级 |
| FR-09.1 |
距离计算(点-点、点-线、点-面、线-线) |
P0 |
| FR-09.2 |
面积计算(多边形、曲面) |
P1 |
| FR-09.3 |
最近点查询 |
P1 |
| FR-09.4 |
凸包计算(2D / 3D) |
P0 |
FR-10:公差与精度
| 编号 |
需求 |
优先级 |
| FR-10.1 |
可配置的几何公差 |
P0 |
| FR-10.2 |
自适应精度策略 |
P1 |
| FR-10.3 |
鲁棒的浮点谓词(Shewchuk 自适应精度) |
P1 |
3. 非功能需求
NFR-01:性能
| 指标 |
输入规模 |
目标 |
| 布尔运算 |
百万面级网格 |
≤ 30 秒 |
| 最近点查询 |
10 万三角面(BVH) |
≤ 1 毫秒 |
| Delaunay 剖分 |
百万点 |
≤ 10 秒 |
NFR-02:可靠性
- 核心算法单元测试覆盖率 ≥ 90%
- 回归测试套件覆盖所有公开 API
- 边界条件与退化情况的鲁棒处理
NFR-03:可移植性
- 支持 Linux(GCC 9+ / Clang 12+)
- 支持 Windows(MSVC 2019+)
- 支持 macOS(Clang 12+)
NFR-04:可扩展性
- 模块化架构,各模块独立编译
- 清晰的接口抽象层,支持算法替换
- 插件式空间索引后端
NFR-05:可用性
- 完善的 API 文档(Doxygen)
- 丰富的示例代码
- 入门指南与教程