📄 airview.cpp
字号:
// AirView.cpp : implementation file
//
#include "stdafx.h"
#include "MulTarget.h"
#include "AirView.h"
#include "AirTargetView.h"
#include "MulTargetDoc.h"
#include "math.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#define pi 3.1415926
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAirView dialog
CAirView::CAirView(CWnd* pParent /*=NULL*/)
: CDialog(CAirView::IDD, pParent)
{
//{{AFX_DATA_INIT(CAirView)
m_fwj = 0.0;
m_mbph = _T("");
m_sd = 0.0;
m_x = 0.0;
m_y = 0.0;
m_z = 0.0;
m_jl1 = 0.0;
m_jl2 = 0.0;
m_jl3 = 0.0;
m_fx = 0.0;
m_q = 0.0;
m_a = 0.0;
m_w = 0.0;
m_pView=(CAirTargetView*)pParent;
m_r = 0.0;
//}}AFX_DATA_INIT
}
void CAirView::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAirView)
DDX_Control(pDX, IDC_CMBKJSHX, m_mbkjshx);
DDX_Control(pDX, IDC_CBYDMS, m_ydms);
DDX_Control(pDX, IDC_CBDWSHX, m_dwshx);
DDX_Text(pDX, IDC_EDITFWJ, m_fwj);
DDX_Text(pDX, IDC_EDITMBPH, m_mbph);
DDX_Text(pDX, IDC_EDITSD, m_sd);
DDX_Text(pDX, IDC_EDITX, m_x);
DDX_Text(pDX, IDC_EDITY, m_y);
DDX_Text(pDX, IDC_EDITZ, m_z);
DDX_Text(pDX, IDC_EDITJL1, m_jl1);
DDX_Text(pDX, IDC_EDITJL2, m_jl2);
DDX_Text(pDX, IDC_EDITJL3, m_jl3);
DDX_Text(pDX, IDC_EDITFX, m_fx);
DDX_Text(pDX, IDC_EDITQ, m_q);
DDX_Text(pDX, IDC_EDITA, m_a);
DDX_Text(pDX, IDC_EDITW, m_w);
DDX_Text(pDX, IDC_EDITR, m_r);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAirView, CDialog)
//{{AFX_MSG_MAP(CAirView)
ON_BN_CLICKED(IDC_BTOK, OnBtok)
ON_BN_CLICKED(IDC_RADIO1, OnRadio1)
ON_BN_CLICKED(IDC_RADIO2, OnRadio2)
ON_CBN_SELCHANGE(IDC_CMBKJSHX, OnSelchangeCmbkjshx)
ON_CBN_SELCHANGE(IDC_CBYDMS, OnSelchangeCbydms)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAirView message handlers
//DEL void CAirView::OnOpendlg()
//DEL {
//DEL // TODO: Add your command handler code here
//DEL CAirView *pDlg=NULL;
//DEL if(!pDlg)
//DEL {
//DEL pDlg=new CAirView(this);
//DEL ASSERT(pDlg);
//DEL }
//DEL pDlg->DoModal();
//DEL
//DEL }
void CAirView::OnBtok()
{
// TODO: Add your control notification handler code here
//一、产生[0 1]之间的均匀分布的随机数;
fflag;
//数据定义部分
int x[6000],
a0,
C,
M;
a0=19;
C=51329;
double fakerand[6000], normrnd[6000];
int i,j;
//算法实现:线性同余法
x[0]=47169;
M=(int)pow(2,16);
for(i=1;i<5999;i++)
x[i+1]=(int)fmod(x[i]*a0+C,M);
for(i=1;i<6000;i++)
fakerand[i]=(double)x[i]/M;
//标准正态分布随机变量的抽样:应用近似抽样法
for(i=1;i<500;i++)
{
normrnd[i]=0;
for(j=12*i;j<12*(i+1);j++)
normrnd[i]=normrnd[i]+fakerand[j];
normrnd[i]=normrnd[i]-6;
}
double T,Q1=20,Q2=30,Q3=15;
double x0,y0,z0;
double ydfx;
double sd,a;
double mvx,mvy,mvz,max,may,maz,q;
int hi;
int ydmssel,kjshxsel;
UpdateData(TRUE);
m_pDoc=m_pView->GetDocument();
T=m_pDoc->m_T;
m_pDoc->m_mb+=1;
hi=m_pDoc->m_mb;
if(hi>0)
m_pDoc->AirMB[hi][0].mbph=m_pDoc->AirMB[hi-1][0].mbph+1;
if(hi==0)
m_pDoc->AirMB[hi][0].mbph=m_pDoc->AirMB[hi][0].mbph;
switch(m_dwshx.GetCurSel())
{
case 0:
m_pDoc->AirMB[hi][1].dwshxbz=1;
break;
case 1:
m_pDoc->AirMB[hi][1].dwshxbz=2;
break;
case 2:
m_pDoc->AirMB[hi][1].dwshxbz=3;
break;
case 3:
m_pDoc->AirMB[hi][1].dwshxbz=4;
break;
default :m_pDoc->AirMB[hi][1].dwshxbz=4;
}
/*if(fflag==1)
{
m_x=m_jl1*cos(m_q)*sin(m_fwj)+m_pDoc->m_pt1X;
m_y=m_jl1*cos(m_q)*cos(m_fwj)+m_pDoc->m_pt1Y;
if(m_mbkjshx.GetCurSel()==1||m_mbkjshx.GetCurSel()==2)
m_z=m_jl1*sin(m_q);
}*/
x0=300000;//m_x; //X方向的目标初始坐标
y0=200000;//m_y; //Y方向的目标初始坐标
z0=4000;//m_z;
ydfx=45; //目标的初始航向角
sd=4000; //目标的初始速度
a=300;
q=45;
/*if((m_mbkjshx.GetCurSel()==1||m_mbkjshx.GetCurSel()==2)&&fflag==0)
{
z0=m_z; //z方向的目标初始坐标
}
if(m_ydms.GetCurSel()==1)
{
a=m_a;
}*/
ydmssel=m_ydms.GetCurSel();
kjshxsel=m_mbkjshx.GetCurSel();
switch(ydmssel)
{ //匀速运动
case 0:
{
switch(kjshxsel)
{
//水面目标
case 0:
{
if(ydfx<=-90)
{
mvx=-sd*fabs(sin(m_fx*pi/180)); //X方向目标的初始速度
mvy=sd*fabs(cos(ydfx*pi/180));
}
if(ydfx<0&&ydfx>-90)
{
mvx=-sd*fabs(sin(ydfx*pi/180));
mvy=-sd*fabs(cos(ydfx*pi/180));
}
if(ydfx>=0&&ydfx<=90)
{
mvx=sd*fabs(sin(ydfx*pi/180));
mvy=-sd*fabs(cos(ydfx*pi/180)); //y方向目标的初始速度
}
if(ydfx>90)
{
mvx=sd*fabs(sin(ydfx*pi/180));
mvy=sd*fabs(cos(ydfx*pi/180));
}
for(i=1;i<500;i++)
{
m_pDoc->AirMB[hi][i].x=x0+i*T*mvx+Q1*normrnd[i];
m_pDoc->AirMB[hi][i].y=y0+i*T*mvy+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].q=0;
m_pDoc->AirMB[hi][i].v=sd;
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=0;
m_pDoc->AirMB[hi][i].ax=0;
m_pDoc->AirMB[hi][i].ay=0;
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_pt1X0;
m_pDoc->AirMB[hi][1].by=m_pDoc->AirMB[hi][1].y-m_pDoc->m_pt1Y0;
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:
{
//目标的高低角
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));
}
if(ydfx*pi/180<0&&ydfx*pi/180>-90)
{
mvx=-sd*fabs(cos( q*pi/180)*sin( ydfx*pi/180));
mvy=-sd*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));
mvy=-sd*fabs(cos( q*pi/180)*cos( ydfx*pi/180)); //y方向目标的初始速度
}
if(ydfx*pi/180>90)
{
mvx=sd*fabs(cos( q*pi/180)*sin( ydfx*pi/180));
mvy=sd*fabs(cos( q*pi/180)*cos( ydfx*pi/180));
}
mvz= 0*sin( q*pi/180); //z方向目标的初始速度
for(i=1;i<500;i++)
{
m_pDoc->AirMB[hi][i].x=x0+i*T*mvx+Q1* normrnd[i];
m_pDoc->AirMB[hi][i].y=y0+i*T*mvy+Q2* normrnd[i];
m_pDoc->AirMB[hi][i].z=z0+i*T*mvz+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;
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=0;
m_pDoc->AirMB[hi][i].ax=0;
m_pDoc->AirMB[hi][i].ay=0;
m_pDoc->AirMB[hi][i].az=0;
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_pt1X0;
m_pDoc->AirMB[hi][1].by=m_pDoc->AirMB[hi][1].y-m_pDoc->m_pt1Y0;
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:
{
//q=-pi/3; //目标的高低角
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));
}
if(ydfx*pi/180<0&&ydfx*pi/180>-90)
{
mvx=-sd*fabs(cos( q*pi/180)*sin( ydfx*pi/180));
mvy=-sd*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));
mvy=-sd*fabs(cos( q*pi/180)*cos( ydfx*pi/180)); //y方向目标的初始速度
}
if(ydfx*pi/180>90)
{
mvx=sd*fabs(cos( q*pi/180)*sin( ydfx*pi/180));
mvy=sd*fabs(cos( q*pi/180)*cos( ydfx*pi/180));
}
mvz=sd*sin(q); //z方向目标的初始速度
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -