Mondphasen Script gesucht ...

Mahlzeit :wink:

Ich bastle gerade wieder ein Wetterscript zusammen und möchte dort gerne die Mondphasen mit darstellen. Irgendwer hatte das doch mal in seinem Designerprojekt dargestellt!? Leider habe ich den Thread nicht wiedergefunden. Gibt es das schon für die V2 ?

Ich habe Grafiken dafür gefunden … allerdings 362 Stk :wink: http://www.avgoe.de/Himmel/img/Mond362.gif
Man ersetze einfach die Zahl und nehme 1 - 362 .

Gruß
Jens

Hallo,

hier währe schon mal ein Anfang:
Calculating the Moon Phase

Andernfalls mal bei Google suchen nach php und „moon phase“

Schöne Grüße
Thomas

Hallo Thomas,

danke für den Tip!
So etwas fin der Art findet man öfter, ich würde aber schon gern die 362 Grafiken nutzen :smiley: … und nicht nur 8. :wink:

Prinzipiell gibt es ja Scripte, die die aktuelle Beleuchtete Fläche darstellen. Daraus müßte man doch etwas basteln können, das je nach % eine passende Grafik berechnet, oder nicht?
Los geht es mit Neumond bei Grafik 000, Vollmond müßte dann bei 181/182 sein und dann wieder abnehmender Mond bis 362.

Gruß
Jens

Hallo,

ich setzte in meinem Designerprojekt eine Berechnungsroutine ein, die die aktuelle Mondphase recht simpel berechnet. Das Ergebnis wird dann bei mir auf 25 Mondphasenbilder umgesetzt.

Die Berechnung erfolgt mit folgenden Funktionen:

// Berechnet die aktuelle Mondphase. Ein kompletter Mondzyklus (Vollmond - Neumond - Vollmond) wird in 25
// Abschnitte unterteilt. Der Rückgabewert hat also folgende Bedeutung:
// 01  = Vollmond, 02 bis 12 = abnehmender Mond, 13 = Neumond, 14 bis 24 = zunehmender Mond, 25 = Vollmond
function GetMoonPhase($akt_datum) {
   
   $vollmond_datum = mktime(12, 55, 25, 1, 22, 1970);              // Referenzzeitpunkt eines Vollmondereignisses (22.01.1970 12:55:25)
   $zyklusdauer    = (29 * 86400) + (12 * 3600) + (44 * 60) + 2.8; // Länge eines Mond-Zyklus (29 Tage, 12 Std, 44 Min, 2.8 Sek)
   $mondzeit       = ($akt_datum - $vollmond_datum) / $zyklusdauer;

   //Nachkommastellen extrahieren
   $mondphase = ($mondzeit - (int)$mondzeit);

   // Die Mondphase in 25 Abschnitte aufteilen und die Abschnittsnummer zurückliefern.
   if     ($mondphase <= (1 / 25) *  1) $abschnitt = 1;
   elseif ($mondphase <= (1 / 25) *  2) $abschnitt = 2;
   elseif ($mondphase <= (1 / 25) *  3) $abschnitt = 3;
   elseif ($mondphase <= (1 / 25) *  4) $abschnitt = 4;
   elseif ($mondphase <= (1 / 25) *  5) $abschnitt = 5;
   elseif ($mondphase <= (1 / 25) *  6) $abschnitt = 6;
   elseif ($mondphase <= (1 / 25) *  7) $abschnitt = 7;
   elseif ($mondphase <= (1 / 25) *  8) $abschnitt = 8;
   elseif ($mondphase <= (1 / 25) *  9) $abschnitt = 9;
   elseif ($mondphase <= (1 / 25) * 10) $abschnitt = 10;
   elseif ($mondphase <= (1 / 25) * 11) $abschnitt = 11;
   elseif ($mondphase <= (1 / 25) * 12) $abschnitt = 12;
   elseif ($mondphase <= (1 / 25) * 13) $abschnitt = 13;
   elseif ($mondphase <= (1 / 25) * 14) $abschnitt = 14;
   elseif ($mondphase <= (1 / 25) * 15) $abschnitt = 15;
   elseif ($mondphase <= (1 / 25) * 16) $abschnitt = 16;
   elseif ($mondphase <= (1 / 25) * 17) $abschnitt = 17;
   elseif ($mondphase <= (1 / 25) * 18) $abschnitt = 18;
   elseif ($mondphase <= (1 / 25) * 19) $abschnitt = 19;
   elseif ($mondphase <= (1 / 25) * 20) $abschnitt = 20;
   elseif ($mondphase <= (1 / 25) * 21) $abschnitt = 21;
   elseif ($mondphase <= (1 / 25) * 22) $abschnitt = 22;
   elseif ($mondphase <= (1 / 25) * 23) $abschnitt = 23;
   elseif ($mondphase <= (1 / 25) * 24) $abschnitt = 24;
   else $abschnitt = 25;

   return $abschnitt;
}

Die 25 Bilder zur Mondphasendarstellung habe ich mal als ZIP angehängt.

moon.zip (352 KB)

