Sonnenpositionsberechnung

  • 6 Antworten
  • 1551 Aufrufe
Sonnenpositionsberechnung
« 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

topos

  • Gast
Re: Sonnenpositionsberechnung
« Antwort #1 am: 10. April 2022, 09:23:46 »
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
"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 ?

Re: Sonnenpositionsberechnung
« Antwort #2 am: 10. April 2022, 09:27:38 »
Auf diesen Seiten war ich bereits dank Google. Ich bin zu folgendem Resultat gekommen:

'Quelle: http://www.geoastro.de/SME/tk/index.htm
    'Quelle: 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.

Offline Hugo

  • *****
  • 5179
Re: Sonnenpositionsberechnung
« Antwort #3 am: 10. April 2022, 11:53:50 »
@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.

tonthomas

  • Gast
Re: Sonnenpositionsberechnung
« Antwort #4 am: 10. April 2022, 11:58:08 »
...

Mod: passt wohl eher in "Fragen und Antworten: Astronomie" als hierher ?
Erledigt. Gruß   Pirx

Offline proton01

  • *****
  • 1950
Re: Sonnenpositionsberechnung
« Antwort #5 am: 10. April 2022, 13:47:45 »
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.

Re: Sonnenpositionsberechnung
« Antwort #6 am: 10. April 2022, 22:12:39 »
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! :)