精华内容
下载资源
问答
  • 均匀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样条小波分解与重构的算法,并将其推广到二维离散图像。给出了对图像进行分解和重构时节点矢量的选取方法、分解和重构的公式,并通过实例介绍了它在图像任意大小缩放中的应用。和传统小波相比,利用非...
  • 利用MATLAB,已知曲线数据,利用非均匀B样条方法反算控制顶点,再取△t=0.02时,计算该曲线上的点,一阶和二阶矢量,并绘制出点与一阶单位切矢量、点与二阶单位切矢量的图形
  • 本文利用递归公式对B样条基的变换矩阵构造基于离散范数l(2)的双正交非均匀B样条小波,并提出了小波MRA的重构和分解算法。 所提出的小波重构矩阵的计算基于简单的递归,避免了积分运算。 重构和分解算法既简单,...
  • 类二次均匀B样条曲线曲面,姚兴,杭后俊,在工程应用中,由于形状参数的直观和灵活,已成为调节曲线曲面形状的实用方法。本文主要讨论二次均匀B样条曲线曲面的扩展,首先��
  • 基于非均匀B样条插值算法的图像放大
  • 提出了一种用双圆弧对二次均匀B样条曲线的分段逼近方法。首先,对一条具有n 1个控制顶点的二次均匀B样条曲线按照相邻两节点界定的区间分成n-1段只有三个控制顶点的二次均匀B样条曲线段;然后对每一曲线段构造一条双...
  • 主要研究在“n次均匀B样条初始节点序列中每两个节点间一次性地均匀插人m-1个新节点的算法,导出了原始n次均匀B样条基函数与插入新节点后的基函数之间的明确关系式,进一步得到了原始B样条曲线的新旧控制顶点之间的...
  • 基于非均匀B样条基函数递推式的程序实现,用户可以自己在屏幕上左键选择控制点,从而画出B样条函数,并且可以右键选中控制点并进行拖动,实时看到曲线变化。均匀B样条也可以画出,亲测有效。
  • 使用matlab的gui编写了CAD课程中的bezier曲线和均匀b样条曲线,支持鼠标在坐标轴上的键入,两种曲线之间的转换,且型值点可用鼠标拖动修改。
  • 利用分段积分的方法并引入多个形状参数,将单形状参数的均匀B样条曲线推广到多形状参数的情形;这类曲线具有标准的均匀B样条曲线及单形状参数的均匀B样条曲线的主要性质,如连续性、凸包性等;根据形状参数的各种...
  • 利用n次均匀B样条细分的掩模与Pascal三角形关系,并借助控制多边形在每次加细过程中新旧控制顶点对应的几何位置关系,给出一种新的,z次均匀B样条曲线细分算法,基于该算法构造出带有形状参数的局部插值约束的奇次...
  • 四阶三次均匀B样条函数插值的MATLAB代码实现,可以用于轨迹规划等应用研究的基础知识,轨迹能保证一阶导数和二阶导数的连续
  • 给出带有四个形状参数的四阶均匀B样条调配函数,它以三次均匀B样条基函数为特殊情况。基于所给出的调配函数,得到带多个形状参数的分段多项式曲线的生成方法。通过改变形状参数的取值,可以调整曲线的形状。选取不同...
  • 提出非均匀B样条曲面的一种整体光顺方法和一种局部光顺方法。首先利用双正交非均匀B样条小波,对非均匀B样条曲面进行小波分解;然后将若干层细节部分按一定的比例适当丢弃后实现曲面的整体光顺。利用小波表示的细节...
  • 用VB.NET写的非均匀B样条曲线,程序中各部分都封装成了类,需要可以直接调用,对了还需要输入文件,文件的位置、格式请自己研究,不行可以问我
  • 利用非均匀B样条小波的正交性、局部性和振动性,研究基于非均匀B样条小波分解的有理曲线的光顺算法。第一步,通过不同的节点选取方法,实现非均匀有理B样本(non-uniform rational Bspline,NURBS)曲线的小波分解;...
  • 利用B样条曲线的Bézier构造方法,把三次Bézier曲线与二次均匀B样条曲线之间的拼接问题转化为三次Bézier曲线与二次Bézier曲线之间的拼接问题.探讨了三次Bézier曲线与二次均匀B样条曲线的G0,G1,G2光滑拼接条件.
  • 三次均匀B样条在工业机器人轨迹规划中的应用研究 轨迹规划 梯形速度函数 B样条插补 估算步长
  • 研究了均匀B样条曲线的1次升降多阶的矩阵表示,提出了将计算过程表示为多个矩阵连续相乘的形 式,矩阵的乘积作为 B样条升降阶的转换矩阵,得到 B样条曲线升降阶后的控制顶点矢量可以表示为转换矩 阵与原曲线控制顶点...
  • 应用基于展开的增量法生成非均匀B样条曲线曲面以及NURBS曲线,给出一个较简单高效的算法。此算法仅在初始化时进行乘除运算而后均为加法迭代,相较于deBoor算法效率更高。
  • 在研究 B样条曲线节点的曲率和对应控制点的离散曲率之间关系的基础上 ,引入了一种新的离散曲 率―――第二离散曲率的概念 ,得出了三次均匀 B样条曲线节点的曲率和对应控制点的第二离散曲率成正比的结 论 ,并给出了...
  • 在流曲线曲面造型方法中,引入非均匀细分,给出了Gaussian球面上非均匀细分的模式和计算方法,以及基于非均匀细分的流曲线曲面生成算法,研究了流曲线曲面和双三次非均匀B样条曲面G1光滑拼接的条件,并给出与两双三...
  • 为了构造带局部形状控制参数的B样条曲线,给出了一组含有λi、μi 2个形状参数的四次多项式调配函数,它是三次均匀B样条基函数的新扩展。同时,分析了这组调配函数的性质,并基于调配函数定义了一种新的带有λi、μi...
  • 利用B样条基函数和B样条曲线的优良性质,给出一类控制B样条曲线形态的技术,如曲线内嵌直线、曲线和特征多边形相切、在某一顶点处形成尖点、构成曲线的拐点、利用重点绘制封闭的三次B样条曲线以及曲线过控制多边形...
  • 基于三次准均匀B样条曲线拟合的原理,介绍了采用三次准均匀B样条插值求解的方法在三维地形数据拟合中应用的实际问题,并基于MATLAB编程实现了三维地形数据的网格化,为三维地形的重建奠定了基矗
  • 从两非均匀三次B-样条曲线间的最小二乘范数下的距离函数中取最小值,给出了把两相邻三次非均匀B样条合并成一条三次非均匀B样条曲线的新方法,得到了用矩阵表示的合并曲线的控制顶点的显式表达式;图例显示,该方法所...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,714
精华内容 5,485
关键字:

均匀b样条