p align="left">Readln(input);Readln(input); {Пропуск строк в файле исх.значений} Readln(input,X1); {чтение координаты X1 из файла} Readln(input); {Пропуск строк в файле исх.значений} readln(input,Y1); {чтение координаты Y1 из файла} Readln(input);Readln(input);Readln(input); {Пропуск строк в файле исх.значений} Readln(input,X2); {чтение координаты X2 из файла} Readln(input); {Пропуск строк в файле исх.значений} Readln(input,Y2); {чтение координаты Y2 из файла} Begin dX:=X2-X1;dY:=Y2-Y1; {вычисление приращений} Writeln('Priraschenie po abscisse: ',dX:6:3); {вывод полученных приращение на экран} Writeln; {пропуск пустой строки} Writeln('Priraschenie po ordinate: ',dY:6:3); {вывод полученных приращений на экран} writeln; {пропуск пустой строки} Writeln(output,'Priraschenie po abscisse: ',dX:6:3);{вывод полученных приращений в файл} Writeln(output); {пропуск пустой строки в файле} Writeln(output,'Priraschenie po ordinate: ',dY:6:3); {вывод полученных приращений на экран} Writeln(output); {пропуск пустой строки в файле} end; Begin r:=arctan(abs(dY/dX)); {вычисление румба} Writeln('Velichina rumba: ',r:6:3); {вывод румба на экран} Writeln; {пропуск пустой строки} Writeln(output,'Velichina rumba: ',r:6:3); {вывод румба в файл} Writeln(output); {пропуск пустой строки в файле} end; Begin If (dX>0) and (dY>0) then Begin {вычисление дирекционного угла в зависимости от знаков приращений} DirRad:=r; Writeln('Rumb I chetverti'); Writeln(output,'Rumb I chetverti'); end; If (dX<0) and (dY>0) then Begin DirRad:=Pi-r; Writeln('Rumb II chetverti');Writeln; Writeln(output,'Rumb II chetverti');Writeln(output); end; If (dX<0) and (dY<0) then Begin DirRad:=Pi+r; Writeln('Rumb III chetverti');Writeln; Writeln(output,'Rumb III chetverti');Writeln(output); end; If (dX>0) and (dY<0) then Begin DirRad:=2*Pi-r; Writeln('Rumb IV chetverti');Writeln; Writeln(output,'Rumb IV chetveri');Writeln(output); end; end; PerevodRadDeg(DirRad); {перевод дирекционного угла из радиан в градусы с использованием подпрограммы} Begin S:=sqrt((sqr(dX)+sqr(dY))); {вычисление горизонтального проложения} Writeln('Gorizontalnoe prolodgenie: ',S:6:3); {вывод горизонтального проложения на экран} Writeln; {пропуск пустой строки} Writeln(output,'Gorizontalnoe prokodgenie: ',S:6:3); {вывод горизонтального проложения в файл} Writeln(output); {пропуск пустой строки в файле} end; writeln;writeln;writeln;writeln; {добавление личной подписи} writeln(output);writeln(output);writeln(output);writeln(output); Writeln('Made by Moiseev Andrei, GG-09-2'); Writeln('All rights are reserved'); Writeln(output,'Made by Moiseev Andrei, GG-09-2'); Writeln(output,'All rights are reserved'); Close(input); {закрытие файла исходных значений} Close(output); {закрытие файла полученных результатов} Readkey; {добавление временной задержки} end.{конец программы} 1.6 Результаты работы программы А) Priraschenie po abscisse: 658.660 Priraschenie po ordinate: -1657.870 Velichina rumba: 1.193 Rumb IV chetveri 291 gradusov 40 minut 3 secund Gorizontalnoe prolodgenie: 1783.919 В) Priraschenie po abscisse: -1571.650 Priraschenie po ordinate: -268.280 Velichina rumba: 0.169 Rumb III chetverti 189 gradusov 41 minut 13 secund Gorizontalnoe prolodgenie: 1594.383
Рис.1.3 Результат работы программы 1.7. Проверка в MS Excel Рис. 1.4 Excel-расчеты Рис. 1.5 Проверка в MS Excel Рис. 1.6 Проверка в MS Excel Рис.1.7 Проведение промежуточных вычислений при проверке 1.8. Проверка в MathCad Рис. 1.8 Расчеты в мат.пакете MathCad 1.9 Анализ результатов Для решения поставленной задачи были использованы следующие приложения: математический пакет MathCad, табличный редактор MS Excel и язык программирования Turbo Pascal. Сравнивая полученные результаты, можно сделать вывод о правильности работы программы. 2. Прямая угловая засечка 2.1 Теоретические сведения Прямая угловая (геодезическая) засечка - такое название носит способ определения координат точки местности Р , если на плоскости дана система точек геодезической сети с известными координатами и на этих точках измерены горизонтальные углы (рис.2.1.). Р Р Рис. 2.1. Схемы прямой геодезической засечки. Большое значение имеет величина угла при вершине треугольника - угла засечки ?, от которого во многом зависит точность определения координат. В инструкциях по проведению геодезической съемки указывается, что угол засечки не должен быть меньше 30о и больше 150о. Для определения координат точки Р можно использовать формулы Юнга или формулы Гаусса. Чаще используются формулы Юнга, которые еще называют формулами котангенсов внутренних углов треугольника. (2.1) (2.2) Широко используются и формулы Гаусса. В этом случае исходными данными являются не только координаты пунктов А1 и А2 и измеренные горизонтальные углы ??????, но и вычисленный дирекционный угол ??стороны А1 А2. (2.3) (2.4) Если пунктов геодезической сети более двух (рис.2.1б), то исходные данные являются избыточными, т.к. для определения искомых координат точки Р достаточно знать координаты и углы двух точек одного треугольника. Но в инструкции по выполнению геодезических работ требуют, чтобы координаты точки Р определялись как минимум из двух треугольников. Избыточность исходных данных позволяет повысить надежность определения окончательных значений искомых величин за счет применения правила арифметического среднего. (2.5) (2.6) где XP k , YP k координаты, определенные из k-того треугольника.
2.2 Постановка задачи Определить координаты точки P по трем точкам с известными координатами и 4 углам. (2 треугольникам) 2.3 Исходные данные Табл. 2.2Исходные данные 2.5 Текст программы Файл исходных данных Пункт №1: Координата X: 5951.77 Координата Y: 5440.33 Горизонтальный угол B1: Градусы 94 Минуты 58 Секунды 38 ------------------------------- Пункт №2: Координата X: 5648.54 Координата Y: 5101.47 Горизонтальный угол B1: Градусы 56 Минуты 16 Секунды 35 Горизонтальный угол B2: Градусы 40 Минуты 31 Секунды 5 ------------------------------- Пункт №3: Координата X: 5177.15 Координата Y: 5431.80 Горизонтальный угол B2: Градусы 68 Минуты 1 Секунды 58 ------------------------------- Program Zadacha_2; Uses CRT; Var GB1P1,MB1P1,SB1P1,GB1P2,MB1P2,SB1P2,GB2P2,MB2P2,SB2P2,GB2P3,MB2P3,SB2P3:integer; x1,y1,x2,y2,x3,y3:real; Dx12,Dy12,Dx23,Dy23,R12,R23,Alfa12,Alfa23:real; AlfaG12,AlfaGr12,AlfaG23,AlfaGr23,AlfaM12,AlfaMi12,AlfaM23,AlfaMi23,AlfaS23,AlfaS12:real; RB1P1,RB1P2,RB2P2,RB2P3,xP12,yP12,xP23,yP23,SRx,SRy:real; t1,t2:text; Procedure Gradus(Var Alfa12:real); {подпрограмма для перевода дирекционного угла из радиан в градусы} Var AlfaM12,AlfaMi12,AlfaS12,AlfaGr12:real; {объявляем тип переменных, используемых в процедуре} Begin AlfaG12:=(180*Alfa12)/Pi; {переводим угол в градусы} AlfaGr12:=int(AlfaG12); {выделяем целое количество градусов из полученного угла} AlfaM12:=60*(AlfaG12-AlfaGr12); {промежуточное вычисление} AlfaMi12:=int(AlfaM12); {выделяем целое количество минут} AlfaS12:=int(60*(AlfaM12-AlfaMi12));{выделяем целое количество секунд} Writeln('Дирекционный угол равен'); {вывод на экран надписи} Writeln(t2,'Дирекционный угол равен:'); {вывод в файл надписи} Writeln(AlfaGr12:3:0,'градусов',AlfaMi12:3:0,'минут',AlfaS12:3:0,'секунд'); {вывод полученного значения на экран} writeln; {пропуск пустой строки} Writeln(t2,AlfaGr12:3:0,' градусов',AlfaMi12:3:0,' минут',AlfaS12:3:0,' секунд'); {вывод полученного значения в файл} writeln(t2); end; {завершение подпрограммы} Begin {начало основной программы} ClrScr; {очистка экрана} Assign (t1,'in.txt'); {связывание переменной с файлом} Assign (t2,'out.txt');{связывание переменной с файлом} Reset (t1); {обозначение файла для чтения} Rewrite (t2); {обозначение файла для записи} {чтение из фаила исходных значений} Readln(t1); Readln(t1); Readln(t1,x1); Readln(t1); Readln(t1,y1); Readln(t1); Readln(t1); Readln(t1,GB1P1); Readln(t1); Readln(t1,MB1P1); Readln(t1); Readln(t1,SB1P1); Readln(t1); Readln(t1); Readln(t1); Readln(t1,x2); Readln(t1); Readln(t1,y2); Readln(t1); Readln(t1); Readln(t1,GB1P2); Readln(t1); Readln(t1,MB1P2); Readln(t1); Readln(t1,SB1P2); Readln(t1); Readln(t1); Readln(t1,GB2P2); Readln(t1); Readln(t1,MB2P2); Readln(t1); Readln(t1,SB2P2); Readln(t1); Readln(t1); Readln(t1); Readln(t1,x3); Readln(t1); Readln(t1,y3); Readln(t1); Readln(t1); Readln(t1,GB2P3); Readln(t1); Readln(t1,MB2P3); Readln(t1); Readln(t1,SB2P3); Begin {определение приращений координат} Dy12:=y2-y1;{для Y} Dx12:=x2-x1;{для X} Dy23:=y3-y2;{для Y} Dx23:=x3-x2;{для X} {проведение контроля полученных значений} Writeln('Приращения');{вывод на экран надписи "Приращения"} Writeln(t2,'Приращения');{вывод в фаил надписи "Приращения"} Writeln('По оси X для 1-2');{вывод на экран надписи "По оси X"} Writeln(t2,'По оси X для 1-2');{вывод в фаил надписи "По оси X"}
Страницы: 1, 2, 3, 4
|