Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовые / 1 / RADAR2 / radar.doc
Скачиваний:
23
Добавлен:
17.04.2013
Размер:
192.51 Кб
Скачать

Unit1.Cpp

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

#include "Unit2.cpp"

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

#pragma package(smart_init)

#pragma link "CSPIN"

#pragma resource "*.dfm"

// --- Инициализация начальных параметров ---

int MouseX,MouseY;

int WaitForTake1C,WaitForLand1C,WaitForTake2C,WaitForLand2C;

int dfi=1;

int r=100;

int centerx=150;int centery=150;

float fi=0;

int RoundSpeed=10;

int Ftox=centerx-r/2;int Ftoy=centery-r;

int Flx=centerx+r/2;int Fly=centery+r;

int FFound,FFoundx,FFoundy;

float Fx=Ftox;float Fy=Ftoy;

float FSx,FSy;

int Show1=0;int OnAir1=0;

int Stox=centerx-r/2;int Stoy=centery-r;

int Slx=centerx+r;int Sly=centery+r;

int SFound,SFoundx,SFoundy;

float Sx=Stox;float Sy=Stoy;

float SSx,SSy;

int Show2=0;int OnAir2=0;

float Speed=0.2;

TForm1 *Form1;

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

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

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

//--- Обработка выхода через меню ---

void __fastcall TForm1::Exit1Click(TObject *Sender)

{

Application->Terminate();

}

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

//--- Процедура определения расстояния между 2 точками ---

float Rng(int x1,int y1,int x2,int y2)

{

return(sqrt( (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)));

}

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

//--- 2 процедуры, изменяющие параметры при посадке самолета ---

void FirstLand(void)

{

OnAir1=FSx=FSy=0;

Fx=Ftox;Fy=Ftoy;

Form1->TakeOff1->Enabled=true;

Form1->Landing1->Enabled=true;

Form1->Edit1->Text=" Приземлился ";

}

//--- вот вторая

void SecondLand(void)

{

OnAir2=SSx=SSy=0;

Sx=Stox;Sy=Stoy;

Form1->TakeOff2->Enabled=true;

Form1->Landing2->Enabled=true;

Form1->Edit2->Text=" Приземлился ";

}

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

//--- Процедура перерисовки следов самолетов ---

void DrawAir( void)

{

//Form1->Canvas->Pen->Color=clSilver;

//Form1->Canvas->Brush->Color=clSilver;

//Form1->Canvas->Ellipse(centerx-(r/2)+1,centery-(r/2)+1,centerx+(r/2)-1,centery+(r/2)-1);

//Form1->Canvas->Pen->Color=clLime;

//Form1->Canvas->Ellipse(centerx-(r+1),centery-(r+1),centerx+(r+1),centery+(r+1));

if (FFound>0) // если первый самолет был замечен

{

int col=clBlue; // то рисуем разноцветные пятна

if (FFound<150) col=clFuchsia;

if (FFound<100) col=clLime;

if (FFound<50) col=clNavy;

if (FFound==1) col=clGreen;

Form1->Canvas->Pen->Color=col;

Form1->Canvas->Brush->Color=col;

Form1->Canvas->Ellipse(FFoundx-3,FFoundy-3,FFoundx+3,FFoundy+3);

FFound--;

}

// проверка условия наведения локатора на самолет и его

// достижимости для обнаружения

if ((OnAir1==1)&&( Rng(Fx,Fy,centerx,centery)<r)&&( Rng

(Fx,Fy,centerx,centery)>(r/2))&&

(fi==(int)(180/M_PI*alpha(centerx,centery,Fx,Fy))))

{

FFound=200; // изменяем параметры при обнаружении

FFoundx=Fx;FFoundy=Fy;

Form1->Canvas->Pen->Color=clBlue;

Form1->Canvas->Brush->Color=clBlue;

Form1->Canvas->Ellipse(Fx-3,Fy-3,Fx+3,Fy+3);

}

// проверяем, не прилетел ли уже 1-й домой

if (Rng(Flx,Fly,Fx,Fy)<2) FirstLand();

Fx+=(FSx/4);Fy+=(FSy/4); // Перемещаем самолетик номер 1

// Тут все то же самое со вторым проделываем

if (SFound>0)

{

int col=clBlue;

if (SFound<150) col=clFuchsia;

if (SFound<100) col=clLime;

if (SFound<50) col=clNavy;

if (SFound==1) col=clGreen;

Form1->Canvas->Pen->Color=col;

Form1->Canvas->Brush->Color=col;

Form1->Canvas->Ellipse(SFoundx-3,SFoundy-3,SFoundx+3,SFoundy+3);

SFound--;

}

if ((OnAir2==1)&&( Rng(Sx,Sy,centerx,centery)<r)&&

( Rng(Sx,Sy,centerx,centery)>(r/2))&&

(fi==(int)(180/M_PI*alpha(centerx,centery,Sx,Sy))))

{

SFound=200;

SFoundx=Sx;SFoundy=Sy;

Form1->Canvas->Pen->Color=clBlue;

Form1->Canvas->Brush->Color=clBlue;

Form1->Canvas->Ellipse(Sx-3,Sy-3,Sx+3,Sy+3);

}

if (Rng(Slx,Sly,Sx,Sy)<2) SecondLand();

Sx+=(SSx/3);Sy+=(SSy/3);

}

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

