Bézier曲线、曲线拟合与SISI库使用

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 学习与探索

    sintef-logo
    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,如下图

    points1-2 curve1
    输入的点(图中小白点是输入的控制点) 生成的曲线1

    2.2.2 example02

    给定待拟合点集,interpolation 生成曲线,曲线2。

    points2 curve2
    输入的待拟合点 根据拟合点生成的曲线2

    2.2.3 example03

    连接曲线1和曲线2,生成平滑的曲线3

    QQ20230716-145633 QQ20230716-145810
    曲线1和曲线2 加入曲线3后的平滑连接结果

    2.2.4 example04

    将曲线1添加offset,生成曲线4

    offset.png-1 offset.png raw_offset.png
    原本的曲线1 添加offset后的曲线4 曲线1与添加offset后的曲线4

    2.3 view

    SISI库还带了一个简单的查看曲线曲面查看器,2.2节的截图都是出自这个查看器,下图是它的快捷键
    hotkey

    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