声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1307|回复: 1

[编程技巧] 编写B样条基函数程序时遇到问题

[复制链接]
发表于 2007-11-5 20:48 | 显示全部楼层 |阅读模式

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

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

x
正在编写拟合非均匀有理B样条曲线的程序,编写B样条基函数的时候遇到了大问题,基函数中出现了无穷大,以下是我写的程序,请高手帮忙修改一下,注:用三点来拟合
function o=op1()
syms x0 y0 x1 y1 x2 y2 alph0 alphx u ux j N;
x(1)=input('x0=');
y(1)=input('y0=');
x(2)=input('x1=');
y(2)=input('y1=');
x(3)=input('x2=');
y(3)=input('y2=');
alphx(1)=0;
j=0;
%总共生成两个alphx(2),alphx(3)
for i=2:1:3
    alphx(i)=alphx(i-1)+sqrt((x(i)-x(i-1))^2+(y(i)-y(i-1))^2);
end
%生成各个u
for i=1:1:9
    if i<=4
        u(i)=alphx(1);
    else if i<=5
            u(i)=alphx(i-3);
        else u(i)=alphx(3);
        end
    end
end
%以下编制基函数程序
for i=1:1:3
      %求零次和一次
      N(i,1)=1;
      N(i,2)=(ux-u(i))/(u(i+1)-u(i))+(u(i+1+1)-ux)/(u(i+1+1)-u(i+1));
      %预求N(i+1,2)
      N(i+1,2)=(ux-u(i+1))/(u(i+1+1)-u(i+1))+(u(i+1+1+1)-ux)/(u(i+1+1+1)-u(i+1+1));
      %求二次用到了N(i+1,2),所以以上要出现
      N(i,3)=(ux-u(i))*N(i,2)/(u(i+2)-u(i))+(u(i+2+1)-ux)*N(i+1,2);
      %预求N(i+1+1,2)
      N(i+1+1,2)=(ux-u(i+1+1))/(u(i+1+1+1)-u(i+1+1))+(u(i+1+1+1+1)-ux)/(u(i+1+1+1+1)-u(i+1+1+1));
      %预求N(i+1,3),用到了N(i+1,2),N(i+1+1,2),所以以上要出现
      N(i+1,3)=(ux-u(i+1))*N(i+1,2)/(u(i+1+2)-u(i+1))+(u(i+1+2+1)-ux)*N(i+1+1,2)/(u(i+1+2+1)-u(i+1+1));
      %求三次用到了N(i+1,3),所以以上要出现
      N(i,4)=(ux-u(i))*N(i,3)/(u(i+3)-u(i))+(u(i+3+1)-ux)*N(i+1,3);
end
N

[ 本帖最后由 eight 于 2007-11-5 22:37 编辑 ]
回复
分享到:

使用道具 举报

发表于 2008-11-19 15:38 | 显示全部楼层
不知你现在解决了这个问题没有,希望能共同讨论
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-19 14:37 , Processed in 0.057034 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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