C++AGV 路径规划与运行仿真程序Word格式文档下载.docx

上传人:b****5 文档编号:16523009 上传时间:2022-11-24 格式:DOCX 页数:19 大小:18.87KB
下载 相关 举报
C++AGV 路径规划与运行仿真程序Word格式文档下载.docx_第1页
第1页 / 共19页
C++AGV 路径规划与运行仿真程序Word格式文档下载.docx_第2页
第2页 / 共19页
C++AGV 路径规划与运行仿真程序Word格式文档下载.docx_第3页
第3页 / 共19页
C++AGV 路径规划与运行仿真程序Word格式文档下载.docx_第4页
第4页 / 共19页
C++AGV 路径规划与运行仿真程序Word格式文档下载.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

C++AGV 路径规划与运行仿真程序Word格式文档下载.docx

《C++AGV 路径规划与运行仿真程序Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C++AGV 路径规划与运行仿真程序Word格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。

C++AGV 路径规划与运行仿真程序Word格式文档下载.docx

intgety(intn2);

voidInput();

//以文件方式输入地图信息

voidShowMap();

//easyx显示地图

};

intCFixedMap:

:

getx(intn1)

intx=0;

for(inti=0;

i<

mVexNum;

i++)

if(n1==mVexs[i].num)

x=mVexs[i].x;

returnx;

}

gety(intn2)

inty=0;

if(n2==mVexs[i].num)

y=mVexs[i].y;

returny;

voidCFixedMap:

Input()

intpanju;

charfname[10]={"

map2.txt"

cout<

<

"

是否载入默认地图?

(1:

是,2:

否)"

;

cin>

>

panju;

if(panju==2)

cout<

请输入地图信息文件名:

cin>

fname;

}

ifstreamfile(fname);

charuse1[100];

charuse2[100];

charuse3[100];

charuse4[100];

//use数组用来储存提示信息。

file>

use1;

//端点个数

use2;

mEdgNum;

//边数

use3;

i++)//输入所有点的信息

file>

mVexs[i].num>

mVexs[i].x>

mVexs[i].y;

use4;

for(i=0;

i++)//输入连通点编号

comb[i].num1>

comb[i].num2;

file.close();

 

ShowMap()

initgraph(800,600,SHOWCONSOLE|NOCLOSE);

//初始化绘图环境

setbkcolor(WHITE);

//设置背景色

cleardevice();

//用背景色清空屏幕

setfillcolor(BLACK);

//设置填充色

//画顶点

i++)

fillcircle(mVexs[i].x,mVexs[i].y,5);

settextcolor(BLACK);

chars[MAX];

sprintf(s,"

%d"

i+1);

outtextxy(mVexs[i].x-10,mVexs[i].y-20,s);

//给实际连通的顶点连线

setlinecolor(RGB(0,0,0));

setlinestyle(PS_SOLID,6,NULL,0);

cp[i].x1=getx(comb[i].num1);

cp[i].y1=gety(comb[i].num1);

cp[i].x2=getx(comb[i].num2);

cp[i].y2=gety(comb[i].num2);

line(cp[i].x1,cp[i].y1,cp[i].x2,cp[i].y2);

classCPathPlan:

publicCFixedMap

public:

intpath[MAX];

//存放最后一个点

doubledist[MAX];

//存放路径距离

intv0;

//起始点

introute[40];

//路径

intrnum;

//路径顶点数

Coordinaterpoints[MAX];

//路径点集

voidMaptoGraph();

voidDijstra();

voidPutpath();

voidCPathPlan:

MaptoGraph()

rnum=0;

inta,b,x,y;

for(intj=0;

j<

j++)

{

if(i==j)

{

mMatrix[i][j]=0;

}

else

mMatrix[i][j]=maxD;

}

if(comb[i].num1)

a=comb[i].num1-1;

b=comb[i].num2-1;

x=mVexs[a].x-mVexs[b].x;

y=mVexs[a].y-mVexs[b].y;

mMatrix[a][b]=sqrt(x*x+y*y);

mMatrix[b][a]=sqrt(x*x+y*y);

Dijstra()

输入起点:

v0;

v0--;

ints[MAX];

intv;

inti;

intj;

intw;

doublemin;

for(v=0;

v<

v++)//初始化S,dist,path

s[v]=0;

//0表示未求出最短路径

dist[v]=mMatrix[v0][v];

//开始时假定为最短路径

if(dist[v]<

maxD&

&

v!

=v0)

path[v]=v0;

//直达情况

elsepath[v]=-1;

//无直达路径

dist[v0]=0;

//初始时v0属于s集,v0到v0路径最短

s[v0]=1;

for(i=1;

i++)//假设由一个中转点到达会近些,验证。

再假设由两个中转点到达会近些,验证。

穷举

min=maxD;

for(w=0;

w<

w++)//找一个最近到的点,下标装入v

if(s[w]==0&

dist[w]<

min)//点w不属于s集且离v0更近

v=w;

//经点w中转

min=dist[w];

s[v]=1;

//将v并入S,由v0到达v点最短距离为min,假设由v0到v再由v到其余各点,更新当前最后一个点及距离

