我用一组数据绘制了时间、温度的曲线,在曲线上的两点之间分布的不规律的点,我想在这两点间不增加点的情况下使两点分布的点连接后变为弧形线,类似反比例函数第四象限的样子,怎么实现啊。请高手知道啊。
X轴为时间,Y轴为温度
http://photo.163.com/phgfdk@126/big/#aid=225455034&id=7060956296
http://photo.163.com/phgfdk@126/big/#aid=225455034&id=7060986332
两幅图中蓝色线是变换前后的样子。使用一个按钮点击控制变成这样

解决方案 »

  1.   

    三次样条差值,可不可以解决你的问题。
    struct   Point2d   {double   X,   Y;}; 
    //3次B样条曲线 
    void   Calc3BSpline(const   Point2d   &p1, 
                                        const   Point2d   &p2, 
                                        const   Point2d   &p3, 
                                        const   Point2d   &p4, 
                                        const   int           num,     //插入的点数 
                                        FcPoint2d           *pt)     //结果,pt数组的大小应为num+1 

        double   t;     for(int   i=0;   i   <=   num;   i++) 
        { 
            t=double(i)/double(num); 
            
            pt[i].X=((     -p1.X   +   3*p2.X   -   3*p3.X   +   p4.X)*t*t*t   + 
                              (   3*p1.X   -   6*p2.X   +   3*p3.X               )*t*t   + 
                              (-3*p1.X                     +   3*p3.X               )*t   + 
                              (       p1.X   +   4*p2.X   +       p3.X               ))/6.0f;         pt[i].Y=((     -p1.Y   +   3*p2.Y   -   3*p3.Y   +   p4.Y)*t*t*t   + 
                              (   3*p1.Y   -   6*p2.Y   +   3*p3.Y               )*t*t   + 
                              (-3*p1.Y                     +   3*p3.Y               )*t   + 
                              (       p1.Y   +   4*p2.Y   +       p3.Y               ))/6.0f; 
        } 

    //------------------------------------------------------------------------ 
    还可以参见http://blog.sina.com.cn/s/blog_4c8b0d60010008n6.html
      

  2.   

    插值,考虑cosine插值(只需两个相邻端点)、Spline、Cubic、Hermite插值(考虑四个相邻端点)
    看看是不是你想要的
    http://paulbourke.net/miscellaneous/interpolation/
      

  3.   


    BOOL PolyBezier(
       const POINT* lpPoints,
       int nCount 
    );