{"id":1081,"date":"2018-12-23T16:48:35","date_gmt":"2018-12-23T15:48:35","guid":{"rendered":"https:\/\/www.rustimation.eu\/?p=1081"},"modified":"2025-03-01T17:39:32","modified_gmt":"2025-03-01T16:39:32","slug":"mondphase-und-beleuchtung-ausrechnen","status":"publish","type":"post","link":"https:\/\/www.rustimation.eu\/index.php\/mondphase-und-beleuchtung-ausrechnen\/","title":{"rendered":"Mondphase und -beleuchtung ausrechnen"},"content":{"rendered":"\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Mondphase berechnen<\/h2>\r\n\r\n\r\n\r\n<p>Eigentlich ganz einfach, wenn man ein genaues und nicht zu lange in der Vergangenheit liegendes\u00a0 Vollmonddatum kennt. Man rechnet dann die Zeit seitdem bis heute aus und teilt das Ergebnis durch die Zeit, die zwischen zwei Neumondereignissen vergeht. Von diese Ergebnis verwenden wir nur den Teil hinter dem Komma und haben so die aktuelle Phase ermittelt. <br \/>Der Phasenwert liegt zwischen null und eins, und sagt folgendes aus:<\/p>\r\n\r\n\r\n\r\n<p><!--more--><\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li>0.0 bedeutet Vollmond<\/li>\r\n<li>0.25 abnehmender Halbmond (das letzte Viertel)<\/li>\r\n<li>0.5 Neumond<\/li>\r\n<li>0.75 zunehmender Halbmond (erstes Viertel)<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p>Zu kompliziert? Dann ein <strong>Beispiel<\/strong>:<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li>Heute ist der 16.12.2018, 12:00 Uhr<\/li>\r\n<li>Ein \"historischer\" Vollmond war z.B. am 25.09.2018 um 4 Uhr, 52 Minuten. Ich empfehle hier den m\u00f6glichst letzten Vollmond heranzuziehen, da die Umlaufzeit des Mondes variiert. Nachschauen k\u00f6nnt ihr z.B. bei <a href=\"http:\/\/vollmond.info\" target=\"_blank\" rel=\"noopener\">http:\/\/vollmond.info<\/a><\/li>\r\n<li>Dazwischen liegen ziemlich genau 82,24 Tage<\/li>\r\n<li>Diese Zahl teilen wir durch 29,53 (das ist die <a href=\"https:\/\/de.wikipedia.org\/wiki\/Synodische_Periode\" target=\"_blank\" rel=\"noopener noreferrer\">synodische Umlaufzeit<\/a> des Mondes, also die Zeit von Neumond zu Neumond bzw. von Vollmond zu Vollmond.) <br \/>Als Ergebnis erhalten wir 2,785.<\/li>\r\n<li>Die Zwei vor dem Komma bedeutet, dass inzwischen zwei Mondperioden durchlaufen wurden,<\/li>\r\n<li>die 0,785 nach dem Komma zeigt, dass wir einen zunehmenden Mond haben und es nicht mehr lang bis Vollmond ist &#8211; siehe Tabelle oben.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p><strong>Disclaimer<\/strong>: Leider sind die Umlaufzeiten des Mondes alles andere als konstant. Insofern sollte der vergangene Vollmond nicht zu lange her sein, um ein m\u00f6glichst genaues Ergebnis zu erzielen. Siehe auch <a href=\"https:\/\/de.wikipedia.org\/wiki\/Mondbahn\" target=\"_blank\" rel=\"noopener\">Wikipedia<\/a>.<\/p>\r\n<p>In <strong>Python<\/strong> sieht das dann so aus &#8211; basierend auf der zur Ausf\u00fchrung geltenden Zeit:<\/p>\r\n\r\n\r\n\r\n<pre class=\"lang:python decode:true \">#!\/usr\/bin\/python\r\n#coding=UTF-8\r\n#########################\r\n# portiert auf Python 3.x\r\n#########################\r\n\r\nimport time \r\n\r\nnow_time=time.mktime(time.localtime())\r\n\r\n# constants\r\nsyn_moon_month = 29.530589 \t\t\t\t\t\t           # synodaler Monat\r\n\r\n# constants\r\nhist_fullmoon = 2018,9,25,6,1,36,0,0,1 \t\t\t           # Historischer Vollmond als Strukturierte Zeit ---&gt; Dies ist nur ein Beispiel ANPASSEN!!\r\nmoon_time = time.mktime(hist_fullmoon) \t\t\t           # Historischer Vollmond umgerechnet als Sekunden seit Epoch\r\nhist_fullmoon_days = moon_time\/86400 \t\t\t           # Historischer Vollmond - in Tagen seit Epoch\r\n# actuals\r\nnow_days = now_time\/86400 \t\t\t\t\t\t           # Tage seit Epoch bis jetzt \r\ndays_since_hist_fullmoon = now_days - hist_fullmoon_days   # Differenz in Tagen: Jetzt - Historischer VM\r\nprint (days_since_hist_fullmoon)\r\nfull_moons_since = days_since_hist_fullmoon\/syn_moon_month # Anzahl Vollmondereignisse seit hist. VM\r\nprint (full_moons_since)\r\nphase = round(full_moons_since,2) \t\t\t\t           # Abrunden auf 2 Nachkommastellen \r\nphase = (phase-int(phase))\t\t\t\t\t\t           # Nachkommastellen = Mondphase \r\n\r\n# calculate moon phase\r\nif phase == 0: phase=1\r\nif phase &lt; 0.25:\r\n    ptext=\"abnehmender Mond (drittes Viertel)\" \r\nelif phase == 0.25:\r\n    ptext=\"abnehmender Halbmond (letztes Viertel)\" \r\nelif 0.25 &lt; phase &lt; 0.50:\r\n    ptext=\"abnehmende Sichel\" \r\nelif phase == 0.50:\r\n    ptext=\"Neumond\" \r\nelif 0.50 &lt; phase &lt; 0.75:\r\n    ptext=\"zunehmende Sichel\" \r\nelif phase == 0.75:\r\n    ptext=\"zunehmender Halbmond (erstes Viertel)\" \r\nelif 0.75 &lt; phase &lt; 1:\r\n    ptext=\"zunehmender Mond (zweites Viertel)\" \r\nelif phase == 1:\r\n    ptext = \"Vollmond\"\r\n    \r\nprint (phase, ptext)<\/pre>\r\n\r\n\r\n\r\n<p>\u00a0Aus Gr\u00fcnden der Nachvollziehbarkeit und zum Debuggen habe ich die einzelnen Rechenschritte nicht zusammengefasst. Epoch ist quasi der Nullpunkt der Unix\/Linux Zeitrechnung und repr\u00e4sentiert den 1.1.1970. Die Betriebssystem internen Zeitstempel basieren auf \"Sekunden seit Epoch\". Es gilt hier immer die eingestellte Systemzeit, also nicht UTC.<\/p>\r\n<p>Einen vergangenen Vollmond k\u00f6nnt ihr f\u00fcr beliebige Orte der Welt auf der Seite <a href=\"http:\/\/mondverlauf.de\" target=\"_blank\" rel=\"noopener noreferrer\">mondverlauf.de<\/a> nachschauen.<\/p>\r\n<p>Das Abrunden auf 2 Nachkommastellen am Ende ist wichtig, da sonst nur f\u00fcr eine sehr kurze Zeit \u00fcberhaupt die konkreten Phasen Voll, Halb und Neumond ausgegeben werden.<\/p>\r\n<h2>Beleuchtete Mondoberfl\u00e4che<\/h2>\r\n<p>Will man nun ausrechnen, zu wieviel Prozent der Mond gerade beleuchtet wird, dann muss man etwas tiefer in die trigonometrische Trickkiste hinein greifen.<\/p>\r\n<h3>Etwas Mathematik<\/h3>\r\n<p>Da wir nur wissen wollen, wieviel Prozent der Mondscheibe sichtbar sind,\u00a0 m\u00fcssen wir nicht wissen, wie gro\u00df der Mond an sich ist, es reicht die Annahme, dass die Mondscheibe von der Erde aus gesehen in etwa kreisf\u00f6rmig erscheint und dass die Trennlinie zwischen Hell und Dunkel (Terminator genannt) in etwa einer halben Ellipse gleicht.\u00a0 F\u00fcr die Berechnung reicht uns daher als \"Mondmodell\" der sogenannte <a href=\"https:\/\/de.wikipedia.org\/wiki\/Einheitskreis\" target=\"_blank\" rel=\"noopener noreferrer\">Einheitskreis<\/a> mit Radius <span style=\"color: #ff0000;\">R<\/span> = 1 und eine Ellipsenformel.<\/p>\r\n<p>Ein Vollmond (entspricht 100% beleuchteter Mondoberfl\u00e4che) hat in diesem Modell eine Fl\u00e4che von<em> 1\u00b2 * <\/em>\u03c0, also 3,1416.\u00a0 Ihr erinnert euch sicher noch: Die Fl\u00e4che eines Kreises ist R\u00b2*\u03c0<\/p>\r\n<p>Die Beleuchtung f\u00fcr alle Mondphasen dazwischen (also 0% f\u00fcr Neumond und 50% f\u00fcr Halbmond) berechnen wir, indem wir vom Halbmond ausgehen und die der Mondphase entsprechende halbe Ellipsenfl\u00e4che abziehen oder addieren.<img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1134 aligncenter\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2018\/12\/phasen2.jpg\" alt=\"\" width=\"213\" height=\"228\" \/><\/p>\r\n<p>Die sichtbare Scheibe zwischen Halb und Vollmond errechnet sich aus der Fl\u00e4che des Halbkreises <strong>plus<\/strong> der halben Ellipsenfl\u00e4che.<\/p>\r\n<p>F\u00fcr eine Scheibe zwischen Neumond und Halbmond errechnen wir die Beleuchtung aus der Fl\u00e4che des Halbkreises <strong>minus<\/strong> der halben Ellipsenfl\u00e4che.<\/p>\r\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-1141\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2018\/12\/phasen1-1024x576.jpg\" alt=\"\" width=\"604\" height=\"340\" srcset=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2018\/12\/phasen1-1024x576.jpg 1024w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2018\/12\/phasen1-300x169.jpg 300w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2018\/12\/phasen1-768x432.jpg 768w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2018\/12\/phasen1.jpg 1280w\" sizes=\"auto, (max-width: 604px) 100vw, 604px\" \/><\/p>\r\n<p>Die Fl\u00e4che des Halbkreises betr\u00e4gt <em>\u03c0\/2<\/em> also 1,5716.<\/p>\r\n<p>Die Formel f\u00fcr die Fl\u00e4che der Halbellipse lautet <em>(<span style=\"color: #339966;\">s<\/span> *<span style=\"color: #ff0000;\"> R<\/span> * \u03c0)\/2<\/em><\/p>\r\n<p>Die kurze Halbachse <span style=\"color: #339966;\"><em>s<\/em><\/span> errechnet sich unter Zuhilfenahme des\u00a0 weiter oben ausgerechneten Wertes <em>phase. <br \/><\/em>F\u00fcr Werte von <em>phase<\/em> zwischen 0 bis 0.5 lautet die Formel<\/p>\r\n<p><em><span style=\"color: #339966;\">s<\/span> = cos(phase * 2 * \u03c0)<\/em><\/p>\r\n<p>f\u00fcr Werte von phase zwischen 0.5 und 0.9999<\/p>\r\n<p><em><span style=\"color: #339966;\">s<\/span> = &#8211; cos(phase * 2 * \u03c0)<\/em><\/p>\r\n<p>(Minuszeichen vor dem cosinus beachten). Haben wir die Fl\u00e4che der halben Ellipse berechnet, setzen wir das Ganze dann ins Verh\u00e4ltnis zum Vollkreis (Vollmond).<\/p>\r\n<p><strong>Ein Beispiel:<\/strong><\/p>\r\n<ul>\r\n<li>Phase ist hier 0,375 (entspricht einem abnehmenden Viertelmond)<\/li>\r\n<li>s = cos(0,375 * 2 * \u03c0) = -0,7071<\/li>\r\n<li>Fl\u00e4che der Ellipse = -0,7071 * 1 *\u00a0\u03c0\u00a0 = -2,2214<\/li>\r\n<li>davon die H\u00e4lfte = -1,1107<\/li>\r\n<li>Addiert zur Fl\u00e4che des Halbkreises = 1,5708 + (-1,1107) = 0,4601<\/li>\r\n<li>in Prozent des Vollkreises = 0,4601\/3,1416 * 100 = <strong>14,6% <\/strong>der Mondoberfl\u00e4che sind beleuchtet.<strong><br \/><\/strong><\/li>\r\n<\/ul>\r\n<h3>Python Code<\/h3>\r\n<p>Auch hier habe ich die einzelnen Rechenschritte zum besseren Verst\u00e4ndnis &#8211; und um das Debuggen zu erleichtern &#8211; nicht zusammengefasst.<\/p>\r\n<p><strong>Achtung<\/strong>: je l\u00e4nger der von euch im Code weiter oben gew\u00e4hlte Vollmondtermin\u00a0 her ist, desto ungenauer wird das Ergebnis.<\/p>\r\n<pre class=\"height-set:true height:200 lang:python decode:true\">#Beleuchtete Mondoberfl\u00e4che in Prozent auf Basis der Phase berechnen\r\nfrom math import pi, cos\r\n#Konstanten\r\nphase = 0.375                                   # Diese Zeile nur zu Testzecken\r\nhmoonA = float(pi\/2)                            # Fl\u00e4che des Einheitskreises\/2 (d.h. Radius = 1)\r\n# Rechenwerk\r\nif phase &lt; 0.5:\r\n        s = cos(phase * pi * 2)                 # Errechnung kurze Halbachse s der Ellipse\r\n        ellipse = s * 1 * pi                    # Ellipsenfl\u00e4che = Produkt der beiden Halbachsen * Pi \r\n        hEllA = ellipse \/ 2                     # halbe Ellipsenfl\u00e4che\r\n        illA = hmoonA + hEllA                   # Beleuchtete Mondoberfl\u00e4che = Halbmondfl\u00e4che plus halbe Ellipsenfl\u00e4che\r\nelse:\r\n        s = -cos(phase * pi *2)                 # Errechnung kurze Halbachse s der Ellipse\r\n        ellipse = s * 1 * pi                    # Ellipsenfl\u00e4che = Produkt der beiden Halbachsen * Pi \r\n        hEllA = ellipse \/ 2                     # halbe Ellipsenfl\u00e4che\r\n        illA = hmoonA - hEllA                   # iBeleuchtete Mondoberfl\u00e4che = Halbmondfl\u00e4che plus halbe Ellipsenfl\u00e4che\r\n\r\nillumperc =  illA \/ pi * 100                    # Beleuchtete Mondoberfl\u00e4che in % der Vollmondoberfl\u00e4che (Basis Einheitskreis mit r=1)\r\nillumperc = round(illumperc,1)\t                # auf eine Nachkommestelle abrunden\r\n# Ausgabe    \r\nprint (illumperc)<\/pre>\r\n<h3>oder beides zusammen als Subroutine<\/h3>\r\n<pre class=\"height-set:true height:200 lang:python decode:true\">#!\/usr\/bin\/python\r\n#coding=UTF-8\r\n########################\r\n# portiert auf Python3.x\r\n########################\r\n\r\nimport time \r\nfrom math import pi, cos\r\n\r\ndef moonphase(now_time):\r\n    # constants\r\n    syn_moon_month = 29.530589 \t\t\t\t\t\t# synodal length of moon cycle \r\n\r\n    # constants\r\n    hist_fullmoon = 2025,2,12,14,53,0,0,0,0 \t    # base full-moon as struct time ---&gt; adapt to most recent full-moon\r\n    moon_time = time.mktime(hist_fullmoon) \t\t\t# base full-moon - seconds since epoch \r\n    hist_fullmoon_days = moon_time\/86400 \t\t\t# base full-moon - days since epoch \r\n    now_days = now_time\/86400 \t\t\t\t\t\t# days since eval \r\n    days_since_hist_fullmoon = now_days - hist_fullmoon_days   # difference in days between base fullmoon and now \r\n    full_moons_since = days_since_hist_fullmoon\/syn_moon_month # Number of full-moons that have passed since base full-moon \r\n    phase = round(full_moons_since,2) \t\t\t\t# rounded to 2 digits \r\n    phase = (phase-int(phase))\t\t\t\t\t\t# trailing rest = % moon-phase \r\n\r\n    # calculate moon phase\r\n    if phase == 0: phase=1\r\n    if phase &lt; 0.25:\r\n        ptext=\"abnehmender Mond (drittes Viertel)\" \r\n    elif phase == 0.25:\r\n        ptext=\"abnehmender Halbmond (letztes Viertel)\" \r\n    elif 0.25 &lt; phase &lt; 0.50:\r\n        ptext=\"abnehmende Sichel\" \r\n    elif phase == 0.50:\r\n        ptext=\"Neumond\" \r\n    elif 0.50 &lt; phase &lt; 0.75:\r\n        ptext=\"zunehmende Sichel\" \r\n    elif phase == 0.75:\r\n        ptext=\"zunehmender Halbmond (erstes Viertel)\" \r\n    elif 0.75 &lt; phase &lt; 1:\r\n        ptext=\"zunehmender Mond (zweites Viertel)\" \r\n    elif phase == 1:\r\n        ptext = \"Vollmond\"\r\n        \r\n    return phase, ptext\r\n\r\ndef illumination(phase):\r\n    #constants\r\n    hmoonA = float(pi\/2)                            # area of unit circle\/2\r\n\r\n    # calculate percentage of moon illuminated\r\n    if phase &lt; 0.5:\r\n            s = cos(phase * pi * 2)\r\n            ellipse = s * 1 * pi                    # Ellipsenf\u00e4che = Produkt der beiden Halbachsen * Pi \r\n            hEllA = ellipse \/ 2                     # Ellipse Area\/2 (major half axis * minor half axis * pi)\/2\r\n            illA = hmoonA + hEllA                   # illuminated area of moon = Half moon area plus half Ellipse\r\n    else:\r\n            s = -cos(phase * pi *2)                 # minor half axis of ellipse\r\n            ellipse = s * 1 * pi\r\n            hEllA = ellipse \/ 2                     # Ellipse Area\/2 (major half axis * minor half axis)\/2\r\n            illA = hmoonA - hEllA                   # illuminated area = Half moon area minus half Ellipse Area\r\n\r\n    illumperc =  illA \/ pi * 100                    # illuminated area relative to full moon area (based on unit circle r=1)\t\r\n    illumperc = round(illumperc,1)\r\n        \r\n    return illumperc\r\n    \r\nif __name__ == '__main__':\r\n    adesso = time.mktime(time.localtime())\r\n    mtupel = moonphase(adesso)\r\n    mphase = mtupel[0]\r\n    mphase_text = mtupel[1]\r\n    millum = illumination(mtupel[0])\r\n    print (\"Phase numerisch: %1.2f, Mondphase: %s, beleuchtete Oberfl\u00e4che %1.1f%%\" % (mphase, mphase_text, millum))<\/pre>\r\n<p>Wird das Programm direkt aufgerufen, gibt es die aktuelle Mondphase numerisch und in Textform sowie die beleuchtete Mondoberfl\u00e4che aus.<\/p>\r\n<p>Das Programm (ich habe es <em>mond.py <\/em>genannt) kann in andere Programme mit<\/p>\r\n<pre class=\"lang:default decode:1 inline:1 \">import mond<\/pre>\r\n<p>(ohne .py am Ende) eingebunden werden. Aufgerufen wird es folgenderma\u00dfen:<\/p>\r\n<pre class=\"lang:python decode:true  \">import time\r\nimport mond #oder wie immer du dein Prog nennst\r\n\r\n# calculate moon phase and illumination\r\njetzt = time.mktime(act_time)               # Aktuelle Zeit\r\nmtupel = mond.moonphase(jetzt)              # mond.mondphase(UnixZeitstempel) gibt ein Tupel aus: Element 0 = phase; Element 1 = Phasentext     \r\nmphase = mtupel[1]                          # Phase als Text   \r\nmillum = mond.illumination(mtupel[0])       # mond.illumination(phase) gibt die beleuchtete Oberfl\u00e4che aus<\/pre>\r\n<h4>Quellen:<\/h4>\r\n<p>Als sehr hilfreich zum Verst\u00e4ndnis haben folgende Webseiten erwiesen:<\/p>\r\n<p><a href=\"http:\/\/www.mondverlauf.de\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/www.Mondverlauf.de<\/a> <br \/><a href=\"http:\/\/avila.star-shine.ch\/astro\/berechnungen.html\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/avila.star-shine.ch\/astro\/berechnungen.html<\/a><\/p>\r\n<p>&nbsp;<\/p>\r\n<p>&nbsp;<\/p>\r\n","protected":false},"excerpt":{"rendered":"<p>Mondphase berechnen Eigentlich ganz einfach, wenn man ein genaues und nicht zu lange in der Vergangenheit liegendes\u00a0 Vollmonddatum kennt. Man rechnet dann die Zeit seitdem bis heute aus und teilt das Ergebnis durch die Zeit, die zwischen zwei Neumondereignissen vergeht. Von diese Ergebnis verwenden wir nur den Teil hinter dem Komma und haben so die &hellip; <a href=\"https:\/\/www.rustimation.eu\/index.php\/mondphase-und-beleuchtung-ausrechnen\/\" class=\"more-link\"><span class=\"screen-reader-text\">Mondphase und -beleuchtung ausrechnen<\/span> weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,9],"tags":[30,55,34],"class_list":["post-1081","post","type-post","status-publish","format-standard","hentry","category-allgemein","category-python","tag-mondphasen","tag-programmieren","tag-python-2"],"_links":{"self":[{"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/posts\/1081","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/comments?post=1081"}],"version-history":[{"count":1,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/posts\/1081\/revisions"}],"predecessor-version":[{"id":3356,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/posts\/1081\/revisions\/3356"}],"wp:attachment":[{"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/media?parent=1081"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/categories?post=1081"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/tags?post=1081"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}