B样条曲线生成程序
任意给定点坐标,可以拟合出B样条曲线% B样条曲线生成程序
% 说明:给定8个控制顶点{(3 5),(2 4),(3 2),(6 1),(5 8),(10 6),(8 1),(6 0)}
load c;x=800:25:1800;
a(1,:)=x;a(2,:)=c;
% a=; % 控制顶点数组;
%a=;%增加两个控制顶点(4 6)(4 -1)从而使曲线通过原来的首末点;
plot(a(1,:),a(2,:),':'); % 绘制控制多边形;
hold on; % 默认为hold off,此命令用来保留控制多边形的图形;
for i=1:38; % 由于4个顶点可以确定一条B样条,共有8个控制顶点,可确定5条B样条曲线;
%for i=1:7;
for u=0:0.001:1; % 参数u;
b0=1.0./6.*(1-u).^3; % 基函数b0;
b1=1.0./6.*(3.*u.^3-6.*u.^2+4); % 基函数b1;
b2=1.0./6.*(-3.*u.^3+3.*u.^2+3.*u+1); % 基函数b2;
b3=1.0./6.*u.^3; % 基函数b3;
x=b0.*a(1,i)+b1.*a(1,i+1)+b2.*a(1,i+2)+b3.*a(1,i+3); % 确定曲线的横坐标x;
y=b0.*a(2,i)+b1.*a(2,i+1)+b2.*a(2,i+2)+b3.*a(2,i+3); % 确定曲线的纵坐标y;
line(x,y); % 绘制曲线坐标点;
end
end
hold off;
suffer,问你一下??
一个可能比较弱的问题:你的load c中的c是??我做课题用到matlab生成B样条曲线,正着急找,能在百忙中解答一下吗?谢谢~~:@) 原帖由 baba 于 2006-12-4 10:10 发表一个可能比较弱的问题:你的load c中的c是??我做课题用到matlab生成B样条曲线,正着急找,能在百忙中解答一下吗?谢谢~~:@)
看上面搂住的样子,c应该是他给出的那几个控制顶点,和他后来说的多加的两个顶点吧,搂住看样子是厉害人,如果你有了自己的控制顶点的话,可以命名为C,基本上是可以直接调用搂住的程序的。但还是要修改点的。这是我的理解哈。。。。
是呢?
终于……
我的第一直觉也是控制点,于是我在之前加了》c=......,可运行提示load c出错,你能帮我找一下原因吗?是我的c=......格式有误吗?应该怎么定义c啊那?另外,楼主的程序还要进行什么修改才能运行??难道不是正确的,看起来没什么问题啊??谢谢你:@)等待........
等待楼主的精彩奉献啊......... a=;%增加两个控制顶点(4 6)(4 -1)从而使曲线通过原来的首末点;plot(a(1,:),a(2,:),':'); % 绘制控制多边形;
hold on; % 默认为hold off,此命令用来保留控制多边形的图形;
for i=1:38; % 由于4个顶点可以确定一条B样条,共有8个控制顶点,可确定5条B样条曲线;
%for i=1:7;
for u=0:0.001:1; % 参数u;
b0=1.0./6.*(1-u).^3; % 基函数b0;
b1=1.0./6.*(3.*u.^3-6.*u.^2+4); % 基函数b1;
b2=1.0./6.*(-3.*u.^3+3.*u.^2+3.*u+1); % 基函数b2;
b3=1.0./6.*u.^3; % 基函数b3;
x=b0.*a(1,i)+b1.*a(1,i+1)+b2.*a(1,i+2)+b3.*a(1,i+3); % 确定曲线的横坐标x;
y=b0.*a(2,i)+b1.*a(2,i+1)+b2.*a(2,i+2)+b3.*a(2,i+3); % 确定曲线的纵坐标y;
line(x,y); % 绘制曲线坐标点;
end
end
hold off; a=; % 控制顶点数组;
plot(a(1,:),a(2,:),':'); % 绘制控制多边形;
hold on; % 默认为hold off,此命令用来保留控制多边形的图形;
for i=1:38; % 由于4个顶点可以确定一条B样条,共有8个控制顶点,可确定5条B样条曲线;
%for i=1:7;
for u=0:0.001:1; % 参数u;
b0=1.0./6.*(1-u).^3; % 基函数b0;
b1=1.0./6.*(3.*u.^3-6.*u.^2+4); % 基函数b1;
b2=1.0./6.*(-3.*u.^3+3.*u.^2+3.*u+1); % 基函数b2;
b3=1.0./6.*u.^3; % 基函数b3;
x=b0.*a(1,i)+b1.*a(1,i+1)+b2.*a(1,i+2)+b3.*a(1,i+3); % 确定曲线的横坐标x;
y=b0.*a(2,i)+b1.*a(2,i+1)+b2.*a(2,i+2)+b3.*a(2,i+3); % 确定曲线的纵坐标y;
line(x,y); % 绘制曲线坐标点;
end
end
hold off;
all the thanks for you
谢谢楼主的解答:@)我老把你的名字想成super,大概真是超级,高手的印象吧呵呵。祝好。 我觉得for i=1:38; %for i=1:7;在matlab7.1中,用for i=1:7更好,运行时不会出错回复 10 # 宝宝和豆豆 的帖子
已经预留了,只是被注释掉了
页:
[1]