fbpx
维基百科

B样条

数学的子学科数值分析裡,B-样条样条曲线一种特殊的表示形式。它是B-样条基曲线的线性组合。B-样条是貝茲曲線的一种一般化,可以进一步推广为非均匀有理B样条(NURBS),使得我们能给更多一般的几何体建造精确的模型。

De Boor算法是一个数值上稳定的计算B样条的方法。

术语 B样条是Isaac Jacob Schoenberg创造的,B 是基(basis)样条的缩略。

定义 编辑

给定m+1 个节点ti ,分布在[0,1]区间,满足

 

一个nB样条是一个参数曲线

 

它由nB样条基(basis B-spline)组成

 .

Pi称为控制点de Boor点. m+1个n次B样条基可以用Cox-de Boor递归公式 定义

 
 

当节点等距,称B样条为均匀(uniform)否则为非均匀(non-uniform)。

均匀B样条曲线 编辑

当B样条是均匀的时候,对于给定的n,每个B样条基是其他基的平移拷贝而已。一个可以作为替代的非递归定义是

 

满足

 

满足

 

其中

 

是截断幂函数(truncated power function)

注解 编辑

当节点数和多项式次数相等时,B样条退化为貝茲曲線。即函数的形状由节点的位置决定。缩放或者平移节点向量不会改变基函数。

样条包含在它的控制点的凸包

n次B样条的一个基

 

仅当在区间[ti, ti+n+1]上非0。就是

 

换句话说,如果我们操作一个控制点,我们只改变曲线在局部的行为,而不像Bezier曲线那样是全局行为。

例子 编辑

常数B样条 编辑

常数B样条是最简单的样条。只定义在一个节点距离上,而且不是节点的函数。它只是不同节点段(knot span)的指示函数

 

线性B样条 编辑

线性B样条定义在两个相邻的节点段上,在节点连续但不可微。

 

三次B样条 编辑

一个片断上的B样条的表达式可以写作:

 

其中Si是第i个B样条片断而P是一个控制点集,ik是局部控制点索引。控制点的集合会是 的集合,其中 是比重,当它增加时曲线会被拉向控制点 ,在减小时则把曲线远离该点。


片段的整个集合m-2条曲线( )由m+1个控制点( )定义,作为t上的一个B样条可以定义为

 

其中i是控制点数,t是取节点值的全局参数。这个表达式把B样条表示为B样条基函数的线性组合,这也是这个名称的原因。

有两类B样条-均匀和非均匀。非均匀B样条相邻控制点间的距离不一定要相等。一个一般的形式是区间随着插入控制点逐步变小到0。


B樣條的程式指令 编辑

Matlab 编辑

In Matlab,the command“spline” can be used for spline interpolation.

(Note: In the command, the cubic B-spline is used)


Cubic B-Spline Interpolation by Matlab

Generating a sine-like spline curve and samples it over a finer mesh:

x = 0:1:10; % original sampling points

y = sin(x);

xx = 0:0.1:10; % new sampling points

yy = spline(x,y,xx);

plot(x,y,'o',xx,yy)

Python 编辑

事前安裝模組

  • pip install numpy
  • pip install scipy
  • pip install matplotlib


Cubic B-Spline Interpolation by Python

from scipy.interpolate import interp1d

import matplotlib.pyplot as plt

import numpy as np

x = np.arange(0, 11) # original sample points, [0, 1, 2, …, 9, 10]

y = np.sin(x)

f = interp1d(x, y, kind=' cubic ') ) # Cubic means the cubic B-spline.

x_new = np.arange(0, 10.1, 0.1) # new sample points, [0, 0.1, 0.2, ….., 9.9, 10]

y_new = f(x_new)

plt.plot(x,y,'o',x_new, y_new)

plt.show()


B样条曲面 编辑

B样条曲线及曲面相关算法 编辑

关于此处涉及的算法,在著作[1]中有针对Bézier、B样条(B-spline)以及非均匀有理B样条(Nurbs)的相关算法的详细数学表达和程序实现方法。

求导 编辑

在几何处理中,对参数曲线及曲面的求导是最基本的运算之一,由于参数表达的特性,在给定点的切线及法线可通过求导直接得到。 先来考察曲线的情形:采用本页定义中的B样条曲线表达式   对参数 进行求导:  

节点插入与删除 编辑

曲线及曲面拟合 编辑

应用 编辑

参看 编辑

参考 编辑

本條目部分或全部内容出自以GFDL授權發佈的《自由線上電腦詞典》(FOLDOC)。

  1. ^ Les Piegl and Wayne Tiller: The NURBS Book, Springer-Verlag 1995-1997 (2nd ed).

