Function SunPos( ATime : TDateTime) : T3DVector




Задание 1

 

1) Написать код функции

Function SunPos(ATime: TDateTime): T3DVector

которая возвращает единичный вектор направления из центра Земли на Солнце в АГЭСК в момент времени, заданный параметром ATime. Расчетные формулы компонент вектора

где ,

- число суток между датой ATime и датой, соответствующей 21 марта года даты ATime;

e – угол наклона плоскости экватора Земли к эклиптике.

Для работы с датами используйте функции модуля DateUtils:

function EncodeDate(Year, Month, Day: word): TDateTime – возвращает дату в форме TDateTime, по параметрам Year (год) Month (месяц), Day (день);

function YearOf(ATime: TDateTime): word – возвращает год даты ATime;

function DaysBetween(const ANow, AThen): integer – возвращает число суток, прошедших между датами ANow и AThen.

 

2) Написать код функции

Function SatInSun(const ASat: TOrbit): Boolean

которая возвращает true если спутник, положение которого задано структурой ASat, освещен Солнцем или false - в противном случае.

Алгоритм

вычислить угол ,

если g£p/2, либо то вернуть true, иначе вернуть false.

где R – вектор положения спутника в АГЭСК;

es – единичный вектор направления на Солнце в АГЭСК

– средний радиус Земли. – норма вектора,

– скалярное произведение векторов.

 


 

Задание 2

1) Написать код функции

function Link(const ASat1, ASat2: TOrbit): Boolean,

которая возвращает true если спутники ASat1 и ASat2 в прямой видимости друг друга.

Алгоритм:

1. Вычислить , где

Х1 и Х2 – векторы положения спутников в АГЭСК,

<X1,X2> – скалярное произведение векторов,

RE – средний радиус Земли,

r1, r2 – модули векторов Х1 и Х2 соответственно.

2. Вернуть true если C<0 или false в противном случае.

 

2) Сконструировать тип данных, например, TSpaceSystem, пригодный для хранения в программе данных о спутниковой системе с произвольным количеством спутников. Данные об отдельном спутнике отнести к типу TOrbit. Написать код функции

function CanLink(const ASpaceSys: TSpaceSystem; n, m: integer):Boolean;

которая вернет true если спутники системы ASpaceSys с номерами n и m находятся в прямой видимости друг друга или false в случае когда либо n=m, либо условие видимости не выполняется.


 

Задание 3

1) Написать код функции

function RadioSector(const ASat: TOrbit; AElev: real):real,

которая возвращает угловой размер зоны радиовидимости спутника, положение которого задано в структуре ASat, с учетом минимального угла места, заданного параметром AElev.

Расчетная формула , где d – минимальный угол места, h – высота орбиты спутника, RE – средний радиус Земли.

 

2) Написать код функции

function SatTrack(const ASat:TOrbit): TLonLat, которая возвращает долготу и широту точки трассы спутника, параметры движения которого содержатся в структуре ASat. Тип данных TLonLat, объявлен так

type TLonLat = record Longitude, Latitude: real end; где Longitude – долгота, Latitude – широта.

Расчетные формулы:

широта:

долгота ,

где t – время, отсчитываемое от 0 часов даты расчета,

– долгота пересечения экватора,

– угловая скорость вращения Земли,

– наклонение плоскости орбиты КА к плоскости экватора Земли

u – аргумент широты КА.

 

Долгота пересечения экватора определяется по формуле

 

где

– среднее звездное время на 0 часов даты расчета,

W – долгота восходящего узла орбиты.

Для вычисления звездного времени используйте функцию SiderealTime.

 

 


 

Задание 4

 

1) Написать код функции

function Link(const ASat1, ASat2: TOrbit): Boolean,

которая возвращает true если спутники ASat1 и ASat2 в прямой видимости друг друга.

Алгоритм:

3. Вычислить , где

Х1 и Х2 – векторы положения спутников в АГЭСК,

<X1,X2> – скалярное произведение векторов,

RE – средний радиус Земли,

r1, r2 – модули векторов Х1 и Х2 соответственно.

