声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 4874|回复: 10

[共享资源] B样条曲线生成程序

[复制链接]
发表于 2006-11-14 18:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
任意给定点坐标,可以拟合出B样条曲线


  1. % B样条曲线生成程序
  2. % 说明:给定8个控制顶点{(3 5),(2 4),(3 2),(6 1),(5 8),(10 6),(8 1),(6 0)}
  3. load c;x=800:25:1800;
  4. a(1,:)=x;a(2,:)=c;
  5. % a=[10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90;20 16 26 26 26 26 24 24 24 22 22 16 28 26 26 26 24];    % 控制顶点数组;
  6. %a=[4 3 2 3 6 5 10 8 6 4;6 5 4 2 1 8 6 1 0 -1];%增加两个控制顶点(4 6)(4 -1)从而使曲线通过原来的首末点;
  7. plot(a(1,:),a(2,:),':');                 % 绘制控制多边形;
  8. hold on;                   % 默认为hold off,此命令用来保留控制多边形的图形;                              
  9. for i=1:38;          % 由于4个顶点可以确定一条B样条,共有8个控制顶点,可确定5条B样条曲线;
  10. %for i=1:7;
  11. for u=0:0.001:1;    % 参数u;   
  12.    
  13.     b0=1.0./6.*(1-u).^3;                     % 基函数b0;
  14.     b1=1.0./6.*(3.*u.^3-6.*u.^2+4);          % 基函数b1;
  15.     b2=1.0./6.*(-3.*u.^3+3.*u.^2+3.*u+1);    % 基函数b2;
  16.     b3=1.0./6.*u.^3;                         % 基函数b3;
  17.    
  18.     x=b0.*a(1,i)+b1.*a(1,i+1)+b2.*a(1,i+2)+b3.*a(1,i+3);   % 确定曲线的横坐标x;
  19.     y=b0.*a(2,i)+b1.*a(2,i+1)+b2.*a(2,i+2)+b3.*a(2,i+3);   % 确定曲线的纵坐标y;
  20.    
  21.     line(x,y);       % 绘制曲线坐标点;
  22. end
  23. end
  24. hold off;
复制代码
回复
分享到:

使用道具 举报

发表于 2006-12-4 10:10 | 显示全部楼层

suffer,问你一下??

一个可能比较弱的问题:你的load c中的c是??我做课题用到matlab生成B样条曲线,正着急找,能在百忙中解答一下吗?谢谢~~:@)
发表于 2006-12-4 10:58 | 显示全部楼层
原帖由 baba 于 2006-12-4 10:10 发表
一个可能比较弱的问题:你的load c中的c是??我做课题用到matlab生成B样条曲线,正着急找,能在百忙中解答一下吗?谢谢~~:@)



看上面搂住的样子,c应该是他给出的那几个控制顶点,和他后来说的多加的两个顶点吧,搂住看样子是厉害人,如果你有了自己的控制顶点的话,可以命名为C,基本上是可以直接调用搂住的程序的。但还是要修改点的。  这是我的理解哈。。。。
发表于 2006-12-4 16:34 | 显示全部楼层

是呢?

发表于 2006-12-4 16:41 | 显示全部楼层

终于……

我的第一直觉也是控制点,于是我在之前加了》c=......,可运行提示load c出错,你能帮我找一下原因吗?是我的c=......格式有误吗?应该怎么定义c啊那?另外,楼主的程序还要进行什么修改才能运行??难道不是正确的,看起来没什么问题啊??谢谢你:@)
发表于 2006-12-4 19:30 | 显示全部楼层

等待........

等待楼主的精彩奉献啊.........
 楼主| 发表于 2006-12-9 09:57 | 显示全部楼层
  1. a=[4 3 2 3 6 5 10 8 6 4;6 5 4 2 1 8 6 1 0 -1];%增加两个控制顶点(4 6)(4 -1)从而使曲线通过原来的首末点;
  2. plot(a(1,:),a(2,:),':');                 % 绘制控制多边形;
  3. hold on;                   % 默认为hold off,此命令用来保留控制多边形的图形;                              
  4. for i=1:38;          % 由于4个顶点可以确定一条B样条,共有8个控制顶点,可确定5条B样条曲线;
  5. %for i=1:7;
  6. for u=0:0.001:1;    % 参数u;   
  7.    
  8.     b0=1.0./6.*(1-u).^3;                     % 基函数b0;
  9.     b1=1.0./6.*(3.*u.^3-6.*u.^2+4);          % 基函数b1;
  10.     b2=1.0./6.*(-3.*u.^3+3.*u.^2+3.*u+1);    % 基函数b2;
  11.     b3=1.0./6.*u.^3;                         % 基函数b3;
  12.    
  13.     x=b0.*a(1,i)+b1.*a(1,i+1)+b2.*a(1,i+2)+b3.*a(1,i+3);   % 确定曲线的横坐标x;
  14.     y=b0.*a(2,i)+b1.*a(2,i+1)+b2.*a(2,i+2)+b3.*a(2,i+3);   % 确定曲线的纵坐标y;
  15.    
  16.     line(x,y);       % 绘制曲线坐标点;
  17. end
  18. end
  19. hold off;
复制代码
 楼主| 发表于 2006-12-9 09:57 | 显示全部楼层
  1. a=[10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90;20 16 26 26 26 26 24 24 24 22 22 16 28 26 26 26 24];    % 控制顶点数组;
  2. plot(a(1,:),a(2,:),':');                 % 绘制控制多边形;
  3. hold on;                   % 默认为hold off,此命令用来保留控制多边形的图形;                              
  4. for i=1:38;          % 由于4个顶点可以确定一条B样条,共有8个控制顶点,可确定5条B样条曲线;
  5. %for i=1:7;
  6. for u=0:0.001:1;    % 参数u;   
  7.    
  8.     b0=1.0./6.*(1-u).^3;                     % 基函数b0;
  9.     b1=1.0./6.*(3.*u.^3-6.*u.^2+4);          % 基函数b1;
  10.     b2=1.0./6.*(-3.*u.^3+3.*u.^2+3.*u+1);    % 基函数b2;
  11.     b3=1.0./6.*u.^3;                         % 基函数b3;
  12.    
  13.     x=b0.*a(1,i)+b1.*a(1,i+1)+b2.*a(1,i+2)+b3.*a(1,i+3);   % 确定曲线的横坐标x;
  14.     y=b0.*a(2,i)+b1.*a(2,i+1)+b2.*a(2,i+2)+b3.*a(2,i+3);   % 确定曲线的纵坐标y;
  15.    
  16.     line(x,y);       % 绘制曲线坐标点;
  17. end
  18. end
  19. hold off;
复制代码
发表于 2006-12-10 09:42 | 显示全部楼层

all the thanks for you

谢谢楼主的解答:@)我老把你的名字想成super,大概真是超级,高手的印象吧呵呵。祝好。
发表于 2011-9-20 14:47 | 显示全部楼层
我觉得for i=1:38;       %for i=1:7;在matlab7.1中,用for i=1:7更好,运行时不会出错

发表于 2012-6-20 16:58 | 显示全部楼层
回复 10 # 宝宝和豆豆 的帖子

已经预留了,只是被注释掉了
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-29 02:08 , Processed in 0.060318 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表