You are on page 1of 99

Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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 .

Nguyễn Tự Cường Page 1


Đồ án định vị dẫn đường GVHD: NguyễnTường thà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ừ.

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

Nguyễn Tự Cường Page 2


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

-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.

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


Nguyễn Tự Cường Page 3
Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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

Nguyễn Tự Cường Page 4


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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

Nguyễn Tự Cường Page 5


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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

Nguyễn Tự Cường Page 6


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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)

Nguyễn Tự Cường Page 7


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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 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)

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


1.screen

2.Quét tròn

Nguyễn Tự Cường Page 9


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

Độ rộng
quét

Mục tiêu
(Target)

Thông số
xác định

Nguyễn Tự Cường Page 10


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

Quỹ đạo di
chuyển của mục
tiêu

3.Quét thẳng

Nguyễn Tự Cường Page 11


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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

Nguyễn Tự Cường Page 12


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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"

Nguyễn Tự Cường Page 13


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

#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:

Nguyễn Tự Cường Page 14


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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

Nguyễn Tự Cường Page 15


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

//}}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)

Nguyễn Tự Cường Page 16


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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)

Nguyễn Tự Cường Page 17


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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);

Nguyễn Tự Cường Page 18


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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);

Nguyễn Tự Cường Page 19


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

//----------------------------------------------------------------------

//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;

Nguyễn Tự Cường Page 20


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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

Nguyễn Tự Cường Page 21


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

//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;

Nguyễn Tự Cường Page 22


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

//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);

Nguyễn Tự Cường Page 23


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

///--------------------------------------------------------------------

//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

Nguyễn Tự Cường Page 24


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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

Nguyễn Tự Cường Page 25


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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()

Nguyễn Tự Cường Page 26


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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],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]);

////////////////////////////////

CBrush*pB;//choi ve va choi backup

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;

///////////////////////////////////////////

///////////ki hieu qui uoc

//////////////////////////////////////////////

pOldBrush1=pdc.SelectObject(pB);//lwu choi

delete pdc.SelectObject(pOldBrush1);

/////////////////////////////////////

////////////////////////////////////////////////////////////////////////////
///////////////////

Nguyễn Tự Cường Page 28


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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

Nguyễn Tự Cường Page 29


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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<fmin){tg=fmax;fmax=fmin;fmin=tg;};

pb=0;

Nguyễn Tự Cường Page 30


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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;

//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

////////////////////////////////////////////////////////////////////////////
//////////////////

Nguyễn Tự Cường Page 31


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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

//////////////////////////////////////////////

//mang len 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

//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));

Nguyễn Tự Cường Page 32


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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<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;

Nguyễn Tự Cường Page 33


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

//////////////////////////////////////////////////////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...
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

//////////////////////////////////////////////

//mang len 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

Nguyễn Tự Cường Page 35


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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)<=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;}

Nguyễn Tự Cường Page 36


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

/////////////////////////////////////////////////////////////////////

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

Nguyễn Tự Cường Page 37


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

//////////////////////////////////////////////

//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)&(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);

Nguyễn Tự Cường Page 38


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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)<=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

//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

Nguyễn Tự Cường Page 40


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

//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)&(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;

/////////////////////////////////////////////////////

Nguyễn Tự Cường Page 41


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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)<=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;

//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

Nguyễn Tự Cường Page 42


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

////////////////////////////////////////////////////////////////////////////
/////////////////

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;
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;

//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;

Nguyễn Tự Cường Page 44


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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;

//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

////////////////////////////////////////////////////////////////////////////
////////////////

Nguyễn Tự Cường Page 45


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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((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);

///////////////////////

Nguyễn Tự Cường Page 46


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

////////////////////////////////////////////////////////////////////////////
////////////////////

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);

Nguyễn Tự Cường Page 47


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

////////////////////////////////////////////////////////////////////////////
/////////////////

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);

Nguyễn Tự Cường Page 48


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

////////////////////////////////////////////////////////////////////////////
//////////////////

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

Nguyễn Tự Cường Page 49


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

//////////////////////////////////////////

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);

Nguyễn Tự Cường Page 50


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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);

Nguyễn Tự Cường Page 51


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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

Nguyễn Tự Cường Page 52


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

///////////////////////////////////////////////////////////////////////

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()

Nguyễn Tự Cường Page 53


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

// 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;

Nguyễn Tự Cường Page 54


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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();

Nguyễn Tự Cường Page 55


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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-

Nguyễn Tự Cường Page 56


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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;};

Nguyễn Tự Cường Page 57


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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);

///////////////////////////////////////////////////////////////////////

Nguyễn Tự Cường Page 58


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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

Nguyễn Tự Cường Page 59


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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]<dmin)|//neu radius < 0 hoac radius > 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

Nguyễn Tự Cường Page 60


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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;

Nguyễn Tự Cường Page 61


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

//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_phi<0)if (den>0) 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);

Nguyễn Tự Cường Page 62


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

//---------------------------------------------------

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;

Nguyễn Tự Cường Page 63


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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)

Nguyễn Tự Cường Page 64


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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]));

Nguyễn Tự Cường Page 65


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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);

Nguyễn Tự Cường Page 66


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

//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)

Nguyễn Tự Cường Page 67


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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;

Nguyễn Tự Cường Page 68


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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);

Nguyễn Tự Cường Page 69


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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++;

Nguyễn Tự Cường Page 70


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

////////////////////////////////////////////

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);

//dua khac do ra man hinh

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" );

Nguyễn Tự Cường Page 71


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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++;

Nguyễn Tự Cường Page 72


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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" );

Nguyễn Tự Cường Page 73


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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

CBrush*pB;//choi ve va choi backup

pB=new CBrush(RGB(20,200,200));

Nguyễn Tự Cường Page 74


Đồ á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);

///////////////////////////////////////////

delete pdc.SelectObject(pOldBrush);

pOldBrush=pdc.SelectObject(pB);//lwu choi

delete pdc.SelectObject(pOldBrush);

////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////

void CRada2Dlg::cap_nhat_nhin_vong()

//khai but

int mr=200, mg=0, mb=0,i,radius,dosang,phi;

int mr1, mg1, mb1,tg;

Nguyễn Tự Cường Page 75


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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

CBrush*pBrush,*pOldBrush;//choi ve va choi backup

pBrush=new CBrush(RGB(150,150,255));//Tao choi ve mau 255,250,230

Nguyễn Tự Cường Page 76


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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);

//dung choi to mau

pdc.FillRect(&rect1,pBrush);

/////////////////////////////////////////////////////////////

//ve vong tron to

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();

Nguyễn Tự Cường Page 77


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

//-----------------

for(i=0;i<=5;i++)

{ //tinh ban kinh diem theo d

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];

//tinh goc phi

phi=360*data_vi_tri[i][dung_luong-1][0]/dmax;

if(phi>=360) phi=phi-360;

if(data_vi_tri[i][dung_luong-1][0]<dmax)//them vao sau

if(data_vi_tri[i][dung_luong-1][0]>0)//them vao sau

ve_tung_diem(radius,maxx/4 ,phi,10,mr1,mg1,mb1);

if(trang_thai_hien_thoi[i]==1) if(data_vi_tri[i][dung_luong-1][0]<dmax)//them vao


sau

if(data_vi_tri[i][dung_luong-1][0]>0)//them vao sau

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++)

{ //tinh ban kinh diem theo d

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];

//tinh goc phi

phi=(int)floor(360*data_vi_tri[i][dung_luong-1][0]/dmax)%36;

phi=phi*10;

if(phi>=360) phi=phi-360;

if(data_vi_tri[i][dung_luong-1][0]<dmax)//them vao sau

if(data_vi_tri[i][dung_luong-1][0]>0)//them vao sau

ve_tung_diem(radius,maxx/8 ,phi,10,mr1,mg1,mb1);

if(trang_thai_hien_thoi[i]==1) if(data_vi_tri[i][dung_luong-1][0]<dmax)//them vao sau

if(data_vi_tri[i][dung_luong-1][0]>0)//them vao sau

ve_tung_diem(radius+2,maxx/8 ,phi,10,mr1,mg1,mb1);

ve_tung_diem(radius-1,maxx/8 ,phi,10,255,255,255);

Nguyễn Tự Cường Page 79


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

/////////////--------------------------

//--------------------------

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);

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");

Nguyễn Tự Cường Page 80


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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;

Nguyễn Tự Cường Page 81


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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++;

Nguyễn Tự Cường Page 82


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

/////////////////////////////////////////////////////////

///////////ki hieu qui uoc

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);

Nguyễn Tự Cường Page 83


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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 mr=200, mg=0, mb=0,radius,dosang,phi;

int i=0;

int mr1, mg1, mb1,tg,gocyyy;

float radius1,khoang_du,tongdai;

Nguyễn Tự Cường Page 84


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

float x,y,dentat,he_so,buoc,phiphi;

CString str;

//////////////////////////////

CClientDC pdc(this);

