Mond, moon, Mondphase
Hallo Freunde nebensächlicher Scripte. Ich teile hier mal ein "Widget" von mir. Es liefert Euch drei aktuelle Informationen über den Mond.
1. die Richtung (zu- oder abnehmend) der Phase, 2. die beleuchtete Fläche (eben jene Phase in %) und 3. die Orbitposition seines Umlaufs. Im Test (timeanddate.com) war es für private Spielereien absolut genau genug. Die Phase weicht um bis zu 0,2% ab. Die Berechnung basiert auf dem Inhalt in einem Astronomiebuch. Die Kalkulationen habe ich in NX übersetzt. Die html-Spielerei kann natürlich nach Bedarf durch join() ersetzt werden. Wer sich ein "Datum+Uhrzeit"-Feld anlegt, und dieses statt now() im Script einbindet, kann auch schauen, ob zu Weihnachten 2026 Vollmond ist (spoiler: ja). Also, wer wissen will, warum man mal wieder nicht schlafen konnte, oder wann es Zeit ist für einen Mondscheinspaziergang, braucht nur Ninox, kein API, kein Internet, kein outdoor.
;-) Gruß Mirko
let myDate := now();
let pi := 3.1415927;
let e := 0.016705;
let Eg := 279.557208;
let Wg := 283.112438;
let l0 := 91.929336;
let P0 := 130.143076;
let epoch := datetime(2010, 1, 0);
let daysSinceEpoch := (number(myDate) - number(epoch)) / 1000 / 60 / 60 / 24;
let Ns := 360 / 365.242191 * daysSinceEpoch;
switch Ns != 0 do
case Ns < 0:
while Ns < 0 do
Ns := Ns + 360
end
case Ns > 360:
while Ns > 360 do
Ns := Ns - 360
end
default:
0
end;
let Mo := (
let result := Ns + Eg - Wg;
if result < 0 then result + 360 else result end
);
let MoRad := radians(Mo);
let EcS := 360 / pi * e * sin(MoRad);
let lambdaSun := (
let result := Ns + EcS + Eg;
if result > 360 then result - 360 else result end
);
let l := 13.1763966 * daysSinceEpoch + l0;
switch l != 0 do
case l < 0:
while l < 0 do
l := l + 360
end
case l > 360:
while l > 360 do
l := l - 360
end
default:
0
end;
let MmO := l - 0.111404 * daysSinceEpoch - P0;
let Mm := if MmO > 360 then MmO - 360 else MmO end;
let MmRad := radians(Mm);
let C := l - lambdaSun;
let CRad := radians(C);
let Ev := 1.2739 * sin(2 * CRad - MmRad);
let Ae := 0.1858 * sin(MoRad);
let A3 := 0.37 * sin(MoRad);
let MmStrich := Mm + Ev - Ae - A3;
let MmStrichRad := MmStrich * pi / 180;
let Ec := 6.2886 * sin(MmStrichRad);
let A4 := 0.214 * sin(2 * MmStrichRad);
let lStrich := l + Ev + Ec - Ae + A4;
let lStrichRad := radians(lStrich);
let lambdaSunRad := radians(lambdaSun);
let V := 0.6583 * sin(2 * (lStrichRad - lambdaSunRad));
let lStrichStrich := lStrich + V;
let DD := lStrichStrich - lambdaSun;
let DDRad := radians(DD);
let lunarPhasePercent := round(0.5 * (1 - cos(DDRad)) * 100, 1);
switch DD != 0 do
case DD < 0:
while DD < 0 do
DD := DD + 360
end
case DD > 360:
while DD > 360 do
DD := DD - 360
end
default:
0
end;
let lunarPhaseGrad := round(DD, 1);
let display := switch lunarPhaseGrad != -1 do
case lunarPhaseGrad > 2 and lunarPhaseGrad <= 80:
"zunehmender Sichelmond "
case lunarPhaseGrad > 80 and lunarPhaseGrad <= 100:
"zunehmender Halbmond "
case lunarPhaseGrad > 100 and lunarPhaseGrad < 178:
"zunehmender Dreiviertelmond "
case lunarPhaseGrad >= 178 and lunarPhaseGrad <= 182:
"Vollmond "
case lunarPhaseGrad > 182 and lunarPhaseGrad <= 260:
"abnehmender Dreiviertelmond "
case lunarPhaseGrad > 260 and lunarPhaseGrad <= 280:
"abnehmender Halbmond "
case lunarPhaseGrad > 280 and lunarPhaseGrad < 358:
"abnehmender Sichelmond "
case lunarPhaseGrad >= 358:
"Neumond "
case lunarPhaseGrad <= 2:
"Neumond "
end;
let first := display;
let second := lunarPhasePercent + " % Mondphase";
let third := text(lunarPhaseGrad) + "° Orbit";
html("<style>" + "p" + "{border-radius: .5em;box-shadow: .3em .3em .6em #2D2F62;margin: 1em;padding: .3em 1em;box-decoration-break: slice;
text-align:center;background-color: #C7E1FB;font: bold 1em Georgia, serif;}" + "</style>" + "<p style='color:#002F9A'>" + "<br>" + third + "</br>" + "<br>" + first + "</br>" + "<br>" + second + "</br>" + "<br>" + "" + "</br>" + "</p>")
5 Antworten
-
cool!
-
sorry, Zeile 8 heißt:
let epoch := number(datetime(2010, 1, 0, 1));
-
Es sind doch gerade Nebensächlichkeiten, die den tristen Alltag auflockern. ;)
-
Hier mal ein "Update" für Interessenten astronomischer Berechnungen. Code muss in ein Funktionsfeld. Kaum Rechenkapazität und natürlich könnt ihr statt Krakvitz jeden anderen Ort in der mitteleuropäischen Zeitzone (MEZ) eingeben. Die ersten vier Variablen können auch durch ein Standortfeld und ein Timestamp-Feld beschickt werden. Mirko
-
...Zeile 4:
Content aside
-
5
„Gefällt mir“ Klicks
- vor 1 JahrMon, March 4, 2024 at 8:33 AM UTCZuletzt aktiv
- 5Antworten
- 230Ansichten
-
6
Folge bereits