4. Вернуть true если C<0 или false в противном случае.

 

2) Сконструировать тип данных, например, TSpaceSystem, пригодный для хранения в программе данных о спутниковой системе с произвольным количеством спутников. Данные об отдельном спутнике отнести к типу TOrbit. Написать код функции

function LinkCount(const ASpaceSys: TSpaceSystem; n: integer):integer;

которая вернет количество спутников системы ASpaceSys, находящихся в прямой видимости со спутником номер которого в системе равен n.

 


 

Задание 5

1) Сконструировать тип, например TERSat, который помимо данных, включенных в TOrbit, содержал бы дополнительное поле View вещественного типа - размер поля зрения аппаратуры дистанционного зондирования Земли (ДЗЗ).

Написать код функции

function ViewSector(const ASat: TERSat): real,

которая возвращает угловой размер зоны обслуживания аппаратуры спутника с учетом углового размера поля зрения аппаратуры. Все исходные данные содержатся в структуре ASat.

Расчетная формула ,

где g – угловой радиус поля зрения аппаратуры,

H – высота орбиты спутника в точке расчета:

RE – средний радиус Земли.

 

2) Сконструировать тип данных, например, TERS, пригодный для хранения в программе данных о спутниковой системе ДЗЗ с произвольным количеством спутников типа TERSat. Написать код функции

function ViewFitsCount(AERS: TERS; AView: real): integer; которая вернет количество спутников системы AERS, размер зоны обслуживания которых не меньше заданного параметром AView.


 

Задание 6

 

1) Сконструировать тип, например TERSat, который помимо данных, включенных в TOrbit, содержал бы поле View вещественного типа - размер поля зрения аппаратуры дистанционного зондирования Земли (ДЗЗ).

Написать код функции

function ViewSector(const ASat: TERSat): real,

которая возвращает угловой размер зоны обслуживания аппаратуры спутника с учетом углового размера поля зрения аппаратуры. Все исходные данные содержатся в структуре ASat.

Расчетная формула ,

где g – угловой радиус поля зрения аппаратуры,

H – высота орбиты спутника в точке расчета:

RE – средний радиус Земли.

 

2) Написать код функции Swath(const ASat: TERSat): real, которая возвращает ширину b полосы обзора аппаратуры спутника ДЗЗ.

Расчетная формула ,

где Re – средний радиус Земли;

h – высота КА над Землей;

g– центральный радиус поля зрения аппаратуры КА.


 

Задание 7

1) Приемник пользователя ГЛОНАСС, находящегося в точке P с координатами (X,Y,Z) в ГСК видит навигационный спутник, параметры движения которого заданы в структуре типа TOrbit, если выполняется условие , где ,

S – вектор положения спутника в ГСК,

RE – средний радиус Земли.

Написать код функции function IsVisible(const ASat:TOrbit; const AUser:TGeo): Boolean; которая возвращает true если пользователь AUser «видит» спутник ASat.

 

2) Сконструировать тип данных, например, TSpaceSystem, пригодный для хранения в программе данных о спутниковой системе с произвольным количеством спутников. Данные об отдельном спутнике отнести к типу TOrbit. Написать код функции

function SeeCount(const ASatSys: TSpaceSystem; cost AUser: TGeo):integer;

которая возвращает число спутников системы ASatSys видимых из точки, в которой находится AUser.

 


 

Задание 8

 

1) Написать код функции function Mult3Dmatr(const A, B: T3DMatrix): T3DMatrix, которая возвращает матрицу С произведения А на В, т.е С=А·В, или .

Алгоритм:

2) Написать код функции function Rotation3D(APx, APy, APz: T3DMartix): T3DMatrix, которая возвращает произведение трех матриц APx, APy и APz.


Задание 9

 

1) Написать коды трех функций, каждая из которых возвращает матрицу поворота прямоугольной системы координат относительно одной из осей опорной системы координат на произвольный угол Angle:

function RotateX(Angle: real): T3DMatrix; - относительно оси X

function RotateY(Angle: real): T3DMatrix; - относительно оси Y