Hallo Thorsten,

ne schöne Lösung und vielen Dank fürs posten!
Warum hast du nur 25 Bilder gewählt, wenn die Durchschnittliche Mondphase 29,5 Tage dauert? :confused:

Das zu ändern ist ja kein Problem … interessiert mich nur :wink:

Jens

Hallo,

dann hätte ich noch eine Lösung mit 100 Stufen:p
Andromeda - Das junge Beobachterforum - Einzelnen Beitrag anzeigen - Aktuelle Mondphase

Wer bietet mehr?:smiley:

Schöne Grüße
Thomas

Der Link zum Code geht nicht. Sollte er bei anderen auch nicht gehen, wird der Link gelöscht.

Hallo,

also meine Links funktionieren, gerade mal drauf geklicht.
Probiert mit IE 7 und Firefox 3
Schöne Grüße
Thomas

Na ja, der Link führt zu einem Posting, aber da wird auch nur von „Achteln“ geschrieben … letztendlich sind es 17 Bilder, wenn man den Thread ganz an sieht … wie kommst du auf 100 ?? Wenn man nur die Nachkommastellen betrachtet: 00 - 99?

Der Link in dem Posting zum Prototypen führt allerdings ins Nichts :cool:

Hallo,

wichtig ist nur das script, den Protoyp braucht man sich nicht ansehen, zu den 100, man braucht nur die Nachkommerstellen, die Nachkommerstellen geben die Mondphase an.
Durfte aber beim näheren betrachten das gleiche Prinzip wie in dem Script von bruns8234 sein.

Schöne Grüße
ThomasD

Hallo Thorsten,

was hast Du Dir denn bei dieser elend langen if…elsif…else - Kette gedacht? :confused:

eine simpler Einzeiler tut es doch auch ;):

$abschnitt = (int)($mondphase*25) + 1;

Gruß
HJH

Hallo,

so, ich habe ein wenig Programmiert und es ist folgendes bei raus gekommen:

<?
   $akt_datum = time();
   $vollmond_datum = mktime(16, 56, 00, 4, 9, 2009);              // Referenzzeitpunkt eines Vollmondereignisses (09.04.2009 16:56:00)
   $zyklusdauer    = (29 * 86400) + (12 * 3600) + (44 * 60) + 2.8; // Länge eines Mond-Zyklus (29 Tage, 12 Std, 44 Min, 2.8 Sek)
   $mondzeit       = ($akt_datum - $vollmond_datum) / $zyklusdauer;
   $mondphase = (($mondzeit - (int)$mondzeit) * 100);
   $mond362 = $mondphase * 3.62;
   $mond362 = (int) $mond362;
   if ($mond362 < "100")
   {
   $mond_pic = "0" . $mond362;
   }
   else
   {
   $mond_pic = $mond362;
   }
   $path = "<IMG SRC = \"http://www.avgoe.de/Himmel/img/Mond".$mond_pic.".gif\">";
   echo $path;
?>

Das Script auf einen Webserver ausgeführt Zeigt das entsprechende Bild an.
Währe nur noch die Frage ob die Bilder auch öffentlich verwendet werden dürfen oder Urheberrechtlich Geschütz sind.

Schöne Grüße
Thomas

Fein Thomas und das alles fürs media Verzeichnis und das Dashboard.


$akt_datum = time();
$vollmond_datum = mktime(16, 56, 00, 4, 9, 2009);              // Referenzzeitpunkt eines Vollmondereignisses (09.04.2009 16:56:00)
$zyklusdauer    = (29 * 86400) + (12 * 3600) + (44 * 60) + 2.8; // Länge eines Mond-Zyklus (29 Tage, 12 Std, 44 Min, 2.8 Sek)
$mondzeit       = ($akt_datum - $vollmond_datum) / $zyklusdauer;
$mondphase = (($mondzeit - (int)$mondzeit) * 100);
$mond362 = $mondphase * 3.62;
$mond362 = (int) $mond362;
if ($mond362 < "100")
{
   $mond_pic = "0" . $mond362;
}
else
{
   $mond_pic = $mond362;
}
   
$remoteImage = "http://www.avgoe.de/Himmel/img/Mond" . $mond_pic . ".gif";
$localImage  = IPS_GetKernelDir()."media\\mondphase.gif";

$content = @file_get_contents($remoteImage);
if((strpos($http_response_header[0], "200") === false))
{
   //nix machen
}
else
{
   file_put_contents( $localImage, $content );
}


Hallo,

für das Skript jetzt noch ein wenig zu vollenden, und autark laufen zu lassen hab ich die Bilder runtergeladen und auf Rapidshare hochgeladen, da es über 3MB hat und hier das zugehörige Skript;

Rapidsharelink für Mondbildern

