刚学图形学,看了看贝塞尔曲线的画法,然后实现了,但B样条的公式我怎么也看不懂,网上的程序也都没什么注释,谁能讲讲主要的算法啊?

解决方案 »

  1.   

    我看到的程序好多是这样的
        for(i=0;i<=n-3;i++)   
            {   
                x=((p[i].x+p[i+2].x)/2+2*p[i+1].x)/3;   
                y=((p[i].y+p[i+2].y)/2+2*p[i+1].y)/3;   
                /*d=sqrt(ax*ax+ay*ay)/4;   
                m=sqrt(d/0.01);*/   
                dt=1.0/m;   
                moveto(x,y);   
        for(j=0;j<=m;j++)   
            {   
                  tj=j*dt;   
                  f0=(1.0/6)*(-tj*tj*tj+3*tj*tj-3*tj+1);   
                  f1=(1.0/6)*(3*tj*tj*tj+6*tj*tj+4);   
                  f2=(1.0/6)*(-3*tj*tj*tj+3*tj*tj+3*tj+1);   
                  f3=(1.0/6)*(tj*tj*tj);   
                  x=p[i].x*f0+p[i+1].x*f1+p[i+2].x*f2+p[i+3].x*f3;   
                  y=p[i].y*f0+p[i+1].y*f1+p[i+2].y*f2+p[i+3].y*f3;   
                  lineto(x,y);   
            }   
                  x=((p[i+1].x+p[i+3].x)/2+2*p[i+2].x)/3;   
                  y=((p[i+1].y+p[i+3].y)/2+2*p[i+2].y)/3;   
                  lineto(x,y);   
        
            }   
      }   谁能给我大概解释一下啊。和B样条的公式差挺多啊
      

  2.   

    直接看代码肯定不好懂了,建议你看看《计算机图形学》,Donald Hearn编著,里面专门有贝塞尔和B样条的章节,讲得很清楚,好像也有c代码的.....
      

  3.   

    简单说就是 x、y 是分段的参数方程;x=f(t) y=g(t), t 属于区间1;
    x=m(t) y=n(t), t 属于区间2;