suffer 发表于 2006-11-14 18:19

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;

baba 发表于 2006-12-4 10:10

suffer,问你一下??

一个可能比较弱的问题:你的load c中的c是??我做课题用到matlab生成B样条曲线,正着急找,能在百忙中解答一下吗?谢谢~~:@)

hu47486 发表于 2006-12-4 10:58

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


看上面搂住的样子,c应该是他给出的那几个控制顶点,和他后来说的多加的两个顶点吧,搂住看样子是厉害人,如果你有了自己的控制顶点的话,可以命名为C,基本上是可以直接调用搂住的程序的。但还是要修改点的。这是我的理解哈。。。。

baba 发表于 2006-12-4 16:34

是呢?

baba 发表于 2006-12-4 16:41

终于……

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

eroad 发表于 2006-12-4 19:30

等待........

等待楼主的精彩奉献啊.........

suffer 发表于 2006-12-9 09:57

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 发表于 2006-12-9 09:57

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;

baba 发表于 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更好,运行时不会出错

yunniyu 发表于 2012-6-20 16:58

回复 10 # 宝宝和豆豆 的帖子

已经预留了,只是被注释掉了
页: [1]
查看完整版本: B样条曲线生成程序