$akt_datum = time();
$vollmond_datum = mktime(16, 56, 00, 4, 9, 2009);              // Referenzzeitpunkt eines Vollmondereignisses (09.04.2009 16:56:00)
$zyklusdauer    = (29 * 86400) + (12 * 3600) + (44 * 60) + 2.8; // Länge eines Mond-Zyklus (29 Tage, 12 Std, 44 Min, 2.8 Sek)
$mondzeit       = ($akt_datum - $vollmond_datum) / $zyklusdauer;
$mondphase = (($mondzeit - (int)$mondzeit) * 100);
$mond362 = $mondphase * 3.62;
$mond362 = (int) $mond362;
if ($mond362 < "100")
{
   $mond_pic = "0" . $mond362;
}
else
{
   $mond_pic = $mond362;
}

$remoteImage = IPS_GetKernelDir()."Bilder_Sounds\\mond\\mond" . $mond_pic . ".gif"; // in diesem Ordner ausserhalb des Media Ordners liegen alle Mondbilder.
$localImage  = IPS_GetKernelDir()."media\\mondphase.gif"; // Hier wird das Bild in den Media Ordner von IPS kopiert.

copy ("$remoteImage", "$localImage");

Gruß
Boris

Hallo

da der Download von Rapidshare nicht gerade „direkt“ klappt, habe ich mir die Freiheit genommen und das Zip-File auf meinem Webspace zur verfügung gestellt:

Mondphasenbilder

Viel Vergnügen noch…

@HJH:
Naja, warum einfach wenn es kompliziert geht :rolleyes:
Muss schon ziemlich spät gewesen sein als ich das „zusammengetippt“ habe…

Hallo zusammen,

wenn ich das Script jetzt so laufen lasse, bekomme ich einen „Mond205.gif“, und das ist nahezu ein Vollmond - heute ist aber Neumond.

Bedeutet das, daß jetzt am Tag ein unsichtbarer Vollmond ist und nachts das Script einen Neumond errechnen wird, oder liegt ein Berechnungsfehler vor?

Gruss NBA

Also da würde ich sagen es liegt ein Fehler vor … der nächste Vollmond ist am 09.05. und Neumond war vor einem Tag.
Allerdings benutze ich nicht nicht mehr dieses Script, daher kann ich das nicht nachvollziehen …
Mein Script ergibt im Moment Bildnummer 14.
Ich galube das hängt damit zusammen, dass die Reihenfolge der Bilder beim ursprünglichen Script anders ist als bei dem mit den 362 Bildern.

Gruß
Jens

Hallo,

die Berechnung stimmt, aber die Bilder stimmen nicht, mal sehen was man da machen kann, werde ich mir mal ansehen.

Schöne Grüße
Thomas

Hallo,

der Mittelteil des Scriptes sollte so geändert werden, dann sollte es funktionieren, vielleicht währe es aber einfacher die Nummerierung der Bilder zu ändern.

   <?
   $akt_datum = time();
   $vollmond_datum = mktime(16, 56, 00, 4, 9, 2009);              // Referenzzeitpunkt eines Vollmondereignisses (09.04.2009 16:56:00)
   $zyklusdauer    = (29 * 86400) + (12 * 3600) + (44 * 60) + 2.8; // Länge eines Mond-Zyklus (29 Tage, 12 Std, 44 Min, 2.8 Sek)
   $mondzeit       = ($akt_datum - $vollmond_datum) / $zyklusdauer;
   $mondphase = (($mondzeit - (int)$mondzeit) * 100);
              if($mondphase < "50")
              {
              $mond362 = ($mondphase + 50) * 3.62;
              }
           else
              {
              $mond362 = ($mondphase - 50) * 3.62;
              }
   $mond362 = (int) $mond362;
   if ($mond362 < "100")
   {
   $mond_pic = "0" . $mond362;
   }
   else
   {
   $mond_pic = $mond362;
   }
   $path = "<IMG SRC = \"http://www.avgoe.de/Himmel/img/Mond".$mond_pic.".gif\">";
   echo $path;
?>

Schöne Grüße
Thomas

Hallo,

ich habe noch mal eine neue Variante, diese ist kürzer und ich hoffe auch genauer, weil erstens nicht so oft abgerundet wird und zweitens die round Funktion benutzt wird.
Geändert ist noch, ich fange beim Neumond an zu zählen und nicht mehr bei Vollmond.
Probiert es mal aus und sagt wenn was nicht stimmt.

   <?
   $akt_datum = time();
   $neumond_datum = mktime(5, 23, 00, 4, 25, 2009);             // Referenzzeitpunkt eines Neumondereignisses (25.04.2009 5:23:00)
   $zyklusdauer    = (29 * 86400) + (12 * 3600) + (44 * 60) + 2.8; // Länge eines Mond-Zyklus (29 Tage, 12 Std, 44 Min, 2.8 Sek)
	$mondzeit       = ($akt_datum - $neumond_datum) * 362 / $zyklusdauer;
   $mond362 = round($mondzeit);
   if ($mond362 < "100")
   {
   $mond_pic = "0" . $mond362;
   }
   else
   {
   $mond_pic = $mond362;
   }
   $path = "<IMG SRC = \"http://www.avgoe.de/Himmel/img/Mond".$mond_pic.".gif\">";
   echo $path;
?>

Schöne Grüße
Thomas