精华内容
下载资源
问答
  • B样条基函数

    千次阅读 2013-04-24 01:58:28
    l B样条基函数及其导数的计算BSplCLib::EvalBsplineBasis(); l 节点插入BSplCLib::InsertKnot(); l 节点去除BSplCLib::RemoveKnot(); l 升阶BSplCLib::IncreaseDegree(); l 降阶; 结合...
    
    

    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()函数的源程序如下所示:

     

    展开全文
  • 1. B样条基函数递推公式 根据Cox–de Boor递推公式,B样条基函数定义如下. 当基函数的次数k为零时(k=0): 当基函数的次数k不为零时: 其中u为参数,i为节点序号,k为次数,节点向量,n为基函数个数。 2....

    1. B样条基函数递推公式

    根据Cox–de Boor递推公式,B样条基函数定义如下.

    当基函数的次数k为零时(k=0):

                                                    \large N_{i,k}(u)=\left\{\begin{matrix} 1 ,if u_{i}\leq u< u_{i+1}\\ 0, otherwise \end{matrix}\right.

    当基函数的次数k不为零时:

                                         \large N_{i,k}=\frac{u-u_{i}}{u_{i+k}-u_{i}}N_{i,k-1}(u)+\frac{u_{i+k+1}-u}{u_{i+k+1}-u_{i+1}}N_{i+1,k-1}(u)

    其中u为参数,i为节点序号,k为次数,节点向量U=\left \{ u_{1},u_{2},...,u_{n+k+1} \right \},n为基函数个数。

    2. Matlab计算B样条基函数代码

    clear,clc,close all;
    set(0,'defaultfigurecolor','w')
    % 计算节点区间内非零基函数的值
    k = 2; %k次多项式,根据需求改变
    U = [0 0 0 1 2 3 4 4 5 5 5]; %节点向量
    n = length(U) - k -1;
    i = 1; %Ni,k,根据需求改变
    
    B = [];
    for j = 0:0.001:5
        Bj = getBaseFun(i,k,j,U);
        B = [B;Bj];
    end
    plot(0:0.001:5,B,'linewidth',3);
    % text(1,0.5,'N1,1');
    xticks(0:1:5);yticks(0:1);
    hold on
    
    function Nik_u = getBaseFun(i,k,u,U)
    % 计算基函数Ni_k(u),
    %u参数,i节点序号,k基函数次数,U节点矢量
    if (k == 0) %0次B样条
        if u>=U(i) && u<U(i+1)
            Nik_u = 1;        
        else
            Nik_u = 0;
        end
    else
        L1 = U(i+k)-U(i);%支撑区间的长度
        L2 = U(i+k+1)-U(i+1);
        if L1 == 0.0 %规定0/0=0
            alpha = 0;
        else
            alpha = (u-U(i))/L1;
        end
        if L2 == 0.0
            beta = 0;
        else
            beta = (U(i+k+1)-u)/L2;
        end
        Nik_u = alpha*getBaseFun(i,k-1,u,U)+beta*getBaseFun(i+1,k-1,u,U);
    end
    end

    3.计算结果举例

     

    展开全文
  • 在均匀分划的B样条展开定理...应用四次B样条基函数计算梁的弯曲,表明了偶次B样条展开方式的合理性,同时也表明了该基函数有较佳的逼近性能和适应性。研究成果属于逼近理论的基础部分,可以应用于需要逼近计算的诸多领域。
  • 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







    展开全文
  • 偶然看到Python上有B样条基函数,心血来潮用Matlab实现一遍 Cox-de Boor递归公式: 其中这个递推公式分为0次和更高次,其中ti表示节点,对于k次的样条,至少需要k+1个系数,所以n≥k+1。 Matlab实现B样条基函数为: ...

    偶然看到Python上有B样条基函数,心血来潮用Matlab实现一遍
    Cox-de Boor递归公式:
    在这里插入图片描述其中这个递推公式分为0次和更高次,其中ti表示节点,对于k次的样条,至少需要k+1个系数,所以n≥k+1。
    Matlab实现B样条基函数为:

    function result =Base(x, k, i, t)
    if k == 0
        if t(i) <= x && x < t(i+1)
            result = 1;
        else
            result=0;
        end
    end
    
    if t(i+k) == t(i)
        c1 = 0;
    else
        c1 = (x - t(i))/(t(i+k) - t(i)) * Base(x, k-1, i, t);
    end
    
    if t(i+k+1) == t(i+1)
        c2 = 0;
    else
        c2 = (t(i+k+1) - x)/(t(i+k+1) - t(i+1)) * Base(x, k-1, i+1, t);
    result = c1 + c2;
    
    end
    
    展开全文
  • 利用openCV画出B样条基函数的曲线

    千次阅读 2016-03-26 16:32:46
    最近要做双三次B样条插值(bicubic),从基础的三次B样条开始看起,但是网上基本没有介绍B样条基函数的文章,所以在这里写下来,方便他人参考。 对于三次均匀的B样条曲线,其递推公式如下: 一般的B样条用...
  • B-spline Basis Functions:Definition 贝塞尔基函数用作权重。B-样条基函数也一样;...实际上,每个B样条基函数在附近一个子区间非零,因此,B-样条基函数相当“局部”。  设U是m+ 1个非递减数的集...
  • 贝塞尔基函数用作权重。B-样条基函数也一样;但更复杂。但是它有两条贝塞尔基函数所没有的特性,即(1)定义域被节点细分...实际上,每个B样条基函数在附近一个子区间非零,因此,B-样条基函数相当“局部”。 设U是...
  • B样条基函数的递推定义: 根据B样条的递推定义有,在任意给定的节点区间内[ui,ui+1)内,最多由p+1个基函数不为零,它们分别为Ni-p,p …Ni,p 计算节点区间内所有不为零的基函数分为两步: 1、计算节点区间下标 2、...
  • 使用B样条基函数离散二维Poisson方程的FE代码。 设置 递归地将此项目克隆到您的计算机上: git clone --recursive https://github.com/hmhuang0501/B-Spline-FEM-Computation.git 使用Cmake生成/生成与您的首选...
  • 其中,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-spline曲线基函数计算Matlab程序

    千次阅读 2019-12-30 18:55:35
    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样条基函数的一般构造方法,通过时域的细分划重构,拓展和构造了均匀分划的六次B样条函数及其基函数,并在此基础上,推导了结构动力响应计算中的位移元子区间法嵌套方法的递推格式,分析了该递推格式的稳定性,...
  • 重构细分划了时域,细分划拓展了0次B样条B0i的定义,对高次B样条的递推式进行了拓展,获得了细分划拓展的均匀分划的分段式五次B样条函数,因而拓展了展开定理,构造了五次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 ...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 162
精华内容 64
关键字:

b样条基函数