- •Задание.
- •Int Classify(int sx,int sy,int kx,int ky,int px,int py)
- •Void __fastcall tForm1::Timer1Timer(tObject *Sender)
- •Void __fastcall tForm1::FormClose(tObject *Sender, tCloseAction &Action)
- •Void __fastcall tForm1::Edit1Change(tObject *Sender)
- •Void __fastcall tForm1::Edit2Change(tObject *Sender)
Московский институт электронной техники.
(Технический университет)
Пояснительная записка к курсовой по ОВП.
Тема: Моделирование работы радара.
Выполнил:
Принял:
Москва
2001
Задание.
Имитировать работу радара, отслеживая движение двух самолетов. Отображать фигурки самолетов только когда имитированная эл. волна направлена на самолет.
Выполнение задания.
Находиться ли самолет в области просвечивания лучом определяется с помощью алгоритма вычислительной геометрии о положении точки относительно прямой. Программа позволяет менять отклонение самолета от оси абсцисс, скорость и частоту обращения луча радара.
Описание функций программы.
__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner)
Функция инициализирует начальные параметры. Устанавливаются начальные координаты самолетов, их отклонение от оси абсцисс, скорость и направление движения. Установленные параметры выводятся на экран в соответствующие поля.
int Classify(int sx,int sy,int kx,int ky,int px,int py)
Функция определяет положение точки относительно отрезка и возвращает значение 1 или 0, которые соответствуют положению точки справа или слева относительно отрезка.
void __fastcall TForm1::Timer1Timer(TObject *Sender)
В функции реализуется обращение луча вокруг заданной точки с определением положения самолетов относительно луча и сигнализацией их засечения. Функция вызывается с частотой задаваемой пользователем.
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
Функция вызывается при завершении работы программы. В ней выключается таймер.
void __fastcall TForm1::Edit1Change(TObject *Sender)
Функция вызывается когда пользователь изменяет значение в поле с частотой обращения луча радара.
void __fastcall TForm1::Edit2Change(TObject *Sender)
Функция вызывается когда пользователь изменяет значение в поле с отклонением первого самолета от оси абсцисс.
void __fastcall TForm1::Edit4Change(TObject *Sender)
Функция вызывается когда пользователь изменяет значение в поле со скоростью первого самолета.
void __fastcall TForm1::Edit3Change(TObject *Sender)
Функция вызывается когда пользователь изменяет значение в поле с отклонением второго самолета от оси абсцисс.
void __fastcall TForm1::Edit5Change(TObject *Sender)
Функция вызывается когда пользователь изменяет значение в поле со скоростью второго самолета.
Описание структуры Samolet
struct Samolet
{
float kx,Speed;
float Xpos,Ypos,sx,sy;
int TX,TY,count;
void move()
{
Xpos+=sx*Speed*cos(kx*0.01745);
Ypos+=sy*Speed*sin(kx*0.01745);
}
}Sam[2];
В структуре Samolet содержатся переменные значения которых характеризуют параметры движения и положения самолета на экране.
Функция Move осуществляет изменение положения самолета в соответствии с параметрами движения.
Листинг программы.
Файл Project1.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
USERES("Project1.res");
USEFORM("Unit1.cpp", Form1);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}
//---------------------------------------------------------------------------
Файл Unit1.h
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TBevel *Bevel1;
TBevel *Bevel2;
TImage *Image1;
TTimer *Timer1;
TLabel *Label1;
TEdit *Edit1;
TBevel *Bevel3;
TBevel *Bevel4;
TBevel *Bevel5;
TLabel *Label2;
TLabel *Label3;
TLabel *Label4;
TLabel *Label5;
TEdit *Edit2;
TEdit *Edit3;
TLabel *Label6;
TLabel *Label7;
TEdit *Edit4;
TEdit *Edit5;
TLabel *Label8;
TEdit *Edit6;
TLabel *Label9;
TEdit *Edit7;
TLabel *Label10;
TEdit *Edit8;
TLabel *Label11;
TEdit *Edit9;
void __fastcall Timer1Timer(TObject *Sender);
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
void __fastcall Edit1Change(TObject *Sender);
void __fastcall Edit2Change(TObject *Sender);
void __fastcall Edit4Change(TObject *Sender);
void __fastcall Edit3Change(TObject *Sender);
void __fastcall Edit5Change(TObject *Sender);
private: // User declarations
int X,Y,oldX,oldY;
int Angle;
float SIN[360],COS[360];
struct Samolet
{
float kx,Speed;
float Xpos,Ypos,sx,sy;
int TX,TY,count;
void move()
{
Xpos+=sx*Speed*cos(kx*0.01745);
Ypos+=sy*Speed*sin(kx*0.01745);
}
}Sam[2];
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
Файл Unit1.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
#pragma hdrstop
#define RIGHT 1
#define LEFT 0
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
char buf[100];
int Speed = 1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner)
{
X = Image1->Width/2;
Y = 0;
Angle = 0;
for(int i = 0;i < 360;i++)
{
SIN[i] = sin(i*0.01745);
COS[i] = cos(i*0.01745);
SIN[i] = Image1->Height/2*(SIN[i] + 1);
COS[i] = Image1->Width/2*(COS[i] + 1);
}
Sam[0].kx = 35;
Sam[0].Speed = 0.3;
Sam[0].sx = 1;
Sam[0].sy = 1;
Sam[0].Xpos = 100;
Sam[0].Ypos = 100;
Sam[1].kx = 75;
Sam[1].Speed = 0.5;
Sam[1].sx = 1;
Sam[1].sy = 1;
Sam[1].Xpos = 100;
Sam[1].Ypos = 10;
sprintf(buf,"%d",Speed);
Edit1->Text = buf;
sprintf(buf,"%f",Sam[0].kx);
Edit2->Text = buf;
sprintf(buf,"%f",Sam[0].Speed);
Edit4->Text = buf;
sprintf(buf,"%f",Sam[0].Xpos);
Edit7->Text = buf;
sprintf(buf,"%f",Sam[0].Ypos);
Edit9->Text = buf;
sprintf(buf,"%f",Sam[1].kx);
Edit3->Text = buf;
sprintf(buf,"%f",Sam[1].Speed);
Edit5->Text = buf;
sprintf(buf,"%f",Sam[1].Xpos);
Edit6->Text = buf;
sprintf(buf,"%f",Sam[1].Ypos);
Edit8->Text = buf;
}
//---------------------------------------------------------------------------