B-spline Curves

B样条曲线,是B-样条基函数的线性组合,是贝塞尔曲线的一般化。

1. B-spline Basis Functions

1.1 B样条基函数的定义

由de Boor和Cox分别导出B样条基函数的递推定义,B样条基函数可以表示为:

在这里插入图片描述
并约定 0 / 0 = 0 0/0=0 0/0=0。式中 p p p表示B样条的幂次, u u u为节点,下标 i i i为B样条的序号。

上式表明,任意 p p p次B样条基函数可由两个相邻的 p − 1 p−1 p1次B样条基函数的线性组合构成。

B样条基函数的三角计算:

在这里插入图片描述

1.2 B样条基函数的性质

  1. N i , p ( u ) N_{i,p}(u) Ni,p(u)是关于 u u u p p p次多项式.
  2. 如果 u ∉ [ u i , u i + p + 1 ) u∉[u_i,u_{i+p+1}) u/[ui,ui+p+1),则 N i , p ( u ) = 0 N_{i,p}(u)=0 Ni,p(u)=0
  3. u ∈ [ u i , u i + 1 ) u∈[u_i,u_{i+1}) u[ui,ui+1)时,至多存在 p + 1 p+1 p+1 p p p次基函数,即 N i − p , p ( u ) , N i − p + 1 , p ( u ) , . . . , N i , p ( u ) N_{i-p,p}(u), N_{i-p+1,p}(u), ..., N_{i,p}(u) Nip,p(u),Nip+1,p(u),...,Ni,p(u)非0.
  4. u ∈ [ u i , u i + 1 ) u∈[u_i,u_{i+1}) u[ui,ui+1)时, ∑ j = i − p i N j , p ( u ) = 0 \sum\limits_{j=i-p}^{i}N_{j,p}(u)=0 j=ipiNj,p(u)=0.
  5. 如果节点数量为 m + 1 m+1 m+1,B样条基函数的次数为 p p p,个数为 n + 1 n+1 n+1,则 m = n + 1 + p m=n+1+p m=n+1+p.
  6. B样条基函数 N i , p ( u ) N_{i,p}(u) Ni,p(u) k k k重节点 u u u C p − k C^{p-k} Cpk连续.

2. B-spline Curves

2.1 定义

给定 n + 1 n+1 n+1个控制点, P 0 , P 1 , … , P n P_0,P_1, …, P_n P0,P1,,Pn以及一个节点向量 U U U={ u 0 u_0 u0, u 1 u_1 u1, …, u m u_m um}, p p p次B-样条曲线由这些控制点和节点向量 U U U定义:
在这里插入图片描述

open B-spline curves:
在这里插入图片描述
clamped B-spline curves:
在这里插入图片描述
closed B-spline curves:
在这里插入图片描述

2.2 性质

  1. B样条曲线是次数为 p p p的分段曲线组合.
  2. m = n + p + 1 m = n + p + 1 m=n+p+1.
  3. Clamped B样条曲线经过 p 0 p_0 p0 p n p_n pn两个控制点.
  4. 强凸包性:
    u ∈ [ u i , u i + 1 ) u∈[u_i,u_{i+1}) u[ui,ui+1)时,曲线段 C ( u ) C(u) C(u) 在由控制点 P i − p , P i − p + 1 , . . . , P i P_{i-p}, P_{i-p+1}, ..., P_i Pip,Pip+1,...,Pi组成的凸包内.
  5. 局部修改特性:
    改变控制点 P i P_i Pi的位置,只会影响处在 [ u i , u i + p + 1 ) [u_i,u_{i+p+1}) [ui,ui+p+1)区间内的曲线段 C ( u ) C(u) C(u).
  6. C ( u ) C(u) C(u) k k k重节点 u u u C p − k C^{p-k} Cpk连续.
  7. 变差递减性.
  8. 贝塞尔曲线是B样条曲线的特例.
  9. 仿射不变性.

2.3 系数计算

计算公式:
在这里插入图片描述
示意图:
在这里插入图片描述
算法流程:
在这里插入图片描述

2.4 改变B样条曲线形状

改变B样条曲线形状可以通过两种方式:

  1. 移动控制点

  2. 修改节点位置

实践表明,由于不清楚B样条曲线的形状是如何随着节点向量的改变而发生变化的,通过修改节点位置来改变B样条曲线的形状通常很难达到预期的结果。

2.5 B样条曲线的微分

计算公式:
在这里插入图片描述
在这里插入图片描述
Byang在这里插入图片描述
在这里插入图片描述
B样条曲线的微分仍是一条定义在n个控制点 Q 0 , Q 1 , . . . , Q n − 1 Q_0, Q_1, ..., Q_{n-1} Q0,Q1,...,Qn1上的次数为 p − 1 p-1 p1的B样条曲线.

证明可采用数学归纳法,参考B样条曲线曲面介绍

由B样条曲线的微分计算公式,可以推导得出以下关于Clamped B样条曲线的结论:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Clamped B样条曲线通过第一个和最后一个控制点,并与控制多段线的第一个和最后一个支路相切。

3. Important Algorithms for B-spline Curves

3.1 Knot Insertion

3.1.1 单点单次插入

单点插入示意图:
在这里插入图片描述
计算公式:
在这里插入图片描述
在这里插入图片描述
计算流程示意图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.1.2 同一节点重复多次插入

计算公式:
在这里插入图片描述
插入1次:
在这里插入图片描述
插入2次:
在这里插入图片描述
插入3次:
在这里插入图片描述
插入 h h h次:
在这里插入图片描述
算法流程:
在这里插入图片描述

3.2 De Boor’s Algorithm

De Boor 算法是 Casteljau 算法的推广。它提供了一种快速且数值稳定的方法来寻找给定区域内,B样条曲线上对应节点 u u u的点。
示意图:
在这里插入图片描述
在这里插入图片描述
如图所示, P k − s , p − s P_{k-s,p-s} Pks,ps即为所找的点 C ( u ) C(u) C(u).

算法流程如下:
在这里插入图片描述

3.3 B样条曲线的分割

将B样条曲线在节点u处分割为两段,一段在[0,u]上,另一段在[u,1]上.
1.使用De Boor算法进行分割得到控制点:
在这里插入图片描述
在这里插入图片描述
2.两段曲线的节点向量:
第一段:原来 [ 0 , u ) [0,u) [0,u)上的所有节点 + p 个 u p个u pu.
第二段: p 个 u p个u pu + 原来 ( u , 1 ] (u,1] (u,1]上的所有节点.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值