ASTRO

Top  Previous  Next

 

{ Csillagászati segédfüggvények }

unit Astro;

 

interface

 

Uses

SysUtils, WinTypes, WinProcs, Messages, Classes,

Graphics;

 

Type

 

TRaRect = record

  h : integer;  {óra}

  m : integer;  {perc}

  s : real;     {ivmásodperc}

end;

 

TDeRect = record

  f : integer;  {fok}

  m : integer;  {ívperc}

  s : real;     {ivmásodperc}

end;

 

TGeoKoord = record

  lambda: real;  {hosszúság}

  fi    : real;  {szélesség}

end;

 

var year,month,day : word;

  UTDiff : integer;     {eltérés a vilkágidőtől (BP-en = +1 óra)}

 

Const

 

 {1 Csillagnap = 23h 56m 4,09054s középidőben}

 csillagnapora  : real = 23+56/60+4.09054/3600;

 csillagnapperc : real = 23*60+56+4.09054/60;

 csillagnapmp   : real = 23*3600+56*60+4.09054;

 

 kozepnapora    : byte = 24;

 kozepnapperc   : real = 24*60;

 kozepnapmp     : real = 24*3600;

 

 

{Az h,m,s formátumú Ra értéket fokokká alakítja (1h=15fok)}

Function RaToReal(h,m:integer;s:real):real;

{A fokokban megadott Ra-t h,m,s formára alakítja}

Function RealToRa(ra:real):TRarect;

Function DeToReal(f,m:integer;s:real):real;

{A fokokban megadott De-t fok,m,s formára alakítja}

Function RealToDe(de:real):TDerect;

{Az fok,m,s formátumú De értéket fokokká alakítja}

Function Ratostr(ra:TRarect):string;

Function Detostr(de:TDerect):string;

 

{Ra rekordból idő}

Function RatoDateTime(ra:TRarect):TDateTime;

 

{A megfigyelőhely csillagidejének meghatározása:

 In: kido = kozépidő [óra],

     fi   = földrajzi hosszúság}

Function KozepidoToCsillagido(kido:TDatetime;fi:real):TRarect;

Function Szokoev(ev:integer):boolean;

 

 

implementation

 

Function RaToReal(h,m:integer;s:real):real;

begin

Result:=15*(h+m/60+s/3600);

end;

 

Function RealToRa(ra:real):TRarect;

begin

With Result do begin

  h := Trunc(Ra/15);

  m := Trunc(60*(ra-15*h)/15);

  s := 60*Frac(60*(ra-15*h)/15);

end;

end;

 

Function DeToReal(f,m:integer;s:real):real;

begin

If f>=0 then Result:=f+m/60+s/3600

else Result:=f-m/60-s/3600;

end;

 

Function RealToDe(de:real):TDerect;

begin

With Result do begin

  f := Trunc(de);

  m := Abs(Trunc(60*Frac(de)));

  s := Abs(60*Frac(60*Frac(de)));

end;

end;

 

Function Ratostr(ra:TRarect):string;

begin

Result := Inttostr(ra.h)+'h '+Inttostr(ra.m)+'m '+Format('%4.1f',[ra.s])+'s';

end;

 

Function Detostr(de:TDerect):string;

begin

Result := Inttostr(de.f)+'* '+Inttostr(de.m)+''' '+Format('%4.1f',[de.s])+'"';

end;

 

{Ra rekordból idő}

Function RatoDateTime(ra:TRarect):TDateTime;

begin

Result := EncodeTime(ra.h,ra.m,Trunc(ra.s),0);

end;

 

Function KozepidoToCsillagido(kido:TDatetime;fi:real):TRarect;

var dat1,dat2: TDateTime;

  elteltnap : real;

  alapido,maradek,d : real;

begin

{Az adott középidőre meghatározzuk a Grewnichi helyi időt}

{1986.09.22-én 0h világidőkor a csillagidő = 0h 02m 14.8s volt,

1. meg kell határozni az azóta eltelt napok számát,

2. az így kapott középnapok számát át kell számítani csillagnapba,

   a maradék rész adja a csillagidőt}

UTDiff := Trunc(fi/15);

dat1 := StrToDatetime('1986.09.22 00:00:00');

dat2 := kido-UTDiff/24;

elteltnap := dat2 - dat1;

maradek := Frac(elteltnap*(24.00000/csillagnapora)+UTDiff/24);

alapido:=Ratoreal(0,2,14.8);

d:=15*24*maradek;

Result := RealToRa(alapido+d);

end;

 

Function Szokoev(ev:integer):boolean;

begin

Result := (ev mod 4)=0;

end;

 

initialization

DecimalSeparator:='.';

ShortDateFormat:='yy.mm.dd';

LongDateFormat:='yyyy.mm.dd';

TimeSeparator:=':';

end.