帐号: 密码:
// 设为首页 // 收藏本站 // 请您留言 // 网址导航
远方教程-满足你的求知欲!
站内搜索:
HTML ASP PHP CSS DIV Dreamweaver Photoshop Word Excel PPT SEO技巧
您当前位置:网站首页 >> 统计之窗 >> MATLAB专区 >> 阅读文章

Matlab技巧24:MATLAB绘制B样条曲线详解

来源:远方教程 作者:远方教程 发布时间:2016-11-12 查看次数:12071 访问[新版]

2 B样条结点矢量的确定

  不同类型的B样条曲线区别主要在于节点矢量,对于具有 n+1 个控制顶点(P0, P1, ..., Pn) 的 kB样条曲线,无论是哪种类型都具有 n+k+2 个节点 ([u0,u1...un+k+1])。

MATLAB绘制B样条曲线详解-远方教程

根据图示,三种类型的B样条曲线对应的节点矢量分别为:

MATLAB绘制B样条曲线详解-远方教程

需要注意的是分段Bezier曲线必须满足n/k=正整数。

  这里给出准均匀B样条和分段Bezier曲线的生成节点矢量的代码,均匀B样条的很简单就不列出了。假设共 n+1 个控制顶点,k 次B样条,输入参数为 n, k ,输出节点矢量NodeVector。

代码2:准均匀B样条曲线的节点矢量生成:

  1. % U_quasi_uniform.m文件
  2. function NodeVector = U_quasi_uniform(n, k)
  3. % 准均匀B样条的节点向量计算,共n+1个控制顶点,k次B样条
  4.  
  5. NodeVector = zeros(1, n+k+2);
  6. piecewise = n - k + 1; % 曲线的段数
  7. if piecewise == 1         % 只有一段曲线时,n = k
  8.     for i = n+2 : n+k+2
  9.         NodeVector(1, i) = 1;
  10.     end
  11. else
  12.     flag = 1;                       % 不止一段曲线时
  13.     while flag ~= piecewise
  14.         NodeVector(1, k+1+flag) = NodeVector(1, k + flag) + 1/piecewise;
  15.     flag = flag + 1;
  16. end
  17. NodeVector(1, n+2 : n+k+2) = 1;
  18. end

代码3:分段Bezier曲线的节点矢量生成:

  1. % U_piecewise_Bezier.m文件
  2. function NodeVector = U_piecewise_Bezier(n, k)
  3. % 分段Bezier曲线的节点向量计算,共n+1个控制顶点,k次B样条
  4. % 分段Bezier端节点重复度为k+1,内间节点重复度为k,且满足n/k为正整数
  5.  
  6. if ~mod(n, k) && (~mod(k, 1) && k>=1) % 满足n是k的整数倍且k为正整数
  7.     NodeVector = zeros(1, n+k+2); % 节点矢量长度为n+k+2
  8.     NodeVector(1, n+2 : n+k+2) = ones(1, k+1); % 右端节点置1
  9.     piecewise = n / k; % 设定内节点的值
  10.     Flg = 0;
  11.     if piecewise > 1
  12.         for i = 2 : piecewise
  13.             for j = 1 : k
  14.             NodeVector(1, k+1 + Flg*k+j) = (i-1)/piecewise;
  15.             end
  16.             Flg = Flg + 1;
  17.         end
  18.     end
  19. else
  20.     fprintf('error!\n');
  21. end
第1页 第2页 第3页
打印 打印 | 关闭 关闭 评论
相关文章
图片新闻
站内搜索  
搜索
猜您喜欢  
最新更新  
阅读排行  
关于我们 | 联系方式 | 大事记 | 免责声明 | | 给我留言
部分广告源自金山联盟2345联盟 QQ咨询 站长之家QQ群:232617873
Copyright 2024 远方教程 © All Rights Reserved.

回顶部