//--- процедура перерисовывает экран локатора : след развертки

//--- и, возможно, точки приземления / посадки самолетов

void Redraw()

{

for (float i=0; i<200;i++) // это - след развертки

{

Form1->Canvas->Pen->Color=clGreen+i;

Form1->Canvas->MoveTo

(centerx+r*cos(M_PI*(fi-100+i/2)/180)/2,centery+r*sin(M_PI*(fi-100+i/2)/180)/2);

Form1->Canvas->LineTo

(centerx+r*cos(M_PI*(fi-100+i/2)/180),centery+r*sin(M_PI*(fi-100+i/2)/180));

Form1->Canvas->Pen->Color=clBlack;

// Form1->Canvas->MoveTo(centerx,centery);

// Form1->Canvas->Ellipse(centerx-(r/2)+2,centery-(r/2)+2,centerx+(r/2)-2,

// centery+(r/2)-2);

Form1->Canvas->MoveTo(centerx,centery);

Form1->Canvas->LineTo(centerx,centery-r-10);

Form1->Canvas->Pen->Color=clBlack;

Form1->Canvas->MoveTo(centerx,centery);

Form1->Canvas->LineTo(centerx,centery+r+10);

Form1->Canvas->Pen->Color=clBlack;

Form1->Canvas->MoveTo(centerx,centery);

Form1->Canvas->LineTo(centerx+r+10,centery);

Form1->Canvas->Pen->Color=clBlack;

Form1->Canvas->MoveTo(centerx,centery);

Form1->Canvas->LineTo(centerx-r-10,centery);

Form1->Canvas->MoveTo(centerx,centery+(r/2)-2);

Form1->Canvas->LineTo(centerx+10,centery+(r/2)-2);

Form1->Canvas->MoveTo(centerx,centery+(r/2)-2);

Form1->Canvas->LineTo(centerx-10,centery+(r/2)-2);

Form1->Canvas->MoveTo(centerx,centery-(r/2)+2);

Form1->Canvas->LineTo(centerx+10,centery-(r/2)+2);

Form1->Canvas->MoveTo(centerx,centery-(r/2)+2);

Form1->Canvas->LineTo(centerx-10,centery-(r/2)+2);

Form1->Canvas->MoveTo(centerx+(r/2)-2,centery);

Form1->Canvas->LineTo(centerx+(r/2)-2,centery+10);

Form1->Canvas->MoveTo(centerx+(r/2)-2,centery);

Form1->Canvas->LineTo(centerx+(r/2)-2,centery-10);

Form1->Canvas->MoveTo(centerx-(r/2)+2,centery);

Form1->Canvas->LineTo(centerx-(r/2)+2,centery+10);

Form1->Canvas->MoveTo(centerx-(r/2)+2,centery);

Form1->Canvas->LineTo(centerx-(r/2)+2,centery-10);

Form1->Canvas->MoveTo(centerx,centery+r);

Form1->Canvas->LineTo(centerx+10,centery+r);

Form1->Canvas->MoveTo(centerx,centery+r);

Form1->Canvas->LineTo(centerx-10,centery+r);

Form1->Canvas->MoveTo(centerx,centery-r);

Form1->Canvas->LineTo(centerx+10,centery-r);

Form1->Canvas->MoveTo(centerx,centery-r);

Form1->Canvas->LineTo(centerx-10,centery-r);

Form1->Canvas->MoveTo(centerx+r,centery);

Form1->Canvas->LineTo(centerx+r,centery+10);

Form1->Canvas->MoveTo(centerx+r,centery);

Form1->Canvas->LineTo(centerx+r,centery-10);

Form1->Canvas->MoveTo(centerx-r,centery);

Form1->Canvas->LineTo(centerx-r,centery+10);

Form1->Canvas->MoveTo(centerx-r,centery);

Form1->Canvas->LineTo(centerx-r,centery-10);

}

if (Show1==1) // нужно ли показывать точки 1 самолета?

{

Form1->Canvas->Pen->Color=clBlack;

Form1->Canvas->MoveTo(Ftox,Ftoy);

Form1->Canvas->LineTo(Flx,Fly);

Form1->Canvas->Pen->Color=clBlack; // если да - то вперед

Form1->Canvas->Brush->Color=clBlack;

Form1->Canvas->Ellipse(Ftox-1,Ftoy-1,Ftox+1,Ftoy+1);

Form1->Canvas->Ellipse(Flx-1,Fly-1,Flx+1,Fly+1);

}

if (Show2==1) // аналогично со вторым

{

Form1->Canvas->Pen->Color=clBlack;

Form1->Canvas->MoveTo(Stox,Stoy);

Form1->Canvas->LineTo(Slx,Sly);

Form1->Canvas->Pen->Color=clBlack;

Form1->Canvas->Brush->Color=clBlack;

Form1->Canvas->Ellipse(Stox-1,Stoy-1,Stox+1,Stoy+1);

Form1->Canvas->Ellipse(Slx-1,Sly-1,Slx+1,Sly+1);

}

}

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

