C++AGV-路徑規(guī)劃與運行仿真程序文件_第1頁
C++AGV-路徑規(guī)劃與運行仿真程序文件_第2頁
C++AGV-路徑規(guī)劃與運行仿真程序文件_第3頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、程序代碼#in clude<iostream.h>#in clude<fstream.h>#in clude<graphics.h>#in clude<c oni o.h>#in clude<math.h>#in clude<stri ng.h>#in clude<stdio.h>#defi ne MAX 100#defi ne maxD 99999class CFixedMapstruct Coordin ateint x;int y;int num;/記錄點的結構體struct combpint x1,y1

2、;int x2,y2;/連通點坐標struct Comb nameint nu m1;int nu m2;/連通點名public:int mVexNum;/頂點數(shù)int mEdgNum;/邊數(shù)double mMatrixMAXMAX; /鄰接矩陣Comb name combMAX; /連通點名combp cpMAX;/連通點坐標Coordi nate mVexsMAX; /頂點集合int getx(i nt n 1);int gety(i nt n 2);void In put();以文件方式輸入地圖信息void ShowM ap();/easyx顯示地圖;int CFixedMap:getx

3、(i nt n1)int x=0;for(i nt i=O;i<mVexNum;i+) if(n 1=mVexsi. num) x=mVexsi.x;return x; int CFixedMap:gety(int n2)int y=0;for(i nt i=O;i<mVexNum;i+) if(n 2=mVexsi. num) y=mVexsi.y;return y; void CFixedMap:I nput()int panju;1:是,2:否char fname10="map2.txt" cout<<"是否載入默認地圖?cin>

4、; >panju;if(panju=2)cout<<"請輸入地圖信息文件名cin>> fname;ifstream file(fname);char use1100;char use2100;char use3100;char use4100; /use file>>use1; file»mVexNum;/file>>use2;file>>mEdgNum;/file>>use3;for(i nt i=0;i<mVexNum;i+) / 數(shù)組用來儲存提示信息。端點個數(shù)邊數(shù)輸入所有點的信息fil

5、e»mVexsi. num> >mVexsi.x»mVexsi.y;file>>use4;for(i=0;i<mEdgNum;i+) /輸入連通點編號file»combi. nu m1»combi. nu m2;file.close();/easyx 顯示地圖void CFixedMap:ShowM ap()初始化繪圖環(huán)境in itgraph(800,600,SHOWCONSOLE| NOCLOSE); /setbkcolor(WHITE); /設置背景色cleardevice(); /setfillcolor(BLACK)

