PHP Gezeiten berechnen | Ebbe und Flut | Teil 2

In Teil 1 haben wir mittels gmmktime() timestamps sämtlicher Mondphasen für 2014 erzeugt und in einer Datenbank abgelegt. Wir nähern uns langsam dem PHP Gezeiten Rechner, auch wenn man dieses Kapitel alternativ mit „Wiederholung trigonometrischer Funktionen“ hätte überschreiben können…

Wie man aus unserer Monddatenbank leicht errechnen kann, lagen zwischen dem 1. und 2. Vollmond 2014 genau (!) 2574060 Sekunden (oder 29.7923611111 Tage) also rund 6.28 Stunden mehr als der Mittelwert unserer ersten Näherung.

Dies kann man als trigonometrische Funktion darstellen. Ich habe mich für den Cosinus entschieden.

Man erinnert sich an die Schulzeit y=cos(x). Mit einigen Modifikationen was Amplitude und Frequenz angeht landen wir bei:

1) y=0.5*cos(2pi/29.7923611111x)+0.5

cos_mondphasen

x ist hierbei die Anzahl der Tage seit dem letzen Vollmond, wenn x=14 ist, ist gerade Neumond, bei x=7 befinden wir uns im „letzten Viertel“ etc.

Wir brauchen noch weitere periodische Funktionen, mit deren Hilfe unser PHP-Script dann später die Berechnung von Ebbe und Flut vornehmen kann. Beim BSH erfährt man, dass zwischen 2 Hochwassern im Durchschnitt (Achtung Näherung!) 12h und 25 min liegen. Das entspricht 0.51736 Tagen. Wir brauchen also eine Funktion die mit einer Periodizität von eben diesen 0.51736 Tagen oszilliert (von einem (Funktions-)Wellenberg zum nächsten soll es also nicht 2pi sondern 0.51736 dauern).

y=cos(2pi/0.51736x)

Diese Funktion hat die gewünschte Periodizität, die Amplitude beträgt jedoch 1. Angenommen das letzte Hochwasser lag bei 5 Metern und das letzte Niedrigwasser bei 1 Meter, dann bräuchten wir eine Funktion, die um den Mittelwert 3 Meter oszilliert und im oberen Extremfall den Wert 5, im unteren Extremfall den Wert 1 zurück liefert:

y=2*cos(2pi/0.51736x)+1+2

Diese Funktion schwankt mit der gewünschten Periodizität und Amplitude:

cos_tidenhub

Verallgemeinert kann man schreiben:

2) y=(HW-NW)/2*cos(2pi/0.51736x)+1+(HW-NW)/2

Hier ist x Anzahl Tage seit dem letzten Hochwasser, wenn seither 0.51736 Tage vergangen sind, gibt es wieder einen neuen Wellenberg (nächstes Hochwasser). Wenn seither nur 0.25868 Tage vergangen sind haben wir gerade Niedrigwasser…

Die letzte periodische Funktion die wir brauchen, berücksichtigt den Einfluss der Sonne. Stehen Sonne, Erde und Mond in einer Linie (also immer bei Vollmond und Neumond) sind die Gezeiten besonders stark ausgeprägt (der Seemann spricht von Springzeit). Stehen Sonne und Mond von der Erde aus betrachtet im rechten Winkel zueinander, sind die Gezeiten relativ schwach (der Wassersportler spricht von Nippzeit), da der Einfluss der Sonne dem (stärkeren) Einfluss des Mondes entgegen wirkt.

Angenommen wir werten den Einfluss des Mondes auf die Gezeiten mit 100 Punkten. Der Einfluss der Sonne beträgt (Achtung Näherung!) 44% des Einflusses des Mondes, wird also mit 44 Punkten bewertet. Ziehen Sonne und Mond nun also am gleichen Strang (verstärken sich also) erhalten wir einen Gesamteffekt von 144 Punkten. Stehen Sonne und Mond im rechten Winkel zueinander muss die Wirkung der Sonne von der Wirkung des Mondes abgezogen werden. Der Gesamteffekt beträgt dann 100-44=56 Punkte. Wir brauchen also eine Funktion. die zwischen 1.44 und 0.56 oszilliert:

y=(1.44-0.56)/2*cos(2pi/x)+0.56+(1.44-0.56)/2

Wir brauchen eine Periodizität von 29.7923611111/2 also 14.8961805555 Tagen

y=(1.44-0.56)/2*cos(2pi/14.8961805555x)+0.56+(1.44-0.56)/2

Da sich die Werte 1.44 und 0.56 als genäherte Naturkonstanten nicht ändern, können wir vereinfachen:

3) y=0.44*cos(2pi/14.8961805555x)+1 

cos_zusammenspiel_sonne_und_mond

Hier ist x der Tag nach dem letzten extremen Mondereignis, also 3 wenn gerade 3 Tage nach Neumond ist oder 6 wenn 6 Tage nach Vollmond ist.

Wir haben also nun 3 trigonometrische Funktionen die die Gezeitenphänomene näherungsweise beschreiben.

Im nächsten Kapitel basteln wir aus diesen Funktionen ein PHP Skript, dass uns die Rechenarbeit abnimmt. Mein Plan ist dem Skript als Benutzereingabe folgende Daten zu liefern (z.B. über ein Formular):

  • Datum, Uhrzeit des letzten Hoch- und Niedrigwassers
  • Extrem Hoch und Niedrigwasserdaten

Anhand dieser Angaben soll das Skript zunächst (durch Vergleich mit unserer „Vollmond-Datenbank“) ermitteln, in welcher Mondphase diese Daten zustande kamen und anschliessend Wasserstände und Uhrzeiten der nächsten Ebbe und Flut berechnen.

Ein Gedanke zu „PHP Gezeiten berechnen | Ebbe und Flut | Teil 2

  1. Pingback: PHP Gezeiten, Ebbe und Flut berechnen, Skript

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.