# exercise **Repository Path**: waoteman/exercise ## Basic Information - **Project Name**: exercise - **Description**: No description available - **Primary Language**: C++ - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-18 - **Last Updated**: 2025-08-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于C++和CMake以及Qt创建样条曲线的测试程序 ## 项目描述 这是一个基于Qt5.14.2的样条曲线测试程序,实现了两种不同的样条插值算法: - 三次样条插值 (Cubic Spline) - 厄尔米特样条插值 (Hermite Spline) ## 功能特性 ### 用户界面 - 第一列:两个输入框 (Xa, Xb),只能输入数字且保留三位小数 - 第二列:两个显示框 (Ya, Yb),显示计算结果 - 四个功能按钮: - 识别曲线按钮1:加载三次样条曲线 - 识别曲线按钮2:加载厄尔米特样条曲线 - 计算按钮:根据输入的X坐标计算对应的Y值 - 清空按钮:重置程序到初始状态 ### 数学功能 1. **三次样条插值 (math1.cpp/math1.h)** - `SplineMath1_Init()`: 从JSON文件读取16个点并生成三次样条方程 - `Output1()`: 计算给定X坐标对应的Y值,包含范围检查 2. **厄尔米特样条插值 (math2.cpp/math2.h)** - `SplineMath2_Init()`: 从JSON文件读取16个点并生成厄尔米特样条方程 - `Output2()`: 计算给定X坐标对应的Y值,包含范围检查 ## 项目结构 ``` exercise/ ├── CMakeLists.txt # CMake配置文件 ├── build.bat # Windows构建脚本 ├── README.md # 项目说明 ├── data/ │ └── input.json # 16个测试点的JSON数据 ├── include/ │ ├── mainwindow.h # 主窗口头文件 │ ├── math1.h # 三次样条头文件 │ └── math2.h # 厄尔米特样条头文件 └── src/ ├── main.cpp # 程序入口 ├── mainwindow.cpp # 主窗口实现 ├── math1.cpp # 三次样条实现 └── math2.cpp # 厄尔米特样条实现 ``` ## 构建要求 - Qt5.14.2 (路径: D:\Qt5.14.2\5.14.2\msvc2017_64) - Visual Studio 2019 或更高版本 - CMake 3.16 或更高版本 ## 构建步骤 ### 方法1:使用构建脚本 (推荐) ```bash # 在项目根目录运行 build.bat ``` ### 方法2:手动构建 ```bash # 创建构建目录 mkdir build cd build # 配置项目 cmake .. -G "Visual Studio 16 2019" -A x64 # 构建项目 cmake --build . --config Release ``` ## 使用方法 1. **运行程序** - 构建完成后,运行 `build/Release/SplineCurveTest.exe` 2. **加载样条曲线** - 点击"识别曲线按钮1"加载三次样条曲线 - 点击"识别曲线按钮2"加载厄尔米特样条曲线 - 程序会自动读取同目录下的 `input.json` 文件 3. **计算Y值** - 在Xa输入框中输入X坐标,点击"计算按钮"计算对应的Ya值 - 在Xb输入框中输入X坐标,点击"计算按钮"计算对应的Yb值 - 输入值必须在JSON文件中X坐标的范围内 4. **清空重置** - 点击"清空按钮"重置所有输入和输出 ## 数据格式 `input.json` 文件包含16个点的坐标数据: ```json { "points": [ {"x": 0.0, "y": 2.5}, {"x": 1.2, "y": 3.8}, ... {"x": 18.0, "y": 1.7} ] } ``` ## 算法说明 ### 三次样条插值 - 使用自然边界条件 (二阶导数为0) - 通过三对角矩阵求解二阶导数 - 在每个区间内使用三次多项式插值 ### 厄尔米特样条插值 - 使用中心差分计算切向量 - 端点使用单侧差分 - 基于厄尔米特基函数的插值方法 ## 注意事项 1. 确保 `input.json` 文件在可执行文件同目录下 2. X坐标输入必须在JSON文件中X坐标的最小值和最大值范围内 3. 输入框只接受数字,最多保留三位小数 4. 必须先点击识别曲线按钮才能进行计算 ## 错误处理 - 文件读取失败:检查 `input.json` 文件是否存在且格式正确 - 范围错误:输入的X坐标超出样条曲线的定义域 - 计算错误:样条曲线未初始化或输入格式错误