//--- выход по нажатию кнопки на Форме

void __fastcall TForm1::Button1Click(TObject *Sender)

{

Exit1Click(Sender);

}

//--- обработчик таймера

void __fastcall TForm1::Timer1Timer(TObject *Sender)

{

// Возможное изменение скорости развертки

Timer1->Interval=1000/(RoundSpeed*RoundSpeed*RoundSpeed);

fi+=dfi;;if (fi==360) fi=0; // Бегаем по углу от 0 до 360 град.

Redraw();//рисуем область локатора

DrawAir();//а теперь - самолетики

}

//--- Процедура начального закрашивания(при запуске приложения)

void __fastcall TForm1::FormPaint(TObject *Sender)

{

Canvas->Brush->Color=clGreen;

Canvas->Pen->Color=clGreen;

// это и есть зеленый квадратик

Canvas->Rectangle(centerx-r-5,centery-r-5,centerx+r+5,centerx+r+5);

// а здесь записываем скорость развертки в соответствующее место

Label2->Caption=RoundSpeed;

}

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

// изменение скорости развертки щелчком по стрелке вниз

void __fastcall TForm1::CSpinButton1DownClick(TObject *Sender)

{

if (RoundSpeed>1) RoundSpeed--;

Form1->Label2->Caption=RoundSpeed;

}

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

// а теперь вверх

void __fastcall TForm1::CSpinButton1UpClick(TObject *Sender)

{

if (RoundSpeed<10) RoundSpeed++;

Form1->Label2->Caption=RoundSpeed;

}

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

// нажали паузу в меню (или отжали)

void __fastcall TForm1::Fileitem11Click(TObject *Sender)

{

if (Timer1->Interval!=0) Timer1->Interval=0;

else Timer1->Interval=1000/(RoundSpeed*RoundSpeed*RoundSpeed);

}

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

// нажали на изменение точки взлета 1го самолета

void __fastcall TForm1::TakeOff1Click(TObject *Sender)

{

Label3->Caption=" Двойное нажатие на поле поставит точку взлёта 1-го самолёта ";

WaitForTake1C=1;// сменили параметры - ожидаем указания точки

WaitForLand1C=0;

WaitForTake2C=0;

WaitForLand2C=0;

}

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

// обрабатываем двойной щелчок при указании всяких точек

void __fastcall TForm1::FormDblClick(TObject *Sender)

{

// мышка внутри зеленого квадрата

if (MouseX<centerx+r) if (MouseX>centerx-r) if (MouseY<centery+r)

if (MouseY>centery-r)

if (WaitForTake1C==1) // если ждем 2щлк к точке взлета 1-го

{

Ftox=MouseX; Ftoy=MouseY;WaitForTake1C=0;

Label3->Caption=" Точка взлёта 1-го самолёта установлена";

}

else

if (WaitForTake2C==1) //2-ãî

{

Stox=MouseX; Stoy=MouseY;WaitForTake2C=0;

Label3->Caption=" Точка взлёта 2-го самолёта установлена";

}

else

if (WaitForLand1C==1) // к посадке 1-го

{

Flx=MouseX; Fly=MouseY;WaitForLand1C=0;

Label3->Caption=" Точка посадки 1-го самолёта установлена";

}

else

if (WaitForLand2C==1) //2-ãî

{

Slx=MouseX; Sly=MouseY;WaitForLand2C=0;

Label3->Caption=" Точка посадки 2-го самолёта установлена";

}

}

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

// Кто там двигает мышку?

void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,

int X, int Y)

{

MouseX=X;MouseY=Y;// записываем новые координаты

}

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

// хотят изменить точку взлета 2-го

void __fastcall TForm1::TakeOff2Click(TObject *Sender)

{

Label3->Caption=" Двойное нажатие на поле поставит точку взлёта 2-го самолёта ";

WaitForTake2C=1;

WaitForTake1C=0;

WaitForLand1C=0;

WaitForLand2C=0;

}

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

// изменяют точку посадки 1-го

void __fastcall TForm1::Landing1Click(TObject *Sender)

{

Label3->Caption="Двойное нажатие на поле поставит точку посадки 1-го самолёта";

WaitForLand1C=1;

WaitForTake1C=0;

WaitForTake2C=0;

WaitForLand2C=0;

}

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

// а теперь 2-го

void __fastcall TForm1::Landing2Click(TObject *Sender)

{

Label3->Caption=" Двойное нажатие на поле поставит точку посадки 2-го самолёта ";

WaitForLand2C=1;

WaitForTake1C=0;

WaitForLand1C=0;

WaitForTake2C=0;

}

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

// если попросили не показывать точки взлета/посадки

void Unshow ( int x)

{

if (x==1)

{

Form1->Canvas->Pen->Color=clGreen;

Form1->Canvas->MoveTo(Ftox,Ftoy);

Form1->Canvas->LineTo(Flx,Fly);

Form1->Canvas->Pen->Color=clGreen;

Form1->Canvas->Brush->Color=clGreen;// то рисуем их зеленым

Form1->Canvas->Ellipse(Ftox-1,Ftoy-1,Ftox+1,Ftoy+1);

Form1->Canvas->Ellipse(Flx-1,Fly-1,Flx+1,Fly+1);

}

// то же со 2-м самолетом

else {

Form1->Canvas->Pen->Color=clGreen;

Form1->Canvas->MoveTo(Stox,Stoy);

Form1->Canvas->LineTo(Slx,Sly);

Form1->Canvas->Pen->Color=clGreen;

Form1->Canvas->Brush->Color=clGreen;

Form1->Canvas->Ellipse(Stox-1,Stoy-1,Stox+1,Stoy+1);

Form1->Canvas->Ellipse(Slx-1,Sly-1,Slx+1,Sly+1);

}

}

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

// выбрали в меню показывать точку взлета/посадки 1-го

void __fastcall TForm1::ShowTOPoint1Click(TObject *Sender)

{

Show1=1;

}

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

// тут - не показывать

void __fastcall TForm1::HidePoints1Click(TObject *Sender)

{

Show1=0; // больше не показываем

Unshow(1); // и старые сотрем

}

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

// покажите точки 2-го

void __fastcall TForm1::ShowTOPoint2Click(TObject *Sender)

{

Show2=1;

}

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

// спрячьте точки 2-го

void __fastcall TForm1::HidePoints2Click(TObject *Sender)

{

Show2=0;

Unshow(2);

}

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

// нажали на взлет 1-го самолета

void __fastcall TForm1::Button2Click(TObject *Sender)

{

OnAir1=1; // самолет полетел

TakeOff1->Enabled=false; // это чтобы летящий самолет не просили

Landing1->Enabled=false; // лететь в другое место

Fx=Ftox;Fy=Ftoy; // откуда летим?

FSx=Speed*cos(alpha(Ftox,Ftoy,Flx,Fly));// в какую сторону

FSy=Speed*sin(alpha(Ftox,Ftoy,Flx,Fly));

Edit1->Text=" В воздухе ";

}

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

// нажали на взлет 2-го

void __fastcall TForm1::Button3Click(TObject *Sender)

{

// тут все как и с первым

OnAir2=1;

TakeOff2->Enabled=false;

Landing2->Enabled=false;

Sx=Stox;Sy=Stoy;

SSx=Speed*cos(alpha(Stox,Stoy,Slx,Sly));

SSy=Speed*sin(alpha(Stox,Stoy,Slx,Sly));

Edit2->Text=" В воздухе ";

}

Соседние файлы в папке RADAR2
  • #
    17.04.20132.84 Кб17Radar.bpr
  • #
    17.04.2013730 б19Radar.cpp
  • #
    17.04.2013192.51 Кб23radar.doc
  • #
    17.04.2013267 б17Radar.drc
  • #
    17.04.201351.2 Кб18Radar.exe
  • #
    17.04.201315.8 Кб18Radar.obj
  • #
    17.04.2013876 б17Radar.res
  • #
    17.04.20131.84 Mб17Radar.tds