Professional Documents
Culture Documents
Rada 2 DLG
Rada 2 DLG
- 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 .
-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ừ.
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 giả: là những đối tượng không cần quan sát nhưng xuất hiện
trong vùng phủ sóng của trạm radar, gây nhiễu đối với các mục tiêu cần
quan sát.
-Quỹ đạo mục tiêu: tập hợp các vị trí của mục tiêu theo thời gian
– thời gian bức xạ tín hiệu trong một chu kỳ bức xạ.
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
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)
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
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
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
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 )
Nguyễn Tự Cường Page 8
Đồ án định vị dẫn đường GVHD: NguyễnTường thành
• 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)
2.Quét tròn
Độ rộng
quét
Mục tiêu
(Target)
Thông số
xác định
Quỹ đạo di
chuyển của mục
tiêu
3.Quét thẳ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*****//
/**********************************************************************************************
*********/
//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"
#ifdef _DEBUG
#undef THIS_FILE
#endif
////////////////////////////////////////////////////////////////////////////
/
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
//}}AFX_DATA
//{{AFX_VIRTUAL(CAboutDlg)
protected:
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
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
: 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
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CRada2Dlg)
//}}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()
////////////////////////////////////////////////////////////////////////////
/
BOOL CRada2Dlg::OnInitDialog()
CDialog::OnInitDialog();
if (pSysMenu != NULL)
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
pSysMenu->AppendMenu(MF_SEPARATOR);
// Set the icon for this dialog. The framework does this automatically
CString str;
str.Format("Toc do cap:%d",thang_toc_do+3);
m_RSpeed=str;
UpdateData(FALSE);
//----------------------------------------------------------------------
//20,200,255
data_mau[6][0]=255;
data_mau[6][1]=255;
data_mau[6][2]=255;
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;
data_thanh_quet_phi=0;
dmax=300;//km
do_rong_canh_song=1;//deg
gocx=maxx*3/5;
gocy=maxy/3;
phan_giai=15;
//khoang thoi gian cap nhat lai he thong , se quyet dinh toc do quet cua rada
//thoi gian khoi tao ban dau, va cung la noi luu trang thai thoi gian
timeo=0;//tinh theo ms
tt_bam_sat=0;
tt_chieu_quet=-1;
//kieu xem :xac ding kieu man hinh muon quan sat , co 4 kieu man hinh
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=215;
start=0;
thang_toc_do=0;
CString str1;
str1.Format("Toc do cap:%d",thang_toc_do+3);
m_RSpeed=str1;
UpdateData(FALSE);
time_standar=400;//tuc 2s
dt_bam=2;
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);
int i,j,k;
//khoi tao che do xem ban dau la man hinh gioi thieu
nhin_thang=1;
m_dt_bam=dt_bam;
//
{str1.Format("None");}
m_tt_bam=str1;
UpdateData(FALSE);
///--------------------------------------------------------------------
int time;
time=SetTimer(ID_CLOCK_TIMER,time_update,NULL);
if(time==0)
//--------------------------------------------------------------------------
return TRUE; // return TRUE unless you set the focus to a control
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,
void CRada2Dlg::OnPaint()
if (IsIconic())
CRect rect;
GetClientRect(&rect);
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
HCURSOR CRada2Dlg::OnQueryDragIcon()
////////////////////////////////////////////////////////////////////////////
/
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],dat
a_vi_tri[i][k][1],data_vi_tri[i][k][2],data_mau[i][0],data_mau[i][1],data_mau[i][2]);
////////////////////////////////
pB=new CBrush(RGB(20,200,200));
Nguyễn Tự Cường Page 27
Đồ án định vị dẫn đường GVHD: NguyễnTường thành
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;
///////////////////////////////////////////
//////////////////////////////////////////////
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
{//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
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;
data_vi_tri[k-1][dung_luong][4]=vxt;
/////////////////////////////////////////////////////
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)<=180)if((data_vi_tri[k-1][dung_luong][1]>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]<fmin)|(data_vi_tri[k-
1][dung_luong][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;
////////////////////////////////////////////////////////////////////////////
//////////////////
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
//////////////////////////////////////////////
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;
data_vi_tri[k-1][dung_luong][4]=vxt;
/////////////////////////////////////////////////////
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)<=180)if((data_vi_tri[k-1][dung_luong][1]>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]<fmin)|(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;
////////////////////////////////////////////////////////////////////////////
//////////////////
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...
Nguyễn Tự Cường Page 34
Đồ án định vị dẫn đường GVHD: NguyễnTường thành
int i,j,k;
float x,y,z;
int pb;
k=3;//muc tieu so 3
//////////////////////////////////////////////
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;
data_vi_tri[k-1][dung_luong][4]=vxt;
/////////////////////////////////////////////////////
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)<=180)if((data_vi_tri[k-1][dung_luong][1]>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]<fmin)|(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;
////////////////////////////////////////////////////////////////////////////
///////////////
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
//////////////////////////////////////////////
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;
data_vi_tri[k-1][dung_luong][4]=vxt;
/////////////////////////////////////////////////////
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)<=180)if((data_vi_tri[k-1][dung_luong][1]>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]<fmin)|(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;
Nguyễn Tự Cường Page 39
Đồ án định vị dẫn đường GVHD: NguyễnTường thành
////////////////////////////////////////////////////////////////////////////
//////////////////
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
//////////////////////////////////////////////
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)&(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;
data_vi_tri[k-1][dung_luong][4]=vxt;
/////////////////////////////////////////////////////
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)<=180)if((data_vi_tri[k-1][dung_luong][1]>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]<fmin)|(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;
////////////////////////////////////////////////////////////////////////////
/////////////////
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
//////////////////////////////////////////////
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;
Nguyễn Tự Cường Page 43
Đồ án định vị dẫn đường GVHD: NguyễnTường thành
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)&(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;
data_vi_tri[k-1][dung_luong][4]=vxt;
/////////////////////////////////////////////////////
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)<=180)if((data_vi_tri[k-1][dung_luong][1]>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]<fmin)|(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;
////////////////////////////////////////////////////////////////////////////
////////////////
//////////////////////
int d;
if((d1<dmax)&(d1>0))d=(int)floor(d1/dmax*maxx/4.0);else {d=0;radius=0;};
float fmax,fmin,tg;
int tg1;
if((d1<dmax)&(d1>0))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);
//////////////////////
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);
////////////////////////////////////////////////////////////////////////////
/////////////////
//khao bien trang thai chieu quet, va denta phi dich chuyen thay
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
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++;
//////////////////////////////////////////
CRect rect2(35+5,maxy*2/3-5,maxx-35-5,10+5);
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);
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);
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);
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");
////////////////////////////////////
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
///////////////////////////////////////////////////////////////////////
maxx=cx;
maxy=cy;
////////////////////////////////////////////////////////////////////////
void CRada2Dlg::OnBUTTONStart()
if(start==1)start=0;else start=1;
void CRada2Dlg::OnBUTTONSpeed()
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;
//chon choi ve
pOldBrush=pdc.SelectObject(pBrush);
//khai but
CPen pPen(PS_SOLID,1,RGB(mr,mg,mb));
//chon but ve
pdc.SelectObject(pPen);
int xtam,ytam;
float phi1=phi*pi/180;
xtam=((int)floor(d*sin(phi1)));
xtam=xtam+gocx;
CRect rect(xtam-radius,ytam-radius,xtam+radius,ytam+radius);
pdc.FillRect(&rect,pBrush);
delete pdc.SelectObject(pOldBrush);
//////////////////////////////////////////////////////////////////////
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;
////////////////////////////////////////////////////////////////////////
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;
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
1][3],data_vi_tri[count][dung_luong-1][4]);
/////-------------------------------
switch(count)
break;
break;
break;
break;
break;
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;};
m_toa_do=tmp;
UpdateData(FALSE);
//////////////////////////////////////////
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);
if(tt_bam_sat==1) bam_sat(dt_bam);
///////////////////////////////////////////////////////////////////////
CDialog::OnTimer(nIDEvent);
void CRada2Dlg::OnBUTTONInv()
//if(tt_chieu_quet==1) tt_chieu_quet=-1;
//else tt_chieu_quet=1;
invert();
void CRada2Dlg::OnButtonRc()
if(phan_giai<100) phan_giai++;
void CRada2Dlg::OnBUTTONNWave()
if(phan_giai>1)phan_giai--;
printf("\a");
void CRada2Dlg::OnBUTTONDSpeed()
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);
{ float den_ta_phi;
//phan_giai=30;
if (tt_toc_do_quet<0)
else tt_toc_do_quet=(1+10*0.3);
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;
if(trungg<0)trungg=360+trungg;
if(trungg>360)trungg=trungg-360;
if(fabs(den)>180)
if(den<0) den=360+den;
if(den>0)den=den-360;
// int co_bam=0;
if(fabs(den)<=8) {tt_toc_do_quet=fabs(den_ta_phi);time_out[0][1]=1;}
//if(fabs(den)<10) phan_giai=15;
if((!trang_thai_hien_thoi[dt_bam-1])&(!trang_thai_truoc[dt_bam-1]))
//phan_giai=30;
if (tt_toc_do_quet<0)
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;
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;
{str.Format("None");}
m_tt_bam=str;
UpdateData(FALSE);
//thang_toc_do=dt_bam;
//-------------------------------------------------------------
// 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;
//----------------------------------------------------------------
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;}
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 gocx1,dai;
//khai but
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);
//////////////////////////////
//
pOldBrush=pdc.SelectObject(pBrush);//lwu choi
CRect rect(35,maxy*2/3,maxx-35,10);
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);
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(dai!=0)
ve_doan_thang(sa,dai,5,gocx1,yy,data_mau[i][0],data_mau[i][1],data_mau[i][2]);
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(dai!=0)
ve_doan_thang(sa,dai,5,gocx1,yy1,data_mau[i][0],data_mau[i][1],data_mau[i][2]);
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(dai!=0)
ve_doan_thang(sa,dai,5,gocx1,yy2,data_mau[i][0],data_mau[i][1],data_mau[i][2]);
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);
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++;
////////////////////////////////////////////
pdc.SelectObject(pPen1);
pdc.MoveTo(35,yy1);
pdc.LineTo(maxx-35,yy1);
pdc.MoveTo(35,yy);
pdc.LineTo(maxx-35,yy);
pdc.MoveTo(35,yy2);
pdc.LineTo(maxx-35,yy2);
pdc.SelectObject(pPen3);
for(toa_do=1;toa_do<=9;toa_do++)
{ pdc.MoveTo(35+(int)floor((maxx-70)/10)*toa_do,maxy*2/3);
pdc.LineTo(35+(int)floor((maxx-70)/10)*toa_do,10);
int jj=(int)floor((maxx-70)/10);
i=0;
pdc.SetBkColor(RGB(150,150,255));
pdc.TextOut(35+i*jj+5,yy+5,"0 km" );
i++;
pdc.TextOut(35+i*jj+5,yy+5,"30 km" );
i++;
pdc.TextOut(35+i*jj+5,yy+5,"60 km" );
i++;
pdc.TextOut(35+i*jj+5,yy+5,"90 km" );
i++;
pdc.TextOut(35+i*jj+5,yy+5,"120 km" );
i++;
pdc.TextOut(35+i*jj+5,yy+5,"150 km" );
i++;
pdc.TextOut(35+i*jj+5,yy+5,"180 km" );
i++;
pdc.TextOut(35+i*jj+5,yy+5,"210 km" );
i++;
pdc.TextOut(35+i*jj+5,yy+5,"240 km" );
i++;
pdc.TextOut(35+i*jj+5,yy+5,"270 km" );
i++;
i=0;
pdc.TextOut(35+i*jj+5,yy1+5,"0 km" );
i++;
pdc.TextOut(35+i*jj+5,yy1+5,"3 km" );
i++;
pdc.TextOut(35+i*jj+5,yy1+5,"6 km" );
i++;
pdc.TextOut(35+i*jj+5,yy1+5,"9 km" );
i++;
pdc.TextOut(35+i*jj+5,yy1+5,"12 km" );
i++;
pdc.TextOut(35+i*jj+5,yy1+5,"15 km" );
i++;
pdc.TextOut(35+i*jj+5,yy1+5,"18 km" );
i++;
pdc.TextOut(35+i*jj+5,yy1+5,"21 km" );
i++;
pdc.TextOut(35+i*jj+5,yy1+5,"24 km" );
i++;
pdc.TextOut(35+i*jj+5,yy1+5,"27 km" );
i++;
i=0;
pdc.TextOut(35+i*jj+5,yy2+5,"0 m" );
i++;
pdc.TextOut(35+i*jj+5,yy2+5,"300 m" );
i++;
pdc.TextOut(35+i*jj+5,yy2+5,"600 m" );
i++;
pdc.TextOut(35+i*jj+5,yy2+5,"900 m" );
i++;
pdc.TextOut(35+i*jj+5,yy2+5,"1200 m" );
i++;
pdc.TextOut(35+i*jj+5,yy2+5,"1500 m" );
i++;
pdc.TextOut(35+i*jj+5,yy2+5,"1800 m" );
i++;
pdc.TextOut(35+i*jj+5,yy2+5,"2100 m" );
i++;
pdc.TextOut(35+i*jj+5,yy2+5,"2400 m" );
i++;
pdc.TextOut(35+i*jj+5,yy2+5,"2700 m" );
i++;
//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");
////////////////////ve vien
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);
///////////////////////////////////////////
delete pdc.SelectObject(pOldBrush);
pOldBrush=pdc.SelectObject(pB);//lwu choi
delete pdc.SelectObject(pOldBrush);
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
void CRada2Dlg::cap_nhat_nhin_vong()
//khai but
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));
CPen pPen4(PS_SOLID,2,RGB(255,0,0));
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);
//////////////////////////////
//khai choi
pOldBrush=pdc.SelectObject(pBrush);//lwu choi
///ve nen
CRect rect1(35,maxy*2/3,maxx-35,10);
CRect rect(gocx-maxx/4,gocy-maxx/4,gocx+maxx/4,gocy+maxx/4);
pdc.FillRect(&rect1,pBrush);
/////////////////////////////////////////////////////////////
pdc.SelectObject(pPen4);
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,gocy-maxx/16,gocx+maxx/16,gocy+maxx/16);
//ve truc
pdc.MoveTo(gocx-maxx/4,gocy-maxx/4);
pdc.LineTo(gocx+maxx/4,gocy+maxx/4);
pdc.MoveTo(gocx+maxx/4,gocy-maxx/4);
pdc.LineTo(gocx-maxx/4,gocy+maxx/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);
////////////////////////////
DrawRadar();
//-----------------
for(i=0;i<=5;i++)
if(data_vi_tri[i][dung_luong-1][0]<dmax) radius=3+(int)floor(8*(dmax-
data_vi_tri[i][dung_luong-1][0])/dmax);
else radius=3;
//tinh he so do sang
dosang=do_sang(data_mau[i][0],data_mau[i][1],data_mau[i][2],data_vi_tri[i][dung_luon
g-1][0],dmax);
mr1=data_mau[i][0];
mg1=data_mau[i][1];
mb1=data_mau[i][2];
phi=360*data_vi_tri[i][dung_luong-1][0]/dmax;
if(phi>=360) phi=phi-360;
ve_tung_diem(radius,maxx/4 ,phi,10,mr1,mg1,mb1);
ve_tung_diem(radius+2,maxx/4 ,phi,10,mr1,mg1,mb1);
ve_tung_diem(radius-1,maxx/4 ,phi,10,255,255,255);
}
Nguyễn Tự Cường Page 78
Đồ án định vị dẫn đường GVHD: NguyễnTường thành
for(i=0;i<=5;i++)
if(data_vi_tri[i][dung_luong-1][0]<dmax) radius=3+(int)floor(8*(dmax-
data_vi_tri[i][dung_luong-1][0])/dmax);
else radius=3;
//tinh he so do sang
dosang=do_sang(data_mau[i][0],data_mau[i][1],data_mau[i][2],data_vi_tri[i][dung_luon
g-1][0],dmax);
mr1=data_mau[i][0];
mg1=data_mau[i][1];
mb1=data_mau[i][2];
phi=(int)floor(360*data_vi_tri[i][dung_luong-1][0]/dmax)%36;
phi=phi*10;
if(phi>=360) phi=phi-360;
ve_tung_diem(radius,maxx/8 ,phi,10,mr1,mg1,mb1);
ve_tung_diem(radius+2,maxx/8 ,phi,10,mr1,mg1,mb1);
ve_tung_diem(radius-1,maxx/8 ,phi,10,255,255,255);
/////////////--------------------------
//--------------------------
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);
pdc.SetBkColor(RGB(150,150,255));
i=0;
pdc.TextOut((int)floor(gocx+maxx/4.0*sin(pi/5*i)),(int)floor(gocy-
maxx/4.0*cos(pi/5*i)),"0 km");
i++;
pdc.TextOut((int)floor(gocx+maxx/4.0*sin(pi/5*i)),(int)floor(gocy-
maxx/4.0*cos(pi/5*i)),"30 km");
i++;
pdc.TextOut((int)floor(gocx+maxx/4.0*sin(pi/5*i)),(int)floor(gocy-
maxx/4.0*cos(pi/5*i)),"60 km");
i++;
pdc.TextOut((int)floor(gocx+maxx/4.0*sin(pi/5*i)),(int)floor(gocy-
maxx/4.0*cos(pi/5*i)),"90 km");
i++;
pdc.TextOut((int)floor(gocx+maxx/4.0*sin(pi/5*i)),(int)floor(gocy-
maxx/4.0*cos(pi/5*i)),"120 km");
i++;
pdc.TextOut((int)floor(gocx+maxx/4.0*sin(pi/5*i)),(int)floor(gocy-
maxx/4.0*cos(pi/5*i)),"150 km");
i++;
pdc.TextOut((int)floor(gocx+maxx/4.0*sin(pi/5*i)),(int)floor(gocy-
maxx/4.0*cos(pi/5*i)),"180 km");
i++;
pdc.TextOut((int)floor(gocx+maxx/4.0*sin(pi/5*i)),(int)floor(gocy-
maxx/4.0*cos(pi/5*i)),"210 km");
i++;
pdc.TextOut((int)floor(gocx+maxx/4.0*sin(pi/5*i)),(int)floor(gocy-
maxx/4.0*cos(pi/5*i)),"240 km");
i++;
pdc.TextOut((int)floor(gocx+maxx/4.0*sin(pi/5*i)),(int)floor(gocy-
maxx/4.0*cos(pi/5*i)),"270 km");
i++;
i=0;
pdc.TextOut((int)floor(gocx+maxx/8.0*sin(pi/5*i)),(int)floor(gocy-
maxx/8.0*cos(pi/5*i)),"0 km");
i++;
pdc.TextOut((int)floor(gocx+maxx/8.0*sin(pi/5*i)),(int)floor(gocy-
maxx/8.0*cos(pi/5*i)),"3 km");
i++;
pdc.TextOut((int)floor(gocx+maxx/8.0*sin(pi/5*i)),(int)floor(gocy-
maxx/8.0*cos(pi/5*i)),"6 km");
i++;
pdc.TextOut((int)floor(gocx+maxx/8.0*sin(pi/5*i)),(int)floor(gocy-
maxx/8.0*cos(pi/5*i)),"9 km");
i++;
pdc.TextOut((int)floor(gocx+maxx/8.0*sin(pi/5*i)),(int)floor(gocy-
maxx/8.0*cos(pi/5*i)),"12 km");
i++;
pdc.TextOut((int)floor(gocx+maxx/8.0*sin(pi/5*i)),(int)floor(gocy-
maxx/8.0*cos(pi/5*i)),"15 km");
i++;
pdc.TextOut((int)floor(gocx+maxx/8.0*sin(pi/5*i)),(int)floor(gocy-
maxx/8.0*cos(pi/5*i)),"18 km");
i++;
pdc.TextOut((int)floor(gocx+maxx/8.0*sin(pi/5*i)),(int)floor(gocy-
maxx/8.0*cos(pi/5*i)),"21 km");
i++;
pdc.TextOut((int)floor(gocx+maxx/8.0*sin(pi/5*i)),(int)floor(gocy-
maxx/8.0*cos(pi/5*i)),"24 km");
i++;
pdc.TextOut((int)floor(gocx+maxx/8.0*sin(pi/5*i)),(int)floor(gocy-
maxx/8.0*cos(pi/5*i)),"27 km");
i++;
/////////////////////////////////////////////////////////
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++;
///////////////////////////////////////////
delete pdc.SelectObject(pOldBrush);
pOldBrush=pdc.SelectObject(pB);//lwu choi
delete pdc.SelectObject(pOldBrush);
/////////////////////////////////////////////////////////////--------------
/////////////////////////////////////////////////////////////////////////
void CRada2Dlg::xoan_oc()
{ int dd,xx,yy,tt,so_nua_vong,so_phan_hoach,sn;
int i=0;
float radius1,khoang_du,tongdai;
float x,y,dentat,he_so,buoc,phiphi;
CString str;
//////////////////////////////
CClientDC pdc(this);
CFont font;
font.Detach();
font.CreateFont(10,0,0,0,500,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAU
LT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_DONTCARE,".VnTime");
CFont*pOldfont=(CFont*)(pdc.SelectObject(&font));
pdc.SetBkColor(TRANSPARENT);
pdc.SetTextColor(RGB(0,0,0));
////////////////////////////////////*/
pdc.SetBkColor(RGB(150,150,255));
buoc=360/so_nua_vong;
tongdai=((so_nua_vong+1)*so_nua_vong/4.0+1/8.0)*pi*buoc;
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));
CPen pPen4(PS_SOLID,2,RGB(255,0,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
pdc.SelectObject(pPen);
//////////////////////////////
//khai choi
pOldBrush=pdc.SelectObject(pBrush);//lwu choi
///ve nen
CRect rect(35,maxy*2/3,maxx-35,10);
//CRect rect(gocx-maxx/4,gocy-maxx/4,gocx+maxx/4,gocy+maxx/4);
pdc.FillRect(&rect,pBrush);
DrawRadar();
pdc.SelectObject(pPen);
pdc.MoveTo(gocx,gocy);
float danh_so=0;
int dem_danh_so=1;
float buoc_danh_so=(float)tongdai/50;//danh so 3k
float x_old=gocx,y_old=gocy,xn,yn;
for (tt=0;tt<=so_phan_hoach+1;tt++)
{ xn=buoc/2/pi*dentat*tt*sin(dentat*tt)+gocx;
yn=-1*buoc/2/pi*dentat*tt*cos(dentat*tt)+gocy;
pdc.LineTo(xn,yn);
danh_so=danh_so+sqrt((xn-x_old)*(xn-x_old)+(yn-y_old)*(yn-y_old));
x_old=xn;
y_old=yn;
if(danh_so>buoc_danh_so)
{ str.Format("%d ",dem_danh_so*6);
pdc.TextOut(xn,yn,str);
dem_danh_so=dem_danh_so+1;
danh_so=0;
//-----------------------------------------------------
for(i=0;i<=5;i++)
{ //tinh ban kinh diem theo d cang xa thi ban kinh cang nho
if(data_vi_tri[i][dung_luong-1][0]<dmax) radius=2+(int)floor(8*(dmax-
data_vi_tri[i][dung_luong-1][0])/dmax);
else radius=2;
//tinh he so do sang
dosang=do_sang(data_mau[i][0],data_mau[i][1],data_mau[i][2],data_vi_tri[i][dung_luon
g-1][0],dmax);
//if(data_vi_tri[i][dung_luong-1][0]<dmax) dosang=dosang*(dmax-
data_vi_tri[i][dung_luong-1][0])/dmax;
mr1=data_mau[i][0];
mg1=data_mau[i][1];
mb1=data_mau[i][2];
dd=data_vi_tri[i][dung_luong-1][0]/dmax*tongdai;
xx=dd;
sn=0;
if(dd>buoc*pi/8)
{dd=(dd-buoc*pi/8);
sn++;
while (dd>pi*buoc*(sn/2))
dd=dd-pi*buoc*(sn/2);
sn++;
}
Nguyễn Tự Cường Page 88
Đồ án định vị dẫn đường GVHD: NguyễnTường thành
sn--;
khoang_du=xx-pi*buoc*(1/8+sn*(sn+1)/4);
}else khoang_du=xx;
if(!sn%2) { if(sn==0){
radius1=buoc/8.0;
phiphi=khoang_du/buoc*8;
radius1=buoc/2/pi*phiphi;
phiphi=khoang_du/buoc*8*180/pi;
ve_tung_diem(radius,radius1,phiphi,10,mr1,mg1,mb1);
if(trang_thai_hien_thoi[i]==1)
ve_tung_diem(radius,radius1,phiphi,10,mr1,mg1,mb1);
ve_tung_diem(radius,radius1,phiphi,10,255,255,255);
// ve_tung_diem(radius,radius1,phiphi,10,mr1,mg1,mb1);
//gocx=gocxxx;
radius1=(sn+1)*buoc/2.0;
phiphi=khoang_du/((sn+1)*buoc/2.0);
//if(phiphi>360)phiphi=phiphi-360;
phiphi=(phiphi+pi*sn+pi/4);
radius1=buoc/2/pi*phiphi;
phiphi=phiphi*180/pi;
ve_tung_diem(radius,radius1,phiphi,10,mr1,mg1,mb1);
if(trang_thai_hien_thoi[i]==1)
ve_tung_diem(radius,radius1,phiphi,10,mr1,mg1,mb1);
ve_tung_diem(radius,radius1,phiphi,10,255,255,255);
else
radius1=(sn+1)*buoc/2.0;
phiphi=khoang_du/((sn+1)*buoc/2.0);
phiphi=(phiphi+pi*sn+pi/4);
radius1=buoc/2/pi*phiphi;
phiphi=phiphi*180/pi;
ve_tung_diem(radius,radius1,phiphi,10,mr1,mg1,mb1);
if(trang_thai_hien_thoi[i]==1)
ve_tung_diem(radius+2,radius1,phiphi,10,mr1,mg1,mb1);
ve_tung_diem(radius,radius1,phiphi,10,255,255,255);
///////////////////////////////////////
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);
///////////////////////////////////////////////
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++;
///////////////////////////////////////////
delete pdc.SelectObject(pOldBrush);
pOldBrush=pdc.SelectObject(pB);//lwu choi
delete pdc.SelectObject(pOldBrush);
///////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
/////
float CRada2Dlg::do_sang(int mr, int mg, int mb, float d, float dmax)
int tg1;
float tg;
tg1=mr;
if (tg1<mg) tg1=mg;
if(tg1<mb) tg1=mb;
if(d>dmax) tg=0;
else
else tg=254/(float)tg1*(dmax-d)/dmax;
return tg;
//////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////
CClientDC pdc(this);
if(!sa)
pBrush=new CBrush(RGB(mr,mg,mb));
pOldBrush=pdc.SelectObject(pBrush);//lwu choi
CRect rect23(gocx1,gocy1,gocx1+rong,gocy1-dai);
pdc.FillRect(&rect23,pBrush);
delete pdc.SelectObject(pOldBrush);
else {
pBrush=new CBrush(RGB(mr,mg,mb));
pOldBrush=pdc.SelectObject(pBrush);//lwu choi
CRect rect23(gocx1,gocy1,gocx1+rong+4,gocy1-dai);
pdc.FillRect(&rect23,pBrush);
delete pdc.SelectObject(pOldBrush);
//////////////////////////
CPen pPen11(PS_SOLID,rong+4,RGB(255,255,255));
pdc.SelectObject(pPen11);
///////////////////////////
pdc.MoveTo(gocx1+(rong+4)/2,gocy1);
pdc.LineTo(gocx1+(rong+4)/2,gocy1-dai/10);
/////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
void CRada2Dlg::OnButtonNhinThang()
nhin_thang=nhin_thang+1;
if(nhin_thang>5) nhin_thang=1;
//////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
void CRada2Dlg::OnButton2Thu()
int i;
tt_bam_sat=1;
for(i=0;i<=5;i++)trang_thai_hien_thoi[i]=0;
for(i=0;i<=5;i++)trang_thai_truoc[i]=0;
if(dt_bam<=8)dt_bam++;
if(dt_bam==7)dt_bam=1;
CString str;
str.Format("Tracking Tar:%d",dt_bam);
m_tt_bam=str;
m_dt_bam=dt_bam;
UpdateData(FALSE);
///////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
void CRada2Dlg::OnButtonMode()
xoan_oc();
void CRada2Dlg::OnButtonExit()
exit(0);
void CRada2Dlg::DrawRadar()
CClientDC pdc(this);
// Ve mo hinh Radar
CPen pPen2(PS_SOLID,2,RGB(0,0,0));
CPen *pOldPen2=pdc.SelectObject(&pPen2);
pdc.MoveTo(200/2,200/2);
if(trungg<0)trungg=360+trungg;
if(trungg>360)trungg=trungg-360;
trungg = trungg*pi/180;
//pDC->LineTo( int(5.1*step*cos(3.141592654/2-data_thanh_quet_phi)),-
int(5.1*step*sin(3.141592654/2-data_thanh_quet_phi)));
pdc.LineTo(200/2 + int(2.8*12*cos(pi/2-trungg+1.35)),200/2-int(2.8*12*sin(pi/2-
trungg+1.35)));
pdc.LineTo(200/2 + int(5.1*12*cos(pi/2-trungg+1.05)),200/2-int(5.1*12*sin(pi/2-
trungg+1.05)));
pdc.LineTo(200/2 + int(5.1*12*cos(pi/2-trungg-1.05)),200/2-int(5.1*12*sin(pi/2-
trungg-1.05)));
pdc.LineTo(200/2 + int(2.8*12*cos(pi/2-trungg-1.35)),200/2-int(2.8*12*sin(pi/2-
trungg-1.35)));
pdc.LineTo(200/2,200/2);
//pDC->MoveTo(rectDis1.Width()/2,rectDis1.Width()/2);
delete pdc.SelectObject(&pOldPen2);
CPen pPen3(PS_SOLID,1,RGB(255,12,0));
CPen *pOldPen3=pdc.SelectObject(&pPen3);
for(int j=1;j<7;j++)
pdc.MoveTo(200/2,200/2);
pdc.AngleArc(200/2,200/2,16-j*2,0,360);
delete pdc.SelectObject(&pOldPen3);
void CRada2Dlg::introduce()
CClientDC pdc(this);
Draw_Background(&pdc);
pdc.TextOut(120,80,"MO PHONG MAN HINH HIEN THI CUA RADAR TREN PC BANG
NGON NGU C");
pOldBrush=pDC->SelectObject(pBrush);//lwu choi
///////////////////////////////////
CRect rect2(35+5,maxy*2/3-5,maxx-35-5,10+5);
pDC->FillRect(&rect2,pBrush);
-http://www.vn-zoom.com
-http://dtvt.org/default.asp
-http://dientuvienthongqn.com/forum.php