Entwickler-Ecke

Sonstiges (Delphi) - Mondphasen und Sonnenauf-/untergang


AXMD - Fr 28.03.03 14:38
Titel: Mondphasen und Sonnenauf-/untergang
Hi,

ich suche eine Funktion, die mehr die im Titel angegebenen Informationen ausrechnet - im Prinzip so etwas wie ein Oster-Algorithmus, der halt nicht Ostern, sondern Sonnenaufgang... berechnet.

Code wäre super - Links, die nichts bringen, kenn ich schon ;)

AXMD


foxy - Fr 28.03.03 15:31

AXMD wiso schreibst du denn nicht den oster algo um??? :shock:

must doch nur andere werte einflicken oder etwa nicht?
so wie ich den in erinnerung habe....


Adrian - So 30.03.03 11:20
Titel: Sonnenauf/untergang
Hallo AXMD,

manchmal habe ich ein offenes Ohr für astronomische Fragen, und nachdem mich Deine Frage interessiert hat, habe ich ein wenig gegoogelt, um an die Grundlagen zu kommen. Unter http://lexikon.astronomie.info/zeitgleichung findet man dieselben, aber Du wolltest ja ein Code-Beispiel, welches hier folgt:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
procedure TForm1.Button1Click(Sender: TObject);
var
  Laenge : Real;//Längengrad des Standorts, Bogenmaß
  Breite : Real;//Breitengrad des Standorts, Bogenmaß
  h : Real;//Korrekturfaktor für Lichtbeugung in Horzontnähe
  Deklination : Real;
  Zeitdifferenz : Real;
  Zeitgleichung : Real;
  Woz_a : Real;//wahre Ortszeit Sonnenaufgang
  Woz_u : Real;//wahre Ortszeit Sonnenuntergang
  Moz_a : Real;//mittlere Ortszeit Sonnenaufgang
  Moz_u : Real;//mittlere Ortszeit Sonnenuntergang
  T : Real;//Tageszahl, 1.Jan=1, 31.Dez=365 bzw. 366
  Aufgang_Std, Aufgang_Min : Real;
  Untergang_Std, Untergang_Min : Real;
begin
  Laenge:=0.1745329;//10°ö.L.
  Breite:=0.8726646;//50°n.B.
  T:=90;//31. März
  h:=-0.0145;//Konstante, 50 Bogenminuten
  Deklination:=0.40954*sin(0.0172*(T-79.349740));
  Zeitdifferenz:=12*arccos((sin(h)-sin(Breite)*sin(Deklination))/(cos(Breite)*cos(Deklination)))/Pi;
  Woz_a:=12-Zeitdifferenz;
  Woz_u:=12+Zeitdifferenz;
  Zeitgleichung:=-0.1752*sin(0.033430*T+0.5474)-0.1340*sin(0.018234*T-0.1939);
  Moz_a:=Woz_a-Zeitgleichung+((15-(Laenge*180/Pi))*4/60);
  Moz_u:=Woz_u-Zeitgleichung+((15-(Laenge*180/Pi))*4/60);
  Aufgang_Std:=Int(Moz_a);
  Aufgang_Min:=Int(60*(Moz_a-Int(Moz_a)));
  Edit1.Text:=FloatToStr(Aufgang_Std)+' h '+FloatToStr(Aufgang_Min)+' m';
  Untergang_Std:=Int(Moz_u);
  Untergang_Min:=Int(60*(Moz_u-Int(Moz_u)));
  Edit2.Text:=FloatToStr(Untergang_Std)+' h '+FloatToStr(Untergang_Min)+' m';
end;

Wie gesagt, es ist nur ein simples Beispiel, das aber immerhin recht gut funktioniert (hab's mit dem Kosmos-Himmelsjahr verglichen, es treten Abweichungen bis zu 7 Minuten auf), für die Polarregionen sollte man es aber lieber nicht verwenden.
Nicht vergessen: Die Unit "Math" muß eingebunden werden!
Man kann noch einiges verbessern, z.B. könnten die Standortkoordinaten im normalen Grad-Modus eingegeben werden und die Tageszahl kann man auch aus dem Datum errechnen.
@Foxy: Von der Berechnung des Osterdatums zum Sonnenaufgang ist ein himmelweiter Unterschied. Ostern gibt's nur einmal im Jahr, und das überall gleichzeitig, den Sonnenauf- bzw. -untergang gibt's täglich, und dazu noch stark vom Standort abhänging.

Gruß,

Adrian

P.S.: Hoppla, da habe ich doch übersehen, daß Du auch noch Berechnungen für den Mond willst, werde mal schauen, was ich da finde...


AXMD - Mo 31.03.03 14:25

:shock: wow. So viel Arbeit nur für mich ;)

Nein, im Ernst: vielen, vielen Dank. Werd den Code mal testen.

THX,
AXMD


AXMD - Di 01.04.03 07:48

Ach ja: ich hab den Code jetzt getestet und vermisse eine Keinigkeit: wie kann ich außer einem Tag auch noch ein Jahr eingeben - denn es macht ja einen Unterschied, ob Schaltjahr oder nicht.

AXMD


Adrian - Di 01.04.03 08:53
Titel: Schaltjahr
Hallo,

Du mußt ja irgendwie der Variable T einen Wert zuweisen, da wäre es doch einfach, wenn Du Dir eine Funktion schreibst, die aus dem Datum den Tag im Jahr ausrechnet.

Gruß,

Adrian


AXMD - Mi 02.04.03 07:45

Hi,

hab ich schon gemacht und komme gerade drauf: es ist egal, ob Schaltjahr oder nicht, weil am 366. Tag eben die Sonne wieder etwas früher aufgeht :oops: .
Wäre super, wenn du mir auch zu den Mondphasen noch Code schicken könntest.

AXMD

PS.: Hab mal testweise ein Proggy aus dem Code gemacht: http://dustsigns.tripod.com/sonne.exe <-- Link nicht direkt verwenden (Tripod!)


Adrian - Do 03.04.03 01:34
Titel: Die Mondphasen
Hallo AXMD,

so, jetzt habe ich auch noch was für die Mondphase bei freenet.de gefunden, was ich in ein Code-Beispiel umgesetzt habe:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure TForm1.Button1Click(Sender: TObject);
var
  Phase : Real;
  Datum : Real;
  T, Jahr : Real;
begin
  T:=90;//31.März
  Jahr:=2003;
  Datum:=(T/365)+Jahr;
  Phase:=(Datum - 2000) * 12.3685 - 0.19;
  Edit1.Text:=FloatToStr(Frac(Phase));
  {
  Hinweis:
  Es entspricht
  .00 dem Neumond
  .25 dem Ersten Viertel
  .50 dem Vollmond und
  .75 dem Letzten Viertel
  }
end;

Auch hier gilt natürlich wieder das Beispiel-Prinzip: Der Code paßt, aber die Eingabe des Datums, die Berücksichtigung eines Schaltjahrs und die graphische Umsetzung der Mondphase habe ich mir gespart, da kannst Du Deiner Kreativität freien Lauf lassen.

Gruß,

Adrian


AXMD - Do 03.04.03 07:47

Wow! Vielen Dank!

So schnell und so gut funktionierenden Code habe ich noch selten bekommen. Danke

AXMD