精华内容
下载资源
问答
  • B样条拟合小线段

    2013-12-10 15:08:52
    采用B样条拟合任意数量的小线段,线段的数量可以设置,程序采用MFC编写,源码公开。
  • B样条拟合插值,根据型值点反求,然后计算插值
  • 轴流泵综合特性曲线中等效率曲线的B样条拟合方法,姜晓明,于永海,本文分析了用于轴流泵综合特性曲线中等效率曲线拟合的三次均匀B样条方法,结合端点性质对其进行设置以实现不同形状等效率曲线的�
  • 三次B样条拟合

    2016-12-12 16:53:16
    可以拟合经过过形值点的三次B样条曲线
  • 非均匀B样条拟合MATLAB程序

    千次阅读 2017-11-14 23:54:00
    直接上代码,多的不再说了...%------------------非均匀B样条拟合MATLAB程序----------------- clear k=3; x=load('data.txt'); [n,m]=size(x); %-----------弦长参数化-------------------------------------- u(k...

    直接上代码,多的不再说了。

    复制代码
     
    
    %------------------非均匀B样条拟合MATLAB程序-----------------
    clear
    k=3;
    x=load('data.txt');
    [n,m]=size(x);
    %-----------弦长参数化--------------------------------------
    u(k+n)=0;
    for i=1:n-1
     u(k+i+1)=u(k+i)+sqrt((x(i+1,1)-x(i,1))^2+(x(i+1,2)-x(i,2))^2);
    end;
    L=u(n+k);
    for i=1:n
    u(k+i)=u(k+i)/L;
    end;
    for i=1:3
    u(k+i+n)=1;
    end
    %控制多边线
    plot(x(:,1),x(:,2),'o');
    hold on
    %------------反求n+2个控制点--------------------
    %首位重节点v1=v2
    %首位与控制多边形相切
    A=zeros(n+2);
    A(1,1)=1;A(1,2)=-1;
    A(2,2)=1;
    A(n+2,n+1)=-1;A(n+2,n+2)=1;
    A(n+1,n+1)=1;
    for i=3:n
      for j=0:2
        A(i,i+j-1)=Base(i+j-1,k,u,u(i+2));
       end
    end
    %e:方程右边.
    e=0;
    for i=1:m
        e(n+2,i)=0;
    end
    for i=1:n
        e(i+1,:)=x(i,:);
    end
    %求出控制点d
    d=inv(A)*e;
    plot(d(:,1),d(:,2),'g');
    
    
    hold on
    %------------插值并作出样条曲线-----------------
    x=0;y=0;down=0;
    for j=1:(n-1)
        uu=(u(j+3)):0.0005:u(j+4);
        for kk=1:length(uu)
           down=down+1;
            x(down)=d(j,1)*Base(j,3,u,uu(kk))+d(j+1,1)*Base(j+1,3,u,uu(kk))+d(j+2,1)*Base(j+2,3,u,uu(kk))+d(j+3,1)*Base(j+3,3,u,uu(kk));
            y(down)=d(j,2)*Base(j,3,u,uu(kk))+d(j+1,2)*Base(j+1,3,u,uu(kk))+d(j+2,2)*Base(j+2,3,u,uu(kk))+d(j+3,2)*Base(j+3,3,u,uu(kk));
        end
    end
    axis('equal');
    
    plot(x,y,'red');
    
    xlabel('x');ylabel('y');
    grid on
    复制代码

     

    没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。


        本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/5928940.html,如需转载请自行联系原作者


    展开全文
  • 1.三次钳位B样条拟合 公式如下图: 展开结果为: r(u)=[(1-3u+3u2-u3)Pi + (4-6u2+3u3)Pi+1 + (1+3u+3u2-3u3)Pi+2 + (u3)Pi+3 ]/6 其中u取值范围为0到1,将4个控制点的坐标带入上式之后,生成的是Pi+1到Pi+2之间的一...

    1.三次钳位B样条拟合

    公式如下图:
    在这里插入图片描述
    展开结果为:
    r(u)=[(1-3u+3u2-u3)Pi + (4-6u2+3u3)Pi+1 + (1+3u+3u2-3u3)Pi+2 + (u3)Pi+3 ]/6
    其中u取值范围为0到1,将4个控制点的坐标带入上式之后,生成的是Pi+1到Pi+2之间的一段平滑曲线。如果希望某个点必须出现在拟合后的曲线上,则需要让该点在控制点集中连续出现三次。
    比如第一个点(0,0),使P0P1P2都为(0,0),后续的点正常排列。则使用上述参数化方程可得到通过这一系列点的拟合曲线,且该曲线必定通过第一个点。
    拟合结果:

    在这里插入图片描述
    在这里插入图片描述

    2.参数方程求切线、法线

    以上式B样条参数方程为目标曲线,其一阶导和二阶导为:
    r’(u)=[(-1+2u-u2)Pi + (-4u+3u2)Pi+1 + (1+2u-3u2)Pi+2 + (u2)Pi+3 ]/2
    r’’(u)=[(1-u)Pi + (-2+3u)Pi+1 + (1-3u)Pi+2 + (u)Pi+3 ]
    则dy/dx,d2y/dx2为:
    f’=y’(u)/x’(u)
    f’’=(x’y’’-x’’y’)/(x’)3
    f曲率=(x’y’’-x’’y’)/(x’2+y’2)3/2
    f’垂线=-1/y’
    其中x(u)、y(u)将控制点的x、y坐标带入可得
    在这里插入图片描述
    最开始的代码没有保存,后来算曲率什么的改了很多,比较乱

    % function [  ] = B_Spline( x,y )
    %三次钳位B样条拟合
    close all;
    clear all;
    clc;
    x=[0.5,3,5,6,4,2];
    y=[0.5,0,2,4,5,4];
    % x=[0,1,2,3,4,5];
    % y=[0,1,1,1,1,1];
    plot(x,y,'o');
    hold on;
    
    x=[x(1),x(1),x(1),x(2:end),x(end),x(end)];%对起始点和结尾点进行重复处理,同一个点需重复出现3次,拟合后的曲线必定经过该点
    y=[y(1),y(1),y(1),y(2:end),y(end),y(end)];
    
    u=linspace(0,1,5);%参数u的取值范围为[0,1],5等分即表示会取两个原始点之间的拟合曲线上的5个点。
    final_x=x(1);
    final_y=y(1);
    r1=[];
    r=[];
    for i=1:(length(x)-3)%通过B样条参数方程计算拟合后曲线的离散点
        px=(1-3.*u+3.*u.^2-u.^3).*x(i) + (4-6.*u.^2+3.*u.^3).*x(i+1) + (1+3.*u+3.*u.^2-3.*u.^3).*x(i+2) + u.^3.*x(i+3);
        py=(1-3.*u+3.*u.^2-u.^3).*y(i) + (4-6.*u.^2+3.*u.^3).*y(i+1) + (1+3.*u+3.*u.^2-3.*u.^3).*y(i+2) + u.^3.*y(i+3);
        px=px/6;
        py=py/6;
        final_x=[final_x,px];
        final_y=[final_y,py];
    %     plot(px,py);
    %     hold on;
        
        px1=(-1+2.*u-u.^2).*x(i) + (-4.*u+3.*u.^2).*x(i+1) + (1+2.*u-3.*u.^2).*x(i+2) + u.^2.*x(i+3);%B样条参数方程的一阶导
        py1=(-1+2.*u-u.^2).*y(i) + (-4.*u+3.*u.^2).*y(i+1) + (1+2.*u-3.*u.^2).*y(i+2) + u.^2.*y(i+3);
        px1=px1/2;
        py1=py1/2;
        px2=(1-u).*x(i) + (-2+3.*u).*x(i+1) + (1-3.*u).*x(i+2) + (u).*x(i+3);
        py2=(1-u).*y(i) + (-2+3.*u).*y(i+1) + (1-3.*u).*y(i+2) + (u).*y(i+3);
        tmpr1=abs(px1.*py2 + px2.*py1)./(px1.^2 + py1.^2).^1.5
        tmpr=1./(abs(px1.*py2 + px2.*py1)./(px1.^2 + py1.^2).^1.5)
        r1=[r1,tmpr1];
        r=[r,tmpr];
        
    %     for j=1:length(px)%求拟合后曲线上每个点的垂线
    %         k=-px1(j)/py1(j);0
    %         lx=px(j)-0.1:0.1:px(j)+0.1;
    %         ly=k.*(lx-px(j))+py(j);
    %         plot(lx,ly);
    %         hold on;
    %     end
    end
    
        plot(final_x,final_y);
        hold on;
        figure(2);
        plot(r);
        hold on;
    
    % for i=1:(length(x))
    %     plot(x(i),y(i));
    %     hold on;
    % end
    % end
    
    展开全文
  • 三次B样条拟合程序!

    热门讨论 2009-01-05 08:33:33
    三次B样条全局拟合程序,送给需要的人! 本书是按照《the nurbs book》这本书上的P410的最小二乘法曲线逼近的拟合方法! 本方法的特点是通过需要插值点序列的两个端点,而不一定通过其他的插值点。
  • 采用双三次B样条插值法,对散乱分布的离散相位点进行拟合并用较少的采样点满足精度要求。利用双三次B样条的矩阵表达式及CGH加工相位函数在所加载频方向单调递增的性质,简化了求解插值曲面与x-y平行平面精确交线的方法...
  • 本源码使用VC++编写B样条曲线,利用B样条反算,由点击的控制点生成B样条曲线
  • 典型路况下无人驾驶车辆局部路径规划轨迹方法,使用rrt算法对 车辆避障路径进行规划,并进行了剪枝和B样条拟合

    典型路况下无人驾驶车辆局部路径规划轨迹方法,使用rrt算法对 车辆避障路径进行规划,并进行了剪枝和B样条拟合

    请添加图片描述

    展开全文
  • 既要保证给定的误差值,又能使拟合点数最大化,我试了很久,没搞定,求高手指点! X292.968 Y196.852 Z7.483 X292.967 Y196.836 Z7.481 X292.950 Y196.569 Z7.483 X292.919 Y196.114 Z7.490 X292.888 Y195.658 ...
  • b样条曲线拟合

    2019-03-31 15:53:54
    b样条曲线拟合,用着很好用
  • B样条曲线拟合

    2019-01-15 12:07:57
    B样条曲线拟合。实现简单高效,项目中实际使用的代码。
  • 三次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-08-19 14:21:01
    研究生正式开学前的暑假任务:b样条曲面拟合 以下是最后总结学习成果时做的ppt 参考:《the nurbs book》,《B-spline surface fitting by iterative geometric interpolation approximation algorithms》 欢迎...
  • 随着计算机辅助设计技术的不断发展,三维参数化设计作为一种新的计算机辅助...提出应用投影栅相位法测量人体的三维数据,在最小二乘意义下采用B样条拟合曲面的方法,在临床治疗和医学基础研究方面有重要的实用价值。
  • 基于B样条曲线拟合出现的问题和困难,提出了一种新的B样条曲线拟合方法.该方法成功地避免了数据点参数化的问题,并使得逼近曲线具有较好的形状和接近弧长参数化的节点向量.
  • B样条曲线拟合原理

    万次阅读 多人点赞 2017-01-13 18:51:43
    B样条曲线是在Bezier 曲线基础上发展起来的一类曲线,它克服了Bezier 曲线整体控制性所带来的不便,最常用的是二次和三次B样条曲线。 2.二次B样条 2.1 参数方程 已知三个平面离散点P0、P1、P2,由这三点可以定义...
  • 代码是基于C++的三次B样条曲线拟合代码,包含插值拟合,近似拟合就不放代码了,较简单,我的博客中有相关论文链接。http://blog.csdn.net/liumangmao1314/article/details/54588155
  • B样条曲线拟合(B_Spline_Approximation)

    千次阅读 热门讨论 2020-07-06 23:44:24
    B样条曲线的拟合主要是一个LSQ(least squares) 拟合问题,主要思想也是最小二乘法的思想,这与B-Spline曲线插值不同,拟合的曲线是尽量接近数据点,而不是完全通过。主要的方法可以参考cs3621 这里我定义了一个BS_...
  • 解压密码为:hur.cn 主要采用C++编程实现,过控制点的三次B样条曲线拟合,可以用于各种高级的曲线拟合方面。
  • 均匀B样条和准均匀B样条

    千次阅读 多人点赞 2019-03-20 11:14:06
    均匀B样条拟合和准均匀B样条拟合 在CAGD中最为重要的无非就是B样条曲线,B样条在保留Bezier曲线优点的同时,克服了其由于整体表示带来不具有局部性质的缺点,以及解决了在描述复杂形状时带来的连接问题。B样条曲线...
  • 本代码为三次B样条曲线拟合10个点的程序,并利用OpenGL对最后拟合的曲线进行绘制,注意:需要安装EIGEN矩阵库和OpenGL才能运行。
  • 在工程上往往需要进行三维曲线拟合,该Matlab代码可以对三组离散数据进行三维B样条曲线拟合
  • 通过一连串离散的数据点自动生成一个平滑B样条曲线,VC++的程序源代码(代码在vs2010下编译可用),人格保证可以运行。执行时用鼠标在绘图区做点,每做一个点,样条曲线就自动通过这个点,但是只能作开曲线,如果做...
  • 基于三次B样条曲线拟合的列车定位方法研究

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,733
精华内容 3,493
关键字:

b样条拟合