function RotateZ(Angle: real): T3DMatrix; - относительно оси Z

Расчетные формулы.

Матрица поворота на угол α вокруг оси X: ;

Матрица поворота на угол α вокруг осиY: ;

Матрица поворота на угол α вокруг оси Z: .

 

2) Допустим, что в модуле объявлена функция function Rotation3D(APx, APy, APz: T3DMartix): T3DMatrix, которая возвращает произведение трех матриц APx, APy и APz.

Написать код функции

function Rotate(Roll, Yaw, Pitch: real): T3DMatrix, которя вернет матрицу поворота системы координат на углы, заданные параметрами Roll – поворот вокруг оси Х; Yaw – поворот вокруг оси Y; Pitch – поворот вокруг оси Z.


 

Задание 10

 

1) Написать код функции function DistBetween(ASat1, ASat2: TOrbit): real; которая возвращает расстояние в АГЭСК между двумя объектами (спутниками), параметры движения которых заданы в структурах ASat1 и ASat2.

Расчетная формула. Обозначим: R1-вектор положения первого спутника в АГЭСК, R2 –вектор положения второго спутника в АГЭСК. Расстояние между спутниками равно модулю разности векторов: .

 

2) Сконструировать тип данных, например, TSpaceSystem, пригодный для хранения в программе данных о спутниковой системе с произвольным количеством спутников. Данные об отдельном спутнике отнести к типу TOrbit.

Написать код функции function MinDist(const ASys: TSpaceSystem; ASat: TOrbit): real, которая вернет минимальное из расстояний от спутника ASat до всех спутников системы ASys.


 

Задание 11

1). Написать код функции function Elevation(const AOrbit:TOrbit; const APost:TGeo):real, которая возвращает угол места спутника, параметры движения которого заданы в структуре TOrbit, относительно пункта наблюдения TPost, положение которого в ГСК заданы в структуре TPost. Искомый угол вычисляют по формуле где ,

где S-вектор положения спутника в ГСК,

P – вектор положения пункта в ГСК,

RE – средний радиус Земли.

2). Написать код функции function Azimuth(const AOrbit:TOrbit; const APost:TGeo):real, которя возвращает азимут места спутника, параметры движения которого заданы в структуре TOrbit, относительно пункта наблюдения TPost, положение которого в ГСК задано в структуре TPost.

Алгоритм:

Вычислить угол

Вычислить , где λ–долгота спутника, λP - долгота пункта P.

Вычислить где ϕ–долгота спутника, ϕP - долгота пункта P.

Вычислить азимут (результат)


 

Задание 12

1) Написать код функции function AngleAB(const A, B: T3DVector):real, возвращающей модуль угла между векторами А и В и функции.

 

Расчетные формулы:

- угол между векторами .

- векторное произведение

 

2) Написать функцию function TrueAngleAB(const A, B: T3DVector):real, которая возвращает угол между векторами А и В с учетом знака поворота вектора В относительно вектора А.

Алгоритм:

1) Вычислить векторное произведение С=А×В.

2) Вычислить модуль угла между векторами А и В

3) Вычислить искомый результат α = ϕ·sign(CZ)

 

 


 

Задание 13

1) Написать код функции

function SunPos(ATime: TDateTime): T3DVector

которая возвращает единичный вектор направления из центра Земли на Солнце в АГЭСК в момент времени, заданный параметром ATime. Расчетные формулы компонент вектора

где ,

- число суток между датой ATime и датой, соответствующей 21 марта года даты ATime;

e – угол наклона плоскости экватора Земли к эклиптике.

Для работы с датами используйте функции модуля DateUtils:

function EncodeDate(Year, Month, Day: word): TDateTime – возвращает дату в форме TDateTime, по параметрам Year (год) Month (месяц), Day (день);

function YearOf(ATime: TDateTime): word – возвращает год даты ATime;

function DaysBetween(const ANow, AThen): integer – возвращает число суток, прошедших между датами ANow и AThen.

 

2) Написать код функции



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-06-30 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: