用mfc作vrp配送路线图

上传人:wt****50 文档编号:35815750 上传时间:2018-03-20 格式:DOC 页数:5 大小:52.50KB
返回 下载 相关 举报
用mfc作vrp配送路线图_第1页
第1页 / 共5页
用mfc作vrp配送路线图_第2页
第2页 / 共5页
用mfc作vrp配送路线图_第3页
第3页 / 共5页
用mfc作vrp配送路线图_第4页
第4页 / 共5页
用mfc作vrp配送路线图_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《用mfc作vrp配送路线图》由会员分享,可在线阅读,更多相关《用mfc作vrp配送路线图(5页珍藏版)》请在金锄头文库上搜索。

1、用 MFC 作 VRP 配送路线图以下示例代码是车辆调度路线图形表示,用 MFC 实现。 说明:画 VRP 路线图:数字 0 代表配送中心,其它非 0 数字代表各个客户,圆点代表客户 所需客户量,圆点越大,表示该客户所需货物越多,反之,越少;实线代表车辆非空载配 送线路,虚线代表车辆本次为若干个客户配送货物完毕,空车返回配送中心 void CvrpView:DrawCordTrend() CWnd* pWnd; POINT ps2; CString strFlag,str; CRect rect,rectempty; CDC* pDC; CPen pen,*pOldPen,pen2,penEm

2、pty;CBrush brush,*pOldBrush; POINT ptOrig; COLORREF crRef; int i,iXNum,iYNum,iXStep,iYStep; long iXCenter,iYCenter,X,Y,xsize,ysize;double dAltiMax,dAltiMin,dLongMax,dLongMin,dLatiMax,dLatiMin;pWnd = (CStatic*)GetDlgItem( IDC_STATIC_TREND ); pWnd-Invalidate( );pWnd-GetWindowRect( rect.left += 6;/18 r

3、ect.top += 6; /15 rect.right -= 6;/10 rect.bottom -= 6; /10 pWnd-ScreenToClient(ptOrig.x = rect.left; ptOrig.y = ( rect.bottom + rect.top ) / 2 ;iXCenter = ( rect.left + rect.right ) / 2 ; iYCenter = ( rect.bottom + rect.top ) / 2 ; /iYCenter = rect.bottom;m_strTest.Format(“X=%d,Y=%d“,iXCenter,iYCen

4、ter);pDC = pWnd-GetDC();/背景透明pDC-SetBkMode( TRANSPARENT );/通用笔,灰白色 /pen2.CreatePen(PS_SOLID,1,RGB(128,128,128) ); pen2.CreatePen(PS_SOLID,1,RGB(0,0,255) );/pen.CreatePen(PS_SOLID,1,RGB(0,126,0) );/蓝色/画空载返回的笔 penEmpty.CreatePen(PS_DOT,1,RGB(0,0,0) );/1 点宽 pOldPen = pDC-SelectObject(pDC-SelectObject(

5、iXNum = 40;/40,20 iYNum = 40;/40,15,40 iXStep = ( rect.right - rect.left ) / (2*iXNum); iYStep = ( rect.bottom - rect.top ) / (2*iYNum);/画所有点 m_clientrelcord00=iXCenter; m_clientrelcord01=iYCenter; xsize=ysize=0;/CBrush b(RGB(0,0,255);/蓝色 CBrush b(RGB(255,0,0);/红色 CBrush *pOldbBrush = pDC-SelectObje

6、ct(for(i=0;i=1) xsize =m_clientreqi / 4; ysize =m_clientreqi / 4; X=m_clientcordi0*iXStep; Y=-m_clientcordi1*iYStep; X+=iXCenter; Y+=iYCenter; pDC-MoveTo(X,Y); if(i=0) m_strTest=“0“; /pDC-TextOut(X-4,Y+3,m_strTest); pDC-TextOut(X,Y,m_strTest); else m_strTest.Format(“%d“,i); if(i=1) pDC-TextOut(X-xsi

7、ze-12,Y-4,m_strTest); else if(i=7 | i=11 | i=8) pDC-TextOut(X+xsize+2,Y-4,m_strTest); else if(i=14) pDC-TextOut(X-10,Y-ysize-16,m_strTest); else if(i=4) pDC-TextOut(X-16,Y-ysize,m_strTest); else pDC-TextOut(X-xsize,Y+ysize,m_strTest); pDC-MoveTo(X,Y); m_clientrelcordi0=X; m_clientrelcordi1=Y;/改为根据客户

8、所需货物大小画圆形 pDC-Ellipse(X-3,Y-3,X+3,Y+3); if(i) pDC-Ellipse(X-3-xsize,Y-3-ysize,X+3+xsize,Y+3+ysize); else pDC-Ellipse(X-3,Y-3,X+3,Y+3); pDC-SelectObject(pOldbBrush);/画路线图 float fload,fcurrcost =0; int j=0; int iSubIndex=0; BOOL bCenter = TRUE;fload=0; chromo chro=m_chromo0;/m_chromo0是最好结果,m_chromo1是次

9、好结果,依次类推 chro.fCost = 0;/染色体(路线图)格式:0 123 0 456 0 789 0 1011 0 1213 0 for(iSubIndex = 0; iSubIndex SelectObject( X=m_clientrelcordchro.nRoutej-10; Y=m_clientrelcordchro.nRoutej-11;if(chro.nRoutej-2=0)/只有一个节点 ps0.x=X; ps0.y=Y; ps1.x=iXCenter; ps1.y=iYCenter; pDC-MoveTo(X+3 , Y-1); /pDC-Chord( /pDC-Po

10、lyBezier(ps,2); /pDC-Ellipse(X,Y,iXCenter,iYCenter); pDC-LineTo(iXCenter , iYCenter); else pDC-LineTo(iXCenter , iYCenter);/空车返回时,增画箭头 /pDC-MoveTo( iXCenter , iYCenter ); /pDC-LineTo(iXCenter-3 , iYCenter-3); j+; break; /fcurrcost *= m_distance0m_chromoiIndex.nRoutej; else /中间客户 if(chro.nRoutej-1 =

11、0) /从中心出来的第一个节点 pDC-SelectObject( pDC-MoveTo( iXCenter , iYCenter );pDC-LineTo(m_clientrelcordchro.nRoutej0,m_clientrelcordchro.nRoutej1); else /非第一个节点 fload -= m_clientreqchro.nRoutej-1; fcurrcost += fload*m_distancechro.nRoutej-1chro.nRoutej; pDC-SelectObject( X=m_clientrelcordchro.nRoutej-10; Y=m_clientrelcordchro.nRoutej-11; pDC-MoveTo( X , Y ); pDC- LineTo(m_clientrelcordchro.nRoutej0,m_clientrelcordchro.nRoutej1); j+; /end of: while(true)/end of:for(iSubIndex = 0; iSubIndex SelectObject( pOldPen ); pDC-SelectObject( pOldbBrush ); ReleaseDC( pDC ); pDC = NULL;运行结果示意图:

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号