欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    用matlab实现三次NURBS插值曲线.docx

    • 资源ID:9636238       资源大小:148.63KB        全文页数:20页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    用matlab实现三次NURBS插值曲线.docx

    1、用matlab实现三次NURBS插值曲线作者:大漠孤狼 发表于matlab乐园作者:这是我在大学时做大学生研究计划时写的,当时刚学会matlab ,编写了这个程序,用了很多循环,效率不高.当时我并不清楚循环是matlab的弱点,等明白了,也不做这方面的工作了,也就懒的去改写了.如果谁需要用,就自己改吧.算法也有一些问题,我就不多说了,自己看吧 一 、三次NURBS插值算法 给定平面控制顶点di(i=1,2,n)及对应的权因子(i=1,2,n),可定义一条三次NURBS曲线。先对控制顶点进行参数化,得一矢量: U=u0,u1,u2,un+4 则三次NURBS曲线的分段方程形式为: uuk+3,u

    2、k+4 k=0,1,2,n-3 (1) 首先证明一条性质: 若三点dk,dk+1,dk+2共线,且满足 则三次NURBS曲线插值点dk+1. 证明:由(1)式可得: 由以知可得 故性质得证。 下面构造三次 NURBS插值曲线; 取一型值点列V0,V1,V2,Vn,用下列方法决定各点Vi处的切矢Ti: 设顺序五个数据点Vi-2,Vi-1,Vi+2,在中间数据点Vi的切矢ti被局部定义为 ti=(1-a)pi-1+api 其中,pi=pi+1-pi a=, A= B= 在非周期情况下,首末各两数据点处的切矢可采用贝塞尔条件确定,即用如下差分矢量 p-1=2p0p1 p-2=2p-1p0 pn=2p

    3、n1pn2 pn+1=2pnpn1 仍按前述公式确定t0,t1,tn-1,tn。 下面,我们令d3i=pi (i=1n) 然后对数据点d3i进行参数化 u0=u1=u2=u3=0 (i=2,3,,n) u3n+1=u3n+2=u3n+3=u3n+4=1 在区间u3i,u3(i+1)插入节点u3i+1 ,u3i+2 u3i+1= 即得节点矢量。 下面在点d3i ,d3(i+1) (i=0 , 1 , ,n-1) 之间插入两个辅助控制顶点 d3i+1 , d3i+2 ,构成新控制顶点组,得分段三次NURBS方程。 我们按下列原则判断两型值点 pi (d3i) , pi+1( d3(i+1) ) 之

    4、间的曲线段是否有拐点出现:如果矢量乘积ai-1ai 与aiai+1同向,则pi 与pi+1之间无拐点,此时两切线Li , Li+1之间有一交点 Vi*=Vi+ 否则,Vi 与Vi+1 之间有一拐点,记 Vi*=(Vi+Vi+1)2 令 T0 = Ti = min , (i = 1 , 2 , 3 , n-1) Tn = 我们按下列方法决定 Vi 与 Vi+1 之间的辅助点 d3i+1 , d3i+2 讨论在区间 u3i+2 , u3i+3上的曲线段 uu3i+2 , u3i+3 令 d3i = Vi , i = 0 , 1, 2 , n d3i+1 = Vi + (0 i Ti ) d3i+2

    5、 = Vi - (0 i+1 Ti+1 ) 由此三式得 由性质可得 P( u3i+2 ) = d3i , 即此曲线插值点 d3i ( Vi ) .二、基函数计算及整体表示1, 基函数根据伯恩斯坦多项式可计算Ni , 3( u )=+ + + 整理后得:Ni+1,0 的系数(-1/(u(3+i)-u(i)/(u(3+i)-u(1+i)/(u(2+i)-u(1+i)-1/(u(4+i)-u(1+i)/(u(3+i)-u(i)/(u(2+i)-u(1+i)-1/(u(3+i)-u(i)/(u(2+i)-u(i)/(u(2+i)-u(1+i)*u3+(1/(u(4+i)-u(1+i)/(u(3+i)-

    6、u(i)/(u(2+i)-u(1+i)*u(4+i)+1/(u(3+i)-u(i)/(u(3+i)-u(1+i)/(u(2+i)-u(1+i)*u(i)+1/(u(3+i)-u(i)/(u(3+i)-u(1+i)/(u(2+i)-u(1+i)*u(1+i)+2/(u(3+i)-u(i)/(u(2+i)-u(i)/(u(2+i)-u(1+i)*u(i)+1/(u(3+i)-u(i)/(u(2+i)-u(i)/(u(2+i)-u(1+i)*u(2+i)+2/(u(4+i)-u(1+i)/(u(3+i)-u(i)/(u(2+i)-u(1+i)*u(1+i)+1/(u(3+i)-u(i)/(u(3+i

    7、)-u(1+i)/(u(2+i)-u(1+i)*u(3+i)*u2+(-1/(u(3+i)-u(i)/(u(2+i)-u(i)/(u(2+i)-u(1+i)*u(i)2-2/(u(3+i)-u(i)/(u(2+i)-u(i)/(u(2+i)-u(1+i)*u(i)*u(2+i)-1/(u(3+i)-u(i)/(u(3+i)-u(1+i)/(u(2+i)-u(1+i)*u(i)*u(1+i)-1/(u(4+i)-u(1+i)/(u(3+i)-u(i)/(u(2+i)-u(1+i)*u(1+i)2-1/(u(3+i)-u(i)/(u(3+i)-u(1+i)/(u(2+i)-u(1+i)*u(i)*

    8、u(3+i)-1/(u(3+i)-u(i)/(u(3+i)-u(1+i)/(u(2+i)-u(1+i)*u(3+i)*u(1+i)-2/(u(4+i)-u(1+i)/(u(3+i)-u(i)/(u(2+i)-u(1+i)*u(4+i)*u(1+i)*u+1/(u(3+i)-u(i)/(u(2+i)-u(i)/(u(2+i)-u(1+i)*u(i)2*u(2+i)+1/(u(4+i)-u(1+i)/(u(3+i)-u(i)/(u(2+i)-u(1+i)*u(4+i)*u(1+i)2+1/(u(3+i)-u(i)/(u(3+i)-u(1+i)/(u(2+i)-u(1+i)*u(i)*u(3+i)*

    9、u(1+i)Ni+2,0(u)的系数(1/(u(4+i)-u(1+i)/(u(3+i)-u(1+i)/(u(3+i)-u(2+i)+1/(u(4+i)-u(1+i)/(u(4+i)-u(2+i)/(u(3+i)-u(2+i)+1/(u(3+i)-u(i)/(u(3+i)-u(1+i)/(u(3+i)-u(2+i)*u3+(-1/(u(4+i)-u(1+i)/(u(3+i)-u(1+i)/(u(3+i)-u(2+i)*u(4+i)-1/(u(4+i)-u(1+i)/(u(3+i)-u(1+i)/(u(3+i)-u(2+i)*u(3+i)-1/(u(4+i)-u(1+i)/(u(4+i)-u(2+

    10、i)/(u(3+i)-u(2+i)*u(2+i)-1/(u(3+i)-u(i)/(u(3+i)-u(1+i)/(u(3+i)-u(2+i)*u(i)-2/(u(3+i)-u(i)/(u(3+i)-u(1+i)/(u(3+i)-u(2+i)*u(3+i)-2/(u(4+i)-u(1+i)/(u(4+i)-u(2+i)/(u(3+i)-u(2+i)*u(4+i)-1/( u(4+i)-u(1+i)/(u(3+i)-u(1+i)/(u(3+i)-u(2+i)*u(1+i)*u2+(1/(u(4+i)-u(1+i)/(u(4+i)-u(2+i)/(u(3+i)-u(2+i)*u(4+i)2+1/(u(

    11、3+i)-u(i)/(u(3+i)-u(1+i)/(u(3+i)-u(2+i)*u(3+i)2+1/(u(4+i)-u(1+i)/(u(3+i)-u(1+i)/(u(3+i)-u(2+i)*u(4+i)*u(1+i)+1/(u(4+i)-u(1+i)/(u(3+i)-u(1+i)/(u(3+i)-u(2+i)*u(4+i)*u(3+i)+2/(u(3+i)-u(i)/(u(3+i)-u(1+i)/(u(3+i)-u(2+i)*u(i)*u(3+i)+2/(u(4+i)-u(1+i)/(u(4+i)-u(2+i)/(u(3+i)-u(2+i)*u(4+i)*u(2+i)+1/(u(4+i)-u(

    12、1+i)/(u(3+i)-u(1+i)/(u(3+i)-u(2+i)*u(1+i)*u(3+i)*u-1/(u(4+i)-u(1+i)/(u(3+i)-u(1+i)/(u(3+i)-u(2+i)*u(4+i)*u(1+i)*u(3+i)-1/(u(4+i)-u(1+i)/(u(4+i)-u(2+i)/(u(3+i)-u(2+i)*u(4+i)2*u(2+i)-1/(u(3+i)-u(i)/(u(3+i)-u(1+i)/(u(3+i)-u(2+i)*u(i)*u(3+i)2Ni+3,0(u) 的系数1/(u(4+i)-u(1+i)/(u(4+i)-u(2+i)/(u(4+i)-u(3+i)*u(

    13、4+i)3-3/(u(4+i)-u(1+i)/(u(4+i)-u(2+i)/(u(4+i)-u(3+i)*u(4+i)2*u+3/(u(4+i)-u(1+i)/(u(4+i)-u(2+i)/(u(4+i)-u(3+i)*u(4+i)*u2-1/(u(4+i)-u(1+i)/(u(4+i)-u(2+i)/(u(4+i)-u(3+i)*u31, 整体表示为了便于编程,采用矩阵表示NURBS曲线。三次NURBS的分段表示为 uuk+3,uk+4 k=0,1,2,n-3 设D=idi T i= 0 , 1 , 2 , , n = 1 , 2 , , n i= 0 , 1 , 2 , , n Qk =N

    14、0 , 3(u) , N1 , 3(u) , Nn , 3(u) i= 0 , 1 , 2 , , n U =1 u u2 u3 Qk 表示uuk+3 ,uk+4 内的基函数矢量,则NURBS的矩阵表示为 由此可见,NURBS曲线可由矩阵 D Q 表示。进一步,可由分析矩阵而得到曲线的性质。三、插值源程序%给定点列V( i ),随机给定权因子,构造三次NURBS插值点列V( i )%载入数据 注意:每一行必为矢量(三个分量),否则会出错%参数化V= 2 0;1 3 0;2 8 0;3 10 0;5 11 0;8 30 0;10 10 0;s=size(V);n=s(1,1);u(1)=0;u(

    15、2)=0;u(3)=0;u(4)=0;u(3*n-1)=1;u(3*n)=1;u(3*n+1)=1;u(3*n+2)=1;sum=0;for i=1:(n-1) %计算边矢及求和 a(i+2,1:3)=V(i+1,1:3)-V(i,1:3); A=sqrt(dot(a(i+2,1:3),a(i+2,1:3); sum=sum+A; %求和endfor i=3:n sumb=0; for j=2:(i-1) % b=V(j,1:3)-V(j-1,1:3); B=sqrt(dot(b,b); sumb=sumb+B; end u(3*i-2)=sumb/sum;endfor i=1:(n-1) u

    16、(3*i-1)=2/3*u(3*i-2)+1/3*u(3*i+1); u(3*i)=1/3*u(3*i-2)+2/3*u(3*i+1);end%计算切矢a(2,1:3)=2*a(3,1:3)-a(4,1:3);a(1,1:3)=2*a(2,1:3)-a(3,1:3);a(n+2,1:3)=2*a(n+1,1:3)-a(n,1:3);a(n+3,1:3)=2*a(n+2,1:3)-a(n+1,1:3);for i=1:n+2 b(i,1:3)=cross(a(i,1:3),a(i+1,1:3); A(i)=sqrt(dot(b(i,1:3),b(i,1:3);endfor i=1:n M=A(i

    17、)/(A(i)+A(i+2); t(i,1:3)=(1-M)*a(i+1,1:3)+M*a(i+2,1:3);end%随机产生权因子w=rand(3*n-2,1); %w(i)在之间随机产生 %建立三维数组Qfor k=1:(3*n-5) for i=1:3*n-2 if i=k Q(1:4,i,k)=1/(u(4+i)-u(1+i)/(u(4+i)-u(2+i)/(u(4+i)-u(3+i)*u(4+i)3;. -3/(u(4+i)-u(1+i)/(u(4+i)-u(2+i)/(u(4+i)-u(3+i)*u(4+i)2;3/(u(4+i)-u(1+i)/. (u(4+i)-u(2+i)/(

    18、u(4+i)-u(3+i)*u(4+i);-1/(u(4+i)-u(1+i)/(u(4+i)-u(2+i)/. (u(4+i)-u(3+i); elseif i=(k+1) Q(1:4,i,k)=-1/(u(4+i)-u(1+i)/(u(3+i)-u(1+i)/(u(3+i)-. u(2+i)*u(4+i)*u(1+i)*u(3+i)-1/(u(4+i)-u(1+i)/(u(4+i)-u(2+i)/. (u(3+i)-u(2+i)*u(4+i)2*u(2+i)-1/(u(3+i)-u(i)/(u(3+i)-u(1+i)/. (u(3+i)-u(2+i)*u(i)*u(3+i)2;(1/(u(4

    19、+i)-u(1+i)/(u(4+i)-u(2+i)/(u(3+i)-. u(2+i)*u(4+i)2+1/(u(3+i)-u(i)/(u(3+i)-u(1+i)/(u(3+i)-u(2+i)*u(3+i)2+1/. (u(4+i)-u(1+i)/(u(3+i)-u(1+i)/(u(3+i)-u(2+i)*u(4+i)*u(1+i)+1/(u(4+i)-. u(1+i)/(u(3+i)-u(1+i)/(u(3+i)-u(2+i)*u(4+i)*u(3+i)+2/(u(3+i)-u(i)/. (u(3+i)-u(1+i)/(u(3+i)-u(2+i)*u(i)*u(3+i)+2/(u(4+i)-u

    20、(1+i)/(u(4+i)-. u(2+i)/(u(3+i)-u(2+i)*u(4+i)*u(2+i)+1/(u(4+i)-u(1+i)/(u(3+i)-u(1+i)/. (u(3+i)-u(2+i)*u(1+i)*u(3+i);(-1/(u(4+i)-u(1+i)/(u(3+i)-u(1+i)/(u(3+i)-. u(2+i)*u(4+i)-1/(u(4+i)-u(1+i)/(u(3+i)-u(1+i)/(u(3+i)-u(2+i)*u(3+i)-1/. (u(4+i)-u(1+i)/(u(4+i)-u(2+i)/(u(3+i)-u(2+i)*u(2+i)-1/(u(3+i)-u(i)/.

    21、(u(3+i)-u(1+i)/(u(3+i)-u(2+i)*u(i)-2/(u(3+i)-u(i)/(u(3+i)-u(1+i)/. (u(3+i)-u(2+i)*u(3+i)-2/(u(4+i)-u(1+i)/(u(4+i)-u(2+i)/(u(3+i)-. u(2+i)*u(4+i)-1/(u(4+i)-u(1+i)/(u(3+i)-u(1+i)/(u(3+i)-u(2+i)*u(1+i);.(1/(u(4+i)-u(1+i)/(u(3+i)-u(1+i)/(u(3+i)-u(2+i)+1/(u(4+i)-u(1+i)/.(u(4+i)-u(2+i)/(u(3+i)-u(2+i)+1/(u

    22、(3+i)-u(i)/(u(3+i)-u(1+i)/(u(3+i)-.u(2+i); elseif i=(k+2) Q(1:4,i,k)=1/(u(3+i)-u(i)/(u(2+i)-u(i)/(u(2+i)-. u(1+i)*u(i)2*u(2+i)+1/(u(4+i)-u(1+i)/(u(3+i)-u(i)/(u(2+i)-. u(1+i)*u(4+i)*u(1+i)2+1/(u(3+i)-u(i)/(u(3+i)-u(1+i)/(u(2+i)-. u(1+i)*u(i)*u(3+i)*u(1+i);(-1/(u(3+i)-u(i)/(u(2+i)-u(i)/. (u(2+i)-u(1+i

    23、)*u(i)2-2/(u(3+i)-u(i)/(u(2+i)-u(i)/(u(2+i)-. u(1+i)*u(i)*u(2+i)-1/(u(3+i)-u(i)/(u(3+i)-u(1+i)/(u(2+i)-. u(1+i)*u(i)*u(1+i)-1/(u(4+i)-u(1+i)/(u(3+i)-u(i)/(u(2+i)-. u(1+i)*u(1+i)2-1/(u(3+i)-u(i)/(u(3+i)-u(1+i)/(u(2+i)-. u(1+i)*u(i)*u(3+i)-1/(u(3+i)-u(i)/(u(3+i)-u(1+i)/(u(2+i)-. u(1+i)*u(3+i)*u(1+i)-2

    24、/(u(4+i)-u(1+i)/(u(3+i)-u(i)/(u(2+i)-. u(1+i)*u(4+i)*u(1+i);(1/(u(4+i)-u(1+i)/(u(3+i)-u(i)/(u(2+i)-. u(1+i)*u(4+i)+1/(u(3+i)-u(i)/(u(3+i)-u(1+i)/(u(2+i)-. u(1+i)*u(i)+1/(u(3+i)-u(i)/(u(3+i)-u(1+i)/(u(2+i)-. u(1+i)*u(1+i)+2/(u(3+i)-u(i)/(u(2+i)-u(i)/(u(2+i)-. u(1+i)*u(i)+1/(u(3+i)-u(i)/(u(2+i)-u(i)/(

    25、u(2+i)-. u(1+i)*u(2+i)+2/(u(4+i)-u(1+i)/(u(3+i)-u(i)/(u(2+i)-. u(1+i)*u(1+i)+1/(u(3+i)-u(i)/(u(3+i)-u(1+i)/(u(2+i)-. u(1+i)*u(3+i);(-1/(u(3+i)-u(i)/(u(3+i)-u(1+i)/(u(2+i)-. u(1+i)-1/(u(4+i)-u(1+i)/(u(3+i)-u(i)/(u(2+i)-u(1+i)-1/. (u(3+i)-u(i)/(u(2+i)-u(i)/(u(2+i)-u(1+i); elseif i=(k+3) Q(1:4,i,k)=-u(

    26、i)3/(u(i+3)-u(i)/(u(i+2)-u(i)/. (u(i+1)-u(i);3*u(i)2/(u(i+3)-u(i)/(u(i+2)-u(i)/(u(i+1)-u(i);. -3*u(i)/(u(i+3)-u(i)/(u(i+2)-u(i)/(u(i+1)-u(i);1/(u(i+3)-u(i)/. (u(i+2)-u(i)/(u(i+1)-u(i); else Q(1:4,i,k)=0;0;0;0; end end end clear a A b B;%计算控制点for i=2:n a(i,1:3)=V(i,1:3)-V(i-1,1:3); endfor i=2:n-1 b(i,1:3)=cross(a(i,1:3),a(i+1,1:3); B(i)=b(i,3);endfor i=2:(n-2) if (B(i)*B(i+1)=0) G(i,1:3)=(V(


    注意事项

    本文(用matlab实现三次NURBS插值曲线.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开