Chỉ thực hiện được với Radar chủ động thứ cấp:
• Radar chủ động thứ cấp là hệ thống radar có khả năng trao đổi thông tin ( truyền số liệu ) với đối tượng (mục tiêu)
• Quá trình trao đổi số liệu giữa M và RS được thực hiện khi M nằm lọt trong búp sóng radar.
• Thời gian trao đổi số liệu phụ thuộc vào tốc độ quét cánh sóng và kích thước búp sóng của trạm Radar
96 trang |
Chia sẻ: maiphuongdc | Lượt xem: 2743 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Đồ án Mô phỏng hiển thị mục tiêu Radar trên mà hình máy tính PC, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
//k=1,2,3,4,5,6....
//x(t)=150.t..
//y(t)=235.t....
//z(t)=10.t...
int i,j,k;
float x,y,z;
int pb;
k=4;//muc tieu so 4
////////////////////////////////////////////// //mang len mot don vi
x=-2*t+250-0.0001*t*t;//dinh nghia cac ham tai day
y=3*t-100;//dinh nghia cac ham tai day
z=20;//dinh nghia cac ham tai day
{
//tinh khoang cach//////////////////////////
if( sqrt(x*x+y*y+z*z)>300)
data_vi_tri[k-1][dung_luong][0]=-0.001;
else
data_vi_tri[k-1][dung_luong][0]=sqrt(x*x+y*y+z*z);
//tinh vi tri moi, trong thuc te thi la so lieu moi nhan duoc
if((x>=0)&(y>=0)) data_vi_tri[k-1][dung_luong][1]=pi-asin(x/sqrt(y*y+x*x));
else if((x>=0)&(y<0))data_vi_tri[k-1][dung_luong][1]=asin(x/sqrt(y*y+x*x));
else if((x=0))data_vi_tri[k-1][dung_luong][1]=pi-asin(x/sqrt(y*y+x*x));
if((x<0)&(y<0)) data_vi_tri[k-1][dung_luong][1]=2*pi+asin(x/sqrt(y*y+x*x));
//doi sang do
data_vi_tri[k-1][dung_luong][1]=data_vi_tri[k-1][dung_luong][1]*180/pi;
//tinh teta
data_vi_tri[k-1][dung_luong][2] =asin(z/data_vi_tri[k-1][dung_luong][0])*180/pi;
//tinh do cao h
data_vi_tri[k-1][dung_luong][3]=z;
//toinh van toc
van_toc(k , dung_luong, dung_luong-1);
data_vi_tri[k-1][dung_luong][4]=vxt;
/////////////////////////////////////////////////////
}
float fmax, fmin,tg;
fmax=data_thanh_quet_phi;
fmin=fmax+phan_giai*tt_chieu_quet;
if(fmin>=360)fmin=fmin-360;
if(fmin<0)fmin=fmin+360;
if(fmax<fmin){tg=fmax;fmax=fmin;fmin=tg;};
pb=0;
if((fmax-fmin)fmin)&(data_vi_tri[k-1][dung_luong][1]<fmax)) pb=1;
if((fmax-fmin)>180) if((data_vi_tri[k-1][dung_luong][1]fmax)) pb=1;
//////////////////////////////////////////////////////dung_luong+1 r so phan tu mang
if(pb==0)
{trang_thai_truoc_nua[k-1]=trang_thai_truoc[k-1];
trang_thai_truoc[k-1]=trang_thai_hien_thoi[k-1];
trang_thai_hien_thoi[k-1]=0;}
/////////////////////////////////////////////////////////////////////
if(pb==1)
{ trang_thai_truoc_nua[k-1]=trang_thai_truoc[k-1];
trang_thai_truoc[k-1]=trang_thai_hien_thoi[k-1];
trang_thai_hien_thoi[k-1]=1;
//dich cac ngan du lieu len tren 1 don vi
for(i=1;i<=dung_luong;i++) for (j=0;j<=4;j++)data_vi_tri[k-1][i-1][j] = data_vi_tri[k-1][i][j];//dich du lieu tu day
}
}
//////////////////////////////////////////////////////////////////////////////////////////////
void CRada2Dlg::toa_do_m5(float t)
{
//k=1,2,3,4,5,6....
//x(t)=150.t..
//y(t)=235.t....
//z(t)=10.t...
int i,j,k;
float x,y,z;
int pb;
k=5;//muc tieu so 5
////////////////////////////////////////////// //mang len mot don vi
x=-2*t+250-0.0001*t*t;//dinh nghia cac ham tai day
y=3*t-300;//dinh nghia cac ham tai day
z=20;//dinh nghia cac ham tai day
{
//tinh khoang cach//////////////////////////
data_vi_tri[k-1][dung_luong][0]=sqrt(x*x+y*y+z*z);
if( sqrt(x*x+y*y+z*z)>300)
data_vi_tri[k-1][dung_luong][0]=-0.001;
else
//tinh vi tri moi, trong thuc te thi la so lieu moi nhan duoc
if((x>=0)&(y>=0)) data_vi_tri[k-1][dung_luong][1]=pi-asin(x/sqrt(y*y+x*x));
else if((x>=0)&(y<0))data_vi_tri[k-1][dung_luong][1]=asin(x/sqrt(y*y+x*x));
else if((x=0))data_vi_tri[k-1][dung_luong][1]=pi-asin(x/sqrt(y*y+x*x));
if((x<0)&(y<0)) data_vi_tri[k-1][dung_luong][1]=2*pi+asin(x/sqrt(y*y+x*x));
//doi sang do
data_vi_tri[k-1][dung_luong][1]=data_vi_tri[k-1][dung_luong][1]*180/pi;
//tinh teta
data_vi_tri[k-1][dung_luong][2] =asin(z/data_vi_tri[k-1][dung_luong][0])*180/pi;
//tinh do cao h
data_vi_tri[k-1][dung_luong][3]=z;
//toinh van toc
van_toc(k , dung_luong, dung_luong-1);
data_vi_tri[k-1][dung_luong][4]=vxt;
/////////////////////////////////////////////////////
}
float fmax, fmin,tg;
fmax=data_thanh_quet_phi;
fmin=fmax+phan_giai*tt_chieu_quet;
if(fmin>=360)fmin=fmin-360;
if(fmin<0)fmin=fmin+360;
if(fmax<fmin){tg=fmax;fmax=fmin;fmin=tg;};
pb=0;
if((fmax-fmin)fmin)&(data_vi_tri[k-1][dung_luong][1]<fmax)) pb=1;
if((fmax-fmin)>180) if((data_vi_tri[k-1][dung_luong][1]fmax)) pb=1;
//////////////////////////////////////////////////////dung_luong+1 r so phan tu mang
if(pb==0)
{trang_thai_truoc_nua[k-1]=trang_thai_truoc[k-1];
trang_thai_truoc[k-1]=trang_thai_hien_thoi[k-1];
trang_thai_hien_thoi[k-1]=0;}
/////////////////////////////////////////////////////////////////////
if(pb==1)
{ trang_thai_truoc_nua[k-1]=trang_thai_truoc[k-1];
trang_thai_truoc[k-1]=trang_thai_hien_thoi[k-1];
trang_thai_hien_thoi[k-1]=1;
//dich cac ngan du lieu len tren 1 don vi
for(i=1;i<=dung_luong;i++) for (j=0;j<=4;j++)data_vi_tri[k-1][i-1][j] = data_vi_tri[k-1][i][j];//dich du lieu tu day
}
}
/////////////////////////////////////////////////////////////////////////////////////////////
void CRada2Dlg::toa_do_m6(float t)
{
//k=1,2,3,4,5,6....
//x(t)=150.t..
//y(t)=235.t....
//z(t)=10.t...
int i,j,k;
float x,y,z;
int pb;
k=6;//muc tieu so 6
////////////////////////////////////////////// //mang len mot don vi
x=-2*t+250-0.0001*t*t;//dinh nghia cac ham tai day
y=3*t-150;//dinh nghia cac ham tai day
z=20;//dinh nghia cac ham tai day
{
//tinh khoang cach//////////////////////////
data_vi_tri[k-1][dung_luong][0]=sqrt(x*x+y*y+z*z);
if( sqrt(x*x+y*y+z*z)>300)
data_vi_tri[k-1][dung_luong][0]=-0.001;
else
//tinh vi tri moi, trong thuc te thi la so lieu moi nhan duoc
if((x>=0)&(y>=0)) data_vi_tri[k-1][dung_luong][1]=pi-asin(x/sqrt(y*y+x*x));
else if((x>=0)&(y<0))data_vi_tri[k-1][dung_luong][1]=asin(x/sqrt(y*y+x*x));
else if((x=0))data_vi_tri[k-1][dung_luong][1]=pi-asin(x/sqrt(y*y+x*x));
if((x<0)&(y<0)) data_vi_tri[k-1][dung_luong][1]=2*pi+asin(x/sqrt(y*y+x*x));
//doi sang do
data_vi_tri[k-1][dung_luong][1]=data_vi_tri[k-1][dung_luong][1]*180/pi;
//tinh teta
data_vi_tri[k-1][dung_luong][2] =asin(z/data_vi_tri[k-1][dung_luong][0])*180/pi;
//tinh do cao h
data_vi_tri[k-1][dung_luong][3]=z;
//toinh van toc
van_toc(k , dung_luong, dung_luong-1);
data_vi_tri[k-1][dung_luong][4]=vxt;
/////////////////////////////////////////////////////
}
float fmax, fmin,tg;
fmax=data_thanh_quet_phi;
fmin=fmax+phan_giai*tt_chieu_quet;
if(fmin>=360)fmin=fmin-360;
if(fmin<0)fmin=fmin+360;
if(fmax<fmin){tg=fmax;fmax=fmin;fmin=tg;};
pb=0;
if((fmax-fmin)fmin)&(data_vi_tri[k-1][dung_luong][1]<fmax)) pb=1;
if((fmax-fmin)>180) if((data_vi_tri[k-1][dung_luong][1]fmax)) pb=1;
//////////////////////////////////////////////////////dung_luong+1 r so phan tu mang
if(pb==0)
{trang_thai_truoc_nua[k-1]=trang_thai_truoc[k-1];
trang_thai_truoc[k-1]=trang_thai_hien_thoi[k-1];
trang_thai_hien_thoi[k-1]=0;}
/////////////////////////////////////////////////////////////////////
if(pb==1)
{ trang_thai_truoc_nua[k-1]=trang_thai_truoc[k-1];
trang_thai_truoc[k-1]=trang_thai_hien_thoi[k-1];
trang_thai_hien_thoi[k-1]=1;
//dich cac ngan du lieu len tren 1 don vi
for(i=1;i<=dung_luong;i++) for (j=0;j<=4;j++)data_vi_tri[k-1][i-1][j] = data_vi_tri[k-1][i][j];//dich du lieu tu day
}
}
////////////////////////////////////////////////////////////////////////////////////////////
void CRada2Dlg::ve_diem(int kieu_xem,int sa,int ch,float v_t,float radius,float d1,float phi,float teta,int mr,int mg,int mb)//de hien thi lai cac may bay moi khi ve lai man hinh, tham khao gia tri
//trong mang data, vi tri tuong doi voi thanh_quet_phi
{
//////////////////////
int d;
if((d10))d=(int)floor(d1/dmax*maxx/4.0);else {d=0;radius=0;};
float fmax,fmin,tg;
int tg1;
if((d10))if(sa)
{
ve_tung_diem(radius+2,d,phi,teta,240,240,0);
Beep(523,50);
}
else ve_tung_diem(radius,d,phi,teta,mr,mg,mb);
///////////////////////
}
////////////////////////////////////////////////////////////////////////////////////////////////
void CRada2Dlg::ve_dai_quat(float r_c, float v_t, int ch, int mr, int mg, int mb)
{
//khai but
CPen pPen(PS_SOLID,0,RGB(mr,mg,mb));
//chon but ve
CClientDC pdc(this);
pdc.SelectObject(pPen);
//////////////////////
//ch chi co gia tri1 hoac -1
float r_c1,v_t1;
int R,bn;
int xmin,xmax,ymin,ymax,tg;
r_c1=(float)r_c*pi/180;
v_t1=(float)v_t*pi/180;
R=(int)floor (maxx/4);
for(bn=0;bn<=20;bn++)
{
xmin=(int)floor(R*sin(v_t1+ch*r_c1*bn/20));
ymin=(int)floor(R*cos(v_t1+ch*r_c1*bn/20))*-1;
pdc.MoveTo(gocx,gocy);
pdc.LineTo(gocx+xmin,gocy+ymin);
}
}
/////////////////////////////////////////////////////////////////////////////////////////////
void CRada2Dlg::ve_thanh_quet(int kieu_xem,float v_t1 ,float r_c1,int phan_giai,int mr,int mg,int mb,int ch)//de hien thi lai thanh quet moi khi ve lai man hinh,ham nay co tham
//khao bien trang thai chieu quet, va denta phi dich chuyen thay
//doi no se lam thay doi toc do quet,
{
int i,mr1,mg1,mb1;
float v_t2,anpha;
anpha=1.02;
for(i=0;i<phan_giai;i++)
{//doi mau
mr1=floor(mr/pow(anpha,phan_giai-i));
mg1=floor(mg/pow(anpha,phan_giai-i));
mb1=floor(mb/pow(anpha,phan_giai-i));
v_t2=v_t1+r_c1*ch*i;
ve_dai_quat(r_c1,v_t2,ch,mr1,mg1,mb1);
}
}
//////////////////////////////////////////////////////////////////////////////////////////////
void CRada2Dlg::DrawScreen(CDC *pDC)//de hien len xoa man hinh cu di man chan nay cho la mau trang
{
CBrush*pBrush,*pOldBrush,*pB;//choi ve va choi backup
pBrush=new CBrush(RGB(150,150,255));//Tao choi ve mau 255,250,230
pOldBrush=pDC->SelectObject(pBrush);//lwu choi
///////////////////////////////////
int i=0;
CPen pPen15(PS_SOLID,8,RGB(data_mau[i][0],data_mau[i][1],data_mau[i][2]));
i++;
CPen pPen25(PS_SOLID,8,RGB(data_mau[i][0],data_mau[i][1],data_mau[i][2]));
i++;
CPen pPen35(PS_SOLID,8,RGB(data_mau[i][0],data_mau[i][1],data_mau[i][2]));
i++;
CPen pPen45(PS_SOLID,8,RGB(data_mau[i][0],data_mau[i][1],data_mau[i][2]));
i++;
CPen pPen55(PS_SOLID,8,RGB(data_mau[i][0],data_mau[i][1],data_mau[i][2]));
i++;
CPen pPen65(PS_SOLID,8,RGB(data_mau[i][0],data_mau[i][1],data_mau[i][2]));
i++;
// cac Pen nay co do rong la 8 pixel
//////////////////////////////////////////
CRect rect2(35+5,maxy*2/3-5,maxx-35-5,10+5);
//dung choi to mau
pDC->FillRect(&rect2,pBrush);
//CRect rect1(gocx-maxx/4,gocy-maxx/4,gocx+maxx/4,gocy+maxx/4);
//pDC->FillRect(&rect,pBrush);
//pDC->Ellipse(&rect1);
CClientDC pdc(this);
//them hinh tron--------------
CPen pens(PS_SOLID,2,RGB(0,0,0));
pDC->SelectObject(pens);
pDC->Ellipse(gocx-maxx/4,gocy-maxx/4,gocx+maxx/4,gocy+maxx/4);
pDC->Ellipse(gocx-maxx/8,gocy-maxx/8,gocx+maxx/8,gocy+maxx/8);
//pDC->Ellipse(gocx-maxx/16-maxx/8,gocy-maxx/16-maxx/8,gocx+maxx/16+maxx/8,gocy+maxx/16+maxx/8);
pDC->Ellipse(gocx-maxx/16,gocy-maxx/16,gocx+maxx/16,gocy+maxx/16);
pDC->Ellipse(gocx-maxx/32,gocy-maxx/32,gocx+maxx/32,gocy+maxx/32);
//ve cac truc toa do
pDC->MoveTo(gocx-maxx/4*sin(pi/4),gocy-maxx/4*sin(pi/4));
pDC->LineTo(gocx+maxx/4*sin(pi/4),gocy+maxx/4*sin(pi/4));
pDC->MoveTo(gocx+maxx/4*sin(pi/4),gocy-maxx/4*sin(pi/4));
pDC->LineTo(gocx-maxx/4*sin(pi/4),gocy+maxx/4*sin(pi/4));
pDC->MoveTo(gocx-maxx/4,gocy);
pDC->LineTo(gocx+maxx/4,gocy);
pDC->MoveTo(gocx,gocy-maxx/4);
pDC->LineTo(gocx,gocy+maxx/4);
//dua text ra man hinh
pDC->SetBkColor(RGB(150,150,255));
pDC->TextOut(gocx-10,gocy-maxx/4,"N 0");
pDC->TextOut(gocx-10,gocy+maxx/4-20,"S 180");
pDC->TextOut(gocx-maxx/4,gocy-20,"W 270");
pDC->TextOut(gocx+maxx/4-40,gocy-20,"E 90");
pDC->TextOut(gocx+maxx/4-20,gocy+10,"300Km");
pDC->TextOut(gocx+maxx/8-15,gocy+10,"150Km");
pDC->TextOut(gocx+maxx/16-15,gocy+10,"75Km");
////////////////////////////////////
i=0;int di=120,dj=0;//hai bien vi tri quyet dinh vi tri khoi chu
// di giam thi khoi chu dich sang trai
pdc.SetBkColor(RGB(150,150,255));
pdc.SelectObject(pPen15);
pdc.MoveTo(di+maxx-35-150,dj+40+i*15);
pdc.LineTo(di+maxx-35-150+20,dj+40+i*15);
pdc.TextOut(di+maxx-35-190,dj+30+i*15,"Tar1:");
i++;
pdc.SelectObject(pPen25);
pdc.MoveTo(di+maxx-35-150,dj+40+i*15);
pdc.LineTo(di+maxx-35-150+20,dj+40+i*15);
pdc.TextOut(di+maxx-35-190,dj+30+i*15,"Tar2:");
i++;
pdc.SelectObject(pPen35);
pdc.MoveTo(di+maxx-35-150,dj+40+i*15);
pdc.LineTo(di+maxx-35-150+20,dj+40+i*15);
pdc.TextOut(di+maxx-35-190,dj+30+i*15,"Tar3:");
i++;
pdc.SelectObject(pPen45);
pdc.MoveTo(di+maxx-35-150,dj+40+i*15);
pdc.LineTo(di+maxx-35-150+20,dj+40+i*15);
pdc.TextOut(di+maxx-35-190,dj+30+i*15,"Tar4:");
i++;
pdc.SelectObject(pPen55);
pdc.MoveTo(di+maxx-35-150,dj+40+i*15);
pdc.LineTo(di+maxx-35-150+20,dj+40+i*15);
pdc.TextOut(di+maxx-35-190,dj+30+i*15,"Tar5:");
i++;
pdc.SelectObject(pPen65);
pdc.MoveTo(di+maxx-35-150,dj+40+i*15);
pdc.LineTo(di+maxx-35-150+20,dj+40+i*15);
pdc.TextOut(di+maxx-35-190,dj+30+i*15,"Tar6:");
i++;
//xoa choi ve di
delete pDC->SelectObject(pOldBrush);
// ham nay chi ve 4 hinh tron cac truc toa do va cac Tar
}
///////////////////////////////////////////////////////////////////////
void CRada2Dlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
maxx=cx;
maxy=cy;
}
////////////////////////////////////////////////////////////////////////
void CRada2Dlg::OnBUTTONStart()
{
// TODO: Add your control notification handler code here
if(start==1)start=0;else start=1;
}
void CRada2Dlg::OnBUTTONSpeed()
{
// TODO: Add your control notification handler code here
if(thang_toc_do<100) thang_toc_do++;
tt_toc_do_quet=(floor)(1+thang_toc_do*0.3);
CString str;
str.Format("Toc do cap:%d",thang_toc_do+3);
m_RSpeed=str;
UpdateData(FALSE);
}
void CRada2Dlg::ve_tung_diem(float radius, float d, float phi, float teta, int mr, int mg, int mb)
{
CClientDC pdc(this);
CBrush*pBrush,*pOldBrush;
pBrush =new CBrush(RGB(mr,mg,mb));
//chon choi ve
pOldBrush=pdc.SelectObject(pBrush);
//khai but
CPen pPen(PS_SOLID,1,RGB(mr,mg,mb));
//chon but ve
pdc.SelectObject(pPen);
//ma ve trong phan nay/////////////////////////////////////////////////
int xtam,ytam;
float phi1=phi*pi/180;
xtam=((int)floor(d*sin(phi1)));
ytam=((int)floor(d*cos(phi1)))*(-1);//toa do tam diem
xtam=xtam+gocx;
ytam=ytam+gocy;//hieu chinh toa do
CRect rect(xtam-radius,ytam-radius,xtam+radius,ytam+radius);
pdc.FillRect(&rect,pBrush);
delete pdc.SelectObject(pOldBrush);
//////////////////////////////////////////////////////////////////////
}
void CRada2Dlg::OnTimer(UINT nIDEvent)
{
switch(nhin_thang)
{
case 1: introduce();
break;
case 2: cap_nhat();
break;
case 3: cap_nhat_nhin_thang();
break;
case 4: cap_nhat_nhin_vong();
break;
case 5: xoan_oc();
break;
}
////////////////////////////////////////////////////////////////////////
//cap nhat thong tin chung
CString str;
str.Format("Toc do cap:%d",thang_toc_do+3);
m_RSpeed=str;
UpdateData(FALSE);
//////////////////////////////////////////////////////////////////
//////-----------
CClientDC pdc(this);
//////----------
CString m_str[6],tmp;
for(int count =0;count<6;count++)
{
if((data_vi_tri[count][dung_luong-1][0]>dmax)|(data_vi_tri[count][dung_luong-1][0]<dmin)) m_str[count].Format("Out of range");
else
m_str[count].Format("D:%3.2f Phi:%3.2f Teta:%2.2f H:%3.2f Vxt:%4.2f ",data_vi_tri[count][dung_luong-1][0],data_vi_tri[count][dung_luong-1][1],data_vi_tri[count][dung_luong-1][2],data_vi_tri[count][dung_luong-1][3],data_vi_tri[count][dung_luong-1][4]);
/////-------------------------------
switch(count)
{
case 0: m_m1 = m_str[count];
break;
case 1: m_m2 = m_str[count];
break;
case 2: m_m3 = m_str[count];
break;
case 3: m_m4 = m_str[count];
break;
case 4: m_m5 = m_str[count];
break;
case 5: m_m6 = m_str[count];
break;
}
}
UpdateData(FALSE);
m_toa_do1++;
giay=m_toa_do1*time_update/(float)1000;
if(giay>=60){phut++;giay=m_toa_do1=0;};
if(phut>=60){gio++;phut=0;};
if(gio>=24){gio=0;};
tmp.Format("Time : %d : %d : %2.2f ",gio,phut,m_toa_do1*time_update/(float)1000);
//cap nhat thoi gian he thong
m_toa_do=tmp;
UpdateData(FALSE);
//////////////////////////////////////////
//chuan bi cho chu ki sau
if(start)
{
timeo=timeo+time_update/(float)1000;
data_thanh_quet_phi=data_thanh_quet_phi-tt_chieu_quet*tt_toc_do_quet;
if (data_thanh_quet_phi>360) data_thanh_quet_phi=data_thanh_quet_phi-360;
if(data_thanh_quet_phi<0)data_thanh_quet_phi=data_thanh_quet_phi+360;
toa_do_m1(timeo);
toa_do_m2(timeo);
toa_do_m3(timeo);
toa_do_m4(timeo);
toa_do_m5(timeo);
toa_do_m6(timeo);
//che do bam sat
if(tt_bam_sat==1) bam_sat(dt_bam);
}
///////////////////////////////////////////////////////////////////////
CDialog::OnTimer(nIDEvent);
}
void CRada2Dlg::OnBUTTONInv()
{
// TODO: Add your control notification handler code here
//if(tt_chieu_quet==1) tt_chieu_quet=-1;
//else tt_chieu_quet=1;
invert();
}
void CRada2Dlg::OnButtonRc()
{
// TODO: Add your control notification handler code here
if(phan_giai<100) phan_giai++;
}
void CRada2Dlg::OnBUTTONNWave()
{
// TODO: Add your control notification handler code here
if(phan_giai>1)phan_giai--;
printf("\a");
}
void CRada2Dlg::OnBUTTONDSpeed()
{
// TODO: Add your control notification handler code here
if(thang_toc_do>-2)thang_toc_do--;
tt_toc_do_quet=1+thang_toc_do*0.3;
CString str;
str.Format("Toc do cap:%d",thang_toc_do+3);
m_RSpeed=str;
UpdateData(FALSE);
}
void CRada2Dlg::bam_sat(int dt_bam)
{ float den_ta_phi;
if((data_vi_tri[dt_bam][dung_luong-1][0] dmax -40 thi them vao sau
(data_vi_tri[dt_bam][dung_luong-1][0]>dmax-40))//them vao sau
//phan_giai=30;
{
time_out[0][1]=0;//trang thai truy tim
if (tt_toc_do_quet<0)
tt_toc_do_quet=-(1+25*0.3);//thang toc do cao
else tt_toc_do_quet=(1+10*0.3);
}
float van_toc_dt;// van toc cua doi tuong bam sat
//trang thai on dinh----------------------------------------------------
if((trang_thai_hien_thoi[dt_bam-1]==1)&(trang_thai_truoc[dt_bam-1]==1))
{ den_ta_phi=data_vi_tri[dt_bam-1][dung_luong-1][1]-data_vi_tri[dt_bam-1][dung_luong-2][1];
if(fabs(den_ta_phi)>180){if(den_ta_phi<0)den_ta_phi=den_ta_phi+360;
else den_ta_phi=-360+den_ta_phi;
}
if(den_ta_phi*tt_toc_do_quet*-1*tt_chieu_quet<0)invert();
//tt_toc_do_quet=fabs(den_ta_phi)*1.5;
//tinh toa do vi tri chinh giua duong quet
float trungg=data_thanh_quet_phi +(float)tt_chieu_quet*phan_giai/2;
if(trungg<0)trungg=360+trungg;
if(trungg>360)trungg=trungg-360;
// tinh vi tri tuong doi cua thanh quet va doi tuong
float den= data_vi_tri[dt_bam-1][dung_luong-1][1]- trungg;
if(fabs(den)>180)
{
if(den<0) den=360+den;
if(den>0)den=den-360;
}
//hieu chinh toc do duoi bam
// int co_bam=0;
if(fabs(den)<=8) {tt_toc_do_quet=fabs(den_ta_phi);time_out[0][1]=1;}
if((fabs(den)>2)&time_out[0][1]) {if(den_ta_phi>=0)if (den>0) tt_toc_do_quet=den_ta_phi+0.2;else tt_toc_do_quet=den_ta_phi-0.2;
if(den_ta_phi0) tt_toc_do_quet=den_ta_phi+0.2;else tt_toc_do_quet=fabs(den_ta_phi-0.2);
}
//thu gon canh song neu thich hop
//if(fabs(den)<10) phan_giai=15;
}
//Trang thai truy tim---------------------------------------------------------
if((!trang_thai_hien_thoi[dt_bam-1])&(!trang_thai_truoc[dt_bam-1]))
{
//phan_giai=30;
time_out[0][1]=0;//trang thai truy tim
if (tt_toc_do_quet<0)
tt_toc_do_quet=-(1+25*0.3);//thang toc do cao
else tt_toc_do_quet=(1+10*0.3);
}
thang_toc_do=floor((tt_toc_do_quet-1)/0.3);
}
//---------------------------------------------------
void CRada2Dlg::OnBUTTONTrak()
{ CString str;
// TODO: Add your control notification handler code here
if(tt_bam_sat==0)tt_bam_sat=1;
else
{tt_bam_sat=0;
//tt_toc_do_quet=(floor)(1+thang_toc_do*0.3);
}
int i;
for(i=0;i<=5;i++)trang_thai_hien_thoi[i]=0;
for(i=0;i<=5;i++)trang_thai_truoc[i]=0;
if(tt_bam_sat){str.Format("Tracking Tar %d",dt_bam);}else
{str.Format("None");}
m_tt_bam=str;
UpdateData(FALSE);
//thang_toc_do=dt_bam;
}
//-------------------------------------------------------------
void CRada2Dlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
char Ischar;
Ischar=(char)nChar;
if(Ischar=='z') dt_bam=1;
if(Ischar=='2') dt_bam=2;
if(Ischar=='3') dt_bam=3;
if(Ischar=='4') dt_bam=4;
if(Ischar=='5') dt_bam=5;
if(Ischar=='6') dt_bam=6;
//else dt_bam=2;
//----------------------------------------------------------------
CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}
void CRada2Dlg::invert()
{
if(tt_chieu_quet==-1){tt_chieu_quet=1;
data_thanh_quet_phi=data_thanh_quet_phi-phan_giai;
}
else {tt_chieu_quet=-1;data_thanh_quet_phi=data_thanh_quet_phi+phan_giai;}
}
void CRada2Dlg::van_toc(int dt_bam ,int dung_luong1, int dung_luong2)
{
vxt=(data_vi_tri[dt_bam-1][dung_luong1][0]-data_vi_tri[dt_bam-1][dung_luong2][0])/time_update/(dung_luong1-dung_luong2)*1000*1000;
v_teta=cos(data_vi_tri[dt_bam-1][dung_luong1][2]-data_vi_tri[dt_bam-1][dung_luong2][2])*data_vi_tri[dt_bam-1][dung_luong1][0]/time_update/(dung_luong1-dung_luong2);
v_phi=sin(data_vi_tri[dt_bam-1][dung_luong1][2])*(data_vi_tri[dt_bam-1][dung_luong1][1]-data_vi_tri[dt_bam-1][dung_luong2][1])*data_vi_tri[dt_bam-1][dung_luong1][0]/time_update/(dung_luong1-dung_luong2);
}
void CRada2Dlg::cap_nhat_nhin_thang()
{ int i;int toa_do,sa;
int gocx1,dai;
//khai but
int mr=200, mg=0, mb=0;
CPen pPen(PS_SOLID,2,RGB(mr,mg,mb));
CPen pPen1(PS_SOLID,8,RGB(mr,mg,mb));
CPen pPen2(PS_SOLID,8,RGB(20,200,200));
CPen pPen3(PS_SOLID,1,RGB(255,0,0));//vang
i=0;
CPen pPen15(PS_SOLID,8,RGB(data_mau[i][0],data_mau[i][1],data_mau[i][2]));
i++;
CPen pPen25(PS_SOLID,8,RGB(data_mau[i][0],data_mau[i][1],data_mau[i][2]));
i++;
CPen pPen35(PS_SOLID,8,RGB(data_mau[i][0],data_mau[i][1],data_mau[i][2]));
i++;
CPen pPen45(PS_SOLID,8,RGB(data_mau[i][0],data_mau[i][1],data_mau[i][2]));
i++;
CPen pPen55(PS_SOLID,8,RGB(data_mau[i][0],data_mau[i][1],data_mau[i][2]));
i++;
CPen pPen65(PS_SOLID,8,RGB(data_mau[i][0],data_mau[i][1],data_mau[i][2]));
i++;
//chon but ve
CClientDC pdc(this);
pdc.SelectObject(pPen);
//////////////////////////////
//
CBrush*pBrush,*pOldBrush;//choi ve va choi backup
pBrush=new CBrush(RGB(150,150,255));//Tao choi ve mau 255,250,230
pOldBrush=pdc.SelectObject(pBrush);//lwu choi
//xac dinh vung ve cua man hinh
CRect rect(35,maxy*2/3,maxx-35,10);
//dung choi to mau
pdc.FillRect(&rect,pBrush);
int dd,yy,dd1,yy1,yy2,dd2,dtq;
//int sa=0;
dtq=maxy*2/3-10;
dd=maxy*1/6;
dd1=maxy*1/8;
dd2=maxy*1/12;
yy=(int)floor(maxy*6/20.0);
yy1=(int)floor(maxy*9/20.0);
yy2=(int)floor(maxy*12/20.0);
//hien hinh cac doi tuong
//chinh xac cap 1
for(i=0;i<=5;i++)
{
gocx1=floor(data_vi_tri[i][dung_luong-1][0]*(maxx-70)/dmax);
gocx1=gocx1+35;
if ( (data_vi_tri[i][dung_luong-1][0]>300)|(data_vi_tri[i][dung_luong-1][0]<0))dai=0;
else
dai=floor((dmax-data_vi_tri[i][dung_luong-1][0])*dd/dmax);
//--------------------------------------------
if(trang_thai_hien_thoi[i]==1) sa=1;else sa=0;
if(dai!=0)
ve_doan_thang(sa,dai,5,gocx1,yy,data_mau[i][0],data_mau[i][1],data_mau[i][2]);
}
///chinh xac cap2
for(i=0;i<=5;i++)
{
gocx1=(int)floor(data_vi_tri[i][dung_luong-1][0]*(maxx-70)/dmax)%(int)floor((maxx-70)/10.0);
gocx1=gocx1*10+35;
if( (data_vi_tri[i][dung_luong-1][0]>300)|(data_vi_tri[i][dung_luong-1][0]<0))dai=0;
else
dai=floor((dmax-data_vi_tri[i][dung_luong-1][0])*dd1/dmax);
if(trang_thai_hien_thoi[i]==1) sa=1;else sa=0;
if(dai!=0)
ve_doan_thang(sa,dai,5,gocx1,yy1,data_mau[i][0],data_mau[i][1],data_mau[i][2]);
}
//chinh xac cap3
for(i=0;i<=5;i++)
{
gocx1=(int)floor(data_vi_tri[i][dung_luong-1][0]*(maxx-70)/dmax)%(int)floor((maxx-70)/10.0);
gocx1=gocx1*10;
gocx1=gocx1%(int)(floor((maxx-70)/10.0));
gocx1=gocx1*10+35;
if( (data_vi_tri[i][dung_luong-1][0]>300)|(data_vi_tri[i][dung_luong-1][0]<0))dai=0;
else
dai=floor((dmax-data_vi_tri[i][dung_luong-1][0])*dd1/dmax);
if(trang_thai_hien_thoi[i]==1) sa=1;else sa=0;
if(dai!=0)
ve_doan_thang(sa,dai,5,gocx1,yy2,data_mau[i][0],data_mau[i][1],data_mau[i][2]);
}
//ve thanh quet bieu thi pha
gocx1=floor(data_thanh_quet_phi*(maxx-70)/360.0);
gocx1=gocx1+35;
ve_doan_thang(0,dtq,1,gocx1,maxy*2/3,255,255,255);
///////////ki hieu qui uoc
pdc.SetBkColor(RGB(150,150,255));
i=0;int di,dj;di=120;dj=0;//hai bien vi tri quyet dinh vi tri khoi chu
pdc.SelectObject(pPen15);
pdc.MoveTo(di+maxx-35-150,dj+40+i*15);
pdc.LineTo(di+maxx-35-150+20,dj+40+i*15);
pdc.TextOut(di+maxx-35-190,dj+30+i*15,"Tar1:");
i++;
pdc.SelectObject(pPen25);
pdc.MoveTo(di+maxx-35-150,dj+40+i*15);
pdc.LineTo(di+maxx-35-150+20,dj+40+i*15);
pdc.TextOut(di+maxx-35-190,dj+30+i*15,"Tar2:");
i++;
pdc.SelectObject(pPen35);
pdc.MoveTo(di+maxx-35-150,dj+40+i*15);
pdc.LineTo(di+maxx-35-150+20,dj+40+i*15);
pdc.TextOut(di+maxx-35-190,dj+30+i*15,"Tar3:");
i++;
pdc.SelectObject(pPen45);
pdc.MoveTo(di+maxx-35-150,dj+40+i*15);
pdc.LineTo(di+maxx-35-150+20,dj+40+i*15);
pdc.TextOut(di+maxx-35-190,dj+30+i*15,"Tar4:");
i++;
pdc.SelectObject(pPen55);
pdc.MoveTo(di+maxx-35-150,dj+40+i*15);
pdc.LineTo(di+maxx-35-150+20,dj+40+i*15);
pdc.TextOut(
Các file đính kèm theo tài liệu này:
- rada2dlg_.doc
- rada2dlg_.pdf