
25.12.2011, 16:17
|
Прохожий
|
|
Регистрация: 25.12.2011
Сообщения: 3
Репутация: 10
|
|
PHP код:
procedure SetTime( ATime : real; var AOrb : TOrbit);
begin
AOrb.Classic.ArgLat := GetArgLat( ATime, AOrb );
AOrb.Time := ATime;
ClassToXYZ( AOrb );
end;
procedure SetTime( ATime : real; IniOrb : TOrbit; var AOrb : TOrbit);
begin
// AOrb.Classic.ArgLat := u;
AOrb := IniOrb;
AOrb.Classic.ArgLat := GetArgLat( ATime, AOrb );
AOrb.Time := ATime;
ClassToXYZ( AOrb );
end;
function SetTimeF( ATime : real; IniOrb : TOrbit ) : TOrbit;
begin
Result := IniOrb;
Result.Classic.ArgLat := GetArgLat( ATime, Result );
Result.Time := ATime;
ClassToXYZ( Result );
end;
function SiderialTime0( Value : TDateTime ) : real;
// Звездное время на 0 час даты Value
var
t, d, r : real;
n : integer;
begin
d := DateTimeToJulianDate( Value ); // Юлианская дата
t := ( Trunc( d ) - JD2000 ) / 36525; // Число дней в Ю-столетиях
r := (3.879333e-4 * t + 360000.7700536 ) * t + 101.25228375;
n := Trunc( r / 360 ); // сколько раз по 2пи
r := r - n * 360; // Угол приведен к 0..360 град
Result := r * ToRad; // результат в радианах
end;
function SiderialTime ( Value : TDateTime ) : real;
var
dT, r : real;
begin
dT := TimeOf( Value ) * 86400 ; // число секунд среднесолнечного времени суток
r := SiderialTime0( Value ) + We * dT; // прибл значение без поправки
Result := r;
end;
[color="DarkRed"][b]// мое творение начинается отсюда[/b][/color]
procedure NIP (var Nip:TGeo);
begin
//координаты:55о56'59.16" сш,37о58'00.34" вд
//shirota NIP
Nip.Latitude:=55*ToRad+56*ToRad/60+59.16*ToRad/3600;
//dolgota nip
Nip.Longitude:=37*ToRad+58*ToRad/60+00.34*ToRad/3600;
//radius Nip
Nip.R:=RE;
end;
procedure DecKoord(var Nip:TGeo);
var
Pos:T3DVector;
begin
Nip.Pos.X:=RE*Cos(Nip.Longitude)*Cos(Nip.Latitude) ;
Nip.Pos.Y:=RE*Cos(Nip.Latitude)*Sin(Nip.Longitude);
Nip.Pos.Z:=RE*Sin(Nip.Latitude);
end;
procedure ugolMesta (var alfa:real);
var
AOrbit:TOrbit;
Nip:TGeo;
pr,ch,zn:real ;
razn,Pos,PosNip,norma:T3dVector;
begin
pr:=ScalProd( AOrbit.Geo.Pos,Nip.Pos) ;
ch:=pr*Nip.Pos.X+pr*Nip.Pos.Y+pr*Nip.Pos.Z;
razn:=differ (AOrbit.Geo.Pos,Nip.Pos);
norma:= unitVect (razn);
zn:=RE*norma.X+RE*norma.Y+RE*norma.Z;
alfa:=ArcSin(ch/zn);
end;
end.
|