Ich baue ein Gerät als Geschenk für meine Freundin.
Damit dieses Gerät funktioniert, muss ich in der Lage sein, den Winkel zu berechnen, in den ich schauen sollte (3D-Winkel), um den Mond zu sehen.
Dieser Winkel wird beeinflusst von (und vielleicht nicht nur):
Die Jahreszeit.
Die Stunde.
Der Ort auf der Erde, von dem aus ich schaue.
Ich bin sicher, es gibt eine Formel, die den Winkel annähert.
Ich brauche keinen genauen Wert, ich kann mit +-1 Grad leben.
Für eine einmalige Berechnung wäre die einfachste Lösung die Verwendung einer Planetariumssoftware, wie z. B. Stellarium.
Für eine Programmierlösung ist ein Python-Paket wie pyephem eine effiziente Möglichkeit, die Position des Mondes mehrmals zu berechnen, so dass sie in eine Tabellenkalkulation importiert werden kann.
Die scheinbare Bewegung des Mondes ist komplexer als Sie vielleicht denken. Der Mond bewegt sich aufgrund der Rotation der Erde um etwa 15 Grad pro Stunde. Aber zu dieser ziemlich einfachen Bewegung kommt noch die tatsächliche Umlaufbahn des Mondes um die Erde, die elliptisch ist (und daher ist diese Bewegung nicht gleichmäßig, der Mond bewegt sich schneller, wenn er sich der Erde nähert) und die Position und Neigung der Umlaufbahn ist von der Sonne gestört. Die Störungen sind ziemlich regelmäßig und können berechnet werden, aber diese Effekte (Rotation der Erde, Umlaufbahn des Mondes, Exzentrizität der Umlaufbahn, Störung der Umlaufbahn) machen zusammen die eigentliche Berechnung komplexer als "eine Formel". kann problemlos in eine Tabellenkalkulation passen, weshalb ein Paket wie pyephem empfohlen wird.
In dieser Antwort erwähne ich eine Quelle, in der eine praktische Formel für das ungefähre Verhalten von Himmelsobjekten zu finden ist.
Astronomische Algorithmen von Jean Meeus
Ich habe persönlich keine Kopie, daher kann ich nicht überprüfen, ob genau das, was Sie brauchen, dort zu finden ist oder nicht, aber dieses PDF mit einer kleinen Teilmenge von Seiten aus der vierten Ausgabe enthält das Inhaltsverzeichnis, das Folgendes enthält:
30. Position of the moon....................... 147
31. Illuminated Fraction of the Moon’s Disk.... 155
32. Phases of the Moon......................... 159
Es besteht also eine gute Chance, dass auf diesen sieben oder acht Seiten für Kapitel 30 genau das enthalten ist, wonach Sie suchen.
Ich denke, die von Ihnen erwähnten "3D-Winkel" wären nur Höhe (oder Höhenwinkel) und Azimut. Der erste ist der Winkel über (oder unter) dem Horizont, und der zweite ist wie die "Kompassrichtung", außer dass er beim wahren Norden beginnt, nicht beim magnetischen Norden, also nur 2D.
Wenn Sie mit Python, einer der einfachsten Computersprachen, vertraut sind, gibt es ein Paket namens Skyfield . Ich glaube, Sie sollten es zum Beispiel auf einem Raspberry Pi zum Laufen bringen können, wenn Ihre Kreation elektromechanisch ist. Das Paket ist sehr präzise, so dass es im Allgemeinen eine Verbindung zum Internet benötigt, um "Sachen zu überprüfen", was manchmal etwas frustrierend ist.
Sie können auch eine Tabelle für Ihren Standort berechnen, diese dann speichern und zum Ausführen eines kleinen Computers oder Controllers verwenden, falls Sie einen verwenden.
GREEN = Moon (being made of green Cheese of course)
YELLOW = Sun
import numpy as np
import matplotlib.pyplot as plt
from skyfield.api import Loader, Topos
halfpi, pi, twopi = [f*np.pi for f in 0.5, 1, 2]
degs, rads = 180/pi, pi/180
load = Loader('~/Documents/fishing/SkyData')
data = load('de421.bsp')
ts = load.timescale()
de421 = load('de421.bsp')
earth = de421['earth']
sun = de421['sun']
moon = de421['moon']
Haifa = earth + Topos(32.82, 34.98)
minutes = np.arange(60*24)
times = ts.utc(2018, 9, 24, 0, minutes)
salt, saz, sd = Haifa.at(times).observe(sun).apparent().altaz()
malt, maz, md = Haifa.at(times).observe(moon).apparent().altaz()
saltr, sazr, maltr, mazr = [x.radians for x in (salt, saz, malt, maz)]
sr, mr = [1. - x/halfpi for x in (saltr, maltr)]
sx, sy = [sr * f(sazr) for f in (np.sin, np.cos)]
mx, my = [mr * f(mazr) for f in (np.sin, np.cos)]
theta = np.linspace(0, twopi, 201)
xc, yc = [f(theta) for f in (np.cos, np.sin)]
if True:
plt.figure()
plt.plot(sx, sy, '-y')
plt.plot(mx, my, '-g')
plt.plot(xc, yc, '-k', linewidth=2)
plt.plot([0], [0], 'ok')
plt.xlim(-1.8, 1.8)
plt.ylim(-1.8, 1.8)
plt.text(-0.15, 0.1, 'Zenith', fontsize=16)
plt.text(-0.02, 1.04, 'N', fontsize=16)
#plt.text(-1.6, 1.0, 'North is up', fontsize=16)
plt.show()
saltd, sazd, maltd, mazd = [x.degrees for x in (salt, saz, malt, maz)]
mbreaks = np.where(np.abs(mazd[1:]-mazd[:-1] < 0))
sbreaks = np.where(np.abs(sazd[1:]-sazd[:-1] < 0))
saltd, sazd, maltd, mazd = [x[:-1] for x in (saltd, sazd, maltd, mazd)]
sazd[sbreaks] = np.nan
mazd[mbreaks] = np.nan
if True:
plt.figure()
plt.plot(sazd, saltd, '-y')
plt.plot(mazd, maltd, '-g')
plt.plot([0, 360], [0, 0], '-k')
plt.xlabel('azimuth (degs)', fontsize=18)
plt.ylabel('altitude/elevation (degs)', fontsize=18)
plt.xlim(0, 360)
plt.show()
if True:
plt.figure()
hours = minutes[:-1]/60.
plt.subplot(2, 1, 1)
plt.plot(hours, sazd, '-y')
plt.plot(hours, mazd, '-g')
# plt.xlabel('UTC hours', fontsize=16)
plt.ylabel('azimuth (degs)', fontsize=16)
plt.subplot(2, 1, 2)
plt.plot(hours, saltd, '-y')
plt.plot(hours, maltd, '-g')
plt.xlabel('UTC hours', fontsize=16)
plt.ylabel('altitude/elevation (degs)', fontsize=16)
plt.suptitle("Haifa 24/9/2018", fontsize=16)
plt.show()
Lukian
Jakob K
Benutzer21
Gülzar
Gülzar
BenutzerLTK
John Holtz
Benutzer1569