B样条
什么是样条?
样条是通过一组指定点集而生成平滑曲线的柔性带。
什么是B样条?
B样条就相当于一个函数,这个函数在系数不同时就可以变化成各种曲线的形状。
B样条曲线
B e z i e r Bezier Bezier曲线的不足
- n n n次 B e z i e r Bezier Bezier曲线: n + 1 n+1 n+1个控制点
x ( t ) = ∑ i = 0 n B i n ( t ) b i x(t)=\sum_{i=0}^nB_i^n(t)b_i x(t)=∑i=0nBin(t)bi
全局性:牵一发而动全身,不利于设计
原因:基函数是全局的
样条曲线
- 分段的多项式曲线( B e z i e r Bezier Bezier曲线)
- 分段表达,具有局部性
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mg5lZ0zo-1633780575856)(C:\Users\MyPC\AppData\Roaming\Typora\typora-user-images\image-20211007181628645.png)]](https://img-blog.csdnimg.cn/cd90efac505845bd83add6d7f0049722.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6Iqx5Y235bCR5bm0,size_20,color_FFFFFF,t_70,g_se,x_16)
样条曲线的统一表达:
- 形式类比:每个控制顶点用一个基函数进行组合
x ( t ) = ∑ i = 0 n N i , k ( t ) d i x(t)=\sum_{i=0}^nN_{i,k}(t)d_i x(t)=∑i=0nNi,k(t)di
- 性质要求:
- 基函数须局部性(局部支集) 移动某一段控制点的位置只会影响该段曲线的形状,其他段的曲线不受影响。
- 基函数要有正性+权性
- . . . ... ...
B样条的产生
启发:
- B e r n s t e i n Bernstein Bernstein基函数的递推公式:
B i n ( t ) = ( 1 − t ) B i ( n − 1 ) ( t ) + t B i − 1 ( n − 1 ) ( t ) B_i^n(t)=(1-t)B_i^{(n-1)}(t)+tB_{i-1}^{(n-1)}(t) Bin(t)=(1−t)Bi(n−1)(t)+tBi−1(n−1)(t),其中 B 0 0 ( t ) = 1 , B i n ( t ) = 0 若 i ∉ { 0 , . . . , n } B_0^0(t)=1,B_i^n(t)=0若i\notin\{0,...,n\} B00(t)=1,Bin(t)=0若i∈/{ 0,...,n}
- 思路:
- 局部处处类似定义,由一个基函数平移得到
- 高阶的基函数由2个低阶的基函数"升阶"得到
- 利于保持一些良好的性质,比如提高光滑性
关键思想:
- 以三次为例
- 我们定义一个基函数 b ( t ) b(t) b(t)
- 特性:
- b ( t ) b(t) b(t)是 C 2 C^2 C2连续
- b ( t ) b(t) b(t)是分段多项式,3次
- b ( t ) b(t) b(t)具有局部支持特性
- 重复平移 b ( t + i ) b(t+i) b(t+i)形成一个统一的分区
- b ( t ) ≥ 0 b(t)≥0 b(t)≥0,对于所有的 t t t
B样条曲线的每个控制节点都有一个节点参数:节点向量
k k k阶均匀B样条基函数被定义为:
N i 0 ( t ) = { 1 , i ≤ t < i + 1 0 , 其 他 N_i^0(t)=\begin{cases} 1,i≤t<i+1\\ 0,其他 \end{cases} Ni0(t)={
1,i≤t<i+10,其他

B样条的优势
- 保留了 B e z i e r Bezier Bezier曲线的优势
- 可局部修改,调整某一控制点的时候,不会影响到整条曲线。
- 控制多边形与曲线的逼近程度较好
- 曲线拼接时比 B e z i e r Bezier Bezier方便
B样条曲线
一般表达:
有 n + 1 n+1 n+1个控制点 P i ( i = 0 , 1 , . . . , n ) P_i(i=0,1,...,n) Pi(i=0,1,...,n)和一个节点向量 T = { t 0 , t 1 , . . . , t m } T=\{t_0,t_1,...,t_m\} T={
t0,t1,...,tm},依次连接这些控制点可以构成一个特征多边形, k + 1 k+1 k+1阶( k k k次)B样条的表达式如下所示,而且 2 ≤ k ≤ n + 1 2≤k≤n+1 2≤k≤n+1,必须满足 m = n + k + 1 m=n+k+1 m=n+k+1,一般情况下 t 0 = 0 , t m = 1 t_0=0,t_m=1 t0=0,tm=1。所以定义域是闭区间[0,1]
P ( t ) = ∑ i = 0 n P i F i k ( t ) t ∈ [ t k − 1 , t n + 1 ] P(t)=\sum_{i=0}^nP^iF_{i}^{k}(t)\ \ t\in[t_{k-1},t_{n+1}] P(t)=i=0∑nPiFik(t) t∈[tk−1,tn+1]
其中 F i k ( t ) F_i^k(t) Fik(t)是k次B样条基函数, k k k表示基函数的次数,公认的是 d e B o o r − C o x de Boor-Cox deBoor−Cox递推定义。其内容简单来说是由0次构造1次,由1次构造2次,由2次构造3次,以此类推。
递推定义:
{ F i 0 ( t ) = { 1 , t i ≤ t ≤ t i + 1 0 , 其 他 F i k ( t ) = t − t i t i + k − t i F i k − 1 ( t ) + t i + k + 1 − t t i + k + 1 − t i + 1 F i + 1 k − 1 ( t ) 约 定 0 0 = 0 \begin{cases} F_{i}^{0}(t)=\begin{cases} 1,t_i≤t≤t_{i+1}\\ 0,其他\\ \end{cases}\\ F_{i}^{k}(t)=\frac{t-t_i}{t_{i+k}-t_i}F_{i}^{k-1}(t)+\frac{t_{i+k+1}-t}{t_{i+k+1}-t_{i+1}}F_{i+1}^{k-1}(t)\\ \\约定\frac{0}{0}=0 \end{cases} ⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧Fi0(t)={
1,ti≤t≤ti+10,其他Fik(t)=ti+k−tit−tiFik−1(t)+ti+k+1−ti+1ti+k+1−tFi+1k−1(t)约定00=0
零次B样条
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FeGPOB1C-1633780575865)(C:\Users\MyPC\AppData\Roaming\Typora\typora-user-images\image-20211008163007092.png)]](https://img-blog.csdnimg.cn/924b21429e0f4b6482fb538438b134b4.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6Iqx5Y235bCR5bm0,size_20,color_FFFFFF,t_70,g_se,x_16)
一次B样条
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cX9xBsq9-1633780575867)(C:\Users\MyPC\AppData\Roaming\Typora\typora-user-images\image-20211008163417265.png)]](https://img-blog.csdnimg.cn/0298586141c8419db78f2f5fbc7f30e2.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6Iqx5Y235bCR5bm0,size_20,color_FFFFFF,t_70,g_se,x_16)
二次B样条

三次B样条
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TBN9IIcG-1633780575868)(C:\Users\MyPC\AppData\Roaming\Typora\typora-user-images\image-20211008163745791.png)]](https://img-blog.csdnimg.cn/6f81dd69a80c4d87b4dcdd2c18793862.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6Iqx5Y235bCR5bm0,size_20,color_FFFFFF,t_70,g_se,x_16)
B样条的曲线递推图像
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h6hrszDj-1633780575870)(C:\Users\MyPC\AppData\Roaming\Typora\typora-user-images\image-20211008165914167.png)]](https://img-blog.csdnimg.cn/9f67245fdcb44481af00c84c07b4e876.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6Iqx5Y235bCR5bm0,size_20,color_FFFFFF,t_70,g_se,x_16)
B样条的定义
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sYm6ML13-1633780575871)(C:\Users\MyPC\AppData\Roaming\Typora\typora-user-images\image-20211009121336520.png)]](https://img-blog.csdnimg.cn/039d792192fd4960a1befd8b92b9ceb0.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6Iqx5Y235bCR5bm0,size_20,color_FFFFFF,t_70,g_se,x_16)
为了理解 p > 0 p>0 p>0时计算 N i , p ( u ) N_{i,p}(u) Ni,p(u)的方法( p p p为次数),我们使用三角计算格式。所有节点区间在左边第一列,所有零次基函数在第二列。见下图:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oYM6Le7o-1633780575872)(C:\Users\MyPC\AppData\Roaming\Typora\typora-user-images\image-20211009121501453.png)]](https://img-blog.csdnimg.cn/78ea2103b4df48638f8d657b6296ad12.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6Iqx5Y235bCR5bm0,size_20,color_FFFFFF,t_70,g_se,x_16)
为了计算 N i , 1 N_{i,1} Ni,1,需要 N i , 0 ( u ) 和 N i + 1 , 0 ( u ) N_{i,0}(u)和N_{i+1,0}(u) Ni,0(u)和Ni+1,0(u)。因此,我们可以计算 N 0 , 1 ( u ) , N 1 , 1 ( u ) , N 2 , 1 ( u ) N_{0,1}(u),N_{1,1}(u),N_{2,1}(u) N0,1(u),N1,1(u),N2,1(u)等等。所有这些 N i , 1 ( u ) N_{i,1}(u) Ni,1(u)写在第三列。一旦所有 N i , 1 ( u ) N_{i,1}(u) Ni,1(u)计算完毕,我们可以计算 N i , 2 ( u ) N_{i,2}(u) Ni,2(u)并将其放在第四列。继续这个过程直到所有需要的 N i , p ( u ) N_{i,p}(u) Ni,p(u)计算完毕。

因为 N i , 1 ( u ) N_{i,1}(u) Ni,1(u)是从 N i , 0 ( u ) N_{i,0}(u) Ni,0(u)和 N i + 1 , 0 ( u ) N_{i+1,0}(u) Ni+1,0(u)计算的,因此可以得出 N i , 1 ( u ) N_{i,1}(u) Ni,1(u)在 [ u i , u i + 2 ) [u_i,u_{i+2}) [ui,ui+2)上是非零的。
由上图得出结论:基函数 N i , p ( u ) N_{i,p}(u) Ni,p(u)在[ u i , u i + p + 1 u_i,u_{i+p+1} ui,ui+p+1)上非零
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zlPNngqQ-1633780575873)(C:\Users\MyPC\AppData\Roaming\Typora\typora-user-images\image-20211009190404837.png)]](https://img-blog.csdnimg.cn/c4640bc6e9e042fe8a932af2833a086a.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6Iqx5Y235bCR5bm0,size_20,color_FFFFFF,t_70,g_se,x_16)
由上图可得出:在任何一个节点区间 [ u i , u i + 1 ) [u_i,u_{i+1}) [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 + 2 , p ( u ) , . . . , N i − 1 , p ( u ) N_{i-p,p}(u),N_{i-p+1,p}(u),N_{i-p+2,p}(u),...,N_{i-1,p}(u) Ni−p,p(u),Ni−p+1,p(u),Ni−p+2,p(u),...,Ni−1,p(u)和 N i , p ( u ) N_{i,p}(u) Ni,p(u)
B样条基函数的主要性质
1. 局部支撑性:
B i , k ( u ) = { ≥ 0 u ∈ [ u i , u i + k + 1 ] = 0 o t h e r w i s e B_{i,k}(u)=\begin{cases} ≥0\ \ \ u\in[u_i,u_{i+k+1}]\\ =0\ \ \ otherwise \end{cases} Bi,k(u)={ ≥0 u∈[ui,ui+k+1]=0 otherwise
而 B e z i e r Bezier Bezier在整个区间非0。反过来,对每一个区间 ( u i , u i + k + 1 ) (u_i,u_{i+k+1}) (ui,ui+k+1)上最多有 k + 1 k+1 k+1个基函数在其上非零
2. 权性:
∑ i = 0 n B i , k ( u ) = 1 u ∈ [ u k , u n + 1 ] \sum_{i=0}^nB_{i,k}(u)=1\ \ \ u\in[u_{k},u_{n+1}] i=0∑nBi,k(u)=1 u∈[uk,un+1]
3. 连续性:
B i , k ( u ) B_{i,k}(u) Bi,k(u)在 r r r重节点处的连续阶不低于 k − 1 − r k-1-r k−1−r
4. 分段参数多项式:
B i , k ( u ) B_{i,k}(u) Bi,k(u)在每个长度非零的区间 [ u i . u i + 1 ) [u_i.u_{i+1}) [ui.ui+1)上都是次数不高于 k − 1 k-1 k−1的多项式,它在整个参数轴上是分段多项式
B样条函数的主要性质
1.局部性:
k k k阶B样条曲线上的一点至多与 k k k个控制顶点有关,与其它控制顶点无关
移动曲线的第 i i i个控制顶点 P i P_i Pi,至多影响到定义在区间上那部分曲线的形状,对曲线其余部分不发生影响
2.变差缩减性:
平面内 n + 1 n+1 n+1个控制顶点构成B样条曲线 P ( t ) P(t) P(t)的特征多边形。在该平面内的任意一条直线与 P ( t ) P(t) P(t)的交点个数不多于该直线和特征多边形的交点个数
3. 几何不变性:
B样条曲线的形状和位置与坐标系的选择无关
4.凸包性:
B样条曲线落在 P i P_i Pi构成的凸包之中。其凸包区域小于或等于同一组控制顶点定义的 B e z i e r Bezier Bezier曲线凸包区域
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JifqAoT7-1636171565307)(B样条.assets/image-20211102210715876.png)]](https://img-blog.csdnimg.cn/83372e433e8040989e8ecd362e213788.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6Iqx5Y235bCR5bm0,size_20,color_FFFFFF,t_70,g_se,x_16)
凸包就是包含上边这6个顶点的最小凸多边形。凸多边形是把多边形的每条边延长,其它边都在它的同一侧
该性质导致顺序 k + 1 k+1 k+1个顶点重合时,由这些顶点定义的k次B样条曲线段退化到这一个重合点;顺序 k + 1 k+1 k+1个顶点共线时,由这些顶点定义的k次B样条曲线为一直线段
B样条曲线类型的划分
1. 均匀B样条曲线
当节点沿参数轴均匀等距分布,即 u i + 1 − u i = 常 数 > 0 u_{i+1}-u_i=常数>0 ui+1−ui=常数>0时,表示均匀B样条函数
如: { 0 , 1 , 2 , 3 , 4 , 5 , 6 } \{0,1,2,3,4,5,6\} { 0,1,2,3,4,5,6}
均匀B样条的基函数呈周期性。即给定n和k,所有的基函数有相同形状。每个后续基函数仅仅是前面基函数在新位置上的重复:
B i , k ( u ) = B i + 1 , k ( u + Δ u ) = B i + 2 , k ( u + 2 Δ u ) B_{i,k}(u)=B_{i+1,k}(u+\Delta u)=B_{i+2,k}(u+2\Delta u) Bi,k(u)=Bi+1,k(u+Δu)=Bi+2,k(u+2Δu)
其中, Δ u \Delta u Δu为相邻节点值的间距
均匀B样条曲线没有保留 B e z i e r Bezier Bezier曲线端点的几何性质,即不过控制点中的起点和终点,采用准均匀的B样条曲线则能够通过。
2. 准均匀B样条曲线
与均匀B样条曲线的差别在于两端节点具有重复度k,这样的节点矢量定义了准均匀的B样条函数
均匀: u = { 0 , 1 , 2 , 3 , 4 , 5 , 6 } u=\{0,1,2,3,4,5,6\} u={ 0,1,2,3,4,5,6}
准均匀: { 0 , 0 , 0 , 1 , 2 , 3 , 4 , 5 , 5 , 5 } \{0,0,0,1,2,3,4,5,5,5\} { 0,0,0,1,2,3,4,5,5,5}
3. 分段 B e i z e r Beizer Beizer曲线
节点矢量中两端节点具有重复度k,所有内节点重复度为k-1,这样的节点矢量定义了分段的 B e r n s t e i n Bernstein Bernstein基
B样条曲线用分段 B e z i e r Bezier Bezier曲线表示后,各曲线段就具有了相对的独立性
4. 非均匀B样条曲线
当节点沿参数轴的分布不等距,即 u i + 1 − u i ≠ 常 数 时 u_{i+1}-u_i≠常数时 ui+1−ui=常数时,表示非均匀B样条函数
B样条曲面
B样条曲面方程为:
p ( u , v ) = ∑ i = 0 m ∑ j = 0 n d i j N i , k ( u ) N j , l ( v ) p(u,v)=\sum_{i=0}^m\sum_{j=0}^nd_{ij}N_{i,k}(u)N_{j,l}(v) p(u,v)=i=0∑mj=0∑ndijNi,k(u)Nj,l(v)
其中 u k ≤ u ≤ u m + 1 , v i ≤ v ≤ v n + 1 u_k≤u≤u_{m+1},v_i≤v≤v_{n+1} uk≤u≤um+1,vi≤v≤vn+1,B样条基函数 N i , k ( u ) ( i = 0 , 1 , . . . , m ) N_{i,k}(u)(i=0,1,...,m) Ni,k(u)(i=0,1,...,m)与 N j , l ( v ) ( j = 0 , 1 , . . . , n ) N_{j,l}(v)(j=0,1,...,n) Nj,l(v)(j=0,1,...,n)分别由节点矢量 U 和 V U和V U和V按 d e B o o r − c o x deBoor-cox deBoor−cox递推公式计算, d i , j d_{i,j} di,j构成一张控制网格,称为B样条曲面的特征网格
最终实现的结果为:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3VytsFvJ-1636442804332)(B样条.assets/image-20211108173230768.png)]](https://img-blog.csdnimg.cn/170ab1facc864512a2d40177166eab92.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6Iqx5Y235bCR5bm0,size_20,color_FFFFFF,t_70,g_se,x_16)
其中节点向量通过哈特利-贾德方法获得。
困惑点:使用Hartley-Judd(哈特利-贾德)方法获得节点向量没有看明白
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Oyo0bFcc-1633780575853)(C:\Users\MyPC\AppData\Roaming\Typora\typora-user-images\image-20211007171546503.png)]](https://img-blog.csdnimg.cn/118a5e66288749f2ab6cc6f4f7ed08d9.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6Iqx5Y235bCR5bm0,size_20,color_FFFFFF,t_70,g_se,x_16)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/18397.html