📄 pathdoc.cpp
字号:
}
if(jj==4)
{
newend = CPoint(px,py);
//pt2 = CPoint(px-6,k2*(px+6)+b2);
ii = 40;
}
}
return;
}
if(!flagUp && flagDown)
//上方有障碍物
{
for(int ii=1;ii<20;ii++)
{
float px;
if(flag)
px = now.x + 6*ii;
else
px = now.x - 6*ii;
float py = now.y;
int i=px/MAP_GRIDSIZE;
int j=py/MAP_GRIDSIZE;//得到网格坐标
if(m_cBoard[i][j]==1)//有障碍
{
if(flag)
middle.x = px + 4;
else
middle.x = px - 4;
middle.y = py;
ii=22;
}
}
////////////////////
for(ii=1;ii<40;ii++)
{
float py = middle.y + 6*ii;
float px = middle.x;
int i=px/MAP_GRIDSIZE;
int j=py/MAP_GRIDSIZE;
for(int jj=1;jj<4;jj++)
{
if(m_cBoard[i][j+jj])
jj=5;
if(m_cBoard[i][j-jj])
jj=5;
if(m_cBoard[i+jj][j])
jj=5;
if(m_cBoard[i-jj][j])
jj=5;
}
if(jj==4)
{
newend = CPoint(px,py);
ii = 40;
}
}
return;
}
if(flagUp && flagDown)
//上下都无障碍
{
for(int ii=1;ii<20;ii++)
{
float px;
if(flag)
px = now.x + 6*ii;
else
px = now.x - 6*ii;
float py = now.y;
int i=px/MAP_GRIDSIZE;
int j=py/MAP_GRIDSIZE;//得到网格坐标
if(m_cBoard[i][j]==1)//有障碍
{
if(flag)
middle.x = px + 4;
else
middle.x = px - 4;
middle.y = py;
ii=22;
}
}
/////////////////////
CPoint pt1,pt2;
for(ii=1;ii<20;ii++)
{
float py = middle.y + 6*ii;
float px = middle.x;
int i=px/MAP_GRIDSIZE;
int j=py/MAP_GRIDSIZE;
for(int jj=1;jj<4;jj++)
{
if(m_cBoard[i][j+jj])
jj=5;
if(m_cBoard[i][j-jj])
jj=5;
if(m_cBoard[i+jj][j])
jj=5;
if(m_cBoard[i-jj][j])
jj=5;
}
if(jj==4)
{
pt1 = CPoint(px,py);
ii = 40;
}
}
for(ii=1;ii<20;ii++)
{
float py = middle.y - 6*ii;
float px = middle.x;
int i=px/MAP_GRIDSIZE;
int j=py/MAP_GRIDSIZE;
for(int jj=1;jj<4;jj++)
{
if(m_cBoard[i][j+jj])
jj=5;
if(m_cBoard[i][j-jj])
jj=5;
if(m_cBoard[i+jj][j])
jj=5;
if(m_cBoard[i-jj][j])
jj=5;
}
if(jj==4)
{
pt2 = CPoint(px,py);
ii = 40;
}
}
//计算两个点与中间点的距离,取小的
float ds1,ds2;
ds1=ComDistance(pt1,now);
ds2=ComDistance(pt2,now);
if(ds1<=ds2)
{
newend=pt1;
}
else
{
newend=pt2;
}
return;
}
if(!flagUp && !flagDown)
//上下都有障碍
{
if(flag)
middle.x = now.x - 12;
else
middle.x = now.x + 12;
middle.y = now.y;
////////////////
CPoint pt1,pt2;
for(int ii=0;ii<40;ii++)
{
float py = middle.y + 8*ii;
float px = middle.x;
int i=px/MAP_GRIDSIZE;
int j=py/MAP_GRIDSIZE;
if(m_cBoard[i][j])
{
pt1 = CPoint(px,py);
ii = 40;
}
}
///
for(ii=1;ii<40;ii++)
{
float py = pt1.y + 6*ii;
float px = pt1.x;
int i=px/MAP_GRIDSIZE;
int j=py/MAP_GRIDSIZE;
for(int jj=1;jj<4;jj++)
{
if(m_cBoard[i][j+jj])
jj=5;
if(m_cBoard[i][j-jj])
jj=5;
if(m_cBoard[i+jj][j])
jj=5;
if(m_cBoard[i-jj][j])
jj=5;
}
if(jj==4)
{
pt1 = CPoint(px,py);
ii = 40;
}
}
////////////////////
for(ii=0;ii<40;ii++)
{
float py = middle.y - 6*ii;
float px = middle.x;
int i=px/MAP_GRIDSIZE;
int j=py/MAP_GRIDSIZE;
if(m_cBoard[i][j])
{
pt2 = CPoint(px,py);
ii = 40;
}
}
//
for(ii=1;ii<40;ii++)
{
float py = pt2.y - 6*ii;
float px = pt2.x;
int i=px/MAP_GRIDSIZE;
int j=py/MAP_GRIDSIZE;
for(int jj=1;jj<4;jj++)
{
if(m_cBoard[i][j+jj])
jj=5;
if(m_cBoard[i][j-jj])
jj=5;
if(m_cBoard[i+jj][j])
jj=5;
if(m_cBoard[i-jj][j])
jj=5;
}
if(jj==4)
{
pt2 = CPoint(px,py);
ii = 40;
}
}
///////////////////
//计算两个点与中间点的距离,取小的
float ds1,ds2;
ds1=ComDistance(pt1,middle);
ds2=ComDistance(pt2,middle);
if(ds1<=ds2)
{
newend=pt1;
}
else
{
newend=pt2;
}
return;
}
}
void CPathDoc::CheckRightLeft(CPoint now)
{
int px = now.x / MAP_GRIDSIZE;
int py = now.y / MAP_GRIDSIZE;
int i;
for(i=1;i<10;i++)
{
if(m_cBoard[px-i][py]!=0)
flagLeft=false;
if(m_cBoard[px+i][py]!=0)
flagRight=false;
}
}
void CPathDoc::GetRLEndPoint(CPoint now,CPoint end,CPoint &newend)
{
//middle 点的产生
CPoint middle;
bool flag;
if(end.y > now.y)
flag=true;// "+"
else
flag=false;// "-"
if(flagRight && !flagLeft)
//左方有障碍物
{
for(int ii=1;ii<20;ii++)
{
float py;
if(flag)
py = now.y + 6*ii;
else
py = now.y - 6*ii;
float px = now.x;
int i=px/MAP_GRIDSIZE;
int j=py/MAP_GRIDSIZE;//得到网格坐标
if(m_cBoard[i][j]==1)//有障碍
{
if(flag)
middle.y = py + 4;
else
middle.y = py - 4;
middle.x = px;
ii=22;
}
}
//////////////////
for(ii=1;ii<40;ii++)
{
float px = middle.x + 6*ii;
float py = middle.y;
int i=px/MAP_GRIDSIZE;
int j=py/MAP_GRIDSIZE;
for(int jj=1;jj<4;jj++)
{
if(m_cBoard[i][j+jj])
jj=5;
if(m_cBoard[i][j-jj])
jj=5;
if(m_cBoard[i+jj][j])
jj=5;
if(m_cBoard[i-jj][j])
jj=5;
}
if(jj==4)
{
newend = CPoint(px,py);
ii = 40;
}
}
return;
}
if(!flagRight && flagLeft)
//右方有障碍物
{
for(int ii=1;ii<20;ii++)
{
float py;
if(flag)
py = now.y + 6*ii;
else
py = now.y - 6*ii;
float px = now.x;
int i=px/MAP_GRIDSIZE;
int j=py/MAP_GRIDSIZE;//得到网格坐标
if(m_cBoard[i][j]==1)//有障碍
{
if(flag)
middle.y = py + 4;
else
middle.y = py - 4;
middle.x = px;
ii=22;
}
}
////////////////////
for(ii=1;ii<40;ii++)
{
float px = middle.x - 6*ii;
float py = middle.y;
int i=px/MAP_GRIDSIZE;
int j=py/MAP_GRIDSIZE;
for(int jj=1;jj<4;jj++)
{
if(m_cBoard[i][j+jj])
jj=5;
if(m_cBoard[i][j-jj])
jj=5;
if(m_cBoard[i+jj][j])
jj=5;
if(m_cBoard[i-jj][j])
jj=5;
}
if(jj==4)
{
newend = CPoint(px,py);
ii = 40;
}
}
return;
}
if(flagRight && flagLeft)
//左右都无障碍
{
for(int ii=1;ii<20;ii++)
{
float py;
if(flag)
py = now.y + 6*ii;
else
py = now.y - 6*ii;
float px = now.x;
int i=px/MAP_GRIDSIZE;
int j=py/MAP_GRIDSIZE;//得到网格坐标
if(m_cBoard[i][j]==1)//有障碍
{
if(flag)
middle.y = py + 4;
else
middle.y = py - 4;
middle.x = px;
ii=22;
}
}
/////////////////////
CPoint pt1,pt2;
for(ii=1;ii<40;ii++)
{
float px = middle.x + 6*ii;
float py = middle.y;
int i=px/MAP_GRIDSIZE;
int j=py/MAP_GRIDSIZE;
for(int jj=1;jj<4;jj++)
{
if(m_cBoard[i][j+jj])
jj=5;
if(m_cBoard[i][j-jj])
jj=5;
if(m_cBoard[i+jj][j])
jj=5;
if(m_cBoard[i-jj][j])
jj=5;
}
if(jj==4)
{
pt1 = CPoint(px,py);
ii = 40;
}
}
for(ii=1;ii<40;ii++)
{
float px = middle.x - 6*ii;
float py = middle.y;
int i=px/MAP_GRIDSIZE;
int j=py/MAP_GRIDSIZE;
for(int jj=1;jj<4;jj++)
{
if(m_cBoard[i][j+jj])
jj=5;
if(m_cBoard[i][j-jj])
jj=5;
if(m_cBoard[i+jj][j])
jj=5;
if(m_cBoard[i-jj][j])
jj=5;
}
if(jj==4)
{
pt2 = CPoint(px,py);
ii = 40;
}
}
//计算两个点与中间点的距离,取小的
float ds1,ds2;
if(flagRight && !flagLeft)
{
ds1=ComDistance(pt1,middle);
newend=pt1;
return;
}
if(flagLeft && !flagRight)
{
ds2=ComDistance(pt2,middle);
newend=pt2;
return;
}
ds1=ComDistance(pt1,middle);
ds2=ComDistance(pt2,middle);
if(ds1<=ds2)
{
newend=pt1;
}
else
{
newend=pt2;
}
return;
}
if(!flagRight && !flagLeft)
//左右都有障碍
{
if(flag)
middle.y = now.y - 10;
else
middle.y = middle.y + 10;
middle.x = now.x;
////////////////
CPoint pt1,pt2;
for(int ii=1;ii<40;ii++)
{
float px = middle.x + 6*ii;
float py = middle.y;
int i=px/MAP_GRIDSIZE;
int j=py/MAP_GRIDSIZE;
if(m_cBoard[i][j])
{
pt1 = CPoint(px,py);
ii = 40;
}
}
///
for(ii=1;ii<40;ii++)
{
float px = pt1.x + 6*ii;
float py = pt1.y;
int i=px/MAP_GRIDSIZE;
int j=py/MAP_GRIDSIZE;
for(int jj=1;jj<4;jj++)
{
if(m_cBoard[i][j+jj])
jj=5;
if(m_cBoard[i][j-jj])
jj=5;
if(m_cBoard[i+jj][j])
jj=5;
if(m_cBoard[i-jj][j])
jj=5;
}
if(jj==4)
{
pt1 = CPoint(px,py);
ii = 40;
}
}
////////////////////
for(ii=1;ii<40;ii++)
{
float px = middle.x - 6*ii;
float py = middle.y;
int i=px/MAP_GRIDSIZE;
int j=py/MAP_GRIDSIZE;
if(m_cBoard[i][j])
{
pt2 = CPoint(px,py);
ii = 40;
}
}
//
for(ii=1;ii<40;ii++)
{
float px = pt2.x - 6*ii;
float py = pt2.y;
int i=px/MAP_GRIDSIZE;
int j=py/MAP_GRIDSIZE;
for(int jj=1;jj<4;jj++)
{
if(m_cBoard[i][j+jj])
jj=5;
if(m_cBoard[i][j-jj])
jj=5;
if(m_cBoard[i+jj][j])
jj=5;
if(m_cBoard[i-jj][j])
jj=5;
}
if(jj==4)
{
pt2 = CPoint(px,py);
ii = 40;
}
}
///////////////////
//计算两个点与中间点的距离,取小的
float ds1,ds2;
ds1=ComDistance(pt1,middle);
ds2=ComDistance(pt2,middle);
if(ds1<=ds2)
{
newend=pt1;
}
else
{
newend=pt2;
}
return;
}
}
// *end*
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -