Bézier曲线、曲线拟合与SISI库使用
1.简述
1.2什么是Bézier曲线
一种图形学中重要的参数曲线,由法国工程师皮埃尔·贝兹(Pierre Bézier)在1962年发表,所以叫做Bézier曲线。
教程: https://pomax.github.io/bezierinfo/zh-CN/index.html
1.2什么是B样条曲线
Bézier曲线的泛化,要表示一个复杂的曲线时,Bézier曲线需要特别多的控制点,控制点多起来开销就高,B样条的思想是通过把要表示的复杂曲线分段,每一段使用低阶的(比如二阶、三阶)Bézier曲线来表达,这样又可以表达复杂曲线,又可以节约性能与内存开销。
2.开源库 SISL 学习与探索
SISL是一个C++的全面的NURBS库,SISL代表着Sintef Spline Library,也就是由SINTEF数字数学与控制论学系的几何组开发的样条(spline)函数库。
https://github.com/SINTEF-Geometry/SISL
2.1构建
环境:Ubuntu 20.04 x64
构建方式参考SISL提供的manual手册:
$ cd <path_to_source_code>
$ mkdir build
$ cd build
$ cmake .. -DCMAKE_BUILD_TYPE=Release -Dsisl_COMPILE_VIEWER=ON -Dsisl_COMPILE_EXAMPLES=ON
cmake上面的flag意思分别是生成Release版,编译查看器,编译样例
2.2 Examples
这个库提供了数十个example,展示了SISL库的具体应用与用法,由于我们只考虑二位的B样条曲线
2.2.1 example01
直接输入曲线的控制点生成一条曲线,曲线1,如下图
输入的点(图中小白点是输入的控制点) | 生成的曲线1 |
2.2.2 example02
给定待拟合点集,interpolation 生成曲线,曲线2。
输入的待拟合点 | 根据拟合点生成的曲线2 |
2.2.3 example03
连接曲线1和曲线2,生成平滑的曲线3
曲线1和曲线2 | 加入曲线3后的平滑连接结果 |
2.2.4 example04
将曲线1添加offset,生成曲线4
原本的曲线1 | 添加offset后的曲线4 | 曲线1与添加offset后的曲线4 |
2.3 view
SISI库还带了一个简单的查看曲线曲面查看器,2.2节的截图都是出自这个查看器,下图是它的快捷键
First build viewer to see the result:
make sisl_view_demo
Then build
3.搭建拟合曲线演示环境
准备使用OpenCV + GLFW + GLAD + ImGui + OpenGL的调试环境来使用。
一个教程
https://blog.csdn.net/guduruyu/article/details/69220296