Gast
#231152
Hallo, hat zufälligerweise jemand von euch Routinen zur Berechnung des Sonnenauf- und Unterganges? Danke, Mathias
|
Anzeige
|
Sonnenaufgang berechnen
Gast
#231152
Hallo, hat zufälligerweise jemand von euch Routinen zur Berechnung des Sonnenauf- und Unterganges? Danke, Mathias
Gast
#231153
Hallo Mathias, leider kann ich Dir keinen fertigen Routinen anbieten, aber schau mal hier vorbei: http://lexikon.astronomie.info/zeitgleichung/ Viele Grüsse Volker
Gast
#231154
Hallo Mathias,
versuch es mal mit dieser Funktion. Ich habe si mal irgendwann an
Delphi angepasst. Sie liefert dir auch noch gleichzeitig den
Sonnenuntergang.
Gruß ... Uwe
unit SunShineUnit;
{ Funktion zur Berechnung von Sonnenaufgang und Sonenuntergang }
{ Parameter }
{ Input: Lat = Latitude = Länge in Grad }
{ Lon = Longitude = Breite in Grad }
{ Date = Datum }
{ Output: SunRise = Sonnenaufgangszeit }
{ SunSet = Sonnenuntergangszeit }
{ dt = Maximal mögliche Sonnenscheinzeit }
Interface
Uses SysUtils, Math;
Procedure SunShine(Lat,Lon:Double;Date:TDateTime;Var
SunRise,SunSet,dt:TDateTime);
Implementation
{ ArcTan von X/Y in rad von 0 bis 2*pi }
Function ATan2(Y,X:Double):Double;
Var at:Double;
Begin
If X <> 0.0 Then Begin
at := ArcTan(Y/X);
End Else Begin
If Y > 0.0 Then Begin
at := Pi / 2;
End Else Begin
at := Pi * 3 / 2;
End;
End;
If X < 0.0 Then at := at + Pi;
If at < 0.0 Then at := at + pi * 2;
Result := at;
End;
{ Float Modulus }
Function RMod(X,Y:Double):Double;
Begin
Result := X - Int(X/Y) * Y;
End;
Procedure SunShine(Lat,Lon:Double;Date:TDateTime;Var
SunRise,SunSet,dt:TDateTime);
Var h,l,m,ra,tr,ts,cd,cl,cLat,sd,sl,sLAt:Double;
N:Integer; yy,mm,dd:Word;
Begin
{ Tag des Jahres }
DecodeDate(Date,yy,mm,dd);
N := Trunc(EncodeDate(yy,mm,dd)) - Trunc(EncodeDate(yy,1,1)) + 1;
{ Sonnenaufgang }
sLat := Sin(DegToRad(LAT));
cLat := Cos(DegToRad(LAT));
tr := N + (6.0 - Lon / 15.0) / 24.0;
m := 0.9856 * tr - 3.289;
l := RMod(m + 1.916 * Sin(DegToRad(m)) + 0.020 * Sin(DegToRad(2.0 *
m)) + 282.634,360.0);
sl := Sin(DegToRad(l));
cl := Cos(DegToRad(l));
ra := 180 / pi * ATan2(0.91746 * sl,cl) / 15.0;
sd := 0.39782 * sl;
cd := SQRT(1.0 - SQR(sd));
h := (360.0 - 180 / pi * ArcCos((-0.01454 - sd * sLat) / (cd *
cLat))) / 15.0;
tr := RMod(H + ra - 0.065710 * tr - 6.622 - Lon / 15.0,24.0);
SunRise := Trunc(Date) + tr / 24;
{ Sonnenuntergang }
ts := N + (18.0 - Lon / 15.0) / 24.0;
m := 0.9856 * ts - 3.289;
l := RMod(m + 1.916 * Sin(DegToRad(m)) + 0.020 * Sin(DegToRad(2.0 *
m)) + 282.634,360.0);
sl := Sin(DegToRad(l));
cl := Cos(DegToRad(l));
ra := 180 / pi * ATan2(0.91746 * sl,cl) / 15.0;
sd := 0.39782 * sl;
cd := Sqrt(1.0 - Sqr(sd));
h := (180 / pi * ArcCos((-0.01454 - sd * sLat) / (cd * cLat))) /
15.0;
ts := RMod(h + ra - 0.065710 * ts - 6.622 - Lon / 15.0 +
24.0,24.0);
If ts < 0.0 Then ts := ts + 24.0;
SunSet := Trunc(Date) + ts / 24;
{ Mögliche Sonnenstunden }
dt := (SunSet - SunRise) * 24;
End;
end.
Gast
#231155
Guck mal hier: http://www.google.de/search?hl=de&q=%22Berechnung+des+Sonnenaufgangs%22&btnG=Google-Suche&meta=lr%3Dlang_de und daraus: http://www.basicbaer.de/faq/tp/tpfaq_17.html Arno Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|