Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Замечание. При проектировании компонентов для решения обратной геодезической задачи на той же форме свойство Visible компонентов целесообразно установить в положение



При проектировании компонентов для решения обратной геодезической задачи на той же форме свойство Visible компонентов целесообразно установить в положение False.

Текст модуля

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics,

Controls, Forms,

Dialogs, StdCtrls, Math;

{ библиотечный модуль Math нужно добавить в стандартный набор модулей для подключения математической библиотеки }

………………………..

var

Form1: TForm1;

XA,YA:Extended; //координаты точки A

XB,YB:Extended; // координаты точки B

G:Integer; // дирекционный угол в градусах

M: Integer; // часть дирекционного угла в минутах

S:Real; // часть дирекционного угла в секундах

L:Extended; // горизонтальное проложение линии AB

DX, DY:Extended;// приращения координат по осям X,Y

DU:Extended;// дирекционный угол в радианах

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin

ShowMessage('Прямая геодезическая задача - определение координаты'+

' точки по координатам исходной точки, горизонтальному проложению '

+ ' и дирекционному углу.'+#13

+' Дирекционный угол задается в градусах, минутах и секундах. Коор-ты в метрах.');

// ввод координат исходной точки, дирекционного угла

// и горизонтального проложения линии AB из окон ввода

XA:=StrToFloat(InputBox('Прямая геодезическая задача',

'Введите координату X точки A','0'));

YA:=StrToFloat(InputBox('Прямая геодезическая задача',

'Введите координату Y точки A','0'));

G:=StrToInt(InputBox('Прямая геодезическая задача',

'Введите часть дирекционного угла линии AВ в градусах' +#13

+'Значение < 360','0'));

M:=StrToInt(InputBox('Прямая геодезическая задача',

'Введите часть дирекционного угла линии AВ в минутах'+

#13+'Значение <60','0'));

S:=StrToFloat(InputBox('Прямая геодезическая задача',

'Введите часть дирекционного угла линии AВ в секундах' +#13+'Значение <60','0'));

L:=StrToFloat(InputBox('Прямая геодезическая задача',

'Введите горизонтальное проложение линии AВ в метрах','0'));

// вычисление координат точки B

// в ниже приведенном преобразовании можно использовать

// функцию преобразования DegTORad

XB:=XA+L*cos((g+m/60+s/3600)/180*pi);

YB:=YA+L*sin((g+m/60+s/3600)/180*pi);

{XB:=XA+L*cos(DegToRad(g+m/60+s/3600));

YB:=YA+L*sin(DegToRad (g+m/60+s/3600));}

//округление вычисленных координат

// до двух знаков после запятой

XB:=Trunc(XB*100+0.5)/100;

YB:=Trunc(YB*100+0.5)/100;

// вывод координат точки B окно сообщения

ShowMessage('Прямая геодезическая задача ' +#13 +'XB=' +FloatToStrF(XB,Fffixed,10,2)+ #13

+ 'YB='+FloatToStrF(YB,Fffixed,10,2))

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

Form1.Close

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

// сделать видимыми компоненты, относящиеся к обратной

// геодезической задаче

Label1.Visible:=True;

Label2.Visible:=True;

Label3.Visible:=True;

Label4.Visible:=True;

Label5.Visible:=True;

Label6.Visible:=True;

Label7.Visible:=True;

Label8.Visible:=True;

Label9.Visible:=True;

Label10.Visible:=True;

Label11.Visible:=True;

Edit1.Visible:=True;

Edit2.Visible:=True;

Edit3.Visible:=True;

Edit4.Visible:=True;

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

Edit1.SetFocus;

Button4.Visible:=True;

end;

procedure TForm1.Button4Click(Sender: TObject);

Var

begin

// ввод координат точек A и B из полей ввода на форме

XA:=StrToFloat(Edit1.Text);

YA:=StrToFloat(Edit2.Text);

XB:=StrToFloat(Edit3.Text);

YB:=StrToFloat(Edit4.Text);

DX:=XB-XA;

DY:=YB-YA;

// вычисление горизонтального проложения линии AB

L:=Sqrt(Sqr(DX)+Sqr(DY));

// округление горизонтального проложения

// до двух знаков после запятой

L:=Trunc(L*100+0.5)/100;

// вычисление дирекционного угла и перевод

// его значения из радиан в градусы

DU:=ArcTan2(DY,DX)/Pi*180;

{в данном преобразовании можно было использовать функцию

RadToDeg: DU:= RadToDeg (ArcTan2(DY,DX));}

// ArcTan2(Y/X) - библиотечная функция находит угол X/Y

// в несущем квандарте по знакам X и Y от -Pi до Pi в радианах.

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

if DU<0 Then DU:=360+DU;

//выделение градусной части дирекционного угла

G:=Trunc(DU);

// выделение минутной части дирекционного угла

M:=Trunc((DU-G)*60);

// выделение секундной части дирекционного угла

S:=((DU-G)*60-M)*60;

{вывод горизонтального проложения и дирекционного угла в поля вывода}

Label7.Caption:=FloatToStrF(L,Fffixed,10,2);

Label9.Caption:=IntToStr(G);

Label10.Caption:=IntToStr(M);

Label11.Caption:=FloatToStrF(S,Fffixed,5,1);

end;

end.

Такие окна будут появляться на экране при выполнении проекта:





Дата публикования: 2014-11-02; Прочитано: 315 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...