Raumcon
Astronomie => Fragen und Antworten: Astronomie => Thema gestartet von: Michael Strom am 10. April 2022, 07:49:15
-
Hallo,
ich bin hier neu im Forum und benötige eure Hilfe. Für meine Datenbankprogrammierung benötige ich noch eine Formel zur Berechnung der Sonnenhöhe in Winkel °.
Gegeben sind Längen- und Breitengrad -> 53.31554440960771, 8.478625842690969 (Brake), sowie Datum und Uhrzeit.
Ich wäre für eine komplette Formel, wo ich die gegebenen Daten nur eintragen muss, sehr dankbar.
Vielleicht kann mir hier jemand helfen?
Gruß Michael
-
Hallo Michael,
hmm - Du gibst Längen- und Breitengrad von Brake mit einer Genauigkeit von 14 Stellen hinter dem Komma an; ist das die Genauigkeit, die Dir bei den Ergebnissen vorschwebt ? Dann müsstest Du eine Reihe von Effekten mit berücksichtigen ( Abweichung der Form der Erde von der idealen Kugelgestalt; jahreszeitliche Schwankung des Abstands Sonne-Erde/Exzentrizität der Erdbahn u.s.w.) oder: wie willst Du zB mit der Zeitumstellung (Sommerzeit/Winterzeit) umgehen ?
Ansonsten: Gugel ist Dein Freund: kurze Suche ergab folgenden Link auf Sonnenhöhenberechnung per Tabellenkalkulation mit allen zugehörigen Formeln:
http://www.geoastro.de/SME/tk/index.htm (http://www.geoastro.de/SME/tk/index.htm)
"Sonnenhoehe mit Tabellenkalkulation - Physik und Astronomie
Berechnung von Sonnenhoehe und Azimut mit Tabellenkalkulation (Excel)"
Mod: passt wohl eher in "Fragen und Antworten: Astronomie" als hierher ?
-
Auf diesen Seiten war ich bereits dank Google. Ich bin zu folgendem Resultat gekommen:
'Quelle: http://www.geoastro.de/SME/tk/index.htm (http://www.geoastro.de/SME/tk/index.htm)
'Quelle: https://de.sci.astronomie.narkive.com/EXoOeuaU/sonnenposition-berechnen-und-werte-parallel-ausgeben (https://de.sci.astronomie.narkive.com/EXoOeuaU/sonnenposition-berechnen-und-werte-parallel-ausgeben)
Private Sub FormelAnwenden()
Dim w As Integer = 1 'unbekannte Varable und Typ
deklin = -23.45 * Math.Cos(K * 360 * (Tageszahl + 10) / 365)
zeitgleichung = 60 * (-0.171 * Math.Sin(0.0337 * Tageszahl + 0.465) - 0.1299 * Math.Sin(0.01787 * Tageszahl - 0.168))
stundenwinkel = 15 * (Now.ToString("HH") + Now.ToString("MM") / 60 - (15.0 - Laengengrad) / 15.0 - 12 + zeitgleichung / 60)
x = Math.Sin(K * Breitengrad) * Math.Sin(K * deklin) + Math.Cos(K * Breitengrad) * Math.Cos(K * deklin) * Math.Cos(K * stundenwinkel) 'Höhe
y = -(Math.Sin(K * Breitengrad) * Math.Sin(K * w) - Math.Sin(K * deklin)) / (Math.Cos(K * Breitengrad) * Math.Sin(Math.Acos(Math.Sin(K * w))))
lblhoehe.Text = Math.Asin(x) / K
lblazimut.Text = Math.Acos(y) / K
End Sub
Private Sub CalcJD()
Dim y, m, d As Integer, h As Double
If Now.ToString("MM") > 2 Then
y = Now.ToString("yyyy")
m = Now.ToString("MM")
Else
y = Now.ToString("yyyy") - 1
m = Now.ToString("MM") + 12
End If
d = Now.ToString("d")
h = Now.ToString("HH") / 24 + Now.ToString("mm") / 1440 + Now.ToString("ss") / 86400
Dim a As Integer = y \ 100
Dim b As Integer = 2 - a + a \ 4
Dim JD As Double = Int(365.25 * (y + 4716)) + Int(30.6001 * (m + 1)) + d + h + b - 1524.5
lblJD.Text = JD.ToString("#,0.0000000")
Tageszahl = JD.ToString("#,0.0000000")
Rest(JD)
FormelAnwenden()
End Sub
Private Sub Rest(ByVal JD As Double)
Dim n As Double = JD - 2451545
Dim L As Double = 280.46 + 0.9856474 * n
L = L - Int(L / 360) * 360
Dim g As Double = 357.528 + 0.9856003 * n
g = g - Int(g / 360) * 360
Dim g_ As Double = g * Math.PI / 180
Dim A As Double = L + 1.915 * Math.Sin(g_) + 0.02 * Math.Sin(2 * g_)
Dim A_ As Double = A * Math.PI / 180
Dim E As Double = 23.439 - 0.0000004 * n
Dim E_ As Double = E * Math.PI / 180
Dim Rekt_ As Double = Math.Atan(Math.Cos(E_) * Math.Sin(A_) / Math.Cos(A_))
Dim Rekt As Double = Rekt_ * 180 / Math.PI
If Math.Cos(A_) < 0 Then Rekt += 180
Dim Dekl_ As Double = Math.Asin(Math.Sin(E_) * Math.Sin(A_))
Dim Dekl As Double = Dekl_ * 180 / Math.PI
lblRekt.Text = Rekt.ToString("0.0000°")
lblDekl.Text = Dekl.ToString("0.0000°")
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles cmdBerechnen.Click
lblZeitstempel.Text = Now.ToString
CalcJD()
End Sub
wenn du mir bitte den Fehler in meinem Code aufzeigen könntest wäre ich dir sehr verbunden.
-
@Michael Strom: Bitte benutze die BB-Code-Tags für "Code" wenn Quellcode Postest. Sonst wird Quellcode schlecht dargestellt.
Tipp 1: Du hast Beispielquelltext und Zwischenschritte auf den oben genannten Webseiten. Hast Du das in Excel schon nachgestellt? Kannst Du genau das gleiche in Excel reproduzieren?
Tipp 2: Wenn Du es in Excel reproduzieren kannst, kannst Du Deinen Quellcode im Debugger anhalten und die Werte gegenprüfen.
Wichtig 1: Beachte bitte dass die Formel hier immer die geozentrische Breite haben möchten. Du hast vermutlich die geografische Breite aus Deinem Handy genommen. Die musst Du vorher noch umrechnen, bevor Du beginnen kannst.
Wichtig 2: Beachte bitte, dass die Formen oben nicht die Refraktion berücksichtigen. Da Du das Thema Refraktion noch nicht angesprochen hast, vermute ich, dass Du die Ergebnisse am Ende nochmal entsprechend weiter berechnen musst.
-
...
Mod: passt wohl eher in "Fragen und Antworten: Astronomie" als hierher ?
Erledigt. Gruß Pirx
-
Hallo Michael,
hmm - Du gibst Längen- und Breitengrad von Brake mit einer Genauigkeit von 14 Stellen hinter dem Komma an; ist das die Genauigkeit, die Dir bei den Ergebnissen vorschwebt ?
Wenn eine solche Genauigkeit gewünscht ist (Sonnenuntergang auf die Millisekunde genau, oder was ?) Dann muss vermutlich auch die Höhe über NN in die Rechnung eingehen für die wahre Position des Horizonts.
Ansonsten, einfach mal die links unten in der Seite des Links, den Du ja schon gefunden hast, studieren und nachverfolgen. Da steht eigentlich (fast) alles drin.
Zu deinem code: Nur so bei blosem drüberschauen würde ich nicht finden wo die benutzte Variable K mit einem Wert belegt wird. Wenn das fehlt wird öfter durch Null geteilt.
-
Ich denk mal die 14 Stellen hinter'm Komma waren simples Copy-Paste aus irgendeinem Ergebnis/Anzeige und weniger Absicht?
Daß ausgerechnet darauf hier so eingegangen wird (inklusive "dann muß man auch die Mascons berücksichtigen") spricht aber für das Fachforum hier! :)