Задание 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) Написать код функции