Tải bản đầy đủ (.docx) (58 trang)

Mô phỏng hiển thị mục tiêu radar trên màn hình máy tính PC 571813

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.99 MB, 58 trang )

I.GIỚI THIỆU VỀ CHƯƠNG TRÌNH
Yêu cầu bài tập lớn : bằng các kiến thức về đồ họa và sử dụng ngôn ngữ
lập trình C++ để thực hiện : “ mô phỏng hiển thị mục tiêu Radar trên mà
hình máy tính PC “,Quá trình thực hiện chương trình được viết bằng ngôn
ngữ C++ trên nền Visual Studio 6.0và giải quyết được các vấn đề sau đây :
- Tổng quan về màn hình hiển thị được chia làm 4 phần , thuận tiên cho
quá trình quan sát : màn hình quét chung , màn hình thể hiện các
phương pháp quét , bảng hiển thị các thông số , phần còn lại là các
phím điều khiển .
- Mô phỏng quỷ đạo của 6 mục tiêu khác nhau trên cùng 1 màn hình
radar
- Hệ thống radar có thể làm việc ở chế độ quét tất cả các mục tiêu hoặc
bám sát từng mục tiêu riêng biệt .
- Hệ thống thước đo cự ly được trang bị với 4 loại cho độ chính xác ,
và độ tin cậy cao :Quét thẳng , quét tròn ,quét xoắn và nhìn vòng . Với
thước xoắn có thể tăng số vòng của thước lên để cho độ chính xác cao
hơn tùy vào người sử dụng .
- Trong quá trình sử dụng các loại thước đo để xác địnhvị trí mục tiêu
thì người quan sát vẫn có thể nhìn thấy quỹ đạo của mục tiêu nhờ vào
màn hình chung , màn hình này luôn luôn hiển thị quỹ đạo mục tiêu
trong quá trình quét .
- Chiều và tốc độ quét sóng của radar có thể thay đổi được tùy vào
người sử dụng .
- Hệ thống radar sẽ tính toán và hiển thị các thông số về mục tiêu : Cự
Ly , Góc , Phương Vị , Độ Cao và Vận Tốc trên bảng thông số . Đồng
thời có các thông báo về thời điểm hiện tại của mục tiêu mà đài có thể
quan sát .
- Chương trình được điều khiển bởi hệ thống các nút điều khiển một
cách dễ dàng
- Do điều kiện hạn chế về mặt thời gian cũng như kinh nghiệm lập trình
còn ít nên chương trình còn có nhiều sai sót rất mong đươc sự đóng góp


ý kiến của thầy cô và các bạn .
- Chúng em xin chân thành cảm ơn thầy NGUYỄN TƯỜNG THÀNH
đã hướng dẫn chúng em trong quá trình thực hiện đồ án này và giúp
chúng em nắm vững hơn về kiến thức lập trình , đồ họa và mô phỏng
chương trình .

1.KHÁI NIỆM RADAR:

-Radar là hệ thống thiết bị tìm kiếm (detect) và xác định vị trí ( ranging)
của đối tượng thông qua việc thu, phát và xử lý sóng điện từ.
Lớp đện tử viễn thông k31

Page 1


Phân loại:
• Chủ động (Active system): thực hiện phát, thu và xử lý sóng điện từ
phản xạ từ mục tiêu radar
• Bị động (Passive system): chỉ thu và xử lý sóng điện từ bức xạ từ mục
tiêu radar.
2.MỤC TIÊU RADAR

- Mục tiêu radar là tất cả các đối tượng có khả năng phản xạ sóng điện
từ nằm trongtầm phát hiện của trạm radar.
Phân loại:
– Mục tiêu quan sát:
• Mục tiêu nhân tạo
• Mục tiêu tự nhiên
- Mục tiêu giả: là những đối tượng không cần quan sát nhưng xuất
sóng của trạm radar, gây nhiễu đối với các mục

hiện trong vùng phủ
tiêu cần quan sát.
Tham số xác định vị trí:
• 3D: M (D, φ, β ) hoặc M ( H, φ, β ) trong đó: H = D sin (β)
• 2 D: M (D, φ )
-Quỹ đạo mục tiêu: tập hợp các vị trí của mục tiêu theo thời gian
2.NGUYÊN LÝ CƠ BẢN CỦA XUNG RADAR


• Độ rộng xung PW- Pulse Width
– thời gian bức xạ tín hiệu trong một chu kỳ bức xạ.
• Tần số lặp xung PRF - Pulse Repetition Frequency
– Số xung phát trong một giây.
• Thời gian lặp xung PRT - Pulse Repetition Time (PRT=1/PRF)
• PW ảnh hưởng đến :
– Phạm vi phát hiện mục tiêu của Radar
– Cự ly tối thiểu và tối đa có thể phát hiện mục tiêu
• PRF xác định:
– Cự ly tối đa phát hiện mục tiêu
3.TÍNH TOÁN CỰ LY

-Tại trạm radar sóng điện từ được bức xạ ra không gian, phạm vi giám
xác của radar tùy thuộc vào công suất của máy phát, khi gặp phải vật thể lạ
sóng điện từ sẽ bị vật thể lạ hấp thụ một phần,một phần sẽ bị phản xạ lại
trạm ,tín hiệu thu được sẽ được xữ lý để biết chính xác tọa độ cũng như vị
trí của vật thể đó trong không gian

Các tham số cần xác định



4.CƠ SỞ VẬT LÝ CỦA RADA
Rada làm việc dựa trên 4 tính chất của sóng điện từ:
1.Sóng điện từ lan truyền với vận tốc hữu hạn, không đổi c=3.108 (m/s)
2. Sóng điện từ truyền thẳng.
3. Năng lượng sóng điện từ sẽ phản xạ khi gặp môi trường không đồng
nhất(mục tiêu)
4. Tần số thu được tại trạm radar sai lệch so với tần số phát, gây nên do sự
chuyển động tương đối giữa mục tiêu và trạm radar và được xác định thông
qua hiệu ứng doppler


5.CÁC BƯỚC XỬ LÝ TÍN HIỆU RADAR

Bước 1: Phát hiện mục tiêu :( detection)


Xác xuất phát hiện nhầm: gây nên do tín hiệu phản xạ từ các
đối tượng
Bước 2: Đo đạc tham số:( Measurement )
-Cự ly R
đo độ trễ
-Đo góc (fi,β) căn cứ vào hướng tính của búp sóng radar
-Đo vận tốc
hiệu ứng Dopper
Xác định được vị trí và vẽ quỷ đạo của mục
tiêu Tính được gia tốc của M
Bước 3: Phân biệt mục tiêu:( display)


Bước 4: Nhận biết mục tiêu:( recorgnation)

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
liệu phụ thuộc vào tốc độ quét cánh sóng và kích
số
thước búp sóng của trạm Radar

Radar thứ cấp truyền các tín hiệu được mã hóa đến bộ phát đáp của mục
tiêu.
• Transponder phúc đáp bằng bản tin được mã hóa với các thông tin của đối
tượng ( airplane )
• Một transponder có thể thiết lập tối đa khoảng 4096 mã nhận dạng identifying codes


• Trong lĩnh vực quân sự , các transponders được gọi là IFF (Identification,
Friend or Foe)

II.MÔ PHỎNG BẰNG PHẦN MỀM
1. screen

2.Quét tròn



3.Quét thẳng

Lớp đện tử viễn thông k31


Page 10


4.Màn hình ở chế độ quét xoắn


III.CODE PHẦN MỀM MÔ PHỎNG
//CHUONG TRINH MO PHONG HIEN THI MUC TIEU RADA TREN MAN HINH MAY
PC//
/***Chuong trinh duoc viet va chay tren nen Visual Studio 6.0*****//
/
***************************************************************************
****************************/
// Rada2Dlg.cpp : implementation file
//Ban dau he thong khoi dong voi cac gia tri ban dau tinh ra o ham Innitdialog , sau do
#include "stdafx.h"
#include "Rada2.h"
#include "Rada2Dlg.h"
#include "math.h"
#include "mmsystem.h"
#include "Winbase.h"#define pi 3.141592654
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = FILE ;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog

