找回密码
 注册
Simdroid-非首页
查看: 266|回复: 9

Matlab编写的B样条曲线的绘制程序[有代码]

[复制链接]
发表于 2009-12-10 22:15:25 | 显示全部楼层 |阅读模式 来自 大连理工大学北山B区
本帖最后由 messenger 于 2009-12-15 14:04 编辑

%用B-样条曲线拟合数据
clear,clc
prompt={'在此输入点坐标,要求每行输入一个点的坐标,横、纵坐标值之间用空格或半角逗号隔开,输完一个点坐标后按下回车键再输入下一个点坐标'};
name='数据输入';
numlines=[20,19];
dia1=inputdlg(prompt,name,numlines);%生成点坐标输入对话框
A=[str2num(dia1{1})];%用矩阵存储点坐标
L=size(A);
N=L(1);%记录点的个数
plot(A(:,1),A(:,2),'*-r');%画出点
hold on;
prompt={'请输入曲线阶次,若用二次B样条,输入"2";若用三次B样条,则输入"3"'};
name='B-样条阶次选择';
numlines=[1,19];
dia2=inputdlg(prompt,name,numlines);%生成阶次输入对话框
b=[str2num(dia2{1})];%提取样条阶次
while b~=2&b~=3
  prompt={'请重新输入曲线阶次,若用二次B样条,输入"2";若用三次B样条,则输入"3"'};
  name='B-样条阶次选择';
  numlines=[2,20];
  dia2=inputdlg(prompt,name,numlines);
  b=[str2num(dia2{1})];%提取样条阶次  
end
switch b
    case 2 %画二次B样条曲线   
        for i=1:(N-2)
            for t=0:0.001:1
            x=((t-1)^2*A(i,1)+(-2*t^2+2*t+1)*A(i+1,1)+t^2*A(i+2,1))/2;
            y=((t-1)^2*A(i,2)+(-2*t^2+2*t+1)*A(i+1,2)+t^2*A(i+2,2))/2;
            plot(x,y,'b');
            hold on
            end
        end
    case 3 %画三次B样条曲线
        for i=1:(N-3)
            for t=0:0.001:1
            x=((-t^3+3*t^2-3*t+1)*A(i,1)+(3*t^3-6*t^2+4)*A(i+1,1)+(-3*t^3+3*t^2+3*t+1)*A(i+2,1)+t^3*A(i+3,1))/6;
            y=((-t^3+3*t^2-3*t+1)*A(i,2)+(3*t^3-6*t^2+4)*A(i+1,2)+(-3*t^3+3*t^2+3*t+1)*A(i+2,2)+t^3*A(i+3,2))/6;
            plot(x,y,'b');
            hold on
            end
        end
end
hold off

评分

1

查看全部评分

 楼主| 发表于 2009-12-10 22:16:22 | 显示全部楼层 来自 大连理工大学北山B区
Simdroid开发平台
初学者的作品
回复 不支持

使用道具 举报

发表于 2009-12-11 01:20:57 | 显示全部楼层 来自 浙江杭州
大致运行了一下,程序运行得很好。只是提示信息无法在对话框上全部显示,lz可以改进一下,让提示信息可以全部显示,不过这是小问题。
回复 不支持

使用道具 举报

发表于 2009-12-12 15:43:31 | 显示全部楼层 来自 重庆大学
非常好的例子,谢谢分享了
回复 不支持

使用道具 举报

发表于 2009-12-12 16:10:19 | 显示全部楼层 来自 湖南长沙
例子运行正确,谢谢分享
回复 不支持

使用道具 举报

发表于 2010-10-21 08:46:32 | 显示全部楼层 来自 华南理工大学
很有趣哟,学习学习!!谢谢楼主!

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2010-10-21 10:20:16 | 显示全部楼层 来自 西安交通大学
学习学习,谢谢楼主

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2010-10-22 11:10:52 | 显示全部楼层 来自 江苏宿迁
学习楼上的代码

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2017-7-19 02:37:38 | 显示全部楼层 来自 广东深圳
非常好的例子,谢谢分享了
回复 不支持

使用道具 举报

发表于 2017-9-12 08:34:50 | 显示全部楼层 来自 湖北武汉
写的不错哦
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-25 20:39 , Processed in 0.042463 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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