我想实现的功能是:
输入几个点的坐标,和宽度值,
然后用这几个点画一条折线,然后根据宽度值分别想这条折线的两侧扩充,就形成了一个多边形,因为是两侧扩充,用户可以选择向哪一侧扩充,好比把这个多边形分成两半;用户可任意选择一半来显示。
用VC6.0和GDI+都行,要怎么实现啊? 如果用一个算法求出一条折线按距离扩充后的点,然后用求出的一侧的点和输入点画多边形就可以实现,但这个算法有点难度,
希望大家帮忙想想。
谢谢各位了 。
输入几个点的坐标,和宽度值,
然后用这几个点画一条折线,然后根据宽度值分别想这条折线的两侧扩充,就形成了一个多边形,因为是两侧扩充,用户可以选择向哪一侧扩充,好比把这个多边形分成两半;用户可任意选择一半来显示。
用VC6.0和GDI+都行,要怎么实现啊? 如果用一个算法求出一条折线按距离扩充后的点,然后用求出的一侧的点和输入点画多边形就可以实现,但这个算法有点难度,
希望大家帮忙想想。
谢谢各位了 。
2,计算每段直线与水平线的夹角 A
3,计算与每段直线的垂线与水平线的夹角B
4,通过偏称量与角B,角A算出线两侧的扩展线的线坐标和线角度,画线
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) );
}上面的代码是一个比较成熟的代码了。 不过还是要看看那里面的注意事项。