/* //////////////////////////////dinh nghia duong xoan oc

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));

so_nua_vong=8;//thay doi so vong

buoc=360/so_nua_vong;

so_phan_hoach=1000;// la so doan thang noi nhau tao thanh duong xoan oc

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));

Nguyễn Tự Cường Page 85


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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

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

///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);

//dung choi to mau

pdc.FillRect(&rect,pBrush);

Nguyễn Tự Cường Page 86


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

//-------------------------ve cac duong xoan oc la

DrawRadar();

dentat=(so_nua_vong*pi+pi/2)/so_phan_hoach;// dentat*tt tao ra goc tetha tang dan


trong phuong trinh xoan oc

//moi nua vong thi cong them mot luong pi/2

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;

Nguyễn Tự Cường Page 87


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

//-----------------------------------------------------

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];

//---------------tinh ban kinh

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;

if(data_vi_tri[i][dung_luong-1][0]>0)//them vao sau

if(data_vi_tri[i][dung_luong-1][0]<dmax)//them vao sau

ve_tung_diem(radius,radius1,phiphi,10,mr1,mg1,mb1);

if(trang_thai_hien_thoi[i]==1)

if(data_vi_tri[i][dung_luong-1][0]>0)//them vao sau

if(data_vi_tri[i][dung_luong-1][0]<dmax)//them vao sau

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);

Nguyễn Tự Cường Page 89


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

//if(phiphi>360)phiphi=phiphi-360;

phiphi=(phiphi+pi*sn+pi/4);

radius1=buoc/2/pi*phiphi;

phiphi=phiphi*180/pi;

if(data_vi_tri[i][dung_luong-1][0]>0)//them vao sau

if(data_vi_tri[i][dung_luong-1][0]<dmax)//them vao sau

ve_tung_diem(radius,radius1,phiphi,10,mr1,mg1,mb1);

if(trang_thai_hien_thoi[i]==1)

if(data_vi_tri[i][dung_luong-1][0]>0)//them vao sau

if(data_vi_tri[i][dung_luong-1][0]<dmax)//them vao sau

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;

Nguyễn Tự Cường Page 90


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

phiphi=phiphi*180/pi;

if(data_vi_tri[i][dung_luong-1][0]>0)//them vao sau

if(data_vi_tri[i][dung_luong-1][0]<dmax)//them vao sau

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);

///////////////////////////////////////

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);

Nguyễn Tự Cường Page 91


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

pdc.FillRect(&rect23,pB);

CRect rect24(35-5,maxy*2/3+5,maxx-35+5,maxy*2/3-5);

pdc.FillRect(&rect24,pB);

///////////////////////////////////////////////

///////////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);

Nguyễn Tự Cường Page 92


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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;

Nguyễn Tự Cường Page 93


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

float tg;

//tim gia tri mau lon nhat

tg1=mr;

if (tg1<mg) tg1=mg;

if(tg1<mb) tg1=mb;

//tinh he so nhan mau

if(d>dmax) tg=0;

else

if (d<dmin) tg=(254/(float)tg1);//do sang toi da

else tg=254/(float)tg1*(dmax-d)/dmax;

return tg;

//////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////

void CRada2Dlg::ve_doan_thang(int sa,int dai,int rong,int gocx1,int gocy1,int mr,int


mg,int mb)

CClientDC pdc(this);

if(!sa)

CBrush*pBrush,*pOldBrush,*pB;//choi ve va choi backup

pBrush=new CBrush(RGB(mr,mg,mb));

pOldBrush=pdc.SelectObject(pBrush);//lwu choi

CRect rect23(gocx1,gocy1,gocx1+rong,gocy1-dai);

Nguyễn Tự Cường Page 94


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

pdc.FillRect(&rect23,pBrush);

delete pdc.SelectObject(pOldBrush);

else {

CBrush*pBrush,*pOldBrush,*pB;//choi ve va choi backup

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()

// TODO: Add your control notification handler code here

Nguyễn Tự Cường Page 95


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

nhin_thang=nhin_thang+1;

if(nhin_thang>5) nhin_thang=1;

//////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////

void CRada2Dlg::OnButton2Thu()

// TODO: Add your control notification handler code here

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()

Nguyễn Tự Cường Page 96


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

// TODO: Add your control notification handler code here

xoan_oc();

void CRada2Dlg::OnButtonExit()

// TODO: Add your control notification handler code here

if (MessageBox("Do you want to exit?", "Exit", MB_OKCANCEL) == IDOK)

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);

//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;

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)));

Nguyễn Tự Cường Page 97


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

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(ChuNhat1.Width()/2 -10+ int(5.1*6*cos(3.141592654/2-


data_thanh_quet_phi-5)),10+ChuNhat1.Width()/2-int(5.*15*sin(3.141592654/2-
data_thanh_quet_phi-5))+int(10*sin(3.141592654/2-data_thanh_quet_phi+5)));

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);

Nguyễn Tự Cường Page 98


Đồ án định vị dẫn đường GVHD: NguyễnTường thành

Draw_Background(&pdc);

pdc.TextOut(320,40,"BAI TAP LON 1");

pdc.TextOut(120,80,"MO PHONG MAN HINH HIEN THI CUA RADAR TREN PC BANG
NGON NGU C");

pdc.TextOut(180,120,"CUA GIAO TRINH DINH VI VA DAN DUONG DIEN TU");

pdc.TextOut(190,170,"THUC HIEN : DTVTK31 DAI HOC QUY NHON");

pdc.TextOut(240,210,"GVHD : THS.NGUYEN TUONG THANH");

void CRada2Dlg::Draw_Background(CDC *pDC)

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

///////////////////////////////////

CRect rect2(35+5,maxy*2/3-5,maxx-35-5,10+5);

//dung choi to mau

pDC->FillRect(&rect2,pBrush);

//////////////////////////////////////////////////ket thuc chuong


trinh//////////////////////////////////////////////////////

Nguồn tài liệu tham khảo:

-http://www.vn-zoom.com

-http://dtvt.org/default.asp

-http://dientuvienthongqn.com/forum.php

Nguyễn Tự Cường Page 99

You might also like