[TOC] # 分类方法 给定一组控制点,有两种方式选取分段连续参数多项式函数: - 插值样条:曲线经过控制点。 - 逼近样条:曲线不经过控制点。 # 样条类型 ## 自然三次样条(`Natural Cubic Spline`)——插值样条 - 边界条件 两个相邻曲线段在公共边界(控制点)处有相同的一阶和二阶导数,即自然三次样条具有二阶导数连续性 - 主要缺点 任意一个控制点发生了变动,则整条曲线都将受到影响。这样,自然三次样条不允许“局部控制”,因此不给出完整的新控制点集,则不可能构造曲线的一部分。 ## `Hermite`样条——插值样条 - 描述 `Hermite`插值不仅满足在结点上与原函数相等,且各阶导数也相等。在分段低次插值时候,可以选择分段线性插值和分段Hermite插值的方法,采用后者得到的结果即为`Hermite`样条。 与自然三次样条不同,`Hermite`样条可以局部调整,因为每个曲线端仅依赖于端点约束。 - 主要缺点 只有当被插值函数在所有插值点处的函数值和导数都已知的前提下才能使用,而且在内节点处,其二阶导数一般不连续。基于`Hermite`样条的改进方法是`Cardinal`样条和`Kochenek-Bartels`样条。 ## `Cardinal`样条 - 描述 类似于`Hermite`样条,`Cardinal`样条也是插值分段三次曲线,并且每条曲线的端点位置均指定切线。与`Hermite`不同的是,`Cardinal`样条不一定要给出端点的切线值。在`cardinal`样条中,一个控制点的斜率值可以由两个相邻控制点的坐标进行计算。 - 实现 `VTK`中有个`vtkCardinalSpline`类。 ## `Kochanek-Bartels`样条 - 描述 这是`cardinal`样条的扩展。将两个附加参数引入到约束方程中,可以得到`Kochanek-Bartels`样条,从而为调整曲线段形状提供更多方便。需要注意的是,导数在线段边界处不一定连续,因为 本样条的设计是为了模拟动画路径,特别是当对象运动有突变时。 - 实现 `VTK`中有个`vtkKochanekSpline`类 ## `Bezier`样条——逼近样条 - 描述 `Bezier`曲线是`BSpline`的特例,虽然它也是分段多项式,但是`Bezier`多项式的次数并不是三,而是由将逼近控制点数量及相关位置决定。 - 特性 - 曲线总是通过第一个和最后一个控制点; - 曲线在始点处的切线落在前两个控制的连线上,曲线在终点处的切线落在最后两个控制点的连线上。 - 实现 `VTK`中`vtkPath`类使用`Bezier`来产生曲线。 ## `B`样条——逼近样条 - 型值点`vs`控制点 `B`样条曲线会经过每个型值点,但是不经过控制点,也即是说,型值点是`B`样条曲线所经过的点,而控制点则是控制其形状的点。 - 优点 和`Bezier`样条一样,`B`样条也是通过逼近一组控制点来产生的。但是B样条的具有两个`Bezier`样条所不具备的特点: - B样条多项式的次数可独立于控制点数目(有一定限制); - B样条允许局部控制曲线或曲面。 - 缺点 缺点就是比`Bezier`样条更复杂。 - 分类 `B`样条通常根据所选的节点向量类型进行描述,节点向量有三种分类:均匀的(`uniform`)、开放均匀的(`open uniform`)和非均匀的(`nonuniform`)。 ## Beta样条——逼近样条 - 描述 B样条是一般化的`beta`样条,它是在`beta`样条的一阶和二阶导数上加上几何条件而形成的。 ## 有理样条(`Rational Spline`) 有理函数是两个多项式之比,因此有理样条是两个样条函数之比,例如有理B样条。 2.8.1 优点 - 描述 有理样条和非有理样条比,有两个重要的优点: - 提供了二次曲线的精确表达式,如圆和椭圆,非有理样条仅能逼近二次曲线; - 对于透视变换是不会变化的。 `声明`:本文抠自[样条曲线概述](http://www.itdaan.com/blog/2016/01/20/a6a70c85835d.html)