很多方法可以实现,比较简单的一种是采用
Y = aX^6 + bX^5 + ... + fX + c 合成。
要更光滑的,不同弧度的可以采用其它方法。具体实现应该不难吧?

解决方案 »

  1.   

    楼上的,六个点,一个五次函数就好了吧
    y=ax^5 + bx^4 + cx^3 + dx^2 + ex + f
    把这六点代入,然后解这个六元一次方程组就好了
      

  2.   

    采用贝塞尔曲线拟合
    好象Windows有API
      

  3.   

    如果不用得到具体的方程式的话,用PolyBezier函数吧,不过它需要4n-1个点,你是6个点的话,把第一个点同时算成第7个点好了.
      

  4.   

    嘿嘿
    我好像有这本书,回去查查看,有代码的话贴给你。
    我觉得我上面那个思路是对的,六元一次方程组很容易解吧
    至于画吗,找些点setpixel就成
      

  5.   

    上铺的弟兄,后插入的几个点是如何算出来的??望告知
    to adone(阿不)候君佳音
      

  6.   

    上铺的弟兄,后插入的几个点是如何算出来的??望告知
    to adone(阿不)候君佳音
      

  7.   

    到开发中心,我以前贴过一个有源代码的
    或者到我网站http://breath.onchina.net上去看,在VC专题中有算法的例子
      

  8.   

    什么叫六元一次方程组?!有没有搞错!应该叫一元n次多项式.
    最小二乘法误差很大, 况且你事先并不知道这些点就一定满足某个
    有人在csdn上贴的最小二乘法曲线拟合算法有错,http://www.csdn.net/develop/read_article.asp?id=2369.
    只是要光滑的话贝塞尔曲线拟合很好.
    如果你用delphi这根本不是问题.Tchart自带了贝塞尔曲线拟合.
      

  9.   

    #include<graphics.h>
    #include<conio.h>
    void calc(int*,int*,int);
    void main()
    {
      const int n=6;
      int x[n+2]={0,20,80,300,500,400,100},y[n+2]={0,120,80,20,250,300,100};
      int gd=DETECT,gm,i;
      registerbgidriver(EGAVGA_driver);//这里注意可以改改
      initgraph(&gd,&gm,"");
      for(i=1;i<=n;i++)circle(x[i],y[i],2);
      calc(x,y,n);
      getch();
      closegraph();
    }void calc(int *x,int *y,int n)
    {
        const int k=100;//调整这个可以调整精度
        register int i,j;
        double t1,t2,t3,t,a,b,c,d,tx,ty;
        x[0]=x[1];y[0]=y[1];
        x[n+1]=x[n];y[n+1]=y[n];
        t=0.5/k;
        moveto(x[1],y[1]);
        i=0;
        for(i=0;i<n-1;i++)
    for(j=1;j<k;j++){
        t1=j*t;
        t2=t1*t1;
        t3=t2*t1;
        a=4*t2-t1-4*t3;
        b=1-10*t2+12*t3;
        c=t1+8*t2-12*t3;
        d=4*t3-2*t2;
        tx=a*x[i]+b*x[i+1]+c*x[i+2]+d*x[i+3]+.5;
        ty=a*y[i]+b*y[i+1]+c*y[i+2]+d*y[i+3]+.5;
        lineto(tx,ty);
    }
        lineto(x[i+2],y[i+2]);
    }