{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};


CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP

}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CRada2Dlg dialog
CRada2Dlg::CRada2Dlg(CWnd* pParent /*=NULL*/)
: CDialog(CRada2Dlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CRada2Dlg)
m_m1 = _T("");
m_m2 = _T("");
m_m3 = _T("");
m_m4 = _T("");
m_m5 = _T("");
m_m6 = _T("");
m_RSpeed = _T("");
m_toa_do = _T("");
m_dt_bam = 0;
m_tt_bam = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon
= AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CRada2Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CRada2Dlg)

DDX_Control(pDX, IDC_BUTTON_Start, m_Button_start);
DDX_Control(pDX, IDC_EDIT1, m_m1con);
DDX_Text(pDX, IDC_EDIT1, m_m1);
DDV_MaxChars(pDX, m_m1, 500);
DDX_Text(pDX, IDC_EDIT2, m_m2);


DDX_Text(pDX, IDC_EDIT3, m_m3); DDX_Text(pDX,
IDC_EDIT4, m_m4); DDX_Text(pDX, IDC_EDIT5,
m_m5); DDX_Text(pDX, IDC_EDIT6, m_m6);
DDX_Text(pDX, IDC_EDITRSpeed, m_RSpeed);
DDX_Text(pDX, IDC_STATIC_TOA_DO, m_toa_do);
DDX_Text(pDX, IDC_EDIT_DT_BAM, m_dt_bam);
DDX_Text(pDX, IDC_EDIT_TT_BAM, m_tt_bam);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CRada2Dlg, CDialog)
//{{AFX_MSG_MAP(CRada2Dlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_SIZE()
ON_BN_CLICKED(IDC_BUTTON_Start, OnBUTTONStart)
ON_BN_CLICKED(IDC_BUTTON_Speed, OnBUTTONSpeed)
ON_WM_TIMER()
ON_BN_CLICKED(IDC_BUTTON_Inv, OnBUTTONInv)
ON_BN_CLICKED(IDC_BUTTON_RC, OnButtonRc)
ON_BN_CLICKED(IDC_BUTTON_NWave, OnBUTTONNWave)
ON_BN_CLICKED(IDC_BUTTONDSpeed, OnBUTTONDSpeed)
ON_BN_CLICKED(IDC_BUTTON_Trak, OnBUTTONTrak)

ON_WM_KEYDOWN()
ON_BN_CLICKED(IDC_BUTTON_NHIN_THANG, OnButtonNhinThang)
ON_BN_CLICKED(IDC_BUTTON2_THU, OnButton2Thu)
ON_BN_CLICKED(IDC_BUTTON_EXIT, OnButtonExit)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CRada2Dlg message handlers
BOOL CRada2Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX
& 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE); if
(pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);


if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE);

// Set big icon
SetIcon(m_hIcon, FALSE);
// Set small icon
// TODO: Add extra initialization here
//du lieu khoi tao cho he thong---------------------------------------//khoi tao cho hop toc do
CString str;
str.Format("Toc do cap:%d",thang_toc_do+3); m_RSpeed=str;
UpdateData(FALSE);
//---------------------------------------------------------------------//20,200,255
//mau cua tia quet
data_mau[6][0]=255;
data_mau[6][1]=255;
data_mau[6][2]=255;
//mau cua cac doi tuong
data_mau[0][0]=255;
data_mau[0][1]=0;
data_mau[0][2]=0;
data_mau[1][0]=255;
data_mau[1][1]=175;
data_mau[1][2]=0;
data_mau[2][0]=200;
data_mau[2][1]=0;
data_mau[2][2]=250;
data_mau[3][0]=250;
data_mau[3][1]=100;
data_mau[3][2]=100;
data_mau[4][0]=0;
data_mau[4][1]=255;
data_mau[4][2]=0;
data_mau[5][0]=100;

data_mau[5][1]=0;


