# Test_Spline **Repository Path**: xy-cw/test_spline ## Basic Information - **Project Name**: Test_Spline - **Description**: No description available - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-18 - **Last Updated**: 2025-07-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SplineInterpolation 本项目实现了二维点集的**线性插值**和**三次样条插值**,并将插值曲线以 PPM 图片形式可视化。提供三个独立的可执行文件,分别用于线性插值、三次样条插值和两种方法的对比。 ## 目录结构 ``` . ├── include/ # 头文件 │ ├── point.h │ └── spline.h ├── src/ # 源代码 │ ├── main_linear.cpp # 线性插值主程序 │ ├── main_spline.cpp # 三次样条插值主程序 │ ├── main_compare.cpp # 对比程序主程序 │ └── spline.cpp # 插值算法实现 ├── build/ # 编译输出与数据 │ ├── points.json # 输入点数据(示例) │ ├── output_linear.ppm # 线性插值输出 │ ├── output_spline.ppm # 三次样条插值输出 │ └── output_compare.ppm # 对比输出 ├── 3rdParty/ # 第三方库 │ └── nlohmann_json/ # JSON解析库 ├── CMakeLists.txt # CMake构建脚本 ``` ## 依赖 - C++17 编译器 - [nlohmann/json](https://github.com/nlohmann/json)(已包含在 3rdParty 目录,无需单独安装) - CMake 3.10 及以上 ## 编译方法(注意:请使用 MinGW Makefiles 构建,否则可能无法编译成功) 1. **配置项目** 在项目根目录下执行: ```sh cmake -B build -G "MinGW Makefiles" -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ ``` 2. **编译项目** ```sh cmake --build build ``` 3. **json文件准备** 将points.json文件放在build目录下 4. **可执行文件** 编译后生成三个可执行文件: - `build/LinearInterpolation.exe` - 线性插值程序 - `build/SplineInterpolation.exe` - 三次样条插值程序 - `build/CompareInterpolation.exe` - 对比程序 ## 使用方法 1. **准备输入数据** 在 `build/points.json` 中填写插值点,格式如下(每个点为 `[x, y, z]`,z 可忽略,仅用于兼容): ```json [ [1.0, 0.0, 3.0], [2.0, 2.0, 3.0], [3.0, 1.0, 0.0], [4.0, 3.0, 2.0], [5.0, 0.5, 1.0], [6.0, 2.5, 5.0] ] ``` 2. **运行程序** 在 `build` 目录下运行: **线性插值:** ```sh ./LinearInterpolation.exe ``` 输出:`output_linear.ppm`(红色曲线) **三次样条插值:** ```sh ./SplineInterpolation.exe ``` 输出:`output_spline.ppm`(蓝色曲线) **对比程序:** ```sh ./CompareInterpolation.exe ``` 输出:`output_compare.ppm`(红色线性 + 蓝色样条) 3. **查看输出** 程序会在 `build/` 目录下生成对应的 PPM 文件,可用图片查看器打开。 ## 效果说明 - **LinearInterpolation**:生成红色线性插值曲线 - **SplineInterpolation**:生成蓝色三次样条插值曲线 - **CompareInterpolation**:同时显示红色线性插值和蓝色三次样条插值,便于对比 - **灰色坐标轴**:x=0 和 y=0 - **黑色圆点**:标记 points.json 中的原始数据点 ## 常见问题 - **图片线条不连续?** 已优化采样和画线算法,线条应连续。如果仍有问题请检查输入点分布。 - **如何更换点集?** 直接修改 `build/points.json`,重新运行程序即可。 ## 许可 本项目仅用于学习与交流,第三方库请遵循其各自的 License。