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

    2019-09-16 11:40:40
    在数学的子学科数值分析里...B-样条是贝兹(贝塞尔)曲线的一种一般化,可以进一步推广为非均匀有理B样条(NURBS),使得我们能给更多一般的几何体建造精确的模型。 常数B样条 常数B样条是最简单的样条。只定义在一...

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

    常数B样条

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

    线性B样条

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

    三次B样条

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

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


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

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

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

    关于插值与样条的介绍请看:http://www.cnblogs.com/WhyEngine/p/4020294.html

    核心代码:

     1 void    YcBSpline::BuildWeights()
     2 {
     3     ClearWeights();
     4 
     5     for (Yuint i = 0; i < 4; i++)
     6     {
     7         m_splineWeights[i] = (Yreal*)malloc((m_subD)*sizeof(Yreal));
     8         m_tangentWeights[i] = (Yreal*)malloc((m_subD)*sizeof(Yreal));
     9     }
    10 
    11     Yreal u, u_2, u_3;
    12     for (Yuint i = 0; i < m_subD; i++)
    13     {
    14         u = (float)i / m_subD;
    15         u_2 = u * u;
    16         u_3 = u_2 * u;
    17 
    18         // 参见"游戏编程精粹1"P331
    19         m_splineWeights[0][i] = (-1.0f*u_3 + 3.0f*u_2 - 3.0f*u + 1.0f)/6.0f;
    20         m_splineWeights[1][i] = ( 3.0f*u_3 - 6.0f*u_2 + 0.0f*u + 4.0f)/6.0f;
    21         m_splineWeights[2][i] = (-3.0f*u_3 + 3.0f*u_2 + 3.0f*u + 1.0f)/6.0f;
    22         m_splineWeights[3][i] = ( 1.0f*u_3 + 0.0f*u_2 + 0.0f*u + 0.0f)/6.0f;
    23 
    24         // 参见"游戏编程精粹1"P333
    25         m_tangentWeights[0][i] = (-1.0f*u_2 + 2.0f*u - 1.0f)*0.5f;
    26         m_tangentWeights[1][i] = ( 3.0f*u_2 - 4.0f*u + 0.0f)*0.5f;
    27         m_tangentWeights[2][i] = (-3.0f*u_2 + 2.0f*u + 1.0f)*0.5f;
    28         m_tangentWeights[3][i] = ( 1.0f*u_2 + 0.0f*u + 0.0f)*0.5f;
    29     }
    30 }

    切图:

          相关软件的下载地址为:http://files.cnblogs.com/WhyEngine/TestSpline.zip

          最后要注意的是:B样条曲线不会经过其控制点。靠,我一直以为是经过的。因为B样条是我唯一在项目中使用过的。我用它来平滑游戏中角色刀光所划出的曲面,不过这种细节也没必要再去修改了。

     

    转载于:https://my.oschina.net/abcijkxyz/blog/722787

    展开全文
  • 半结构化B样条曲线,用于混合两个B样条曲线曲面
  • 均匀B样条和准均匀B样条

    千次阅读 多人点赞 2019-03-20 11:14:06
    均匀B样条拟合和准均匀B样条拟合 在CAGD中最为重要的无非就是B样条曲线,B样条在保留Bezier曲线优点的同时,克服了其由于整体表示带来不具有局部性质的缺点,以及解决了在描述复杂形状时带来的连接问题。B样条曲线...

    均匀B样条拟合和准均匀B样条拟合

    在CAGD中最为重要的无非就是B样条曲线,B样条在保留Bezier曲线优点的同时,克服了其由于整体表示带来不具有局部性质的缺点,以及解决了在描述复杂形状时带来的连接问题。B样条曲线按照节点矢量中节点的分布情况不同,可划分为如下4种类型:(a)均匀B样条曲线;
    (b)准均匀B样条曲线;
    ©分段Bezier曲线;
    (d)一般非均匀B样条曲线。

    均匀B样条

    (1) 对于均匀B样条曲线,其方程的矩阵表达形式为:

    在这里插入图片描述
    其中系数Mk(k=1,2,3)分别为:
    在这里插入图片描述

    使用系数矩阵能大大的简化参数曲线基函数的计算。带入不同的阶数的矩阵即可得到相应的次数的均匀B样条曲线。关于系数矩阵的推导,更为直观的是一种基于几何特性的三次均匀B样条曲线构造描述,该方法更为直观的描述了三次均匀B样条曲线构造的原理和过程,给出了不同曲线段情况下曲线特征构造和插值构造的相关公式。
    在这里插入图片描述
    图(a)是常见的三次均匀B样条曲线段的几何表示方法,图(b)是通过分析a所表达的曲线的性质得到的与图a等价的几何表示。在图b中,将定义该线段的4个特征点所构成的特征多边形的3条边均3等分,Q1-Q6即为对应的等分点,连接Q2Q3、Q4Q5则此连线的中点分别为曲线段的起点Pi(0)和终点Pi(1),且曲线段首末端点切矢分别为Q2Q3、Q4Q5。由特征点Vi、Vi+1、Vi+2、Vi+3定义的一段三次均匀B样条曲线段等价于由点Pi(0)、Q3、Q4、Pi(1)所定义的一段三次Bezier曲线。
    在这里插入图片描述

    由上式可以看出,只要得到对应的Bezier点,即可方便的得出各段曲线的数学表达式。另一种数学方式可以将系数基矩阵M显式表达即为:
    在这里插入图片描述
    其中mij可以依照下式计算得出:
    在这里插入图片描述
    例如在k=4时,求得三次均匀B样条基的系数矩阵为:
    在这里插入图片描述

    准均匀B样条曲线拟合

    对于准均匀B样条,其原理也是利用特征控制点对应的Bezier曲线分段,基于对推定义和四重节点端点条件,准均匀B样条曲线矩阵形式数学表达式课变换如下形式:
    在这里插入图片描述
    由式(22)可以看出,三次准均匀B样条曲线的求取关键是基的系数矩阵M的求取,相较于均匀B样条曲线,区别在于首末两段Bezier曲线。下面进行Mk的推导:由给定的控制点可知曲线段数n>6,则对于前两段和末尾两段曲线均存在四重节点。对于中间段的系数矩阵MK与三次均匀B样条的基系数矩阵相同即为
    在这里插入图片描述
    该矩阵也可以通过几何特性得到,结果一致,如下图
    在这里插入图片描述
    对于矩阵的推导在这里就不赘述了,我们只需要了解是怎么推导出来的,并且了解如何使用即可,准均匀B样条曲线与均匀B样条曲线所存在的区别,只要在与首末攻4段曲线,当曲线段数大于6时,要注意基的系数矩阵的使用,下面给出准均匀B样条基的系数矩阵:
    在这里插入图片描述在这里插入图片描述
    将上述矩阵带入即可前两段曲线的表达式,同理末尾两端曲线的基的系数矩阵为:

    在这里插入图片描述

    利用Matlab对上述矩阵进行验证,已知在AUTOCAD电子图板依据几何作图的方式16个特征控制点所得的三次准均匀B样条曲线如下图所示:
    在这里插入图片描述
    在这里插入图片描述
    为了验证算法准确性,取得点较为简单,旨在验证数值方法和几何作图法做准均匀B样条。

    对比分析可知,所得结果一致。通过不同的方式能够的到相同的结果,这正是B样条曲线令人着迷的地方,B样条曲线的产生与发展是工程实际与数学理论高度写作融合所得的结晶。
    一下代码为上述过程的实现,代码较为粗糙,目的为了验证,未作修改由18个控制点求B样条曲线

    clear;
    flag=1;
    for t=0:0.05:1;
    % t=1;
    hold on
    d0=[0 0 ];
    d1=[10 10];
    d2=[20 10];
    d3=[30 0];
    d4=[40 0];d5=[50 10];d6=[60 10];d7=[70 0];d8=[80 0];d9=[90 10];
    d10=[100 -10];d11=[90 -20];d12=[80 -20];d13=[70 -10];d14=[60 -10];
    d15=[50 -20];d16=[40 -20];d17=[30 -10];
    m=[0 10 20 30 40 50 60 70 80 90 100 90 80 70 60 50 40 30];
    n=[0 10 10 0 0 10 10 0 0 10 -10 -20 -20 -10 -10 -20 -20 -10];
    D=[d0;d1;d2;d3];
    D2=[d1;d2;d3;d4];
    D3=[d2;d3;d4;d5];
    D4=[d3;d4;d5;d6];
    D5=[d4;d5;d6;d7];
    D6=[d5;d6;d7;d8];
    D7=[d6;d7;d8;d9];
    D8=[d7;d8;d9;d10];
    D9=[d8;d9;d10;d11];
    D10=[d9;d10;d11;d12];
    D11=[d10;d11;d12;d13];
    D12=[d11;d12;d13;d14];
    D13=[d12;d13;d14;d15];
    D14=[d13;d14;d15;d16];
    D15=[d14;d15;d16;d17];
    M1=[-1,7/4,-11/12,1/6;3,-9/2,3/2,0;-3,3,0,0;1,0,0,0];
    M2=[-1/4,7/12,-1/2,1/6;3/4,-5/4,1/2,0;-3/4,1/4,1/2,0;1/4,7/12,1/6,0];
    M3=[-1/6,1/2,-1/2,1/6;1/2,-1,1/2,0;-1/2,0,1/2,0;1/6,2/3,1/6,0];
    M4=[-1/6,1/2,-1/2,1/6;1/2,-1,1/2,0;-1/2,0,1/2,0;1/6,2/3,1/6,0];
    M5=[-1/6,1/2,-1/2,1/6;1/2,-1,1/2,0;-1/2,0,1/2,0;1/6,2/3,1/6,0];
    M6=[-1/6 1/2 -7/12 1/4;1/2 -1 1/2 0;-1/2 0 1/2 0;1/6 2/3 1/6 0];
    M7=[-1/6 11/12 -7/4 1;1/2 -5/4 3/4 0;-1/2 -1/4 3/4 0;1/6 7/12 1/4 0];
    pt1=[t.^3,t.^2,t,1]*M1*D;
    pt2=[t.^3,t.^2,t,1]*M2*D2;
    pt3=[t.^3,t.^2,t,1]*M3*D3;
    pt4=[t.^3,t.^2,t,1]*M4*D4;
    pt5=[t.^3,t.^2,t,1]*M5*D5;
    pt6=[t.^3,t.^2,t,1]*M5*D6;
    pt7=[t.^3,t.^2,t,1]*M5*D7;
    pt8=[t.^3,t.^2,t,1]*M5*D8;
    pt9=[t.^3,t.^2,t,1]*M5*D9;
    pt10=[t.^3,t.^2,t,1]*M5*D10;
    pt11=[t.^3,t.^2,t,1]*M5*D11;
    pt12=[t.^3,t.^2,t,1]*M5*D12;
    pt13=[t.^3,t.^2,t,1]*M5*D13;
    pt14=[t.^3,t.^2,t,1]*M6*D14;
    pt15=[t.^3,t.^2,t,1]*M7*D15;
    px(flag)=pt1(1);py(flag)=pt1(2);
    px2(flag)=pt2(1);py2(flag)=pt2(2);
    px3(flag)=pt3(1);py3(flag)=pt3(2);
    px4(flag)=pt4(1);py4(flag)=pt4(2);
    px5(flag)=pt5(1);py5(flag)=pt5(2);
    px6(flag)=pt6(1);py6(flag)=pt6(2);
    px7(flag)=pt7(1);py7(flag)=pt7(2);
    px8(flag)=pt8(1);py8(flag)=pt8(2);
    px9(flag)=pt9(1);py9(flag)=pt9(2);
    px10(flag)=pt10(1);py10(flag)=pt10(2);
    px11(flag)=pt11(1);py11(flag)=pt11(2);
    px12(flag)=pt12(1);py12(flag)=pt12(2);
    px13(flag)=pt13(1);py13(flag)=pt13(2);
    px14(flag)=pt14(1);py14(flag)=pt14(2);
    px15(flag)=pt15(1);py15(flag)=pt15(2);
    flag=flag+1;
    x2=px2;y2=py2;
    x3=px3;y3=py3;
    x4=px4;y4=py4;
    x5=px5;y5=py5;
    x6=px6;y6=py6;
    x7=px7;y7=py7;
    x8=px8;y8=py8;
    x9=px9;y9=py9;
    x10=px10;y10=py10;
    x11=px11;y11=py11;
    x12=px12;y12=py12;
    x13=px13;y13=py13;
    x14=px14;y14=py14;
    x15=px15;y15=py15;
    x=px;y=py;
    plot (x,y,'r.');
    plot (x2,y2,'r.');
    plot (x3,y3,'r.');
    plot (x4,y4,'r.');
    plot (x5,y5,'r.');
    plot (x6,y6,'r.');
    plot (x7,y7,'r.');
    plot (x8,y8,'r.');
    plot (x9,y9,'r.');
    plot (x10,y10,'r.');
    plot (x11,y11,'r.');
    plot (x12,y12,'r.');
    plot (x13,y13,'r.');
    plot (x14,y14,'r.');
    plot (x15,y15,'r.');
    plot (m,n,'b--');
    axis equal;
    xlabel('X(mm)');
    ylabel('Y(mm)');
    end
    

    由于笔者刚开始接触Matlab时,还不熟练,又因点数较少,因此用枚举法写的程序哈哈哈哈哈,见笑了,当然后面已经有了很大改善。
    例如由插值点反求控制点如下:
    在这里插入图片描述
    红色点为插值点,由曲线上的插值点,反求出控制点,与上述控制点求取插值点结果重合,表明正确。
    具体知识理论以及代码,后续更新。

    展开全文
  • B-样条是贝兹曲线的一种一般化,可以进一步推广为非均匀有理B样.B样条就相当于一个函数, 这个函数在系数不同时就可以变化成各种曲线形状.。在实际生产中,我们测量得到的是一个个离散的点,那么我们要知道相邻两个...

    在数学的子学科数值分析里,B-样条是样条曲线一种特殊的表示形式。它是B-样条基曲线的线性组合。B-样条是贝兹曲线的一种一般化,可以进一步推广为非均匀有理B样.

    B样条就相当于一个函数, 这个函数在系数不同时就可以变化成各种曲线形状.。在实际生产中,我们测量得到的是一个个离散的点,那么我们要知道相邻两个点之间的值就.

    B样条方法是在保留Bezier方法的优点,同时克服其由于整体表示带来不具有局部性质的缺点,及解决在描述复杂形状时带来的连接问题下提出来的。常用的cad设计中之所.

    样条一词来源于工程绘图人员为了将一些指定点连接成一条光顺曲线所使用的工具,即富有弹性的细木条或薄钢条。由这样的样条形成的曲线在连接点处具有连续的坡度与.

    怎么在matlab中产生一个B样条函数呀?spmak可以吗?高手指点下,用什么。

    可以用S=spapi(k,x,y) S为样条插值对象,k为B样条阶次,一般选择4和5x0=[0 0.4 1 2 pi];y0=sin(x0);ezplot('sin(t)',[0,pi]);hold onsp1=csapi(x0,y0);fnplt(sp1,'r--'); %三次分段.

    UG UG三维制图中什么是B曲面?

    B样条曲面是从B样条曲线拓展而知来的。给定了(m+1)(n+1)个空间点列 bi,j (i=0,1,2,…,n; j=0,1,2,…,m)后,就可道以定义m*n次 B样条曲面片。公式打不上你去.

    请问matlab中实现B样条滤波的是那个函数?

    spline function 一类分段(片)光滑、并且在各段交接处也有一定光滑性的函数。简称样条。样条一词来源于工程绘图人员为了将一些指定点连接成一条光顺曲线所使用的.

    B-样条是样条曲线一种特殊的表示形式。它是B-样条基曲线的线性组合。B-样条是贝兹曲线的一种一般化,可以进一步推广为非均匀有理B样条(NURBS),使得我们能给.

    画b样条曲线 1.执行“绘图/绘图网格/在屏幕上显示网格(注意数据设置)/确定”命令,使页面上显示绘图网格;2.用“绘图”工具栏上的“箭头”画坐标轴,画时按住Shift.

    Bezier函数是一个数学公式,你可以根据公式求值;Bezier样条曲线一般是说的曲线,应用在图形程序中,一种是可拖动式图形操作,自己根据视觉效果生成和调整曲线样.

    最近听说很多地方用的样条曲线都是B样条曲线,看书也没看懂B样条是怎么。

    它们的区别就相当于多项式插值和牛顿插值的区别;本质上是一种东西,只是形式不同而已,这使得B样条更容易处理

    如何求解B样条基函数

    如下: function fit_tulun %多项式拟合方式x=linspace(0,4*pi,6); y_jingque=sin(x); %. x_poly_fit=linspace(0,4*pi,100); y_poly_fit=polyval(p_poly,x_poly_fit); %三次样条拟合.

    根据已知的3次非均匀有理B样条(NURBS)曲线型值点,采用效果较好的积累弦长参数化方法构造节点矢量,从而得到B样条基;利用带权控制顶点的矩阵计算出全部控.

    有哪位仁兄帮忙解答一下吧?不胜感激!!

    在CAD/CAM中,常采用Bezier曲线曲面,这样便于理解曲线/曲面。但采用Bezier形. 有理Besier曲线曲面和有理B样条曲线曲面继承了Bezier曲线曲面和B样条曲线曲面的.

    function B_Spline_3u(P_x,P_y)%3次均匀B样条差值函数%P_x:控制点的x坐。

    P_x,P_y有先定义吗?参数都没有的话函数当然没法用了。

    基于B样条曲线是分段的Bézier曲线段的集合这一数学特性,通过剖析三次均匀B样条曲线的数学表达及其几何意义,由曲线的几何特性给出了各曲线段Bézier点的几何表示..

    splines n. 曲线;样条曲线;[数] 样条函数(spline的复数形式);样条线v. 刻键槽于;用花键接合(spline的第三人称单数)bezier n. 贝齐尔;贝塞尔曲线

    请路过的指点一下.

    所谓样条曲线是指给定一组控制点而得到一条曲线,曲线的大致形状由这些点予以控制.一般可分为插值样条和逼近样条两种,插值样条通常用于数字化绘图或动画的设计,.

    去这里看看!!http://wenku.baidu.com/view/dc4d1c40a8956bec0975e3b2.htmlMATLAB中样条函数命令 B样条函数splst 显示生成B样条函数的M文件spmak 生成B样条函数.

    关于AutoCAD中的样条曲线%D%A%D%A样条曲线是经过一系列给定点的光滑曲线。最初,样条曲线都是借助于物理样条得到的,放样员把富有弹性的细木条(或有机玻.

    展开全文
  • B样条曲线逼近

    2018-04-19 17:28:50
    B样条曲线逼近代码,是matlab代码,B样条曲线逼近代码,是matlab代码,B样条曲线逼近代码,是matlab代码,B样条曲线逼近代码,是matlab代码,
  • 三次B样条曲线拟合算法

    万次阅读 多人点赞 2017-01-17 22:10:28
    三次B样条曲线方程B样条曲线分为近似拟合和插值拟合,所谓近似拟合就是不过特征点,而插值拟合就是通过特征点,但是插值拟合需要经过反算得到控制点再拟合出过特征点的B样条曲线方程。这里会一次介绍两种拟合算法。...

    1 三次B样条曲线方程

    B样条曲线分为近似拟合和插值拟合,所谓近似拟合就是不过特征点,而插值拟合就是通过特征点,但是插值拟合需要经过反算得到控制点再拟合出过特征点的B样条曲线方程。这里会一次介绍两种拟合算法。首先介绍B样条的曲线方程。
    B样条曲线的总方程为:P(t)=∑i=0nPiFi,k(t)P(t)=\sum_{i=0}^{n} P_{i}F_{i,k}(t)P(t)=i=0nPiFi,k(t) (1)
    其中PiP_iPi是控制曲线的特征点,Fi,k(u)F_{i,k}(u)Fi,k(u)则是K阶B样条基函数。
    1.1 三次B样条曲线方程中基函数为:
    Fi,k(t)=1k!∑m=0k−i(−1)m(mk+1)(t+k−m−j)kF_{i,k}(t)=\frac{1}{k!}\sum_{m=0}^{k-i}(-1)^{m}\binom{m}{k+1}(t+k-m-j)^kFi,k(t)=k!1m=0ki(1)m(k+1m)(t+kmj)k (2)
    其中(mk+1)\binom{m}{k+1}(k+1m)表示阶乘,化成看的明白的式子就是:

    这里写图片描述
    将图片上的基函数代入到方程(1)中,就是:
    P(t)=P0∗F0,3(t)+P1∗F1,3(t)+P2∗F2,3(t)+P3∗F3,3(t)P(t)= P_0*F_{0,3}(t)+P_1*F_{1,3}(t)+P_2*F_{2,3}(t)+P_3*F_{3,3}(t)P(t)=P0F0,3(t)+P1F1,3(t)+P2F2,3(t)+P3F3,3(t) (3)
    方程(3)就是三次B样条曲线方程。


    2019-04-18 更新

    有小伙伴提到上式(2)的j是什么意思,其实j就是控制点的索引值。这里我把书上的公式摘抄下来,可能看起来更为清晰。
    参考书籍:《计算机图形学 第3版》何援军 第13章
    三次B样条曲线计算
    F0,3(t)=13!∑j=03(−1)jC4j)(t+3−0−j)3F_{0,3}(t)=\frac{1}{3!}\sum_{j=0}^{3}(-1)^{j}C^{j}_{4})(t+3-0-j)^3F0,3(t)=3!1j=03(1)jC4j)(t+30j)3

    =16[(−1)0C40(t+3)3+(−1)1C41(t+2)3+(−1)2C42(t+1)3+(−1)3C43t3]=\frac{1}{6}[(-1)^{0}C^{0}_{4}(t+3)^{3}+(-1)^{1}C^{1}_{4}(t+2)^{3}+(-1)^{2} C^{2}_{4}(t+1)^{3}+(-1)^{3}C^{3}_{4}t^{3}]=61[(1)0C40(t+3)3+(1)1C41(t+2)3+(1)2C42(t+1)3+(1)3C43t3]

    =16(−t3+3t2−3t+1)=16(1−t)3=\frac{1}{6}(-t^{3}+3t^{2}-3t+1)=\frac{1}{6}(1-t)^{3}=61(t3+3t23t+1)=61(1t)3

    F1,3(t)=13!∑j=02(−1)jC4j)(t+3−1−j)3F_{1,3}(t)=\frac{1}{3!}\sum_{j=0}^{2}(-1)^{j}C^{j}_{4})(t+3-1-j)^3F1,3(t)=3!1j=02(1)jC4j)(t+31j)3

    =16[(−1)0C40(t+2)3+(−1)1C41(t+1)3+(−1)2C42t3]=\frac{1}{6}[(-1)^{0}C^{0}_{4}(t+2)^{3}+(-1)^{1}C^{1}_{4}(t+1)^{3}+(-1)^{2} C^{2}_{4}t^{3}]=61[(1)0C40(t+2)3+(1)1C41(t+1)3+(1)2C42t3]

    =16(3t3−6t2+4)=\frac{1}{6}(3t^{3}-6t^{2}+4)=61(3t36t2+4)

    F2,3(t)=13!∑j=01(−1)jC4j)(t+3−2−j)3F_{2,3}(t)=\frac{1}{3!}\sum_{j=0}^{1}(-1)^{j}C^{j}_{4})(t+3-2-j)^3F2,3(t)=3!1j=01(1)jC4j)(t+32j)3

    =16[(−1)0C40(t+1)3+(−1)1C41t3=\frac{1}{6}[(-1)^{0}C^{0}_{4}(t+1)^{3}+(-1)^{1}C^{1}_{4}t^{3}=61[(1)0C40(t+1)3+(1)1C41t3

    =16(−3t3+3t2+3t+1)=\frac{1}{6}(-3t^{3}+3t^{2}+3t+1)=61(3t3+3t2+3t+1)

    F3,3(t)=13!∑j=00(−1)jC4j)(t+3−3−j)3F_{3,3}(t)=\frac{1}{3!}\sum_{j=0}^{0}(-1)^{j}C^{j}_{4})(t+3-3-j)^3F3,3(t)=3!1j=00(1)jC4j)(t+33j)3

    =16[(−1)0C40t3=\frac{1}{6}[(-1)^{0}C^{0}_{4}t^{3}=61[(1)0C40t3

    =16t3=\frac{1}{6}t^{3}=61t3


    2 三次B样条曲线近似拟合

    近似拟合很简单。不需要求控制点,求得Fi,k(t)F_{i,k}(t)Fi,k(t),由上述方程(3),代入P0,P1,P2,P3P_0,P_1,P_2,P_3P0,P1,P2,P3就可以得到由这四个点近似拟合的一段三次B样条曲线,起始点在P0P_0P0,终点在P1P_1P1,对于闭合轮廓,最后一段可以取前两点做辅助,拟合实验结果我最后一块给出。这种近似拟合曲线光滑,但是最大不足就是不过特征点,也就是不过PiP_iPi,需要过点需要反求控制点再拟合。

    3 三次B样条插值拟合

    插值拟合较为复杂。其实也不算是很复杂,找资料过程和理解过程是一个复杂的过程。不过有了前面大神做工作,我们只是借用别人的成果写代码就好了。我给大家看一篇论文,大家可以百度或者去知网搜索,闭合 B 样条曲线控制点的快速求解算法及应用。文章讲解了反求控制点的具体步骤,写的非常详细,基本上贴近代码的那种。大家可以根据这篇论文反求控制点,拟合出来的三次B样条曲线是经过PiP_iPi的。代码就不放了,很多,可以根据我给的那篇论文直接编写相应代码,有问题可以私信我,知无不言。
    ##4 拟合结果
    这里写图片描述 原轮廓
    这里写图片描述 近似拟合轮廓。可以看到没过黑色特征点,只是近似拟合
    这里写图片描述 插值拟。可以看到曲线经过黑色特征点,不过有一些不足之处。

    ##5 总结
    三次B样条曲线拟合轮廓效果还是可以,较之Beizer(可以参考我博客三次Beizer曲线拟合算法),B样条将一些细节描述的很好,很多细节之处都贴近原轮廓,但是有一些不足之处,可以看到对直线拟合效果不是很好。两篇博客都是关于闭合轮廓的拟合,对于非闭合或者只是一段曲线拟合,还有一种曲线是很好的,《数值分析》提到过,叫三次样条插值拟合,拟合效果很好,我做过拟合一元三次方程曲线,拟合效果跟原曲线非常贴近,不过过程中需要用到追赶法,而追赶法需要满足一个条件,对于闭合曲线三次样条插值是不满足这个条件的,所以我没去深研究,大家可以去试一试。谢谢大家!

    -------------------------------------------------2018-10-30--------------------------------------------
    真的很感谢大家的支持,这一年都比较忙,找实习and找工作,而且这个东西是研一上学期搞的,现在看都毫无印象,对自己说一句:牛逼。我把代码放在网盘了(能运行,但现在没效果,大家可以检查下,之前是OK的),本来想上传到CSDN,好像要C币,而且要审核,太墨迹了。
    链接: https://pan.baidu.com/s/1mSQMmvL71gwEAqgiT6O9Gg 提取码: xv5f

    展开全文
  • B样条曲线实现

    2019-09-26 10:12:19
    利用VB实现B样条曲线,实现步骤:首先判断u所有范围,然后计算该范围内所有非零的基函数Nip,最后计算出B样条曲线上点的坐标
  • B样条曲线 在保留Bézie优点的同时,克服了他的弱点:采用样条——分段连续多项式 例如,现在有n+1个点,在每两点之间构造一条多项式,则有n个小区间。每个小区间构造一条三次多项式,变成了n段的三次多项式拼接在...
  • b样条曲线拟合

    2019-03-31 15:53:54
    b样条曲线拟合,用着很好用
  • B样条 B样条数学模型 B样条曲线 B样条曲面 B样条模型特性 节点向量 B样条 B样条(B-Spline)曲线及曲面在计算机辅助设计应用上较Bezier及Cubic曲线广泛,因B样条曲线是包含Bezier曲线的通用数学表示法...
  • B样条曲线拟合

    2019-01-15 12:07:57
    B样条曲线拟合。实现简单高效,项目中实际使用的代码。
  • 此程序在MFC下编程而成,可以在界面用光标点上给定点,以此点形成B样条曲线,或是B样条反算曲线,或是Bezier曲线。过往找了好多代码,都不能达到要求,这个是较好的了,只是算法的原理还没有放上来,下次会放的,...
  • B样条曲线(B-spline Curves)

    万次阅读 多人点赞 2018-07-27 16:34:38
    关键字:NURBS,基函数,控制点,节点, ... 看了网上很多相关资料才得以下笔,资料太多,这里就不一一列举了,感谢各位大佬的资料 ...写了个B样条曲线计算的完成程序,包括绘图,https://download.c...
  • B样条曲线

    万次阅读 2015-11-25 09:38:19
     B样条曲线分为均匀B样条曲线和非均匀B样条曲线,这里只讨论均匀B样条曲线。给定n+1个控制点Pi(i=0,1,2,...,n)的坐标Pi,n次B样条曲线段的参数表达式为 式中为n次B样条基函数,其形式为   其中
  • B样条的实现

    2018-09-05 11:38:06
    自己写了个B样条的实现,其中一个方法参考了网上的代码,已经在博客里标记出来。新人资源,有错误希望多多指正。
  • 区间B样条小波有限条法的构造研究,许哲,叶志明,基于区间B样条小波有限条理论,提出了一种区间B样条小波有限条方法。传统的样条函数插值被区间B样条小波尺度函数取代,进而构造出
  • B样条简史

    2020-11-22 17:09:34
    一、为什么引入B样条 Runge现象 二、样条的来源 三、B样条简史 均匀节点意义下的一元B样条(B-splines,Basis Splines缩写)是在1946年由I.J.Schoenberg系统提出的. Scheonberg提出了样条函数的概念,并指出了...
  • OpenGL B样条曲线

    2018-05-23 21:59:23
    1、掌握Bezier曲线的绘制; 2、掌握B样条曲线的绘制。 通过菜单完成两种曲线的绘制:
  • B样条曲线曲面降阶综述
  • B样条曲线拟合原理

    万次阅读 多人点赞 2017-01-13 18:51:43
    B样条曲线是在Bezier 曲线基础上发展起来的一类曲线,它克服了Bezier 曲线整体控制性所带来的不便,最常用的是二次和三次B样条曲线。 2.二次B样条 2.1 参数方程 已知三个平面离散点P0、P1、P2,由这三点可以定义...
  • 前面两篇文章分享的是比较实用的贝塞尔曲线,下面我们重点介绍的是B样条曲线的定义、性质及编程实现。首先,如何理解B样条?1. 样条插值,三对角方程(函数、参数);2. 给定划分,所有的B样条的全体组成一个线性空间...
  • openGL B样条

    2013-03-16 12:30:19
    B样条曲线控制顶点自由设置实时生成,操作时由鼠标捕捉控制点
  • B样条小波文档

    2017-03-06 15:14:51
    自己总结的B样条小波相关文档

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,014
精华内容 805
关键字:

b样条