參考文獻 编辑

  • Jian-Jiun Ding, “Time Frequency Analysis and Wavelet Transforms ”, NTU, 2021.


外部链接 编辑

  • Interactive java applets for B-splines(页面存档备份,存于互联网档案馆
  • Introduction to Computing with Geometry Notes (Dr.C.-K.Shene/Michigan Technological University)(页面存档备份,存于互联网档案馆

b样条, 在数学的子学科数值分析裡, 样条是样条曲线一种特殊的表示形式, 它是b, 样条基曲线的线性组合, 样条是貝茲曲線的一种一般化, 可以进一步推广为非均匀有理, nurbs, 使得我们能给更多一般的几何体建造精确的模型, boor算法是一个数值上稳定的计算的方法, 术语, 是isaac, jacob, schoenberg创造的, 是基, basis, 样条的缩略, 目录, 定义, 均匀曲线, 注解, 例子, 常数, 线性, 三次, b樣條的程式指令, matlab, python, 曲面, 曲线及曲面相关算. 在数学的子学科数值分析裡 B 样条是样条曲线一种特殊的表示形式 它是B 样条基曲线的线性组合 B 样条是貝茲曲線的一种一般化 可以进一步推广为非均匀有理B样条 NURBS 使得我们能给更多一般的几何体建造精确的模型 De Boor算法是一个数值上稳定的计算B样条的方法 术语 B样条是Isaac Jacob Schoenberg创造的 B 是基 basis 样条的缩略 目录 1 定义 1 1 均匀B样条曲线 2 注解 3 例子 3 1 常数B样条 3 2 线性B样条 3 3 三次B样条 4 B樣條的程式指令 4 1 Matlab 4 2 Python 5 B样条曲面 6 B样条曲线及曲面相关算法 6 1 求导 6 2 节点插入与删除 6 3 曲线及曲面拟合 7 应用 8 参看 9 参考 10 參考文獻 11 外部链接定义 编辑给定m 1 个节点ti 分布在 0 1 区间 满足 t 0 lt t 1 lt lt t m displaystyle t 0 lt t 1 lt ldots lt t m nbsp 一个n次B样条是一个参数曲线 S 0 1 R 2 displaystyle mathbf S 0 1 to mathbb R 2 nbsp 它由n次B样条基 basis B spline 组成 S t i 0 m P i b i n t t 0 1 displaystyle mathbf S t sum i 0 m mathbf P i b i n t mbox t in 0 1 nbsp Pi称为控制点或de Boor点 m 1个n次B样条基可以用Cox de Boor递归公式 定义 b j 0 t 1 t j lt t lt t j 1 0 displaystyle b j 0 t left begin matrix 1 amp mathrm quad t j lt t lt t j 1 0 amp mathrm end matrix right nbsp b j n t t t j t j n t j b j n 1 t t j n 1 t t j n 1 t j 1 b j 1 n 1 t displaystyle b j n t frac t t j t j n t j b j n 1 t frac t j n 1 t t j n 1 t j 1 b j 1 n 1 t nbsp 当节点等距 称B样条为均匀 uniform 否则为非均匀 non uniform 均匀B样条曲线 编辑 当B样条是均匀的时候 对于给定的n 每个B样条基是其他基的平移拷贝而已 一个可以作为替代的非递归定义是 b j n t b n t n j j 1 m 1 displaystyle b j n t b n t n j qquad mbox j 1 ldots m 1 nbsp 满足 b n t m 1 i 0 m 1 w i t i t m t 0 1 displaystyle b n t m 1 sum i 0 m 1 omega i t i t m qquad mbox t in 0 1 nbsp 满足 w i j 0 i j m 1 1 t i t k displaystyle omega i prod j 0 i neq j m 1 frac 1 t i t k nbsp 其中 t i t displaystyle t i t nbsp 是截断幂函数 truncated power function 注解 编辑当节点数和多项式次数相等时 B样条退化为貝茲曲線 即函数的形状由节点的位置决定 缩放或者平移节点向量不会改变基函数 样条包含在它的控制点的凸包中n次B样条的一个基 b i n t displaystyle b i n t nbsp 仅当在区间 ti ti n 1 上非0 就是 b i n t gt 0 t i t lt t i n 1 0 displaystyle b i n t left begin matrix gt 0 amp mathrm quad t i leq t lt t i n 1 0 amp mathrm end matrix right nbsp 换句话说 如果我们操作一个控制点 我们只改变曲线在局部的行为 而不像Bezier曲线那样是全局行为 例子 编辑常数B样条 编辑 常数B样条是最简单的样条 只定义在一个节点距离上 而且不是节点的函数 它只是不同节点段 knot span 的指示函数 b j 0 t 1 t j t j 1 1 t j t lt t j 1 0 displaystyle b j 0 t 1 t j t j 1 left begin matrix 1 amp mathrm quad t j leq t lt t j 1 0 amp mathrm end matrix right nbsp 线性B样条 编辑 线性B样条定义在两个相邻的节点段上 在节点连续但不可微 b j 1 t t t j t j 1 t j i f t j t lt t j 1 t j 2 t t j 2 t j 1 t j 1 t lt t j 2 0 displaystyle b j 1 t left begin matrix frac t t j t j 1 t j amp mathrm if quad t j leq t lt t j 1 frac t j 2 t t j 2 t j 1 amp mathrm quad t j 1 leq t lt t j 2 0 amp mathrm end matrix right nbsp 三次B样条 编辑 一个片断上的B样条的表达式可以写作 S i t k 0 3 P i 3 k b i 3 k 3 t t 0 1 displaystyle S i t sum k 0 3 mathbf P i 3 k b i 3 k 3 t qquad mbox t in 0 1 nbsp 其中Si是第i个B样条片断而P是一个控制点集 i和k是局部控制点索引 控制点的集合会是P i w w i x i w i y i w i z i w i displaystyle P i w w i x i w i y i w i z i w i nbsp 的集合 其中w i displaystyle w i nbsp 是比重 当它增加时曲线会被拉向控制点P i displaystyle P i nbsp 在减小时则把曲线远离该点 片段的整个集合m 2条曲线 S 3 S 4 S m displaystyle S 3 S 4 S m nbsp 由m 1个控制点 P 0 P 1 P m m 3 displaystyle P 0 P 1 P m m geq 3 nbsp 定义 作为t上的一个B样条可以定义为 S t i 0 m P i b i t displaystyle S t sum i 0 m mathbf P i b i t nbsp 其中i是控制点数 t是取节点值的全局参数 这个表达式把B样条表示为B样条基函数的线性组合 这也是这个名称的原因 有两类B样条 均匀和非均匀 非均匀B样条相邻控制点间的距离不一定要相等 一个一般的形式是区间随着插入控制点逐步变小到0 B樣條的程式指令 编辑Matlab 编辑 In Matlab the command spline can be used for spline interpolation Note In the command the cubic B spline is used Cubic B Spline Interpolation by MatlabGenerating a sine like spline curve and samples it over a finer mesh x 0 1 10 original sampling pointsy sin x xx 0 0 1 10 new sampling pointsyy spline x y xx plot x y o xx yy Python 编辑 事前安裝模組 pip install numpy pip install scipy pip install matplotlibCubic B Spline Interpolation by Pythonfrom scipy interpolate import interp1dimport matplotlib pyplot as pltimport numpy as npx np arange 0 11 original sample points 0 1 2 9 10 y np sin x f interp1d x y kind cubic Cubic means the cubic B spline x new np arange 0 10 1 0 1 new sample points 0 0 1 0 2 9 9 10 y new f x new plt plot x y o x new y new plt show B样条曲面 编辑B样条曲线及曲面相关算法 编辑关于此处涉及的算法 在著作 1 中有针对Bezier B样条 B spline 以及非均匀有理B样条 Nurbs 的相关算法的详细数学表达和程序实现方法 求导 编辑 在几何处理中 对参数曲线及曲面的求导是最基本的运算之一 由于参数表达的特性 在给定点的切线及法线可通过求导直接得到 先来考察曲线的情形 采用本页定义中的B样条曲线表达式 S t i 0 m P i b i n t t 0 1 displaystyle mathbf S t sum i 0 m mathbf P i b i n t mbox t in 0 1 nbsp 对参数t displaystyle t nbsp 进行求导 d S d t i 0 m b i n t P i displaystyle frac d mathbf S dt sum i 0 m b i n t mathbf P i nbsp 节点插入与删除 编辑 曲线及曲面拟合 编辑应用 编辑参看 编辑样条 De Boor算法 非均匀有理B样条参考 编辑本條目部分或全部内容出自以GFDL授權發佈的 自由線上電腦詞典 FOLDOC Les Piegl and Wayne Tiller The NURBS Book Springer Verlag 1995 1997 2nd ed 參考文獻 编辑Jian Jiun Ding Time Frequency Analysis and Wavelet Transforms NTU 2021 外部链接 编辑Interactive java applets for B splines 页面存档备份 存于互联网档案馆 Introduction to Computing with Geometry Notes Dr C K Shene Michigan Technological University 页面存档备份 存于互联网档案馆 取自 https zh wikipedia org w index php title B样条 amp oldid 69312977, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。