Files
ViewDesignEngine/docs/01-需求分析/02-需求规格说明书.md
T

171 lines
5.1 KiB
Markdown
Raw Normal View History

# 需求规格说明书
## 目录
1. [引言](#1-引言)
2. [功能需求](#2-功能需求)
3. [非功能需求](#3-非功能需求)
---
## 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:可移植性
- 支持 LinuxGCC 9+ / Clang 12+
- 支持 WindowsMSVC 2019+
- 支持 macOSClang 12+
### NFR-04:可扩展性
- 模块化架构,各模块独立编译
- 清晰的接口抽象层,支持算法替换
- 插件式空间索引后端
### NFR-05:可用性
- 完善的 API 文档(Doxygen
- 丰富的示例代码
- 入门指南与教程