data_mau[5][2]=255;
// vi tri ban dau cua thanh quet
data_thanh_quet_phi=0;
//khoang cach cuc dai quan sat duoc
dmax=300;//km
dmin=0.5;//khoang cach ma rada bi bao hoa mau
//do rong canh song muc nho nhat co the ve duoc
do_rong_canh_song=1;//deg
//vi tri dat rada
gocx=maxx*3/5;
gocy=maxy/3;
//so canh song nho tao thah canh song lon
phan_giai=15;
//khoang thoi gian cap nhat lai he thong , se quyet dinh toc do quet cua rada
time_update=150;//tinh theo so nguyen ms
//thoi gian khoi tao ban dau, va cung la noi luu trang thai thoi gian
timeo=0;//tinh theo ms
//trang thai bam sat ,bih thuong se khong co
tt_bam_sat=0;
//chieu quet, binh thuong de chieu kim dong ho
tt_chieu_quet=-1;
//kieu xem :xac ding kieu man hinh muon quan sat , co 4 kieu man hinh
//binh thuong de man hinh nhin vong
tt_kieu_xem=4;
//khoang dich chuyen cua tia quet sau mot lan update tinh theo radian hoac do
tt_toc_do_quet=1;//deg
//dung luong mang

dung_luong=215;
//bien dam trach trang thai khoi dong
start=0;
//thang toc do 28 muc
thang_toc_do=0;
CString str1;
str1.Format("Toc do cap:%d",thang_toc_do+3);
m_RSpeed=str1;
UpdateData(FALSE);
// thoi gian chuan cho phep duoi
time_standar=400;//tuc 2s
//doi tuong bam
dt_bam=2;
//che do duoi bam
time_out[0][1]=0;
time_out[0][0]=0;
/////////////////////////////////////////////////hot
m_toa_do1=0;
//////////////////////////////////////////////////hot
//gio he thong
gio=phut=giay=0;
//khoi tao gia triban dau chua co muc tieu cua khung information
str1.Format("0");


m_m1=m_m2=m_m3=m_m4=m_m5=m_m6=str1;
UpdateData(FALSE);
//khoi tao mang ban dau
int i,j,k;
for (i=0;i<=5;i++) for(j=0;j<=dung_luong;j++)for(k=0;k<=4;k++)data_vi_tri[i][j][k]=0; for

(i=0;i<=5;i++) trang_thai_hien_thoi[i]=0;
for (i=0;i<=5;i++) trang_thai_truoc[i]=0;
for (i=0;i<=5;i++) trang_thai_truoc_nua[i]=0;
//khoi tao che do xem ban dau la man hinh gioi thieu
nhin_thang=1;
//the hien doi tuong bam
m_dt_bam=dt_bam;
//
{str1.Format("None");}
m_tt_bam=str1;
UpdateData(FALSE);

///-------------------------------------------------------------------//cai dat bo dinh gio cho he thong////////////
int time;
time=SetTimer(ID_CLOCK_TIMER,time_update,NULL);
if(time==0)
{MessageBox("Khong the cai dat bo dinh thoi");
}
//--------------------------------------------------------------------------

return TRUE; // return TRUE unless you set the focus to a control
}
void CRada2Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else



{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CRada2Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
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;
}
////////////////////////////////////////////////////////////////////////
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.