for(j=0;

if(s[j]==0&

(min+mMatrix[v][j]<

dist[j]))//如果多经过一个点v到点j的距离更短,更新

{

dist[j]=min+mMatrix[v][j];

path[j]=v;

//点的序号

}

Putpath()

intopp[20];

intz;

inti=0;

输入终点:

z;

z--;

intnext;

ofstreamfile2("

fops.txt"

);

if(dist[z]<

z!

=v0)//如果有路径

opp[i++]=mVexs[z].num;

//终点

next=path[z];

//第一个点

while(next!

opp[i++]=mVexs[next].num;

next=path[next];

//下一个点

opp[i]=mVexs[v0].num;

file2<

路径长度为:

dist[z]<

'

\n'

//起点v0和最短路径

elseif(z!

=v0)//无路径

mVexs[z].num<

--"

mVexs[v0].num<

nopath"

for(intj=0;

i+1;

route[j]=opp[i-j];

file2<

路径为:

for(j=0;

i;

route[j]<

-->

rnum=i+1;

route[i];

file2.close();

rnum;

rpoints[i].x=getx(route[i]);

rpoints[i].y=gety(route[i]);

rpoints[i].num=route[i];

classCAGV

intspeed;

//AGV速度

intwidth;

//AGV宽度

intlength;

//AGV长度

CAGV();

intgetl();

intgetw();

intgets();

CAGV:

CAGV()

是否自动设置AGV信息?

是,2:

speed=8;

width=6;

length=6;

输入AGV的长:

length;

输入AGV的宽:

width;

输入AGV的速度(1-10):

speed;

intCAGV:

getl()

returnlength;

getw()

returnwidth;

gets()

returnspeed;

classCAGVShow:

publicCPathPlan,publicCAGV

#definek(abs(y2-y1))/(abs(x1-x2))

inta,b,c,d;

intx1,x2,y1,y2;

inti,j;

intl,w,s;

voidshow();

voidCAGVShow:

show()

l=getl();

w=getw();

s=11-gets();

for(into=0;

o<

o++)

if(o+1==rnum)break;

x1=rpoints[o].x;

x2=rpoints[o+1].x;

y1=rpoints[o].y;

y2=rpoints[o+1].y;

if(y1!

=y2&

x1!

=x2)

if(x2>

x1&

y2>

y1){

for(j=1;

x2-x1;

a=x1+j-l;

b=y1+j*k+w;

c=x1+j+l;

d=y1+j*k-w;

setfillcolor(RGB(0,0,0));

rectangle(a,b,c,d);

clearrectangle(a-1,b-k,c,d-k);

setlinecolor(RED);

line(x1+j,y1+j*k,x2,y2);

setlinecolor(GREEN);

line(x1,y1,x1+j,y1+j*k);

if(j%2==0)

{

setfillcolor(RGB(255,255,0));

circle(x2,y2,5);

}

Sleep(s);

if(x2<

y2<

y1)

x1-x2;

a=x1-j-l;

b=y1-j*k+w;

c=x1-j+l;

d=y1-j*k-w;

line(x1-j,y1-j*k,x2,y2);

line(x1,y1,x1-j,y1-j*k);

line(x1-j,y1+j*k,x2,y2);

line(x1,y1,x1-j,y1+j*k);

line(x1+j,y1-j*k,x2,y2);

line(x1,y1,x1+j,y1-j*k);

elseif(y1==y2)

x1)

(x2-x1);

rectangle(x1+j-l,y1+w,x1+j+l,y1-w);

clearrectangle(x1+j-l-1,y1+w,x1+j+l-1,y1-w);

line(x1+j,y1,x2,y2);

line(x1,y1,x1+j,y1);

setfillcolor(RGB(255,0,255));

(x1-x2);

rectangle(x1-j-l,y1+w,x1-j+l,y1-w);

clearrectangle(x1-j-l-1,y1+w,x1-j+l-1,y1-w);

line(x1-j,y1,x2,y2);

line(x1,y1,x1-j,y1);

elseif(x1==x2)

if(y2>

(y2-y1);

setfillcolor(BLUE);

rectangle(x1-l,y1+j+w,x1+l,y1+j-w);

setfillcolor(WHITE);

rectangle(x1,y1+j+w-1,x1+1,y1+j-1-w);

clearrectangle(x1-l-1,y1+(j-1)+w,x1+l-1,y1+(j-1)-w);

line(x1,y1+j,x2,y2);

line(x1,y1,x1,y1+j);

if(y2<

(y1-y2);

rectangle(x1-l,y1-j+w,x1+l,y1-j-w);

rectangle(x1,y1-j+w-1,x1+1,y1-j-1-w);

clearrectangle(x1-l-1,y1-(j-1)+w,x1+l-1,y1-(j-1)-w);

line(x1,y1-j,x2,y2);

line(x1,y1,x1,y1-j);

成功显示!

!

\n"

getch();

//按任意键继续

closegraph();

//关闭图形界面

voidmain()

CAGVShowa;

intpanju;

a.Input();

多次演示?

if(panju==1)

for(inti=0;

20;

a.ShowMap();

a.MaptoGraph();

a.Dijstra();

a.Putpath();

a.show();

panju=0;

cout<

是否结束?

结束)"

cin>

if(panju==1)

break;

else

a.ShowMap();

a.MaptoGraph();

a.Dijstra();

a.Putpath();

a.show();

相关文件

//map2.txt

点的个数(输入所有数据前请换行):

16

连线条数:

26

依次输入所有点的编号,x,y坐标(用空格隔开):

150502250503550504750505501506250150755015087501509503501025035011550350127503501350550142505501555055016750550

输入所有互相连通的点的编号:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 广告传媒

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1