Startseite
| Programme:
Sofi- Zentrallinie
| Algorithmen,
Lektionen, Analysen
|
Unsere Vorläufer
| Kontakt, Datenschutz
Die Berechnung erfolgt minütlich. Vor Benutzung müssen die sog. Bessel-Elemente der gewünschten Finsternis eingesetzt werden.
Geographische Koordinaten werden astronomisch richtig ausgegebe, also Ost = negativ. Das ist umgekehrt zur Google-Maps-Anzeige.
# sofiBessel2 : Zentrallinie einer Sonnenfinsternis
# Meeus, Elements of solar eclipses §13
# Besselsche Elemente
# yr=2026; mnt=8; day=12
T0 = 18
x = [ 0.4755140, 0.5189249, -0.0000773, -0.0000080]
y = [ 0.7711830, -0.2301680, -0.0001246, 0.0000038]
d = [ 14.7966700, -0.0120650, -0.0000030, 0.0]
l1 = [ 0.5379550, 0.0000939, -0.0000121, 0.0]
l2 = [ -0.0081420, 0.0000935, -0.0000121, 0.0]
u = [ 88.7477900, 15.0030900, 0.0000000, 0.0]
tanf1 = 0.0046141
tanf2 = 0.0045911
from math import *
# Winkelfunktionen in Gradmaß, wie im Meeus
def Sin(w): return sin(pi * w / 180)
def Cos(w): return cos(pi * w / 180)
def Tan(w): return tan(pi * w / 180)
def Atan2(y, x): return 180 * atan2(y, x) / pi
def Asin(x): return 180 * asin(x) / pi
def Acos(x): return 180 * acos(x) / pi
def Atan(x): return 180 * atan(x) / pi
def sq(x): return x*x
def solveQuadrant(sinX,cosX):
if (sinX>=0 and cosX>=0): return Asin(sinX);
if (sinX<0 and cosX>=0): return Asin(sinX);
if (sinX<0 and cosX<0): return -Acos(cosX);
if (sinX>=0 and cosX<0): return Acos(cosX);
def calcEclipse(t):
# Koordinaten zum Zeitpunkt
X = 0
Y = 0
D = 0
L1 = 0
L2 = 0
M = 0
for j in range(3, -1, -1):
X = X * t + x[j] # die Koordinaten
Y = Y * t + y[j]
D = D * t + d[j] # Deklination ...
M = M * t + u[j] # ... und Stundenwinkel im orstfesten Äquatorsystem
L1 = L1 * t + l1[j] # die Radien der Schattenkegel, Halbschatten ...
L2 = L2 * t + l2[j] # ... und Kernschatten
# die Ableitungen / Veränderungen des Ortes i.f. Fundamental-E.
XS = x[1] + 2 * x[2] * t + 3 * x[3] * t * t
YS = y[1] + 2 * y[2] * t + 3 * y[3] * t * t
cd = Cos(D)
w = 1.0 / (sqrt(1 - 0.006694385 * cd * cd))
p = u[1] / 57.2957795
b = YS - p * X * Sin(D)
c = XS + p * Y * Sin(D)
y1 = w * Y
b1 = w * Sin(D)
b2 = 0.99664719 * w * Cos(D)
if 1 - X * X - y1 * y1 < 0:
return
B = sqrt(1 - X * X - y1 * y1)
phi1 = Asin(B * b1 + y1 * b2)
# von Greg Miller
sinH=X / Cos(phi1)
cosH=(B * b2 - y1 * b1) / Cos(phi1)
H=solveQuadrant(sinH, cosH)
# Berechnung der topozentrischen Koordinaten der Schattenachse = Zentral-Linie
phi = Atan(1.00336409 * Tan(phi1))
Lambda = M - H - 0.00417807 * dt # dt in Sekunden
# Berechnung des Totalitätsstreifens und der Dauer der Finsternis im Zentrum
L2S = L2 - B * tanf2 # l2S negativ: Ringförmig
typ="r"
if L2S<0:
typ="t"
a = c - p * B * Cos(D)
n2 = a * a + b * b
if n2 < 0:
n = -777 # kein n
dauer = -777 # keine Dauer
else:
n=sqrt(n2)
dauer = abs(7200 * L2S / n)
sinh = Sin(D) * Sin(phi) + Cos(D) * Cos(phi) * Cos(H)
h = Asin(sinh)
K2 = B * B + (X * a + Y * b) * (X * a + Y * b) / (n * n)
K = sqrt(K2)
pfadbreite = 12756 * abs(L2S) / K
# Berechnung der Breite der scheinbaren Größe des Mondes (in Sonnendurchmessern)
L1S=l1[0]+l1[1]*t+l2[2]*t*t-B*tanf1
A = (L1S - L2S) / (L1S + L2S)
if Lambda>360:
Lambda=Lambda-360
if (Lambda>180):
Lambda=Lambda-360
print("%3.0f %8.4f %8.4f %3.0f %4.1f %5.1f %5.3f %s" %
(t*60.0, Lambda, phi, dauer, h, pfadbreite, A, typ))
# Main
# ====
# für jede Minute 1h vor bis 2 h nach der Referenzstunde 10.00 h UT
dt = 0 # Abweichung TD-UT. Ich rechne hier in TD (34)
print("Zeit Lambda phi Dauer Hohe Pfad Monddurchm. Typ")
print(" °,<0:O °,+:N s ° (km) ")
print("---------------------------------------------------------------")
for i in range(-120, 120, 1): # von 2h vor bis 2h nach der Referenzzeit in 10-min-Schritten
t = i/60.0 # Zeit in Stunden
calcEclipse(t)
print("Maximum:")
calcEclipse(21/60.0+8/3600.0)
# Prompt am Ende
ende = input("Fertig.")
Uwe Pilz, Februar 2025