刚写了一个曲线绘制控件,不过还有如下两点没有实现,觉得难度较大(第一个)
1,有两个点的坐标,怎么算出曲线的走向?也就是说第一点和第二点之间没有值,但是我要根据鼠标当前的位置,来求出它的值(虽然它不存在)
2,绘制平滑的曲线脑壳都要弄烂了,大侠帮忙呀!!!
先谢谢了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1

解决方案 »

  1.   

    曲线有很多种方式啊.一般用插值法或拟合法用二次曲线近似就可以了,学过数值分析吗?程序里常用的是BRep曲线.
      

  2.   

    TO: zhzwang(志志王) 
    数值分析没有学过,能不能提供点实现代码?
    你说的是平滑曲线的实现方法,我的第一个问题有办法实现吗?
      

  3.   

    程序是这样的
    struct tagPoint
    {
    int value;
    CTime time;
    };struct Curves
    {
        CList<tagPoint,tagPoint> curve;
    };我要根据tagPoint的值进行曲线绘制,绘制完后,当鼠标在曲线控件上移动时,根据鼠标的坐标值,在窗口上显示当前坐标的时间表和低压值,好像有算法可以确定走向从而算出当前坐标处的低压值和时间值
      

  4.   

    给你个公式参考一下吧
    Pn(x)=Σ(yi*W(x)/(x1-x2)W’(x2))
    W(x)=(x-x0)(x-x1)……(x-xi)
    其中i是下标,Pn(x)是所求
      

  5.   

    TO:zhzwang(志志王) 
    你可能误解了我的意思,我的意思是,鼠标的坐标点并不影响绘制曲线,只是当鼠标在曲线上移动时,显示当前鼠标位置处的曲线值(低压值和时间值)---相当于一个提示信息而已
    光滑是曲线的绘制要求
      

  6.   

    TO:nicewinter(新思路)
    能讲讲这个公式是什么干什么的吗?
      

  7.   

    拉格朗日插值公式,n代表次数。比如n=2时形式如下ax^2+bx+c。这样用可能不太好,但是对于三个点应该可以吧。很久以前学的,具体用法不太记得了,你可以按方程试试看画平滑曲线。我能做的可能就这么多了,如果可以,明天我可以帮你试一下。今天不行了。
    这个方程也是数值分析中的东西。你可以上网查一下
      

  8.   

    TO: zhzwang(志志王)
    谢谢你热心的帮助,曲线是肯定要画的,目前还没有解决平滑的问题,能不能给出曲线平滑部份的代码???
      

  9.   

    TO: zhzwang(志志王)
    告诉QQ行不,那上面聊方便点