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

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

 

 

doc96 trang | Chia sẻ: oanh_nt | Lượt xem: 1725 | Lượt tải: 2download
Bạn đang xem trước 20 trang nội dung tài liệu Đồ án Mô phỏng hiển thị mục tiêu Radar trên mà hình máy tính PC, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
I.GIỚI THIỆU VỀ CHƯƠNG TRÌNH Yêu cầu bài tập lớn : bằng các kiến thức về đồ họa và sử dụng ngôn ngữ lập trình C++ để thực hiện : “ mô phỏng hiển thị mục tiêu Radar trên mà hình máy tính PC “,Quá trình thực hiện chương trình được viết bằng ngôn ngữ C++ trên nền Visual Studio 6.0và giải quyết được các vấn đề sau đây : Tổng quan về màn hình hiển thị được chia làm 4 phần , thuận tiên cho quá trình quan sát : màn hình quét chung , màn hình thể hiện các phương pháp quét , bảng hiển thị các thông số , phần còn lại là các phím điều khiển . Mô phỏng quỷ đạo của 6 mục tiêu khác nhau trên cùng 1 màn hình radar Hệ thống radar có thể làm việc ở chế độ quét tất cả các mục tiêu hoặc bám sát từng mục tiêu riêng biệt . Hệ thống thước đo cự ly được trang bị với 4 loại cho độ chính xác , và độ tin cậy cao :Quét thẳng , quét tròn ,quét xoắn và nhìn vòng . Với thước xoắn có thể tăng số vòng của thước lên để cho độ chính xác cao hơn tùy vào người sử dụng . Trong quá trình sử dụng các loại thước đo để xác địnhvị trí mục tiêu thì người quan sát vẫn có thể nhìn thấy quỹ đạo của mục tiêu nhờ vào màn hình chung , màn hình này luôn luôn hiển thị quỹ đạo mục tiêu trong quá trình quét . Chiều và tốc độ quét sóng của radar có thể thay đổi được tùy vào người sử dụng . Hệ thống radar sẽ tính toán và hiển thị các thông số về mục tiêu : Cự Ly , Góc , Phương Vị , Độ Cao và Vận Tốc trên bảng thông số . Đồng thời có các thông báo về thời điểm hiện tại của mục tiêu mà đài có thể quan sát . Chương trình được điều khiển bởi hệ thống các nút điều khiển một cách dễ dàng Do điều kiện hạn chế về mặt thời gian cũng như kinh nghiệm lập trình còn ít nên chương trình còn có nhiều sai sót rất mong đươc sự đóng góp ý kiến của thầy cô và các bạn . Chúng em xin chân thành cảm ơn thầy NGUYỄN TƯỜNG THÀNH đã hướng dẫn chúng em trong quá trình thực hiện đồ án này và giúp chúng em nắm vững hơn về kiến thức lập trình , đồ họa và mô phỏng chương trình . 1.KHÁI NIỆM RADAR: -Radar là hệ thống thiết bị tìm kiếm (detect) và xác định vị trí ( ranging) của đối tượng thông qua việc thu, phát và xử lý sóng điện từ. Phân loại: Chủ động (Active system): thực hiện phát, thu và xử lý sóng điện từ phản xạ từ mục tiêu radar Bị động (Passive system): chỉ thu và xử lý sóng điện từ bức xạ từ mục tiêu radar. 2.MỤC TIÊU RADAR - Mục tiêu radar là tất cả các đối tượng có khả năng phản xạ sóng điện từ nằm trongtầm phát hiện của trạm radar. Phân loại: Mục tiêu quan sát: Mục tiêu nhân tạo Mục tiêu tự nhiên - Mục tiêu giả: là những đối tượng không cần quan sát nhưng xuất 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 3.TÍNH TOÁN CỰ LY -Tại trạm radar sóng điện từ được bức xạ ra không gian, phạm vi giám xác của radar tùy thuộc vào công suất của máy phát, khi gặp phải vật thể lạ sóng điện từ sẽ bị vật thể lạ hấp thụ một phần,một phần sẽ bị phản xạ lại trạm ,tín hiệu thu được sẽ được xữ lý để biết chính xác tọa độ cũng như vị trí của vật thể đó trong không gian Các tham số cần xác định 4.CƠ SỞ VẬT LÝ CỦA RADA Rada làm việc dựa trên 4 tính chất của sóng điện từ: 1.Sóng điện từ lan truyền với vận tốc hữu hạn, không đổi c=3.108 (m/s) 2. Sóng điện từ truyền thẳng. 3. Năng lượng sóng điện từ sẽ phản xạ khi gặp môi trường không đồng nhất(mục tiêu) 4. Tần số thu được tại trạm radar sai lệch so với tần số phát, gây nên do sự chuyển động tương đối giữa mục tiêu và trạm radar và được xác định thông qua hiệu ứng doppler 5.CÁC BƯỚC XỬ LÝ TÍN HIỆU RADAR Bước 1: Phát hiện mục tiêu :( detection) Xác xuất phát hiện nhầm: gây nên do tín hiệu phản xạ từ các đối tượng Bước 2: Đo đạc tham số:( Measurement ) -Cự ly R đo độ trễ -Đo góc (fi,β) căn cứ vào hướng tính của búp sóng radar -Đo vận tốc hiệu ứng Dopper Xác định được vị trí và vẽ quỷ đạo của mục tiêu Tính được gia tốc của M Bước 3: Phân biệt mục tiêu:( display) Bước 4: Nhận biết mục tiêu:( recorgnation) Chỉ thực hiện được với Radar chủ động thứ cấp: • Radar chủ động thứ cấp là hệ thống radar có khả năng trao đổi thông tin ( truyền số liệu ) với đối tượng (mục tiêu) • Quá trình trao đổi số liệu giữa M và RS được thực hiện khi M nằm lọt trong búp sóng radar. • Thời gian trao đổi 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 ) • 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 Độ rộng quét Thông số xác định Mục tiêu (Target) Quỹ đạo di chuyển của mục tiêu 3.Quét thẳng 4.Màn hình ở chế độ quét xoắn III.CODE PHẦN MỀM MÔ PHỎNG //CHUONG TRINH MO PHONG HIEN THI MUC TIEU RADA TREN MAN HINH MAY PC// /***Chuong trinh duoc viet va chay tren nen Visual Studio 6.0*****// /*******************************************************************************************************/ // Rada2Dlg.cpp : implementation file //Ban dau he thong khoi dong voi cac gia tri ban dau tinh ra o ham Innitdialog , sau do #include "stdafx.h" #include "Rada2.h" #include "Rada2Dlg.h" #include "math.h" #include "mmsystem.h" #include "Winbase.h"#define pi 3.141592654 #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CAboutDlg dialog used for App About class CAboutDlg : public CDialog { public: CAboutDlg(); // Dialog Data //{{AFX_DATA(CAboutDlg) enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: //{{AFX_MSG(CAboutDlg) //}}AFX_MSG DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { //{{AFX_DATA_INIT(CAboutDlg) //}}AFX_DATA_INIT } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAboutDlg) //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) //{{AFX_MSG_MAP(CAboutDlg) // No message handlers //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CRada2Dlg dialog CRada2Dlg::CRada2Dlg(CWnd* pParent /*=NULL*/) : CDialog(CRada2Dlg::IDD, pParent) { //{{AFX_DATA_INIT(CRada2Dlg) m_m1 = _T(""); m_m2 = _T(""); m_m3 = _T(""); m_m4 = _T(""); m_m5 = _T(""); m_m6 = _T(""); m_RSpeed = _T(""); m_toa_do = _T(""); m_dt_bam = 0; m_tt_bam = _T(""); //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CRada2Dlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CRada2Dlg) DDX_Control(pDX, IDC_BUTTON_Start, m_Button_start); DDX_Control(pDX, IDC_EDIT1, m_m1con); DDX_Text(pDX, IDC_EDIT1, m_m1); DDV_MaxChars(pDX, m_m1, 500); DDX_Text(pDX, IDC_EDIT2, m_m2); DDX_Text(pDX, IDC_EDIT3, m_m3); DDX_Text(pDX, IDC_EDIT4, m_m4); DDX_Text(pDX, IDC_EDIT5, m_m5); DDX_Text(pDX, IDC_EDIT6, m_m6); DDX_Text(pDX, IDC_EDITRSpeed, m_RSpeed); DDX_Text(pDX, IDC_STATIC_TOA_DO, m_toa_do); DDX_Text(pDX, IDC_EDIT_DT_BAM, m_dt_bam); DDX_Text(pDX, IDC_EDIT_TT_BAM, m_tt_bam); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CRada2Dlg, CDialog) //{{AFX_MSG_MAP(CRada2Dlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_WM_SIZE() ON_BN_CLICKED(IDC_BUTTON_Start, OnBUTTONStart) ON_BN_CLICKED(IDC_BUTTON_Speed, OnBUTTONSpeed) ON_WM_TIMER() ON_BN_CLICKED(IDC_BUTTON_Inv, OnBUTTONInv) ON_BN_CLICKED(IDC_BUTTON_RC, OnButtonRc) ON_BN_CLICKED(IDC_BUTTON_NWave, OnBUTTONNWave) ON_BN_CLICKED(IDC_BUTTONDSpeed, OnBUTTONDSpeed) ON_BN_CLICKED(IDC_BUTTON_Trak, OnBUTTONTrak) ON_WM_KEYDOWN() ON_BN_CLICKED(IDC_BUTTON_NHIN_THANG, OnButtonNhinThang) ON_BN_CLICKED(IDC_BUTTON2_THU, OnButton2Thu) ON_BN_CLICKED(IDC_BUTTON_EXIT, OnButtonExit) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CRada2Dlg message handlers BOOL CRada2Dlg::OnInitDialog() { CDialog::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here //du lieu khoi tao cho he thong---------------------------------------- //khoi tao cho hop toc do CString str; str.Format("Toc do cap:%d",thang_toc_do+3); m_RSpeed=str; UpdateData(FALSE); //---------------------------------------------------------------------- //20,200,255 //mau cua tia quet data_mau[6][0]=255; data_mau[6][1]=255; data_mau[6][2]=255; //mau cua cac doi tuong data_mau[0][0]=255; data_mau[0][1]=0; data_mau[0][2]=0; data_mau[1][0]=255; data_mau[1][1]=175; data_mau[1][2]=0; data_mau[2][0]=200; data_mau[2][1]=0; data_mau[2][2]=250; data_mau[3][0]=250; data_mau[3][1]=100; data_mau[3][2]=100; data_mau[4][0]=0; data_mau[4][1]=255; data_mau[4][2]=0; data_mau[5][0]=100; data_mau[5][1]=0; data_mau[5][2]=255; // vi tri ban dau cua thanh quet data_thanh_quet_phi=0; //khoang cach cuc dai quan sat duoc dmax=300;//km dmin=0.5;//khoang cach ma rada bi bao hoa mau //do rong canh song muc nho nhat co the ve duoc do_rong_canh_song=1;//deg //vi tri dat rada gocx=maxx*3/5; gocy=maxy/3; //so canh song nho tao thah canh song lon phan_giai=15; //khoang thoi gian cap nhat lai he thong , se quyet dinh toc do quet cua rada time_update=150;//tinh theo so nguyen ms //thoi gian khoi tao ban dau, va cung la noi luu trang thai thoi gian timeo=0;//tinh theo ms //trang thai bam sat ,bih thuong se khong co tt_bam_sat=0; //chieu quet, binh thuong de chieu kim dong ho tt_chieu_quet=-1; //kieu xem :xac ding kieu man hinh muon quan sat , co 4 kieu man hinh //binh thuong de man hinh nhin vong tt_kieu_xem=4; //khoang dich chuyen cua tia quet sau mot lan update tinh theo radian hoac do tt_toc_do_quet=1;//deg //dung luong mang dung_luong=215; //bien dam trach trang thai khoi dong start=0; //thang toc do 28 muc thang_toc_do=0; CString str1; str1.Format("Toc do cap:%d",thang_toc_do+3); m_RSpeed=str1; UpdateData(FALSE); // thoi gian chuan cho phep duoi time_standar=400;//tuc 2s //doi tuong bam dt_bam=2; //che do duoi bam time_out[0][1]=0; time_out[0][0]=0; /////////////////////////////////////////////////hot m_toa_do1=0; //////////////////////////////////////////////////hot //gio he thong gio=phut=giay=0; //khoi tao gia triban dau chua co muc tieu cua khung information str1.Format("0"); m_m1=m_m2=m_m3=m_m4=m_m5=m_m6=str1; UpdateData(FALSE); //khoi tao mang ban dau int i,j,k; for (i=0;i<=5;i++) for(j=0;j<=dung_luong;j++)for(k=0;k<=4;k++)data_vi_tri[i][j][k]=0; for (i=0;i<=5;i++) trang_thai_hien_thoi[i]=0; for (i=0;i<=5;i++) trang_thai_truoc[i]=0; for (i=0;i<=5;i++) trang_thai_truoc_nua[i]=0; //khoi tao che do xem ban dau la man hinh gioi thieu nhin_thang=1; //the hien doi tuong bam m_dt_bam=dt_bam; // {str1.Format("None");} m_tt_bam=str1; UpdateData(FALSE); ///-------------------------------------------------------------------- //cai dat bo dinh gio cho he thong//////////// int time; time=SetTimer(ID_CLOCK_TIMER,time_update,NULL); if(time==0) {MessageBox("Khong the cai dat bo dinh thoi"); } //-------------------------------------------------------------------------- return TRUE; // return TRUE unless you set the focus to a control } void CRada2Dlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID, lParam); } } // If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework. void CRada2Dlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } switch(nhin_thang) { case 1: introduce(); break; case 2: cap_nhat(); break; case 3: cap_nhat_nhin_thang(); break; case 4: cap_nhat_nhin_vong; break; case 5: xoan_oc(); break; } //////////////////////////////////////////////////////////////////////// } // The system calls this to obtain the cursor to display while the user drags // the minimized window. HCURSOR CRada2Dlg::OnQueryDragIcon() { return (HCURSOR) m_hIcon; } ///////////////////////////////////////////////////////////////////////////// void CRada2Dlg::cap_nhat()//cap nhat lai man hinh { CClientDC pdc(this); DrawScreen(&pdc); ve_thanh_quet(tt_kieu_xem,data_thanh_quet_phi,1,phan_giai,data_mau[6][0],data_mau[6][1],data_mau[6][2],tt_chieu_quet); int j,k,radius,bk_standar; int sa=0,pb=0,i; for(i=0;i<=5;i++) //-------------------------------------------- for (k=0;k<=dung_luong-1;k++) { if((k==dung_luong-1)&(trang_thai_hien_thoi[i]==1))sa=1;else sa=0; if(k==dung_luong-1)radius=4;else radius=2; //bk_standar= ve_diem(tt_kieu_xem,sa,tt_chieu_quet,data_thanh_quet_phi,radius,data_vi_tri[i][k][0],data_vi_tri[i][k][1],data_vi_tri[i][k][2],data_mau[i][0],data_mau[i][1],data_mau[i][2]); } //////////////////////////////// CBrush*pB;//choi ve va choi backup pB=new CBrush(RGB(20,200,200)); CRect rect21(35-5,maxy*2/3+5,35+5,10-5); pdc.FillRect(&rect21,pB); CRect rect22(35-5,10+5,maxx-35+5,10-5); pdc.FillRect(&rect22,pB); CRect rect23(maxx-35-5,maxy*2/3+5,maxx-35+5,10-5); pdc.FillRect(&rect23,pB); CRect rect24(35-5,maxy*2/3+5,maxx-35+5,maxy*2/3-5); pdc.FillRect(&rect24,pB); DrawRadar(); CBrush *pOldBrush1; /////////////////////////////////////////// ///////////ki hieu qui uoc ////////////////////////////////////////////// pOldBrush1=pdc.SelectObject(pB);//lwu choi delete pdc.SelectObject(pOldBrush1); ///////////////////////////////////// } /////////////////////////////////////////////////////////////////////////////////////////////// void CRada2Dlg::toa_do_m1(float t)//cap nhat lai bang du lieu tai vi tri du lieu toa //do tai thoi diem t {//k=1,2,3,4,5,6.... //x(t)=150.t.. //y(t)=235.t.... //z(t)=10.t... int i,j,k; int pb; pb=0; float x,y,z; k=1;//muc tieu so 1 ////////////////////////////////////////////// //mang len mot don vi x=-2*t-50-0.0001*t*t;//dinh nghia cac ham tai day y=3*t-300;//dinh nghia cac ham tai day z=20;//dinh nghia cac ham tai day { //tinh khoang cach////////////////////////// if( sqrt(x*x+y*y+z*z)>dmax) data_vi_tri[k-1][dung_luong][0]=-0.001; else data_vi_tri[k-1][dung_luong][0]=sqrt(x*x+y*y+z*z); //tinh vi tri moi, trong thuc te thi la so lieu moi nhan duoc if((x>=0)&(y>=0)) data_vi_tri[k-1][dung_luong][1]=pi-asin(x/sqrt(y*y+x*x)); else if((x>=0)&(y<0))data_vi_tri[k-1][dung_luong][1]=asin(x/sqrt(y*y+x*x)); else if((x=0))data_vi_tri[k-1][dung_luong][1]=pi-asin(x/sqrt(y*y+x*x)); if((x<0)&(y<0)) data_vi_tri[k-1][dung_luong][1]=2*pi+asin(x/sqrt(y*y+x*x)); //doi sang do data_vi_tri[k-1][dung_luong][1]=data_vi_tri[k-1][dung_luong][1]*180/pi; //tinh teta data_vi_tri[k-1][dung_luong][2] =asin(z/data_vi_tri[k-1][dung_luong][0])*180/pi; //tinh do cao h data_vi_tri[k-1][dung_luong][3]=z; //toinh van toc van_toc(k , dung_luong, dung_luong-1); data_vi_tri[k-1][dung_luong][4]=vxt; ///////////////////////////////////////////////////// } float fmax, fmin,tg; fmax=data_thanh_quet_phi; fmin=fmax+phan_giai*tt_chieu_quet; if(fmin>=360)fmin=fmin-360; if(fmin<0)fmin=fmin+360; if(fmax<fmin){tg=fmax;fmax=fmin;fmin=tg;}; pb=0; if((fmax-fmin)fmin)&(data_vi_tri[k-1][dung_luong][1]<fmax)) pb=1; if((fmax-fmin)>180) if((data_vi_tri[k-1][dung_luong][1]fmax)) pb=1; //pb = 1 co nghia la vat the van nam trong tam cua bup song //////////////////////////////////////////////////////dung_luong+1 r so phan tu mang if(pb==0) {trang_thai_truoc_nua[k-1]=trang_thai_truoc[k-1]; trang_thai_truoc[k-1]=trang_thai_hien_thoi[k-1]; trang_thai_hien_thoi[k-1]=0;} ///////////////////////////////////////////////////////////////////// if(pb==1) { trang_thai_truoc_nua[k-1]=trang_thai_truoc[k-1]; trang_thai_truoc[k-1]=trang_thai_hien_thoi[k-1]; trang_thai_hien_thoi[k-1]=1; //dich cac ngan du lieu len tren 1 don vi for(i=1;i<=dung_luong;i++) for (j=0;j<=4;j++)data_vi_tri[k-1][i-1][j] = data_vi_tri[k-1][i][j];//dich du lieu tu day } } ////////////////////////////////////////////////////////////////////////////////////////////// void CRada2Dlg::toa_do_m2(float t) { //k=1,2,3,4,5,6.... //x(t)=150.t.. //y(t)=235.t.... //z(t)=10.t... int pb; int i,j,k; float x,y,z; k=2;//muc tieu so 1 ////////////////////////////////////////////// //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)); else if((x>=0)&(y<0))data_vi_tri[k-1][dung_luong][1]=asin(x/sqrt(y*y+x*x)); else if((x=0))data_vi_tri[k-1][dung_luong][1]=pi-asin(x/sqrt(y*y+x*x)); if((x<0)&(y<0)) data_vi_tri[k-1][dung_luong][1]=2*pi+asin(x/sqrt(y*y+x*x)); //doi sang do data_vi_tri[k-1][dung_luong][1]=data_vi_tri[k-1][dung_luong][1]*180/pi; //tinh teta data_vi_tri[k-1][dung_luong][2] =asin(z/data_vi_tri[k-1][dung_luong][0])*180/pi; //tinh do cao h data_vi_tri[k-1][dung_luong][3]=z; //toinh van toc van_toc(k , dung_luong, dung_luong-1); data_vi_tri[k-1][dung_luong][4]=vxt; ///////////////////////////////////////////////////// } float fmax, fmin,tg; fmax=data_thanh_quet_phi; fmin=fmax+phan_giai*tt_chieu_quet; if(fmin>=360)fmin=fmin-360; if(fmin<0)fmin=fmin+360; if(fmax<fmin){tg=fmax;fmax=fmin;fmin=tg;}; pb=0; if((fmax-fmin)fmin)&(data_vi_tri[k-1][dung_luong][1]<fmax)) pb=1; if((fmax-fmin)>180) if((data_vi_tri[k-1][dung_luong][1]fmax)) pb=1; //////////////////////////////////////////////////////dung_luong+1 r so phan tu mang if(pb==0) {trang_thai_truoc_nua[k-1]=trang_thai_truoc[k-1]; trang_thai_truoc[k-1]=trang_thai_hien_thoi[k-1]; trang_thai_hien_thoi[k-1]=0;} ///////////////////////////////////////////////////////////////////// if(pb==1) { trang_thai_truoc_nua[k-1]=trang_thai_truoc[k-1]; trang_thai_truoc[k-1]=trang_thai_hien_thoi[k-1]; trang_thai_hien_thoi[k-1]=1; //dich cac ngan du lieu len tren 1 don vi for(i=1;i<=dung_luong;i++) for (j=0;j<=4;j++)data_vi_tri[k-1][i-1][j] = data_vi_tri[k-1][i][j];//dich du lieu tu day } } ////////////////////////////////////////////////////////////////////////////////////////////// void CRada2Dlg::toa_do_m3(float t) { //k=1,2,3,4,5,6.... //x(t)=150.t.. //y(t)=235.t.... //z(t)=10.t... int i,j,k; float x,y,z; int pb; k=3;//muc tieu so 3 ////////////////////////////////////////////// //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))data_vi_tri[k-1][dung_luong][1]=pi-asin(x/sqrt(y*y+x*x)); if((x<0)&(y<0)) data_vi_tri[k-1][dung_luong][1]=2*pi+asin(x/sqrt(y*y+x*x)); //doi sang do data_vi_tri[k-1][dung_luong][1]=data_vi_tri[k-1][dung_luong][1]*180/pi; //tinh teta data_vi_tri[k-1][dung_luong][2] =asin(z/data_vi_tri[k-1][dung_luong][0])*180/pi; //tinh do cao h data_vi_tri[k-1][dung_luong][3]=z; //toinh van toc van_toc(k , dung_luong, dung_luong-1); data_vi_tri[k-1][dung_luong][4]=vxt; ///////////////////////////////////////////////////// } float fmax, fmin,tg; fmax=data_thanh_quet_phi; fmin=fmax+phan_giai*tt_chieu_quet; if(fmin>=360)fmin=fmin-360; if(fmin<0)fmin=fmin+360; if(fmax<fmin){tg=fmax;fmax=fmin;fmin=tg;}; pb=0; if((fmax-fmin)fmin)&(data_vi_tri[k-1][dung_luong][1]<fmax)) pb=1; if((fmax-fmin)>180) if((data_vi_tri[k-1][dung_luong][1]fmax)) pb=1; //////////////////////////////////////////////////////dung_luong+1 r so phan tu mang if(pb==0) {trang_thai_truoc_nua[k-1]=trang_thai_truoc[k-1]; trang_thai_truoc[k-1]=trang_thai_hien_thoi[k-1]; trang_thai_hien_thoi[k-1]=0;} ///////////////////////////////////////////////////////////////////// if(pb==1) { trang_thai_truoc_nua[k-1]=trang_thai_truoc[k-1]; trang_thai_truoc[k-1]=trang_thai_hien_thoi[k-1]; trang_thai_hien_thoi[k-1]=1; //dich cac ngan du lieu len tren 1 don vi for(i=1;i<=dung_luong;i++) for (j=0;j<=4;j++)data_vi_tri[k-1][i-1][j] = data_vi_tri[k-1][i][j];//dich du lieu tu day } } /////////////////////////////////////////////////////////////////////////////////////////// void CRada2Dlg::toa_do_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 ////////////////////////////////////////////// //mang len mot don vi x=-2*t+250-0.0001*t*t;//dinh nghia cac ham tai day y=3*t-100;//dinh nghia cac ham tai day z=20;//dinh nghia cac ham tai day { //tinh khoang cach////////////////////////// if( sqrt(x*x+y*y+z*z)>300) data_vi_tri[k-1][dung_luong][0]=-0.001; else data_vi_tri[k-1][dung_luong][0]=sqrt(x*x+y*y+z*z); //tinh vi tri moi, trong thuc te thi la so lieu moi nhan duoc if((x>=0)&(y>=0)) data_vi_tri[k-1][dung_luong][1]=pi-asin(x/sqrt(y*y+x*x)); else if((x>=0)&(y<0))data_vi_tri[k-1][dung_luong][1]=asin(x/sqrt(y*y+x*x)); else if((x=0))data_vi_tri[k-1][dung_luong][1]=pi-asin(x/sqrt(y*y+x*x)); if((x<0)&(y<0)) data_vi_tri[k-1][dung_luong][1]=2*pi+asin(x/sqrt(y*y+x*x)); //doi sang do data_vi_tri[k-1][dung_luong][1]=data_vi_tri[k-1][dung_luong][1]*180/pi; //tinh teta data_vi_tri[k-1][dung_luong][2] =asin(z/data_vi_tri[k-1][dung_luong][0])*180/pi; //tinh do cao h data_vi_tri[k-1][dung_luong][3]=z; //toinh van toc van_toc(k , dung_luong, dung_luong-1); data_vi_tri[k-1][dung_luong][4]=vxt; ///////////////////////////////////////////////////// } float fmax, fmin,tg; fmax=data_thanh_quet_phi; fmin=fmax+phan_giai*tt_chieu_quet; if(fmin>=360)fmin=fmin-360; if(fmin<0)fmin=fmin+360; if(fmax<fmin){tg=fmax;fmax=fmin;fmin=tg;}; pb=0; if((fmax-fmin)fmin)&(data_vi_tri[k-1][dung_luong][1]<fmax)) pb=1; if((fmax-fmin)>180) if((data_vi_tri[k-1][dung_luong][1]fmax)) pb=1; //////////////////////////////////////////////////////dung_luong+1 r so phan tu mang if(pb==0) {trang_thai_truoc_nua[k-1]=trang_thai_truoc[k-1]; trang_thai_truoc[k-1]=trang_thai_hien_thoi[k-1]; trang_thai_hien_thoi[k-1]=0;} ///////////////////////////////////////////////////////////////////// if(pb==1) { trang_thai_truoc_nua[k-1]=trang_t

Các file đính kèm theo tài liệu này:

  • docrada2dlg_.doc
Tài liệu liên quan