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