样条曲线总结

0 前言

    根据给定一组控制点坐标,可使用以下两种方法之一选取分段连续参数多项式函数:

  • 插值样条:当选取的多项式使得曲线通过每个控制点时,则所得曲线称为这组控制点的插值样条曲线;
  • 逼近样条:当选取的多项式使得部分或全部控制点都不在生成的曲线上,所得曲线称为逼近样条曲线。

1 插值样条

1.1 自然三次样条(Natural Cubic Spline)

  • 边界条件

    两个相邻曲线段公共边界(控制点)处有相同的一阶和二阶导数,即自然三次样条具有二阶导数连续性[1]P129,[2]P349。

  • 主要缺点

    如果控制点中的任意一个发生了变动,则整条曲线都将受到影响。这样,自然三次样条不允许“局部控制”,因此不给出完整的新控制点集,则不可能构造曲线的一部分[1]P349。

1.2 Hermite样条

    Hermite插值不仅满足在结点上与原函数相等,且各阶导数也相等[2]P121。在分段低次插值时候,可以选择分段线性插值[2]P124和分段Hermite插值的方法[2]P126,采用后者得到的结果即为Hermite样条[1]P349。

    与自然三次样条不同,Hermite样条可以局部调整,因为每个曲线端仅依赖于端点约束[1]P349。

  • 边界条件

    略,详见参考资料[1]P349。

  • 主要缺点

    只有当被插值函数在所有插值点处的函数值和导数都已知的前提下才能使用,而且在内节点处,其二阶导数一般不连续[2]P128。基于Hermite样条的改进方法是Cardinal样条Kochenek-Bartels样条

1.3 Cardinal样条

    类似于Hermite样条,Cardinal样条也是插值分段三次曲线,并且每条曲线的端点位置均指定切线。与Hermite不同的是,Cardinal样条不一定要给出端点的切线值。在cardinal样条中,一个控制点的斜率值可以由两个相邻控制点的坐标进行计算[1]P351。

    实现:VTK中有个vtkCardinalSpline类

1.4 Kochanek-Bartels样条    

    这是cardinal样条的扩展。将两个附加参数引入到约束方程中,可以得到Kochanek-Bartels样条,从而为调整曲线段形状提供更多方便[1]P353。需要注意的是,导数在线段边界处不一定连续[1]P354,因为 本样条的设计是为了模拟动画路径,特别是当对象运动有突变时。

  • 边界条件

    略,详见参考资料[1]P354。

  • 实现

    VTK中有个vtkKochanekSpline类

2 逼近样条

2.1 Bezier样条

    Bezier曲线是BSpline的特例,虽然它也是分段多项式,但是Bezier多项式的次数并不是三,而是由将逼近控制点数量及相关位置决定[1]P355。

  • 特性

    {a} 曲线总是通过第一个和最后一个控制点[1]P359;

    (b) 曲线在始点处的切线落在前两个控制的连线上,曲线在终点处的切线落在最后两个控制点的连线上[1]P359。

  • 实现

    VTK中vtkPath类使用Bezier来产生曲线。

2.2 B样条

2.2.1 型值点vs控制点

    B样条曲线会经过每个型值点,但是不经过控制点,也即是说,型值点是B样条曲线所经过的点,而控制点则是控制其形状的点。

2.2.2 优点

    和Bezier样条一样,B样条也是通过逼近一组控制点来产生的。但是B样条的具有两个Bezier样条所不具备的特点:

(a) B样条多项式的次数可独立于控制点数目(有一定限制);

(b) B样条允许局部控制曲线或曲面。

2.2.3 缺点

    缺点就是比Bezier样条更复杂。

2.2.4 分类

    B样条通常根据所选的节点向量类型进行描述,节点向量有三种分类:均匀的(uniform)、开放均匀的(open uniform)和非均匀的(nonuniform)[1]P365。

2.3 Beta样条

    B样条是一般化的beta样条,它是在beta样条的一阶和二阶导数上加上几何条件而形成的[1]P372。

2.4 有理样条(Rational Spline)

    有理函数是两个多项式之比,因此有理样条是两个样条函数之比,例如有理B样条

2.4.1 优点

    有理样条和非有理样条比,有两个重要的优点[1]P374:

(a) 提供了二次曲线的精确表达式,如圆和椭圆,非有理样条仅能逼近二次曲线;

(b) 对于透视变换是不会变化的。

参考资料

[1]计算机图形学(第三版),电子工业出版社

[2]计算方法(第2版),电子工业出版社

[3]样条曲线

[4]B-spline

[5]如何通过一组B曲线的型值点反求其控制点

Cardinal曲线是一种平滑的曲线,常用于计算机图形学和计算机辅助设计中。它是通过一种插值方法生成的,用于在给定的控制点上创建平滑的曲线。 Cardinal曲线的生成基于插值原理,通过在给定的控制点上创建一个平滑的曲线。它利用控制点及其相关参数来计算曲线上的其他点。Cardinal曲线的特点是它的形状平滑,而且可以通过调整参数来控制曲线的形状。 Cardinal曲线有几个重要的参数,包括张力(tension)、断点(continuity)和偏移(bias)。张力参数控制曲线的平滑程度,增加张力值会使曲线更加平滑。断点参数用于设置曲线的顺滑度,较大的断点值会导致曲线在控制点之间更加接近。偏移参数则控制曲线在控制点处的形状。 Cardinal曲线的计算基于一种特定的公式,将控制点、参数和插值函数结合起来,生成平滑的曲线。该曲线在控制点之间进行插值,通过计算每个插值点的坐标,从而生成曲线上的其他点。 需要注意的是,Cardinal曲线是一种插值曲线,它通过在控制点之间进行插值来创建曲线。因此,曲线上的点并不一定都是控制点,而是通过插值计算得到的。这使得Cardinal曲线具有更好的平滑性和连续性。 总结来说,Cardinal曲线是一种平滑的曲线生成方法,通过插值计算在给定的控制点上生成曲线。它具有可调参数和优秀的平滑性,是计算机图形学和计算机辅助设计中常用的曲线生成方法。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OneSea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值