RotateX, RotateY, RotateZ




Типы данных

 

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

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

 

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

Функция SunPos

 

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

Function SunPos(ATime: TDateTime): T3DVector

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

 

где ,

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

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

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

i

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

Unit DateUtils,

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

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


Функция SatInSun

 

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

Function SatInSun(const ASat: TOrbit): Boolean

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

 

Алгоритм

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

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

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

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

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

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

Функция Link

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

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 в противном случае.

Функция CanLink

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

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

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

Для проверки условия видимости двух произвольных КА используйте функцию function Link(const ASat1, ASat2: TOrbit): Boolean. (3)

Функция RadioSector

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

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

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

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

 

Функция SatTrack

 

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

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

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

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

широта:

долгота ,

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

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

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

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

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

 

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

 

где

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

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

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

 

Функция LinkCount

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

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

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

Для проверки условия видимости двух произвольных КА используйте функцию function Link(const ASat1, ASat2: TOrbit): Boolean. (3)

Функция ViewSector

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

function ViewSector(const ASat: TERSat): real,

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

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

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

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

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

 

Функция Swath

 

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

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

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

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

g– размер поля зрения аппаратуры КА.

Функция IsVisible

 

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

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

Функция SeeCount

 

 

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

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

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

 


 

Функция Mult3DMatr

 

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

Алгоритм:

 

Функция Rotation3D

Допустим, что в модуле инструментария имеется функция function Mult3Dmatr(const A, B: T3DMatrix): T3DMatrix, которая возвращает матрицу произведения А на В (см. 12)

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

RotateX, RotateY, RotateZ

 

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

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

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

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

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

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

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

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

Функция Rotate

 

Допустим, что в модуле MyInstr объявлена функция function Rotation3D(APx, APy, APz: T3DMartix): T3DMatrix, которая возвращает произведение трех матриц APx, APy и APz,(13) а также функции вычисления матриц поворота относительно осей X,Y,Z.(14)

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

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

 

Функция DistBetween

 

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

Функция MinDist

 

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

 

Функция Elevation

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

Искомый угол вычисляют по формуле где , где S-вектор положения спутника в ГСК, P – вектор положения пункта в ГСК, RE – средний радиус Земли.

 

Функция Azimuth

 

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

Алгоритм:

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

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

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

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

 

Функция AngleAB

 

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

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

 

Функция VectProd

 

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

 

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

 

Функция TrueAngle

 

Написать функцию, которая возвращает угол между векторами А и В с учетом знака поворота вектора В относительно вектора А.

Алгоритм:

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

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

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

 


 

Список функций

  SunPos(ATime: TDateTime): T3DVector   Единичный вектор направления на Солнце  
  SatInSun(const ASat: TOrbit): Boolean Освещенность КА Солнцем  
  Link(const ASat1, ASat2: TOrbit): Boolean,   Условие прямой видимости двух КА  
  CanLink(const ASpaceSys: TSpaceSystem; n, m: integer):Boolean;   Условие видимости КА спутниковой системы  
  RadioSector(const ASat: TOrbit; AElev: real):real,   Угловой размер зоны радиовидимости  
  SatTrack(const ASat:TOrbit): TLonLat Долгота и широта точки трассы  
  LinkCount(const ASpaceSys: TSpaceSystem; n: integer):integer;   Количество спутников системы, которые видит спутник с номером n  
  ViewSector(const ASat: TERSat): real Угловой размер зоны обслуживания  
  Swath(const ASat: TERSat): real, Ширина полосы обзора  
  IsVisible(const ASat:TOrbit; const AUser:TGeo): Boolean; Возвращает true если спутник видим из пункта AUser  
  SeeCount(const ASatSys: TSpaceSystem; cost AUser: TGeo):integer; Количество спутников видимых из пункта AUser  
  Mult3Dmatr(const A, B: T3DMatrix): T3DMatrix, Произведение двух квадратных матриц размером 3х3  
  Rotation3D(APx, APy, APz: T3DMartix): T3DMatrix, Произведение трех матриц поворота вокруг осей прямоугольной СК  
  RotateX(Angle: real): T3DMatrix; - относительно оси X RotateY(Angle: real): T3DMatrix; - относительно оси Y RotateZ(Angle: real): T3DMatrix; - относительно оси Z Матрицы поворота относительно одной из осей опорной системы координат  
  Rotate(Roll, Yaw, Pitch: real): T3DMatrix Матрица поворота системы координат на углы, заданные параметрами Roll – поворот вокруг оси Х; Yaw – поворот вокруг оси Y; Pitch – поворот вокруг оси Z.    
  DistBetween(ASat1, ASat2: TOrbit): real расстояние в АГЭСК между двумя объектами (спутниками)  
  MinDist(const ASys: TSpaceSystem; ASat: TOrbit): real минимальное из расстояний от спутника ASat до всех спутников системы ASys.  
  Elevation(const AOrbit:TOrbit; const APost:TGeo):real угол места спутника относительно пункта наблюдения TPost,  
  Azimuth(const AOrbit:TOrbit; const APost:TGeo):real, азимут места спутника, относительно пункта наблюдения TPost  
  AngleAB(const A, B: T3DVector):real, модуль угла между векторами А и В  
  VectProd(const A, B: T3DVector): T3DVector. Векторное произведение векторов  
  TrueAngleAB(const A, B: T3DVector):real, Угол между векторами А и В  

 



Поделиться:




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

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


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