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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

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;/記錄點(diǎn)的結(jié)構(gòu)體struct combpint x1,y1

2、;int x2,y2;/連通點(diǎn)坐標(biāo)struct Comb nameint nu m1;int nu m2;/連通點(diǎn)名public:int mVexNum;/頂點(diǎn)數(shù)int mEdgNum;/邊數(shù)double mMatrixMAXMAX; /鄰接矩陣Comb name combMAX; /連通點(diǎn)名combp cpMAX;/連通點(diǎn)坐標(biāo)Coordi nate mVexsMAX; /頂點(diǎn)集合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<<"是否載入默認(rèn)地圖?cin>

4、; >panju;if(panju=2)cout<<"請(qǐng)輸入地圖信息文件名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ù)組用來儲(chǔ)存提示信息。端點(diǎn)個(gè)數(shù)邊數(shù)輸入所有點(diǎn)的信息fil

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

6、; /用背景色清空屏幕設(shè)置填充色/畫頂點(diǎn)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); /給實(shí)際連通的頂點(diǎn)連線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;/存放最后一個(gè)點(diǎn)double distMAX;/存放路徑距離in t v0;/起始點(diǎn)int route40;/路徑int rnum;/路徑頂點(diǎn)數(shù)Coordi nate rpoi ntsMAX;路徑點(diǎn)集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<<"輸入起點(diǎn):"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; /開始時(shí)假定為最短路徑if(distv<maxD && v!=vO)pathv=vO; /直達(dá)情況else pathv=-1

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

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

12、sz. num; / 終點(diǎn)n ext=pathz;/第一個(gè)點(diǎn)while( next!=vO)oppi+=mVexs next, num;n ext=path next; /下一個(gè)點(diǎn)oppi=mVexsv0, num;file2<<" 路徑長(zhǎng)度為:"<<distz<<'n:II起點(diǎn)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長(zhǎng)度public:CAGV();in t getl();int getw();in t gets();;CAGV:CAGV()否)"int panju;cout<<"是否自動(dòng)設(shè)置 AGV信息? (1:是,2: cin> >panju;speed=8;width=6;len gth=6;if(panju=2)cout<<"輸入 AGV的長(zhǎng):"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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論