HCURSOR CRada2Dlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
/////////////////////////////////////////////////////////////////////////////
void CRada2Dlg::cap_nhat()//cap nhat lai man hinh
{
CClientDC pdc(this);
DrawScreen(&pdc);
ve_thanh_quet(tt_kieu_xem,data_thanh_quet_phi,1,phan_giai,data_mau[6][0],data_mau[6]
[1],data_mau[6][2],tt_chieu_quet);
int j,k,radius,bk_standar;

int sa=0,pb=0,i;
for(i=0;i<=5;i++)
//-------------------------------------------for (k=0;k<=dung_luong-1;k++)
{
if((k==dung_luong-1)&(trang_thai_hien_thoi[i]==1))sa=1;else sa=0;
if(k==dung_luong-1)radius=4;else radius=2;
//bk_standar=
ve_diem(tt_kieu_xem,sa,tt_chieu_quet,data_thanh_quet_phi,radius,data_vi_tri[i][k]
[0],data_vi_tri[i][k][1],data_vi_tri[i][k][2],data_mau[i][0],data_mau[i][1],data_mau[i][2]);
}
////////////////////////////////
CBrush*pB;//choi ve va choi backup
pB=new CBrush(RGB(20,200,200));
CRect rect21(35-5,maxy*2/3+5,35+5,10-5);
pdc.FillRect(&rect21,pB);
CRect rect22(35-5,10+5,maxx-35+5,10-5);
pdc.FillRect(&rect22,pB);
CRect rect23(maxx-35-5,maxy*2/3+5,maxx-35+5,10-5);
pdc.FillRect(&rect23,pB);
CRect rect24(35-5,maxy*2/3+5,maxx-35+5,maxy*2/3-5);
pdc.FillRect(&rect24,pB);
DrawRadar();
CBrush *pOldBrush1;
///////////////////////////////////////////
///////////ki hieu qui uoc
//////////////////////////////////////////////
pOldBrush1=pdc.SelectObject(pB);//lwu choi
delete pdc.SelectObject(pOldBrush1);



/////////////////////////////////////
}
///////////////////////////////////////////////////////////////////////////////////////////////
void CRada2Dlg::toa_do_m1(float t)//cap nhat lai bang du lieu tai vi tri du lieu toa
//do tai thoi diem t
{//k=1,2,3,4,5,6....
//x(t)=150.t..
//y(t)=235.t....
//z(t)=10.t...
int i,j,k;
int pb;
pb=0; float
x,y,z;
k=1;//muc tieu so 1
//////////////////////////////////////////////

//mang len

mot don vi

x=-2*t-50-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//////////////////////////
if(
sqrt(x*x+y*y+z*z)>dmax)
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)&(y>=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;
/////////////////////////////////////////////////////

Lớp đện tử viễn thông k31

Page 20


}

Lớp đện tử viễn thông k31

Page 21



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{tg=fmax;fmax=fmin;fmin=tg;}; pb=0;
if((fmax-fmin)<=180)if((data_vi_tri[k-1][dung_luong][1]>fmin)&(data_vi_tri[k-1]
[dung_luong][1]if((fmax-fmin)>180) if((data_vi_tri[k-1][dung_luong][1][1]>fmax)) pb=1;
//pb = 1 co nghia la vat the van nam trong tam cua bup song
//////////////////////////////////////////////////////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_m2(float t)
{
//k=1,2,3,4,5,6....

//x(t)=150.t..
//y(t)=235.t....
//z(t)=10.t...
int pb;
int i,j,k; float
x,y,z;
k=2;//muc tieu so 1
//////////////////////////////////////////////
mot don vi
x=-2*t+150-0.0001*t*t;//dinh nghia cac ham tai day
y=3*t-350;//dinh nghia cac ham tai day
z=20;//dinh nghia cac ham tai day

//mang len


{
//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)&(y>=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{tg=fmax;fmax=fmin;fmin=tg;}; pb=0;
if((fmax-fmin)<=180)if((data_vi_tri[k-1][dung_luong][1]>fmin)&(data_vi_tri[k-1]
[dung_luong][1]if((fmax-fmin)>180) if((data_vi_tri[k-1][dung_luong][1][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_m3(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=3;//muc tieu so 3
//////////////////////////////////////////////
mot don vi
x=-2*t+150-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//////////////////////////
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)&(y>=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;
/////////////////////////////////////////////////////
}

//mang len


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{tg=fmax;fmax=fmin;fmin=tg;}; pb=0;
if((fmax-fmin)<=180)if((data_vi_tri[k-1][dung_luong][1]>fmin)&(data_vi_tri[k-1]
[dung_luong][1]if((fmax-fmin)>180) if((data_vi_tri[k-1][dung_luong][1][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_m4(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=4;//muc tieu so 4
//////////////////////////////////////////////
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


//mang len


×