如果画折线是不是要用polyline,应该怎么做啊?画光滑曲线要插值吗?

解决方案 »

  1.   

    用样条曲线拟合或者进行插值,样条曲线有如下几类:
    1.基本样条,三次样条,参数样条
    2.Besier样条
    3.B样条(NUBUS曲线)
      

  2.   

    for(i=1;i<=m_areaDy;i++)
    {
         htpoint[i].x=htorgx+(1300/m_areaDx)*i;
         htpoint[i].y=htorgy+(700/m_areaDy)*ht[i];  
    }
    pDC->PolylineTo(&htpoint[i],1);
    这样用polyline对不对啊,为什么我画出来的天马行空的,很乱啊(将ht[i]设为恒值
      

  3.   

    不好意思,pDC->PolylineTo(&htpoint[i],2048);
      

  4.   

    gdiplus Gdiplus::DrawCurve我正在用 效果非常好
      

  5.   

    可以了,呵呵。逻辑坐标如果是 
    pDC->SetMapMode(MM_LOMETRIC);  //0.1mm/logic unit;desired axis
    pDC->SetViewportOrg(30,rect.bottom-35); 
    这样确定的话,跟设备坐标的换算关系是什么那?
      

  6.   

    如果只是为了画图来看,可以不要插值,用下面的函数即可:
    BOOL PolyBezier( 
                   const POINT* lpPoints, //点座标数组
                   int nCount );          //点的个数
    注意,nCount必须为3的倍数再加上1,即3n+1,所以2000个点是不行的,因为2000除以3等于666余2,所以必须是1999个点才行。如果要在光滑曲线上再取点,那就要采用插值的方法。
      

  7.   

    我也不知道怎么搞的,在《visualc++.net图形图象编程》中看到一个三次样条函数的例子,我原装的copy回来用,结果图形非常的乱!,我也不知道是什么原因,可能是我把代码弄错了吧
    这本书是电子工业出版社出版,李兰友等编的,个人感觉这本书还可以/
      

  8.   

    CPoint point[3n+1] ={ CPoint(x1,y1),CPoint(x2,y2),.......};BOOL PolyBezier( 
                   const POINT* lpPoints, //点座标数组
                   int nCount );          //点的个数
    good! thanks smallbull(黑牛) 
      

  9.   

    my23232(hello) ( ) 信誉:100 
    up------------------?
    这也能得20!!!