请问:比如已知10个点坐标乃至更多,(x1,y1),(x2,y2),(x3,y3),(x4,y4),(x5,y5),(x6,y6),(x7,y7),(x8,y8),(x9,y9),(x10,y10),怎样画这条曲线。有没有这个功能的函数,是哪个?请教!!!

解决方案 »

  1.   

    构造并绘制曲线
    GDI+ 支持多种类型的曲线:椭圆、弧形、基数样条和贝塞尔样条。椭圆是由其边界矩形定义的;弧是椭圆的一部分,由一个起始角和一个扫描角定义。基数样条由一系列点和张力参数定义,即曲线平滑地通过系列中的每个点,张力参数影响曲线的弯曲方式。贝塞尔样条由两个端点和两个控制点定义,即该曲线不通过控制点,但是控制点影响曲线从一个端点到另一个端点时的方向和弯曲程度。
    绘制基数样条曲线
    基数样条是平滑通过一组给定点的曲线。若要绘制基数样条,请创建 Graphics 对象并将一个点的数组的地址传递给 DrawCurve 方法。下面的示例绘制了一条通过五个指定点的钟形基数样条。
    Point points[] = {Point(0, 100),
                      Point(50, 80),
                      Point(100, 20),
                      Point(150, 80),
                      Point(200, 100)};Pen pen(Color(255, 0, 0, 255));
    graphics.DrawCurve(&pen, points, 5);
    下面的插图显示该曲线和五个点。
     
    使用 Graphics 类的 DrawClosedCurve 方法可绘制闭合的基数样条。在闭合的基数样条中,曲线连续通过序列中最后一个点,并与序列中的第一个点连接。
    下面的示例绘制了一条通过六个指定点的闭合的基数样条。
    Point points[] = {Point(60, 60),
       Point(150, 80),
       Point(200, 40),
       Point(180, 120),
       Point(120, 100),
       Point(80, 160)};Pen pen(Color(255, 0, 0, 255));
    graphics.DrawClosedCurve(&pen, points, 6);
    下面的插图显示闭合的样条和六个点。
     
    通过将张力参数传递给 DrawCurve 方法,可更改基数样条的弯曲方式。下面的示例绘制了三条通过同一组点的基数样条。
    Point points[] = {Point(20, 50),
                      Point(100, 10),
                      Point(200, 100),
                      Point(300, 50),
                      Point(400, 80)};Pen pen(Color(255, 0, 0, 255));
    graphics.DrawCurve(&pen, points, 5, 0.0f);  // tension 0.0
    graphics.DrawCurve(&pen, points, 5, 0.6f);  // tension 0.6
    graphics.DrawCurve(&pen, points, 5, 1.0f);  // tension 1.0
    下面的插图显示三条样条及其张力值。请注意,当张力为 0 时,这些点由一条直线连接。
     
    绘制贝塞尔样条
    用四个点定义一条贝塞尔样条:一个起点、两个控制点和一个终点。下面的示例绘制了一条起点为 (10, 100)、终点为 (200, 100) 的贝塞尔样条。两个控制点分别为 (100, 10) 和 (150, 150)。
    Point p1(10, 100);   // start point
    Point c1(100, 10);   // first control point
    Point c2(150, 150);  // second control point
    Point p2(200, 100);  // end point
    Pen pen(Color(255, 0, 0, 255));
    graphics.DrawBezier(&pen, p1, c1, c2, p2);
    下面的插图显示产生的贝塞尔样条及其起点、控制点和终点。该插图还显示样条的凸包络,凸包络是通过将这四个点用直线相连而形成的多边形。
     
    可使用 Graphics 类的 DrawBeziers 方法绘制相连的贝塞尔样条序列。 下面的示例绘制一条由两条相连的贝塞尔样条组成的曲线。第一条贝塞尔样条的终点是第二条贝塞尔样条的起点。
    Point p[] = {
       Point(10, 100),   // start point of first spline
       Point(75, 10),    // first control point of first spline
       Point(80, 50),    // second control point of first spline
       Point(100, 150),  // end point of first spline and 
                         // start point of second spline
       Point(125, 80),   // first control point of second spline
       Point(175, 200),  // second control point of second spline
       Point(200, 80)};  // end point of second spline
    Pen pen(Color(255, 0, 0, 255));
    graphics.DrawBeziers(&pen, p, 7);
    下面的插图显示相连的样条和这七个点。
     
      

  2.   

    GDI+,还没有去弄过。顶一下。