6、; /用背景色清空屏幕設置填充色/畫頂點for(i nt i=O;i<mVexNum;i+)fillcircle(mVexsi.x,mVexsi.y,5); settextcolor(BLACK);char sMAX;spri ntf(s, "%d", i+1);outtextxy(mVexsi.x-10,mVexsi.y-20,s); /給實際連通的頂點連線setli necolor(RGB(0,0,0);setli nestyle(PS_SOLID,6,NULL,O);for(i=0;i<mEdgNum;i+)cpi.x1=getx(combi. nu m1

7、);cpi.y1=gety(combi. nu m1);cpi.x2=getx(combi. nu m2);cpi.y2=gety(combi. nu m2);lin e(cpi.x1,cpi.y1,cpi.x2,cpi.y2); class CPathPla n:public CFixedMappublic:in t pathMAX;/存放最后一個點double distMAX;/存放路徑距離in t v0;/起始點int route40;/路徑int rnum;/路徑頂點數(shù)Coordi nate rpoi ntsMAX;路徑點集void Map toGraph();void Dijstra

8、();void Putpath();;void CPathPla n:M aptoGraph()rnum=0;int a,b,x,y;for(i nt i=O;i<mVexNum;i+)for(i nt j=O;j<mVexNum;j+)if(i=j) mMatrixij=0;else mMatrixij=maxD;for(i=0;i<mEdgNum;i+)if (combi. nu m1)a=combi. nu m1-1;b=combi. nu m2-1; x=mVexsa.x-mVexsb.x; y=mVexsa.y_mVexsb.y; mMatrixab=sqrt(x*

9、x+y*y); mMatrixba=sqrt(x*x+y*y); void CPathPla n:Dijstra()cout<<"輸入起點:"cin> >vO;vO_;int sMAX;in t v;int i;int j;int w;double mi n;for(v=0;v<mVexNum;v+) / 初始化 S,dist,pathsv=0;0表示未求出最短路徑distv=mMatrixvOv; /開始時假定為最短路徑if(distv<maxD && v!=vO)pathv=vO; /直達情況else pathv=-1

10、;/無直達路徑distv0=0;/初始時v0屬于s集,v0到v0路徑最短sv0=1;for(i=1;i<mVexNum;i+) /假設由一個中轉點到達會近些,驗證。再假設由兩個中轉點到達會近些,驗證。窮舉mi n=maxD;for(w=0;w<mVexNum;w+) /找一個最近到的點,下標裝入vif(sw=0 && distw<min) /點 w不屬于 s 集且離 v0 更近v=w;/經(jīng)點w中轉min=distw;sv=1;/ 將v并入S,由v0到達v點最短距離為 min,假設由v0到v再由v到其余各點,更新當前最后一個點與距離for(j=0;j<mV

11、exNum;j+)if(sj=0 && (mi n+mMatrixvj<distj) /如果多經(jīng)過一個點v到點j的距離更短,更新distj=mi n+mMatrixvj;pathj=v; /點的序號void CPathPla n:Putpath()int opp20;int乙int i=0;cout<<"輸入終點:"cin> >z;z-;int next;ofstream file2("fops.txt");if(distz<maxD && z!=vO) /如果有路徑oppi+=mVex

12、sz. num; / 終點n ext=pathz;/第一個點while( next!=vO)oppi+=mVexs next, num;n ext=path next; /下一個點oppi=mVexsv0, num;file2<<" 路徑長度為:"<<distz<<'n:II起點v0和最短路徑 else if(z!=v0) II無路徑file2<<mVexsz, num<<"<-"<< mVexsvO. num<<"no path"<

13、;<'n:for(i nt j=O;j<i+1;j+)routej=oppi-j;file2<<"路徑為:"for(j=0;j<i;j+)file2<<routej<<"->"rnum=i+1;file2<<routei;file2.close();for(i=0;i<rnum;i+)rpoi ntsi.x=getx(routei);rpoi ntsi.y=gety(routei);rpoi ntsi. num=routei;class CAGVint speed; I

14、IAGV速度int width; IIAGV寬度int len gth; IIAGV長度public:CAGV();in t getl();int getw();in t gets();;CAGV:CAGV()否)"int panju;cout<<"是否自動設置 AGV信息? (1:是,2: cin> >panju;speed=8;width=6;len gth=6;if(panju=2)cout<<"輸入 AGV的長:"cin> >le ngth;cout<<"輸入 AGV的寬:&q

15、uot;cin> >width;cout<<"輸入 AGV的速度(1-10):"cin> >speed;int CAGV:getl()return len gth;int CAGV:getw()return width;int CAGV:gets()retur n speed;class CAGVShow:public CPathPla n,public CAGVpublic:#define k (abs(y2_y1)/(abs(x1_x2)int a,b,c,d;int x1,x2,y1,y2;int i,j;int l,w,s;voi

16、d show();;void CAGVShow:show()l=getl();w=getw();s=11-gets();for(i nt o=0;o<rnum ;o+)if(o+1=rnu m)break;x1=rpo in tso.x;x2=rpo in tso+1.x;y1=rpoi ntso.y;y2=rpoi ntso+1.y;if(y1!=y2&& x1!=x2)if(x2>x1 &&y2>y1)for(j=1;j<x2-x1;j+)a=x1+j-l;b=y1+j*k+w;c=x1+j+l;d=y1+j*k-w;setfillc

17、olor(RGB(0,0,0);recta ngle(a,b,c,d);clearrecta ngle(a-1,b-k,c,d-k);setl in ecolor(RED);lin e(x1+j,y1+j*k,x2,y2);setli necolor(GREEN);lin e(x1,y1,x1+j,y1+j*k); if(j%2=0) setfillcolor(RGB(255,255,0); circle(x2,y2,5);Sleep(s);if(x2<x1 &&y2<y1)for(j=1;j<x1-x2;j+)a=x1-j-l; b=y1-j*k+w;c=x

18、1-j+l;d=y1-j*k-w; setfillcolor(RGB(0,0,0); recta ngle(a,b,c,d);clearrecta ngle(a-1,b-k,c,d-k); setl in ecolor(RED);lin e(x1-j,y1-j*k,x2,y2);setli necolor(GREEN);lin e(x1,y1,x1-j,y1-j*k); if(j%2=0) setfillcolor(RGB(255,255,0); circle(x2,y2,5); Sleep(s);if(x2<x1 &&y2>y1)for(j=1;j<x1-x

19、2;j+)a=x1-j-l; b=y1+j*k+w;c=x1-j+l; d=y1+j*k-w; setfillcolor(RGB(0,0,0);recta ngle(a,b,c,d); clearrecta ngle(a-1,b-k,c,d-k); setl in ecolor(RED);lin e(x1-j,y1+j*k,x2,y2); setli necolor(GREEN);lin e(x1,y1,x1-j,y1+j*k); if(j%2=0) setfillcolor(RGB(255,255,0); circle(x2,y2,5);Sleep(s);if(x2>x1 &&

20、amp;y2<y1)for(j=1;j<x1-x2;j+) a=x1+j_l;b=y1-j*k+w;c=x1+j+l; d=yi-j*k-w; setfillcolor(RGB(0,0,0);recta ngle(a,b,c,d); clearrecta ngle(a-1,b-k,c,d-k); setl in ecolor(RED);lin e(x1+j,y1-j*k,x2,y2);setli necolor(GREEN);lin e(x1,y1,x1+j,y1-j*k); if(j%2=0) setfillcolor(RGB(255,255,0); circle(x2,y2,5

21、);Sleep(s); else if(y 仁=y2)if(x2>x1)for(j=1;j<(x2-x1);j+)setfillcolor(RGB(0,0,0);recta ngle(x1+j-l,y1+w,x1+j+l,y1-w);clearrecta ngle(x1+j-l-1,y1+w,x1+j+l-1,y1-w);setl in ecolor(RED);lin e(x1+j,y1,x2,y2);setli necolor(GREEN);lin e(x1,y1,x1+j,y1);if(j%2=0)setfillcolor(RGB(255,0,255);circle(x2,y2

22、,5);Sleep(s);if(x2<x1)for(j=1;j<(x1-x2);j+)setfillcolor(RGB(0,0,0);rectan gle(x1-j_l,y1+w,x1-j+l,y1_w);clearrecta ngle(x1-j-l-1,y1+w,x1-j+l-1,y1-w);setl in ecolor(RED);lin e(x1-j,y1,x2,y2);setli necolor(GREEN);lin e(x1,y1,x1-j,y1);if(j%2=0)setfillcolor(RGB(255,0,255); circle(x2,y2,5);Sleep(s);

23、else if(x 仁=x2)if(y2>y1)for(j=1;j<(y2-y1);j+)setfillcolor(BLUE);recta ngle(x1-l,y1+j+w,x1+l,y1+j-w);setfillcolor(WHITE);recta ngle(x1,y1+j+w-1,x1+1,y1+j-1-w);clearrecta ngle(x1-l-1,y1+(j-1)+w,x1+l-1,y1+(j-1)-w);setl in ecolor(RED);lin e(x1,y1+j,x2,y2);setli necolor(GREEN);lin e(x1,y1,x1,y1+j);

24、if(j%2=0)setfillcolor(RGB(255,255,0);circle(x2,y2,5);Sleep(s); if(y2<y1)for(j=1;j<(y1-y2);j+)setfillcolor(BLUE);rectan gle(x1_l,y1-j+w,x1+l,y1-j_w); setfillcolor(WHITE);recta ngle(x1,y1-j+w-1,x1+1,y1-j-1-w);clearrecta ngle(x1-l-1,y1-(j-1)+w,x1+l-1,y1-(j-1)-w); setl in ecolor(RED);lin e(x1,y1-j,x2,y2);setli necolor(GREEN);lin e(x1,y1,x1,y1-j);if(j%2=0)setfill

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論