【三次B样条插值教程】

B样条插值

数学表达

在这里插入图片描述

曲线插值

在进行曲线插值时,将两端的插值点作为曲线的型值点是插值的必要条件,那在B样条插值时刚好有一种clamped B-spline满足这个条件,特点是节点首末的0,1重复K+1次。

三次clamped B-spline插值节点分析

对于三次 clamped B-spline来说,结合上述公式

  • 样条次数K
    K=3

  • 型值点n+1个,节点m+1个满足如下关系式
    m=n+k+1

  • 对于三次B样条,首末节点重复3+1次,节点t0,t1,…,tm满足
    开区间
    另外对于节点矢量特殊说明的是有几种选择和使用方式,效果不同根据实际情况测试使用:

  • 等间距法
    在这里插入图片描述
    对于clamped-B spline来说,等间距的节点矢量如下
    在这里插入图片描述

  • 弦长法
    在这里插入图片描述
    对于clamped-B spline来说,弦长法的节点矢量分配类似等间距法

  • 向心法
    在这里插入图片描述
    对于clamped-B spline来说,向心法的节点矢量分配类似等间距法

以下借用几张图来看几种节点矢量方法的使用对比,各有千秋,看具体情况
在这里插入图片描述
图中 黑色是等间距节点,红色是向心法节点,蓝色是弦长法节点,看起来貌似向心法得出的样条曲线更好,其实不然,请看下图:
在这里插入图片描述
在该情况下,可以看出黑色的等间距法效果最好,因此我们说要看具体情况,并不存在那种方法绝对最优,因势而变

三次clamped B-spline展开

由于该样条函数是一个分段函数,较为复杂,使用该函数进行插值前我们需要研究该函数的展开形式,在此借用一张经典展开图,有助于展开理解
在这里插入图片描述
这里最好大家自己手动将3次样条函数公式展开一次,加深理解,有些繁杂,谈不上难度,动起笔来
在这里插入图片描述

根据3次样条最终展开公式可知,对于节点tj来说,基函数只有四个非零,如下:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
因此3次B样条的区间表达式B(tj)=
在这里插入图片描述
根据节点矢量的不同区间就确定了不同区间的关于t的三次函数,由这些分段函数共同构成了样条曲线。

节点与型值点对应

在生成样条曲线时,需要考虑节点与型值点的对应关系,如下图所示:
在这里插入图片描述
上图中的节点与型值点是最简单直接的一一对应关系,对于clamped-B spline来说有如下对应关系:
在这里插入图片描述
去除两端的重复度K后,对应关系如下:
在这里插入图片描述
z为型值点,即为曲线上的点,也即:
在这里插入图片描述
根据对应关系可知,l-0=n+1-3,即n=l+2
也即设定样条的控制点数目比型值点数目多两个,
n=l+2
样条曲线的节点数目满足如下公式:
m=n+k+1=l+2+k+1=l+6
也即需要设定的节点数目比型值点多6个

根据上述展开的3次B样条的区间表达式B(tj)可知:
在这里插入图片描述
在这里插入图片描述
对于zl如下:
在这里插入图片描述
根据系数计算和相关约束取:
在这里插入图片描述
在这里插入图片描述

从上述矩阵方程中我们可以看出,总共有l+1个方程,对于插值来说,已知型值点和系数矩阵,反求控制点,而控制点却有l+3个,属于欠定方程,所以现在还需要加两个约束条件来使得方程数量和未知数一样。

在此采用如下约束:
采用一种常用的非扭节边界条件,也即第一个点(对于clamped,t3)与第二个点(对于clamped,t4)的三阶导数相等;倒数第二个点(对于clamped,tn)与倒数第三个点(对于clamped,tn-1)的三阶导数相等
在这里插入图片描述
也即:
在这里插入图片描述

将以上两个条件加入到矩阵中得到:

在这里插入图片描述

实现效果

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值