定义了一个数组POINT  CollectPoints[21000];然后采集得到每个点的数据;
请问如何根据这些采集到的点,绘制出平滑的曲线,一定要平滑哦,谢谢。

解决方案 »

  1.   

    要平滑就需要反走样,GDI函数不支持,可以使用GDI+函数Graphics::DrawCurve或者Graphics::DrawLines。另外你的数组这么大,绘制的时候一般一个屏幕容不下,需要截取部分,正确设置函数参数。
      

  2.   

    那你最好用gdi+
    =====================
    另外你需要把你的数组映射到屏幕上,否则按照时间点的话你显示不下
      

  3.   

    可以使用GDI+函数Graphics::DrawCurve或者Graphics::DrawLines。比较好用,我的采集点没有这没多,平滑的非常漂亮.
      

  4.   

    你的问题事实上是一个曲线拟合的问题.处理方法:
    1.采集原始数据集,即point点集;
    2.对这些点进行曲线拟合处理后,产生新的曲线点集;
    3.用新点集进行绘制,保证是连续光滑的曲线.
      

  5.   

    Curve样式:
    http://img.ddvip.com/2008_11_13/1226541510_ddvip_1374.gif一个简单的画Curve代码:
    Pen greenPen(Color(255, 0, 255,  0), 10);

    PointF points[] = {
    PointF( 20.0f , 20.0f  ),
    PointF( 160.0f, 100.0f ),
    PointF( 140.0f, 60.0f  ),
    PointF( 60.0f , 100.0f ),
    PointF( 40.0f , 180.0f ),
    PointF( 160.0f , 150.0f ),
    PointF( 200.0f , 200.0f ),};

    GraphicsPath path;
    path.AddCurve(points, 7);

    graphics.DrawPath(&bluePen, &path);
      

  6.   

    LZ可以去搜Cardinal B-Spline,应该就是LZ想要的。
      

  7.   

    1)使用Bezier曲线或G光滑曲线
       如可以使用2次Bezier曲线:以两个点作为第一锚点和控制点,以控制点到另顶点如第三个顶点的1/2作为第二锚点;同时以该锚点作为下一个曲线的第一锚点,第四点作为第二曲线的控制点。如此,得到一系列的点,分别依照这些点绘制2次Bezier曲线,及所有曲线是光滑的,且在连接点是光滑的;所有2次Bezier曲线连成的曲线一定是光滑的;
       当然,效果要好些可以使用3次或更高次的Bezier曲线,这个看您对算法复杂度的要求
    2)单纯线的局部光滑使用抗锯齿就可以了,最简单的是使用SuperSample就可以了;以上两点在OpenVG都有支持,我有完整的库提供,有兴趣可以去我的Blog下载
      

  8.   

        参考我的文章:
    抛物样条曲线的原理说明及画抛物曲线的一个类http://blog.csdn.net/clever101/archive/2006/06/03/771160.aspx