wwg.no.19 发表于 2007-11-5 20:48

编写B样条基函数程序时遇到问题

正在编写拟合非均匀有理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 编辑 ]

cleverblue 发表于 2008-11-19 15:38

不知你现在解决了这个问题没有,希望能共同讨论
页: [1]
查看完整版本: 编写B样条基函数程序时遇到问题