用MFC作VRP配送路线图.doc_第1页
用MFC作VRP配送路线图.doc_第2页
用MFC作VRP配送路线图.doc_第3页
用MFC作VRP配送路线图.doc_第4页
免费预览已结束,剩余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,penEmpty;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 );rect.left += 6;/18rect.top += 6; /15rect.right -= 6;/10rect.bottom -= 6; /10pWnd-ScreenToClient(&rect);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,iYCenter);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(&pen2);pDC-SelectObject(&pen2);iXNum = 40;/40,20iYNum = 40;/40,15,40iXStep = ( 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-SelectObject(&b);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);elsem_strTest.Format(%d,i);if(i=1)pDC-TextOut(X-xsize-12,Y-4,m_strTest);elseif(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);elsepDC-TextOut(X-xsize,Y+ysize,m_strTest);pDC-MoveTo(X,Y);m_clientrelcordi0=X;m_clientrelcordi1=Y;/改为根据客户所需货物大小画圆形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);elsepDC-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是次好结果,依次类推chro.fCost = 0;/染色体(路线图)格式:0 123 0 456 0 789 0 1011 0 1213 0for(iSubIndex = 0; iSubIndex SelectObject(&penEmpty);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(&rectempty,ps,pe);/pDC-PolyBezier(ps,2);/pDC-Ellipse(X,Y,iXCenter,iYCenter);pDC-LineTo(iXCenter , iYCenter);elsepDC-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 = 0) /从中心出来的第一个节点pDC-SelectObject(&pen2);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(&pen2);X=m_clientrelcordchro.nRoutej-10;Y=m_clientrelcordchro.nRoutej-11;pDC-MoveTo( X , Y );pDC-LineTo(m_clientrelcordchro.nRoutej0,m_cli

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论