曲线拟合-B样条曲线(BCB实现)

来源:互联网 发布:阿里云ubuntu镜像下载 编辑:程序博客网 时间:2024/05/16 12:25

源代码如下: 

static float x[n+1]={0,50,100,150,200,250,300,350,400};
static float y[n+1]={0,60,60,80,-100,0,80,-40,80};
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
        int gmode,errorcode;
        int x0,y0,x1,y1,k,j;
        float X,Y; float u;
        Form1->Canvas->Pen->Color = RGB(250,0,0);               //绘制折线
        Form1->Canvas->MoveTo(x[0],-y[0]+100);

        for(k=1;k<=n;k++)
        {
                Form1->Canvas->LineTo(x[k],-y[k]+100);
        }
        Form1->Canvas->Pen->Color = RGB(0,250,255);
        for(k=0;k<=n-2;k++)                                                       //绘制B样曲线
        {
                X=(x[k]+x[k+1])/2;
                Y=(y[k]+y[k+1])/2;
                Form1->Canvas->MoveTo(X,-Y+100);   
                u=0.0;
                for(j=1;j<=m;j++)
                {
                        u=u+1.0/m;
                        X=u*u/2*(x[k]-2*x[k+1]+x[k+2])+u*(x[k+1]-x[k])+(x[k]+x[k+1])/2;
                        Y=u*u/2*(y[k]-2*y[k+1]+y[k+2])+u*(y[k+1]-y[k])+(y[k]+y[k+1])/2;
                        Form1->Canvas->LineTo(X,-Y+100);
                }

        }
}
//---------------------------------------------------------------------------