📄 airview.cpp
字号:
int b,c,d;
for(i=1;i<500;i++)
{
if(i<=time1 )
{
b=0;
c=0;
d=0;
} //将整个时间段分成三部分:机动前,机动中,机动后
else if(i>time1 && i<time2)
{
b=1;
c=0;
d=0;
}
else
{
b=0;
c=1;
d=1;
}
m_pDoc->AirMB[hi][i].x=x0+mvx*i*T+
b*max*pow(T*(i-time1),2)/2+
c*max*pow(T*(time2-time1),2)/2+
d*max*T*(i-time2)*T*
(time2-time1)+Q1*normrnd[i];
m_pDoc->AirMB[hi][i].y=x0+mvy*i*T+
b*may*pow(T*(i-time1),2)/2+
c*may*pow(T*(time2-time1),2)/2+
d*may*T*(i-time2)*T*
(time2-time1)+Q2*normrnd[i];
m_pDoc->AirMB[hi][i].z=0;
m_pDoc->AirMB[hi][i].fwj=fabs(atan(m_pDoc->AirMB[hi][i].x
/m_pDoc->AirMB[hi][i].y)*180/pi);
m_pDoc->AirMB[hi][i].d=sqrt(pow(m_pDoc->AirMB[hi][i].x,2)+
pow(m_pDoc->AirMB[hi][i].y,2));
m_pDoc->AirMB[hi][i].q=0;
m_pDoc->AirMB[hi][i].v=sd+a*i*T;
m_pDoc->AirMB[hi][i].vx=fabs(mvx);
m_pDoc->AirMB[hi][i].vy=fabs(mvy);
m_pDoc->AirMB[hi][i].vz=0;
m_pDoc->AirMB[hi][i].a=a;
m_pDoc->AirMB[hi][i].ax=fabs(max);
m_pDoc->AirMB[hi][i].ay=fabs(may);
m_pDoc->AirMB[hi][i].az=0;
m_pDoc->AirMB[hi][i].tflag=false;
m_pDoc->AirMB[hi][i].lxflag=1;
m_pDoc->AirMB[hi][i].mbph=m_pDoc->AirMB[hi][0].mbph;
m_pDoc->AirMB[hi][i].dwshxbz=m_pDoc->AirMB[hi][1].dwshxbz;
}
m_pDoc->AirMB[hi][1].bx=m_pDoc->AirMB[hi][1].x-m_pDoc->m_pt1X;
m_pDoc->AirMB[hi][1].by=m_pDoc->AirMB[hi][1].y-m_pDoc->m_pt1Y;
m_pDoc->AirMB[hi][1].d=sqrt(pow(m_pDoc->AirMB[hi][1].bx,2)+pow(m_pDoc->AirMB[hi][1].by,2));
m_pDoc->AirMB[hi][1].bfwj=fabs(atan(m_pDoc->AirMB[hi][1].bx/m_pDoc->AirMB[hi][1].by)*180/pi);
}
break;
case 1://空中
{
//目标的高低角
double time1=20,
time2=40;
a=200; //机动目标的加速度
if(ydfx*pi/180<=-90)
{
mvx=-sd*fabs(cos( q*pi/180)*sin( ydfx*pi/180)); //X方向目标的初始速度
mvy=sd*fabs(cos( q*pi/180)*cos( ydfx*pi/180));
max=-a*fabs(cos( q*pi/180)*sin( ydfx*pi/180));
may=a*fabs(cos( q*pi/180)*cos( ydfx*pi/180));
}
if(ydfx*pi/180<0&&ydfx*pi/180>-90)
{
mvx=-sd*fabs(cos( q*pi/180)*sin( ydfx*pi/180));
max=-a*fabs(cos( q*pi/180)*sin( ydfx*pi/180));
mvy=-sd*fabs(cos( q*pi/180)*cos( ydfx*pi/180));
may=-a*fabs(cos( q*pi/180)*cos( ydfx*pi/180));
}
if(ydfx*pi/180>=0&&ydfx*pi/180<=90)
{
mvx=sd*fabs(cos( q*pi/180)*sin( ydfx*pi/180));
max=a*fabs(cos( q*pi/180)*sin( ydfx*pi/180));
mvy=-sd*fabs(cos( q*pi/180)*cos( ydfx*pi/180)); //y方向目标的初始速度
may=-a*fabs(cos( q*pi/180)*cos( ydfx*pi/180));
}
if(ydfx*pi/180>90)
{
mvx=sd*fabs(cos( q*pi/180)*sin( ydfx*pi/180));
max=a*fabs(cos( q*pi/180)*sin( ydfx*pi/180));
mvy=sd*fabs(cos( q*pi/180)*cos( ydfx*pi/180));
may=a*fabs(cos( q*pi/180)*cos( ydfx*pi/180));
}
mvz=sd*sin(q); //z方向目标的初始速度
maz=a*sin(q);
int b,c,d;
for(i=1;i<500;i++)
{
if(i<time1 || i==time1)
{
b=0;
c=0;
d=0;
} //将整个时间段分成三部分:机动前,机动中,机动后
else if(i>time1 && i<time2)
{
b=1;
c=0;
d=0;
}
else
{
b=0;
c=1;
d=1;
}
m_pDoc->AirMB[hi][i].x=x0+mvx*i*T+b*max*pow(T*(i-time1),2)/2+c*max*pow(T*(time2-time1),2)/2+d*max*T*(i-time2)*T*(time2-time1)+Q1*normrnd[i];
m_pDoc->AirMB[hi][i].y=y0+mvy*i*T+b*may*pow(T*(i-time1),2)/2+c*may*pow(T*(time2-time1),2)/2+d*may*T*(i-time2)*T*(time2-time1)+Q2*normrnd[i];
m_pDoc->AirMB[hi][i].z=z0+mvz*i*T+b*maz*pow(T*(i-time1),2)/2+c*maz*pow(T*(time2-time1),2)/2+d*maz*T*(i-time2)*T*(time2-time1)+Q3*normrnd[i];
m_pDoc->AirMB[hi][i].fwj=fabs(atan(m_pDoc->AirMB[hi][i].x
/m_pDoc->AirMB[hi][i].y)*180/pi);
m_pDoc->AirMB[hi][i].d=sqrt(pow(m_pDoc->AirMB[hi][i].x,2)+
pow(m_pDoc->AirMB[hi][i].y,2)+pow(m_pDoc->AirMB[hi][i].z,2));
m_pDoc->AirMB[hi][i].q=q;
m_pDoc->AirMB[hi][i].v=sd+a*i*T;
m_pDoc->AirMB[hi][i].vx=fabs(mvx);
m_pDoc->AirMB[hi][i].vy=fabs(mvy);
m_pDoc->AirMB[hi][i].vz=mvz;
m_pDoc->AirMB[hi][i].a=a;
m_pDoc->AirMB[hi][i].ax=fabs(max);
m_pDoc->AirMB[hi][i].ay=fabs(may);
m_pDoc->AirMB[hi][i].az=fabs(maz);
m_pDoc->AirMB[hi][i].tflag=false;
m_pDoc->AirMB[hi][i].lxflag=2;
m_pDoc->AirMB[hi][i].mbph=m_pDoc->AirMB[hi][0].mbph;
m_pDoc->AirMB[hi][i].dwshxbz=m_pDoc->AirMB[hi][1].dwshxbz;
}
m_pDoc->AirMB[hi][1].bx=m_pDoc->AirMB[hi][1].x-m_pDoc->m_pt1X;
m_pDoc->AirMB[hi][1].by=m_pDoc->AirMB[hi][1].y-m_pDoc->m_pt1Y;
m_pDoc->AirMB[hi][1].d=sqrt(pow(m_pDoc->AirMB[hi][1].bx,2)+pow(m_pDoc->AirMB[hi][1].by,2)+pow(m_pDoc->AirMB[hi][1].z,2));
m_pDoc->AirMB[hi][1].bfwj=fabs(atan(m_pDoc->AirMB[hi][1].bx/m_pDoc->AirMB[hi][1].by)*180/pi);
}
break;
case 2://水下
{
z0=-1500; //z方向机动目标的初始坐标
//目标的高低角
double time1=20,
time2=40;
a=5; //机动目标的加速度
if(ydfx*pi/180<=-90)
{
mvx=-sd*fabs(cos( q*pi/180)*sin( ydfx*pi/180)); //X方向目标的初始速度
mvy=sd*fabs(cos( q*pi/180)*cos( ydfx*pi/180));
max=-a*fabs(cos( q*pi/180)*sin( ydfx*pi/180));
may=a*fabs(cos( q*pi/180)*cos( ydfx*pi/180));
}
if(ydfx*pi/180<0&&ydfx*pi/180>-90)
{
mvx=-sd*fabs(cos( q*pi/180)*sin( ydfx*pi/180));
max=-a*fabs(cos( q*pi/180)*sin( ydfx*pi/180));
mvy=-sd*fabs(cos( q*pi/180)*cos( ydfx*pi/180));
may=-a*fabs(cos( q*pi/180)*cos( ydfx*pi/180));
}
if(ydfx*pi/180>=0&&ydfx*pi/180<=90)
{
mvx=sd*fabs(cos( q*pi/180)*sin( ydfx*pi/180));
max=a*fabs(cos( q*pi/180)*sin( ydfx*pi/180));
mvy=-sd*fabs(cos( q*pi/180)*cos( ydfx*pi/180)); //y方向目标的初始速度
may=-a*fabs(cos( q*pi/180)*cos( ydfx*pi/180));
}
if(ydfx*pi/180>90)
{
mvx=sd*fabs(cos( q*pi/180)*sin( ydfx*pi/180));
max=a*fabs(cos( q*pi/180)*sin( ydfx*pi/180));
mvy=sd*fabs(cos( q*pi/180)*cos( ydfx*pi/180));
may=a*fabs(cos( q*pi/180)*cos( ydfx*pi/180));
}
mvz=sd*sin(q); //z方向目标的初始速度
maz=a*sin(q);
int b,c,d;
for(i=1;i<50;i++)
{
if(i<time1 || i==time1)
{
b=0;
c=0;
d=0;
} //将整个时间段分成三部分:机动前,机动中,机动后
else if(i>time1 && i<time2)
{
b=1;
c=0;
d=0;
}
else
{
b=0;
c=1;
d=1;
}
m_pDoc->AirMB[hi][i].x=x0+mvx*i*T+b*max*pow(T*(i-time1),2)/2+c*max*pow(T*(time2-time1),2)/2+d*max*T*(i-time2)*T*(time2-time1)+Q1*normrnd[i];
m_pDoc->AirMB[hi][i].y=y0+mvy*i*T+b*may*pow(T*(i-time1),2)/2+c*may*pow(T*(time2-time1),2)/2+d*may*T*(i-time2)*T*(time2-time1)+Q2*normrnd[i];
m_pDoc->AirMB[hi][i].z=z0+mvz*i*T+b*maz*pow(T*(i-time1),2)/2+c*maz*pow(T*(time2-time1),2)/2+d*maz*T*(i-time2)*T*(time2-time1)+Q3*normrnd[i];
m_pDoc->AirMB[hi][i].fwj=fabs(atan(m_pDoc->AirMB[hi][i].x
/m_pDoc->AirMB[hi][i].y)*180/pi);
m_pDoc->AirMB[hi][i].d=sqrt(pow(m_pDoc->AirMB[hi][i].x,2)+
pow(m_pDoc->AirMB[hi][i].y,2)+pow(m_pDoc->AirMB[hi][i].z,2));
m_pDoc->AirMB[hi][i].q=q;
m_pDoc->AirMB[hi][i].v=sd+a*i*T;
m_pDoc->AirMB[hi][i].vx=fabs(mvx);
m_pDoc->AirMB[hi][i].vy=fabs(mvy);
m_pDoc->AirMB[hi][i].vz=mvz;
m_pDoc->AirMB[hi][i].a=a;
m_pDoc->AirMB[hi][i].ax=fabs(max);
m_pDoc->AirMB[hi][i].ay=fabs(may);
m_pDoc->AirMB[hi][i].az=fabs(maz);
m_pDoc->AirMB[hi][i].tflag=false;
m_pDoc->AirMB[hi][i].lxflag=3;
m_pDoc->AirMB[hi][i].mbph=m_pDoc->AirMB[hi][0].mbph;
m_pDoc->AirMB[hi][i].dwshxbz=m_pDoc->AirMB[hi][1].dwshxbz;
}
m_pDoc->AirMB[hi][1].bx=m_pDoc->AirMB[hi][1].x-m_pDoc->m_pt1X;
m_pDoc->AirMB[hi][1].by=m_pDoc->AirMB[hi][1].y-m_pDoc->m_pt1Y;
m_pDoc->AirMB[hi][1].d=sqrt(pow(m_pDoc->AirMB[hi][1].bx,2)+pow(m_pDoc->AirMB[hi][1].by,2)+pow(m_pDoc->AirMB[hi][1].z,2));
m_pDoc->AirMB[hi][1].bfwj=fabs(atan(m_pDoc->AirMB[hi][1].bx/m_pDoc->AirMB[hi][1].by)*180/pi);
}
break;
}
}
break;
//蛇形机动
case 4:
{
switch(kjshxsel)
{
case 0: //水面
{
double W[5]={0.5,1.0,1.5,2,2.5};
sd=30000;
int m=-1;
double r,xr,yr,ch,js,w;
int n=0;
for(j=0;j<50;j++)
{
m=m*(-1);
w=m*W[j%5];
r=fabs(sd/w);
xr=x0-r*cos(ydfx*pi/180);
yr=y0-r*sin(ydfx*pi/180);
for(i=1;i<50;i++)
{
m_pDoc->AirMB[hi][n].x=xr+r*cos(ydfx*pi/180+w*i*T)+Q1*normrnd[i];
m_pDoc->AirMB[hi][n].y=yr+r*sin(ydfx*pi/180+w*i*T)+Q2*normrnd[i];
m_pDoc->AirMB[hi][n].fwj=fabs(atan(m_pDoc->AirMB[hi][i].x
/m_pDoc->AirMB[hi][i].y)*180/pi);
m_pDoc->AirMB[hi][n].d =sqrt(pow(m_pDoc->AirMB[hi][n].x,2)+pow(m_pDoc->AirMB[hi][n].y,2));
m_pDoc->AirMB[hi][n].q=0;
m_pDoc->AirMB[hi][n].v=sd;
//m_pDoc->AirMB[hi][i].vx=fabs(mvx);
//m_pDoc->AirMB[hi][i].vy=fabs(mvy);
m_pDoc->AirMB[hi][n].vz=0;
m_pDoc->AirMB[hi][n].a=0;
m_pDoc->AirMB[hi][n].ax=0;
m_pDoc->AirMB[hi][n].ay=0;
m_pDoc->AirMB[hi][n].az=0;
m_pDoc->AirMB[hi][n].tflag=false;
m_pDoc->AirMB[hi][n].lxflag=1;
m_pDoc->AirMB[hi][n].mbph=m_pDoc->AirMB[hi][0].mbph;
m_pDoc->AirMB[hi][n].dwshxbz=m_pDoc->AirMB[hi][1].dwshxbz;
n=n+1;
ch=pi-fabs(w)*i*T;
js=fabs(w)*T;
if(ch<js)
{
x0=xr-r*cos(ydfx*pi/180);
y0=yr-r*sin(ydfx*pi/180);
break;
}
}
}
m_pDoc->AirMB[hi][1].bx=m_pDoc->AirMB[hi][1].x-m_pDoc->m_pt1X;
m_pDoc->AirMB[hi][1].by=m_pDoc->AirMB[hi][1].y-m_pDoc->m_pt1Y;
m_pDoc->AirMB[hi][1].d=sqrt(pow(m_pDoc->AirMB[hi][1].bx,2)+pow(m_pDoc->AirMB[hi][1].by,2));
m_pDoc->AirMB[hi][1].bfwj=fabs(atan(m_pDoc->AirMB[hi][1].bx/m_pDoc->AirMB[hi][1].by)*180/pi);
}
break;
case 1://空中
{
}
break;
case 2://水下
{
}
break;
}
}
break;
case 5://合成运动 x方向匀速 y方向匀加速
{
switch(kjshxsel)
{
case 0://水面目标
{
a=300; //目标的初始加速度
ydfx=pi/4; //目标的初始航向角
if(ydfx*pi/180>=0&&ydfx*pi/180<90)
{
mvx=sd*sin(ydfx*pi/180);
mvy=-sd*cos(ydfx*pi/180);
may=-a;
}
if(ydfx*pi/180>=90)
{
mvx=sd*sin(ydfx*pi/180);
mvy=sd*cos(ydfx*pi/180);
may=a;
}
if(ydfx*pi/180>=-90&&ydfx*pi/180<0)
{
mvx=-sd*sin(ydfx*pi/180);
mvy=-sd*cos(ydfx*pi/180);
may=-a;
}
if(ydfx*pi/180<-90)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -