
- •Цель и задачи курсовой работы
- •1.Указания по оформлению курсовой работы
- •2.Содержание курсовой работы
- •3.Первый раздел – циклические вычислительные процессы с использованием одномерного массива данных. Разработка блок-схем алгоритмов и составление программ на алгоритмическом языке Turbo Pascal.
- •4.Второй раздел – поиск и уточнение корней алгебраических и трансцендентных уравнений методом последовательного приближения
- •5. Третий раздел– программирование с использованием компьютерной графики.
- •6.Четвертый раздел - программное обеспечение для решения задач с двумерными массивами данных в среде Windows c использованием Delphi
- •7.Пятый раздел- прямая равноугольная коническая проекция (проекция Ламберта)
- •Литература
- •Приложение а
- •Курсовая работа
7.Пятый раздел- прямая равноугольная коническая проекция (проекция Ламберта)
Составить алгоритм и программу для решения геодезической задачи.
Задание.
Территория ограничена параллелями φс, φю и меридианами λз, λв. Частота сетки ∆φ и ∆λ. Математическая поверхность Земли – эллипсоид Красовского. Параметры проекции α, с определяются исходя из условия, что на двух главных параллелях с широтами φ1, φ2 масштаб длин равен единице.
Главный масштаб равен μ0.
Порядок выполнения работы
1. Вычисление параметров α, с (постоянные проекции):
где φ0 – широта параллели с минимальным масштабом длин. Величины r, lgr, lgu приводятся в [1, прил. 3-5].
Последовательность вычислений представлена в таблице 7.1.
Таблица 7.1
Формулы |
φ1= |
φ2= |
lgr |
|
|
lgu |
|
|
lgr1- lgr2 |
|
|
lgu2- lgu1 |
|
|
|
|
|
φ0, град |
|
|
u |
|
|
100μ0 |
|
|
100μ0r u |
|
|
|
|
|
с, см |
|
|
2. Вычисление полярных координат ρ и δ.
Результаты вычислений заносятся в таблицы 7.2 и 7.3:
Таблица 7.2
φ, град |
φю |
φю+∆φ |
φю+2∆φ |
… |
φс |
ρ, см |
|
|
|
|
|
Таблица 7.3
λ, град |
λm |
λm +∆λ |
λm +2∆λ |
… |
λз |
δ, град |
|
|
|
|
|
3. Вычисление прямоугольных координат x,y
,
,
где q= ρю – расстояние между полюсом полярных и началом прямоугольных координат. Результаты вычислений оформляются в виде таблицы 7.4.
Таблица 7.4
φ, град |
ρ, см |
Координаты x,y, см |
λ, град |
||||
λm |
λm +∆λ |
λm +2∆λ |
… |
λз |
|||
δ, град |
|||||||
|
|
|
|
|
|||
sinδ |
|||||||
|
|
|
|
|
|||
cosδ |
|||||||
|
|
|
|
|
|||
φю |
|
x y |
|
|
|
|
|
φю+∆φ |
|
x y |
|
|
|
|
|
φю+2∆φ |
|
x y |
|
|
|
|
|
… |
|
x y |
|
|
|
|
|
φс |
|
x y |
|
|
|
|
|
4. Построение сетки меридианов и параллелей.
Для построения картографической сетки проекции Ламберта необходимо отстроить точки с рассчитанными в таблице координатами x, y. Точки соединяются, как показано на проекции Ламберта. Если координаты точек рассчитаны правильно, то меридианы должны быть прямыми линиями, а параллели – дугами окружностей.
Рис. 7.1. Картографическая сетка проекции Ламберта
5. Вычисления масштабов m,n,p
Результаты вычислений заносятся в таблицу 7.5.
Таблица 7.5
φ, град |
ρ, см |
αρ |
r |
(μ0100)r |
m,n |
p |
φю |
|
|
|
|
|
|
φю+∆φ |
|
|
|
|
|
|
φю+2∆φ |
|
|
|
|
|
|
… |
|
|
|
|
|
|
φс |
|
|
|
|
|
|
6. Построение графиков изменения m,p
Для построения графиков масштабов длин и площади необходимо вдоль оси абсцисс отложить φ, вдоль оси ординат - m,p. Полученные точки соединяются плавными кривыми, как показано на рисунке. Правильность построения графиков можно проверить так: графики должны пересекаться , если m=p=1, на широтах φ1, φ2.
Программное обеспечение должно по входным данным рассчитать и вывести на экран значения и с (пункт 1), таблицы (пункт 2), построить сетку меридианов (пункт 4) и график масштабов длин и площади (пункт 6).
Рис. 7.2. График масштабов длин и площади
Таблица 7.6
Задания к пятому разделу
Номер варианта |
λз |
λв |
φю |
φс |
φ1 |
φ2 |
μ0 |
∆φ=∆λ |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
1 |
40 |
80 |
20 |
40 |
25 |
35 |
1:20000000 |
5° |
2 |
45 |
85 |
25 |
45 |
30 |
40 |
1:20000000 |
5 |
3 |
50 |
90 |
30 |
50 |
35 |
45 |
1:20000000 |
5 |
4 |
55 |
95 |
35 |
55 |
40 |
50 |
1:20000000 |
5 |
5 |
60 |
100 |
40 |
60 |
45 |
55 |
1:20000000 |
5 |
6 |
65 |
105 |
45 |
65 |
50 |
60 |
1:20000000 |
5 |
7 |
70 |
110 |
50 |
70 |
55 |
65 |
1:17000000 |
5 |
8 |
75 |
115 |
55 |
75 |
60 |
70 |
1:17000000 |
5 |
9 |
80 |
120 |
35 |
55 |
40 |
50 |
1:17000000 |
5 |
10 |
85 |
125 |
40 |
60 |
45 |
55 |
1:17000000 |
5 |
11 |
90 |
130 |
60 |
80 |
65 |
75 |
1:15000000 |
5 |
12 |
95 |
135 |
60 |
80 |
65 |
75 |
1:15000000 |
5 |
13 |
100 |
140 |
65 |
85 |
70 |
80 |
1:15000000 |
5 |
14 |
105 |
145 |
10 |
30 |
15 |
25 |
1:15000000 |
5 |
15 |
110 |
150 |
15 |
35 |
20 |
30 |
1:15000000 |
5 |
16 |
115 |
155 |
20 |
40 |
25 |
35 |
1:15000000 |
5 |
17 |
24 |
56 |
24 |
40 |
28 |
36 |
1:13000000 |
5 |
18 |
28 |
60 |
28 |
44 |
32 |
40 |
1:13000000 |
4 |
19 |
32 |
64 |
32 |
48 |
36 |
44 |
1:13000000 |
4 |
20 |
36 |
68 |
36 |
52 |
40 |
48 |
1:13000000 |
4 |
21 |
40 |
72 |
40 |
56 |
44 |
52 |
1:13000000 |
4 |
22 |
44 |
76 |
44 |
60 |
48 |
56 |
1:20000000 |
4 |
23 |
48 |
80 |
48 |
64 |
52 |
60 |
1:20000000 |
4 |
24 |
100 |
150 |
20 |
35 |
20 |
35 |
1:15000000 |
5 |
25 |
45 |
80 |
40 |
60 |
46 |
50 |
1:13000000 |
5 |
26 |
28 |
70 |
38 |
54 |
32 |
45 |
1:13000000 |
4 |
Пересчет координат из прямоугольных в экранные:
Program Gr4;
uses graph,crt;
var GraphDriver,GraphMode,ErrorCode:integer;
Ax,Ay,Bx,By:real;
x1,y1,x2,y2:integer;
m,mk:real;
s:string;
BEGIN
writeln('Input M, Ax,Ay,Bx,By');
readln(m,ax,ay,bx,by);
{------------------------}
{Инициализация графического режима}
InitGraph(GraphDriver,GraphMode,'');
Errorcode:=GraphResult;
if ErrorCode<>grok then begin
Writeln('Error');
Exit;
end;
{------------------------}
str(m:5:2,s);
OuttextXY(10,10,'Scale='+s);
mk:=640/m;
x1:=round(ax*mk);
x2:=round(bx*mk);
y
1:=round(480-ay*mk);
y2:=round(480-by*mk);
line(x1,y1,x2,y2);
circle(x1,y1,2);
circle(x2,y2,2);
SetLineStyle(2,0,1);
line(x1,y1,0,y1);
str(ay:5:2,s);
OutTextXY(0,y1+1,s);
line(x1,y1,x1,480);
str(ax:5:2,s);
OutTextXY(x1,470,s);
line(x2,y2,0,y2);
str(by:5:2,s);
OutTextXY(0,y2+1,s); Рис. 7.3
line(x2,y2,x2,480);
str(bx:5:2,s);
OutTextXY(x2,470,s);
{------------------------}
readkey;
CloseGraph;
END.
Построение осей и координатной сетки:
Program Graphic;
uses graph,crt;
var GraphDriver,GraphMode,ErrorCode:integer;
m:integer;
a,b,dx,x,y,min,max:real;
s:string;
function F(x:real):real;
begin
F:=x*x-2*x-1; {Функция}
end;
BEGIN
writeln('Input A,B,dX');
readln(a,b,dx);
x:=a;
y:=F(x);
min:=y; max:=y;
while x<b do
begin
y:=F(x);
x:=x+dx;
if y>max then max:=y;
if y<min then min:=y;
end;
{------------------------}
{Инициализация графического режима}
InitGraph(GraphDriver,GraphMode,'');
Errorcode:=GraphResult;
if ErrorCode<>grok then begin
Writeln('Error');
Exit;
end;
{------------------------}
{Расчет масштабных коэффициентов}
if min>0 then min:=-1;
if (min<a)and(min<0) then min:=a-1;
m:=round(GetMaxX/(b-a));
x:=a;
{Построение линий сетки и координатных осей}
setlinestyle(0,0,1);
MoveTo(-round(a*m),0);
LineRel(0,480);
OuttextXY(GetMaxX-10,GetMaxY+round(min*m)+2,'x');
MoveTo(0,GetMaxY+round(min*m));
LineRel(640,0);
OuttextXY(5-round(a*m),0,'y');
setlinestyle(1,0,1);
x:=trunc(a);
while x<b do begin
MoveTo(round((x-a)*m),0);
LineRel(0,480);
str(x:2:0,s);
OuttextXY(round((x-a)*m),GetMaxY+round(min*m)+2,s);
x:=x+1;
end;
y:=trunc(min);
while y<max do begin
MoveTo(0,GetMaxY-round((y-min)*m));
LineRel(640,0);
str(y:2:0,s);
OuttextXY(-round(a*m),GetMaxY-round((y-min)*m)+2,s);
y:=y+1;
end;
readkey;
CloseGraph;
END.