⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 airview.cpp

📁 自己做的一个雷达仿真的程序
💻 CPP
📖 第 1 页 / 共 4 页
字号:
// 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 + -