我想实现的功能是: 
输入几个点的坐标,和宽度值, 
然后用这几个点画一条折线,然后根据宽度值分别想这条折线的两侧扩充,就形成了一个多边形,因为是两侧扩充,用户可以选择向哪一侧扩充,好比把这个多边形分成两半;用户可任意选择一半来显示。 
用VC6.0和GDI+都行,要怎么实现啊? 如果用一个算法求出一条折线按距离扩充后的点,然后用求出的一侧的点和输入点画多边形就可以实现,但这个算法有点难度,
希望大家帮忙想想。
谢谢各位了 。

解决方案 »

  1.   

    不知道你那个宽度值是怎么定义的,我想最简单的方法就是给原折线上所有点的x坐标加偏移量dx,给所以y坐标加偏移量dy(即平移折线),得到新的折线,然后用这两批点画多边形即可。
      

  2.   

    1,折线也是可以理解为多个直线的。
    2,计算每段直线与水平线的夹角 A
    3,计算与每段直线的垂线与水平线的夹角B
    4,通过偏称量与角B,角A算出线两侧的扩展线的线坐标和线角度,画线
      

  3.   


    VC++6.0下,GDI+代码:
       GraphicsPath pH;                         //定义一个gdi+路径。
        PointF NmlPT[ 6 ]; 
        NmlPT[ 0 ] = PointF(  110,  110 ); NmlPT[ 1 ] = PointF( 310, 110 ); NmlPT[ 2 ] = PointF( 310, 310  ); 
        NmlPT[ 3 ] = PointF( 410,  410  ); NmlPT[ 4 ] = PointF( 410, 510 ); NmlPT[ 5 ] = PointF(  110, 610 );
        pH.AddPolygon( NmlPT, 6 );      //路径中添加一个多边形。
        
        Pen pn(Color(255,0,0,0),1);        //定义原路径使用的画笔。颜色为黑色,宽度为1。
        gra->DrawPath(&pn,&pH);        //绘制原路径。    Pen wdpn( Color(0,0,0,0),16 );   //建立一个扩展画笔 
        pH.Widen(&wdpn);                    //用这个画笔扩充路径。    pH.Outline();                               //取得路径的轮廓,这一步是必须的。
        pn.SetColor(Color(255,255,0,0));//用红色画笔绘制扩充后的路径。
        gra->DrawPath(&pn,&pH);    PathData pd;                                //建立一个PathData变量
        pH.GetPathData(&pd);             //取得扩充后路径的PathData,PathData中存储了路径上所有的关键点    //下面我仅仅是简单的将路径内外的点分开了,其中PathData中前面6个点是原多边形外面的点,后面6个点是原多边形内部的六个点。
         //注意这里的前六个点并不一定就是外面的点,需要根据路径的情况判断,具体的判断方法在这里就不说了。
        for( INT id = 0; id< pd.Count/2; id ++ )                 //用浅绿色绘制前六点。
        {
            Pen pm( Color( 255,0,255,255 ), 2 );     
            gra->DrawEllipse(&pm,pd.Points[id].X-3,pd.Points[id].Y-3,REAL(6),REAL(6) );
        }    for( INT idx = pd.Count/2; idx< pd.Count; idx ++ )  //用蓝色绘制后六个点。
        {
            Pen pm( Color( 255,0,0,255 ), 2 );
            gra->DrawEllipse(&pm,pd.Points[idx].X-3,pd.Points[idx].Y-3,REAL(6),REAL(6) );
        }上面的代码是一个比较成熟的代码了。 不过还是要看看那里面的注意事项。
      

  4.   

    http://blog.csdn.net/sunyeyi/archive/2008/02/24/2116985.aspx