精华内容
参与话题
问答
  • B样条基函数

    千次阅读 2013-04-24 01:58:28
    __VIEWSTATE" type="hidden" name="__VIEWSTATE"> eryar Dare to Dream, Dare to Create! posts - 101, comments - 53, trackbacks - 0, articles - 0 ...导
    
    

    eryar

    Dare to Dream, Dare to Create!
    posts - 101, comments - 53, trackbacks - 0, articles - 0

    导航

    公告

    Blog中发表的文章,如无说明,都是原创。若需引用,请注明出处。eryar@163.com
    < 2013年3月 >
    24 25 26 27 28 1 2
    3 4 5 6 7 8 9
    10 11 12 13 14 15 16
    17 18 19 20 21 22 23
    24 25 26 27 28 29 30
    31 1 2 3 4 5 6

    常用链接

    留言簿(4)

    随笔分类

    随笔档案

    搜索

    •  

    最新评论

    阅读排行榜

    评论排行榜

    60天内阅读排行

    B-Spline Curve Library in Open Cascade

    Posted on 2013-03-12 20:48 eryar 阅读(1436) 评论(1)  编辑 收藏 引用 所属分类: OpenCASCADECAGD

    B样条曲线库BSplCLib提供了一些基本几何算法:

    l B样条基函数及其导数的计算BSplCLib::EvalBsplineBasis();

    l 节点插入BSplCLib::InsertKnot();

    l 节点去除BSplCLib::RemoveKnot();

    l 升阶BSplCLib::IncreaseDegree();

    l 降阶;

    结合《The NURBS Book》和Open Cascade中的BSplCLib的源程序,可以高效的学习NURBS。《The NURBS Book》中有详细的理论推导及算法描述,而Open Cascade中有可以用来实际使用的程序。理论联系实际,有助于快速理解NURBS的有关概念及其应用。

    三、 OCC中B样条曲线库的节点和重数Knots and Multiplicity in BSplCLib

    由B样条曲线的可微性可知,节点的重数与B样条曲线的连续性相关。在节点区间内部,Ni,p(u)是无限次可微的,因在每个节点区间内部,它是一个多项式。在节点处Ni,p(u)是p-k次连续的,其中k是节点的重复度(multiplicity,有时也称为重数)。因此,增加次数p将提高曲线的连续性,而增加节点的重复度则使连续性降低。

    重复度(multiplicity,有时也称为重数)有两种不同的理解方式:

    l 节点在节点矢量中的重复度;

    l 节点相对于一个特定的基函数的重复度;

    在Open Cascade中对重复度的理解是前者,即节点在节点矢量中的重复度。下面结合源程序来进行说明。

    函数BSplCLib::Knots()用来将给定的节点矢量(节点序列knot sequence)转换为节点的重复度不大于1的Knots数组和每个节点对应的重复度Mults数组,且数据Knots和Mults的长度必由函数BSplCLib::KnotsLength()得到。Knots()函数的源程序如下所示:

     

    展开全文
  • B样条基函数图像的程序实现

    千次阅读 2017-12-08 23:11:57
    B样条基函数递推式在这里就不赘述了,下面直接给出其形式: 我们需要知道的是: 1、基函数Ni,p(u)的支撑区间为[ui,ui+k],在此区间外Ni,p(u)=0;需要注意的是p在此处是阶数,基函数是(p-1)次的; 2、基函数是分段...

    B样条基函数递推式在这里就不赘述了,下面直接给出其形式:


    我们需要知道的是(节点序列是递增的):

    1、基函数Ni,p(u)的支撑区间为[ui,ui+k],在此区间外Ni,p(u)=0;需要注意的是p在此处是阶数,基函数是(p-1)次的;

    2、基函数是分段函数,在每个区间[ui,ui+1]上对应着不同的表达式;

    3、基函数一般是不依赖曲线的控制顶点,除了一些特别的参数化与控制顶点有关,比如弦长参数化;

    4、基函数有效部分为[up-1,un],其中p为阶数,n为控制顶点个数(如果需要画B样条函数曲线,在此处有一个选取的标准);

    5、选取的基函数一共有p段,且这些p段的函数式之和对任意一个u都必须为1,这是基函数权性的体现;还有基函数对任意的u都是正的(也可以说是非负),这是正性;

    6、权性+正性=凸包性;

    7、一般我们选择在节点u的两端取重复的值(重复度或者重数),以满足插值控制多边形的端点,一般重复度等于p(至少是一重,即节点本身出现一次),当然比如说对于4阶(3次)的情况,两端节点重复度可以取3,但是基函数选取稍稍复杂一点点,常见的是取4.比如节点序列[0,0,0,0,1/3,1/2,1,1,1,1],这个节点序列在两端0和1的重复度都为4.

    8、节点序列的均匀与否就涉及到均匀B样条和非均匀B样条(准均匀B样条几乎不用了,感兴趣的自己去百度一下),比如节点序列[-1,0,1,2,3,4],节点序列[-1,1,3,5,7,9,11]等,这些都是相邻节点的插值为一固定常数;非均匀的情况就比较复杂了,比如节点序列[-1,0,3,4,6],[-1,1/3,1/2,2,4]等,没有固定形式的节点序列我们称之为非均匀节点,用它画出来的基函数称为非均匀B样条基函数,画出来的曲线就称为非均匀B样条曲线;

    9、一般情况下基函数的形状依赖节点的选择,但是对于均匀B样条基函数,不管节点序列取什么值,基函数都是一样的;非均匀的则完全依赖节点序列的选择;

    10、节点重数<=阶数,否则没有意义;

    11、比如p=4;节点重数为3重时,B样条曲线对应处的控制点除会出现尖点(角点),相邻两节点的重数为2重时,则会出现直线段;

    12、基函数在节点处的连续阶为p-1-m,m为该节点的重数;相应的B样条曲线在节点处(相邻曲线段拼接处)的连续阶不低于p-1-m,m为该节点的重数;

    13、基函数性质以及B样条曲线性质我会及时更新,望关注……

    基函数实现的MATLAB代码如下:

    %B样条基函数
    clc;clear;
    syms t;
    N=sym([]) ;
    M=sym([]) ;
    f=0;
    degree=3;%基函数次数
    x=[0,0,0,1,3,3,3];%节点
    n=length(x);
    for l=1:1:(n-degree)  %注意,此处的数值代表控制点个数减去次数
       for r=0:1:degree
         for j=1:1:(n-1) %注意,此处的数值代表节点个数减去1,即节点间线段数
          N(j,1)=0;
         end
         N(l+r,1)=1;
         for k=2:1:(degree+1)
           for i=1:1:(n-k)
               if x(i+k-1)==x(i)&&x(i+k)~=x(i+1)
                   N(i,k)=(x(i+k)-t)*(N(i+1,k-1))/(x(i+k)-x(i+1));
               end
               if x(i+k-1)~=x(i)&&x(i+k)==x(i+1)
                   N(i,k)=(t-x(i))*(N(i,k-1))/(x(i+k-1)-x(i));
               end
               if x(i+k-1)==x(i)&&x(i+k)==x(i+1)
                   N(i,k)=0;
               end
               if x(i+k-1)~=x(i)&&x(i+k)~=x(i+1)
                   N(i,k)=(t-x(i))*(N(i,k-1))/(x(i+k-1)-x(i))+(x(i+k)-t)*(N(i+1,k-1))/(x(i+k)-x(i+1));
               end
           end
         end
         M(r+1,l)=N(l,degree+1);
       end
    end
    k=0;%画出基函数图像
    for j=1:1:(n-degree-1)  
      for i=j:1:(j+degree)
        k=k+1;
        t=x(i):0.01:x(i+1);
        hold on
        plot(t,subs(M(k,j)))
      end
        k=k-(degree+1);
    end
    grid on

    我会持续更新,请关注……

    附:非均匀节点的三次B样条曲线的实现代码链接:http://download.csdn.net/download/meitaoqu1361/10148425







    展开全文
  • 利用openCV画出B样条基函数的曲线

    千次阅读 2016-03-26 16:32:46
    最近要做双三次B样条插值(bicubic),从基础的三次B样条开始看起,但是网上基本没有介绍B样条基函数的文章,所以在这里写下来,方便他人参考。 对于三次均匀的B样条曲线,其递推公式如下: 一般的B样条用...

    最近要做双三次B样条插值(bicubic),从基础的三次B样条开始看起,但是网上基本没有介绍B样条基函数的文章,所以在这里写下来,方便他人参考。

     

    对于三次均匀的B样条曲线,其递推公式如下:

     

     

    一般的B样条用的最多的是三次B样条曲线,也就是k = 4 时的曲线。公式太长,我懒得打,可以在程序里面看。

    下面用openCV画出三次B样条基函数:

     

     

    #include<opencv2/opencv.hpp>
    #include<iostream>
    
    using namespace cv;
    #include <math.h>
    #define NUMPOINT 40 //采样点个数
    Point polyNomial (double t)
    {
    	double val = 0;
    	Point point;
    	//下面是B样条三次基函数的曲线表达式
    	if(t<0)
    	{
    		val = 0;
    	}
    	else if (t>=0&&t<1)
    	{
    		val = ((double)1/6)*pow(t,3);
    	}
    	else if (t>=1&&t<2)
    	{
    		val = ((double)1/6)* (pow(t,2)*(2-t)+t*(3-t)*(t-1)+(4-t)*pow(t-1,2));
    	}
    	else if (t>=2&&t<3)
    	{
    		val = ((double)1/6)* (pow(3-t,2)*t + (4-t)*(3-t)*(t-1)+(t-2)*pow(4-t,2));
    
    	}
    	else if(t>=3&&t<4)
    	{
    		val = ((double)1/6)*pow(4-t,3);
    	}
    	else
    		val =0;
    
    	point = cvPoint(t*100,val*100);//对小数进行放大,并转换成int型存入Point中
    	return point;
    }
    
    
    
    void main()
    {
    	Mat img = Mat::zeros(800,800,CV_8UC3);//创建画布
    	
    	vector<Point> curvePoint ;//用于保存point的Vector
    	Point tmpPoint;
    
    	for (int i =0;i<NUMPOINT;++i)
    	{
    		tmpPoint = polyNomial(i*(4/(double)NUMPOINT));//返回基函数的值
    		curvePoint.push_back(tmpPoint);
    	}
    	vector<Point>::iterator it;
    	it = curvePoint.begin();
    
    	Point pointPre = cvPoint(0,800);//起始点
    	while(it != curvePoint.end())
    	{
    		Point pointTmp = (*it);
    		pointTmp =cvPoint(pointTmp.x ,800 - pointTmp.y);//坐标翻转
    		line(img,pointPre,pointTmp,cvScalarAll(255),4);
    		pointPre = pointTmp;
    		++it;
    	}
    
    	cvNamedWindow("out");
    	imshow("out",img);
    	waitKey(0);
    }
    


     

     

     

    展开全文
  • B-spline Basis Functions:Definition 贝塞尔基函数用作权重。B-样条基函数也一样;...实际上,每个B样条基函数在附近一个子区间非零,因此,B-样条基函数相当“局部”。  设U是m+ 1个非递减数的集...

                  B-spline Basis Functions:Definition

    贝塞尔基函数用作权重。B-样条基函数也一样;但更复杂。但是它有两条贝塞尔基函数所没有的特性,即(1)定义域被节点细分(subdivided); (2) 基函数不是在整个区间非零。实际上,每个B样条基函数在附近一个子区间非零,因此,B-样条基函数相当“局部”。

      设U 是m + 1个非递减数的集合,u0 <= u2 <= u3 <= ... <= umui称为节点(knots, 集合U 称为节点向量knot vector), 半开区间[uiui+1) 是第i个节点区间(knot span)。注意某些ui可能相等,某些节点区间会不存在。如果一个节点 ui 出现 k 次 (即,ui = ui+1 = ... = ui+k-1), 其中 k > 1, ui 是一个重复度(multiplicity)为的多重节点,写为 ui(k)。 否则,如果ui只出现一次,它是一个简单节点。如果节点等间距(即, ui+1 - ui 是一个常数,对 0 <= i <= m - 1),节点向量或节点序列称为均匀的;否则它是非均匀的。

       节点可认为是分隔点,将区间[u0, um]细分为节点区间。所有B-样条基函数被假设定义域在[u0, um]上。在本文中,我们经常使用u0 = 0和um = 1,所以定义域是闭区间[0,1]。

    为了定义B-样条基函数,我们还需要一个参数,基函数的次数(degree)pip次B-样条基函数,写为Ni,p(u),递归定义如下:

        

    上述公式通常称为Cox-de Boor递归公式。 这个定义看起来很复杂;但是不难理解。如果次数(degree)为零(即, p = 0),这些基函数都是阶梯函数,这也是第一个表达式所表明的。即,如果u是在第i个节点区间[uiui+1)上基函数Ni,0(u)是1。 例如,如果我们有四个节点u0= 0, u1 = 1, u2 = 2和 u3 = 3, 节点区间 0, 1 和2是[0,1), [1,2), [2,3),0次基函数是N0,0(u) = 1 在 [0,1) ,在其它区间是0;N1,0(u) = 1 在 [1,2)上,在其它区间是0;N2,0(u) = 1在[2,3)上,其它区间是0。如下图所示:

      

           为了理解p大于0时计算Ni,p(u)的方法,我们使用三角计算格式。所有节点区间列在左边(第一)列,所有零次基函数在第二列。见下图。

      

        为了计算Ni,1(u),需要Ni,0(u)和Ni+1,0(u)。因此,我们可以计算N0,1(u), N1,1(u),N2,1(u), N3,1(u) 等等。所有这些Ni,1(u)写在第三列。一旦所有Ni,1(u)计算完毕,我们可以计算Ni,2(u)并将其放在第四列。继续这个过程直到所有需要的Ni,p(u)的计算完毕。

       上面我们获得了针对节点向量 U = { 0, 1, 2, 3 }的N0,0(u), N1,0(u)和N2,0(u) 。现在计算N0,1(u)和N1,1(u)。要计算N0,1(u),因为i = 0和p = 1,从定义出发有

      

      因为u0 = 0, u1 = 1和u2 = 2,上式变为

      

      因为N0,0(u)在[0,1)上非零且N1,0(u)在[1,2)上非零,如果u在[0,1)上 (resp., [1,2) ), 只有N0,0(u) (resp.N1,0(u) )对N0,1(u)有贡献。因此,如果u 在[0,1)上, N0,1(u) 是uN0,0(u) = u而如果u 在[1,2)上, N0,1(u)是 (2 - u)N1,0(u) = (2 - u)。相似的计算得到N1,1(u) = u - 1如果u 在[1,2)上, 而N1,1(u) = 3 - u 如果 u 在[2,3)上。下图中,黑色和红色线分别是N0,1(u)和  N1,1(u)。注意N0,1(u) (resp.N1,1(u))在[0,1) 和[1,2) 上(resp., [1,2) 和 [2,3))是非零的。

      

      一旦获得N0,1(u)和N1,1(u),可以计算N0,2(u)。由定义得到下式:

      

      代入节点值得到

      

      注意 N0,1(u) 在 [0,1)和[1,2)上非零而N1,1(u) 在[1,2) 和 [2,3)上非零。因此,我们有三种情况要考虑:

    (1) u 在 [0,1)上:
        这种情况,只有N0,1(u)对N0,2(u)的值有贡献。因此,N0,1(u)是u, 得到

      

    (2)u 在[1,2)上: 
        这种情况, N0,1(u)和N1,1(u)都对 N0,2(u)有贡献。因此N0,1(u) = 2 - u 且N1,1(u) = u - 1 在[1,2)上,得到 

      

      【译注:上式中间的式子的第二项应为:0.5(3-u)(u-1)】

    (3)u 在 [2,3)上: 
        这种情况,只有N1,1(u)对 N0,2(u)有贡献。因此N1,1(u) = 3 - u 在[2,3)上,得到,

      

       如果我们画出上述三种情况的曲线段,我们会看到两个相邻曲线段连接起来形成了在节点上的曲线。更确切地,第一种和第二种情况的曲线段在u = 1处连接起来,而第二种和第三种情况的曲线段在u = 2处连接起来。注意合成曲线是光滑的,但是如果节点向量包含多重节点通常就不是这样的。              

                             

     

    2. 两个重要的观察

      因为 Ni,1(u) 是从 Ni,0(u) 和 Ni+1,0(u)计算的而 因为Ni,0(u)和Ni+1,0(u) 在区间[ui,ui+1)和[ui+1, ui+2)分别是非零的,Ni,1(u) 在这两个区间都是非零的。换句话说,Ni,1(u)在[uiui+2)上是非零的。相似地,因为 Ni,2(u) 依赖于Ni,1(u) 和Ni+1,1(u)且因为这两个基函数在[uiui+2)和[ui+1, ui+3)分别是非零的,Ni,2(u)在[uiui+3)上非零。总之,为确定基函数Ni,p(u), 的非零定义域,可以追溯到三角计算格式直到回到第一列。例如,假设我们想找到 N1,3(u)的非零定义域。基于上述讨论,我们可从西北和西南方向追溯直到第一列为止,如下图中蓝色虚线所示。因此 N1,3(u)在 [u1, u2), [u2,u3), [u3, u4) 和[u4, u5)上是非零的。或,相等地,它在[u1, u5)上非零。

      

      总之,我们有下列观察:

       基函数 Ni,p(u在[uiui+p+1)上非零。或,相等地,Ni,p(u在 p+1个节点区间[uiui+1), [ui+1, ui+2), ..., [ui+pui+p+1)上非零。

        接着,我们看相反的方向。给定一个节点区间[uiui+1),我们想知道哪个基函数会在计算中使用这个区间。我们可以以这个节点区间开始并画一个西北界限箭头和一个西南界限的箭头。所有封闭在楔形里的基函数使用 Ni,0(u)(为什么?)因此在该区间是非零的。因此,所有在[uiui+1)上非零的p 次基函数是这个楔形和包含所有Ni,p(u) 的列的交集。实际上,这一列和两个箭头形成一个等边三角形,而这一列是垂直边。 从 Ni,0(u) 数到 Ni,p(u) 有p+1列。因此,等边三角形的垂直边至多有p+1 项,即 Ni,p(u), Ni-1,p(u), Ni-2,p(u), ..., Ni-p+2,p(u), Ni-p+1,p(u) 和Ni-p,p(u)。

      

       让我们看上图。为了找到所有3次在 [u4, u5) 上非零的基函数,画出两个箭头和所有在垂直边的函数是我们想要的。这个例子,是N1,3(u), N2,3(u), N3,3(u), 和N4,3(u).用黄色三角表示。蓝色 (resp., 红色) 三角显示的是在[u3, u4) (resp., [u2, u3) )上非零的3次基函数。注意在[u2, u3)上只有3个3次基多项式。.

        总之,我们观察到下列特性:

       在任何一个节点区间 [uiui+1), 最多有 p+1p 次基函数非零,即:Ni-p,p(u),Ni-p+1,p(u), Ni-p+2,p(u), ..., Ni-1,p(u和 Ni,p(u)。

     

    3. 系数的意义是什么?

      最后,让我们研究下Ni,p(u)定义中系数的意义。当计算 Ni,p(u) 时,它使用Ni,p-1(u)和Ni+1,p-1(u)。前者在 [uiui+p)上非零。如果u 是在这个半开区间,那么u - ui 是u和这个区间左端之间的距离,区间长度是ui+p - ui, ,而(u - ui) / (ui+p - ui) 是上述距离的比且在0和1之间。见下图。第二项,Ni,p-1(u),在[ui+1, ui+p+1)上非零。如果u 在该区间,那么ui+p+1 - u 是 u 到该区间右端的距离,ui+p+1 - ui+1 是区间长度,而(ui+p+1 - u) / (ui+p+1 - ui+1) 是这两个距离的比且值在0和1之间。因此, Ni,p(u) 是Ni,p-1(u) 和Ni+1,p-1(u)的线性组合,有两个系数,都在 u上是线性的,在0和1之间。

      

     

                       B-spline Basis Functions:Important Properites

    1. 这些基函数有如下性质,许多与贝塞尔基函数的相似

    (1)Ni,p(u) 是一个在第i段的u 上的p 次多项式,u为变量

    (2)非负性

      对所有的 ip 和 uNi,p(u) 是非负的

    (3)局部支撑(Local Support)

        Ni,p(u) 是在[ui,ui+p+1)上的非零多项式 

    (4)在任一区间 [uiui+1),最多有 p+1 个 p 次的基函数非零

       即: Ni-p,p(u), Ni-p+1,p(u), Ni-p+2,p(u), ..., 和 Ni,p(u)

    (5)单位分解(Partition of Unity)

       所有非零的 p 次基函数在区间[ui, ui+1)上的和(sum)是 1, 上一条性质表明Ni-p,p(u), Ni-p+1,p(u), Ni-p+2,p(u), ..., 和 Ni,p(u) 在[uiui+1)上非零这条性质说明这些 p+1 个基函数的累加和1.

    (6)如果节点数是 m+1, 基函数的次数是 p, 而p 次基函数的数目是n+1,,那么m =n + p + 1   (n为分段数)

      这不难理解。 设 Nn,p(u) 是最后一个p 次基函数。它在 [unun+p+1)上非零因为它是最后一个基函数, un+p+1 肯定是最后一个节点um。因此,我们有 un+p+1 = um及 n + p + 1 = m. 总之,给定 m 和 p, 设 n = m - p - 1 则 p 次基函数是N0,p(u), N1,p(u), N2,p(u), ..., 和 Nn,p(u).

    (7)基函数 Ni,p(u) 是p 次多项式的复合曲线,连接点在[uiui+p+1 ) 上的节点处

      例如  N0,2(u), 其在 [0,3)上非零,是由定义在[0,1), [1,2) 和 [2,3)上的三个抛物线构建而成。它们在节点2 和3处连接在一起。.

    (8)在一个有重复度k的节点处,基函数 Ni,p(u) 是 Cp-k 连续的

      因此,增加重复度减小连续性的层次(level),增加次数增加连续性。上述2次基函数 N0,2(u)在节点2 和 3处是 C1(C1为C的一阶导数)连续的,因为它们是简单节点,重复读k=1。

     

    2.多重节点的影响

      多重节点对基函数的计算和一些“计算”性质有很重要的影响 。我们会看到其中两个:

    (1)每个重复度 k 的节点减小最多k-1 基函数的非零定义域

      考虑 Ni,p(u) 和 Ni+1,p(u). 前者在[uiui+p+1)上非零而后者在[ui+1, ui+p+2)上非零如果我们移动 ui+p+2 到 ui+p+1 以至于它们变为一个双重节点。那么, Ni,p(u) 仍然在p+1节点区间上非零;但是,Ni+1,p(u) 非零的节点区间数目减小了一个因为区间[ui+p+1,ui+p+2) 消失了。

      下图显示了5次基函数,其左端点节点和右端点节点有重复度6,而它们之间的所有节点数简单的(图(a))。图(b)是移动 u5 到 u6的结果。那些在u6 结束的基函数在更少的节点区间上非零。然后u4 再然后  u3 被移动到u6, 使得 u6 是重复度4的节点(图(c)和(d))。图(e)显示移动u2 到 u6 的结果,创建了一个重复度5的节点。

       
    (a)   (b)
       
    (c)   (d)
    (e)

    (2)在每个重复度k的内部节点,非零基函数的数目最多p - k + 1, 其中 p 是基函数的次数

      因为移动 ui-1 到 ui 会导致一个在ui-1 结束非零的基函数移到ui结束非零,这样使得在 ui 上非零基函数的数目减小了一个。更准确地,ui的重复度增加1会使得非零基函数的数目减小1.  因为在ui 上最多有p+1 个基函数非零,那么在一个重复度k 的节点上最多有 (p + 1) - k = p - k + 1个非零基函数。在上述图中,因为节点u6 的重复度是1 (简单), 2, 3, 4 和 5, 在 u6 上的非零基函数数目是5, 4, 3, 2 和1.

     

     

    展开全文
  • 贝塞尔基函数用作权重。B-样条基函数也一样;但更复杂。但是它有两条贝塞尔基函数所没有的特性,即(1)定义域被节点细分...实际上,每个B样条基函数在附近一个子区间非零,因此,B-样条基函数相当“局部”。 设U是...
  • 其中,ui称为节点,U称为节点矢量,用Ni,p(u)表示第i个p次(p+1阶)B样条基函数,其定义为 由此可知: (1)Ni,0(u)是一个阶梯函数,它在半开区间u∈[ui,ui+1)外都为零; (2)当p>0时,Ni,p(u)是两个p-1次...
  • B样条基函数求导

    千次阅读 2019-04-20 17:26:15
    clc;clear;close p=3; NodeVector=[0,0,0,0,1,2,4,7,7,7,7]; u=4.5;...[B,D]= MyBaseFun(i, p , u, NodeVector); MyDersBasisFuns( i,u,p,B,D,der,NodeVector ) function [ Ders ] = MyDe...
  • scilab中计算B样条基函数

    千次阅读 2007-12-19 02:28:00
    scilab中计算B样条基函数 =========================================================== 用scilab通过调用脚本计算给定u和i的B样条基函数由给定的u值来求B样条曲线上面的点的公式是:,Pi为控制顶点,U={u0,u1,...
  • 基函数 这里讨论B-spline Basis Functions 设U 是m + 1个非递减数的集合,u0 <= u2 <= u3 <= ... <= um。ui称为节点(knots), 集合U 称为节点向量(knot vector), 半开...
  • B-spline Basis Functions: Computation Examples 1.简单节点(Simple Knots )  假设节点向量是U= { 0, 0.25, 0.5, 0.75, 1 }. 因此,m= 4 和u0= 0,u1= 0.25,u2= 0.5,u3= 0.75及u4= ...0次(degree)基函数很简单...
  • B样条曲线及对应基函数的绘制,针对B样条曲线的四种类型给出图形,对应教材《计算机辅助几何与非均匀有理B样条》,主编 施法中
  • 基于径向基函数B样条的散乱数据拟合方法,韩旭里,庄陈坚,本文针对散乱数据的曲面拟合问题,提出了一种径向基函数与B样条插值结合使用的曲面拟合方法.通过分片径向基函数插值,从三维散乱�
  • 基于非均匀B样条基函数递推式的程序实现,用户可以自己在屏幕上左键选择控制点,从而画出B样条函数,并且可以右键选中控制点并进行拖动,实时看到曲线变化。均匀B样条也可以画出,亲测有效。
  • B样条基函数的定义: 沿着下图所示的三角形进行计算: 这是关于B样条基函数的第一个重要的三角形,可以确定基函数的非零节点区间: B样条基函数Ni_j(u)的非零节点区间为[u(i),u(i+j+1)) ,0=<j<=k ...
  • B-样条基函数:定义B-spline Basis Functions: Definition 上一页动机 回目录 下一页重要性质 贝塞尔基函数用作权重。B-样条基函数也一样;但更复杂。但是它有两条贝塞尔基...实际上,每个B样条基函数在附近一个子区
  • B样条曲线

    万次阅读 2015-11-25 09:38:19
    B样条曲线的定义  B样条曲线分为均匀B样条曲线和非均匀B样条曲线,这里只讨论均匀B样条曲线。给定n+1个控制点Pi(i=0,1,2,...,n)的坐标Pi,n次B样条曲线段的参数表达式为 ...式中为n次B样条基函数,其形式为   其中
  • 前面两篇文章分享的是比较实用的贝塞尔曲线,下面我们重点介绍的是B样条曲线的定义、性质及编程...3. 由B样条基函数代替bezier曲线中的Bernstein基函数,即B样条曲线。由此可知:• 代码实现 // 确定参数u所在的节点...
  • 基于偶次B样条基函数的一般构造方法,通过时域的细分划重构,拓展和构造了均匀分划的六次B样条函数及其基函数,并在此基础上,推导了结构动力响应计算中的位移元子区间法嵌套方法的递推格式,分析了该递推格式的稳定性,...
  • B样条曲线曲面介绍

    2020-07-02 20:50:03
    B样条基函数 B样条基函数的定义 由de Boor和Cox分别导出B样条基函数的递推定义,B样条基函数可以表示为 Ni,0(u)={1,ui⩽u<ui+10,其他Ni,p(u)=u−uiui+p−uiNi,p−1(u)+ui+p+1−uui+p+1−ui+1Ni+1,p−1(u),p>0 ...
  • B样条函数学习笔记

    2010-11-24 17:30:00
    B样条函数 其中N是基函数,使用递推关系求得。 注意对于n个控制点的B样条(P0~Pn-1),其参数空间为(S0~Sn+k)。并且,在参数空间中(S0~Sk)、(Sn~Sn+k)为重节点。简言之,对于n个控制点的k次B样条曲线,...
  • B样条曲线反算.zip

    2019-07-25 10:35:15
    给定数据点,反算节点矢量和控制点,构造三次B样条插值曲线,使得曲线通过数据点。理论参考《计算机辅助几何设计与非均匀有理B样条》254页-262页。程序语言为matlab,main为主程序,Bbasis为计算B样条基函数程序。

空空如也

1 2 3 4 5 6
收藏数 107
精华内容 42
关键字:

b样条基函数