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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!