Sonnestandsberechnung... Ich komm nicht weiter =(

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Iopodx
User
Beiträge: 68
Registriert: Sonntag 5. September 2004, 08:58

Sonnestandsberechnung... Ich komm nicht weiter =(

Beitragvon Iopodx » Montag 23. Juni 2008, 13:16

Hiho Gemeinde,

kurz gesagt versuche ich http://de.wikipedia.org/wiki/Sonnenstan ... _der_Sonne nach Python zu portieren, um damit den Sonnenstand in Abhängigkeit von Jahreszeit und Uhrzeit bestimmen zu können.

Meine Portierung sieht bis jetzt so aus:

Code: Alles auswählen

import math, time

def sonnenstand(timestamp):
    #01.01.2000 12:00 war 946724400.0 (Timestamp)
   
    n = timestamp - 946724400.0

    n = n / 24 / 60 / 60

    L = 280.46  + 0.9856474 * n

    g = 357.528 + 0.9856003 * n

    d = L + 1.915 * math.sin(math.radians(g)) + 0.02 * math.sin(math.radians(2*g))

    e = 23.439 - 0.0000004 * n

    ZAHLER = math.cos(math.radians(e)) * math.sin(math.radians(d))
   
    NENNER = math.cos(math.radians(d))

    a = math.atan(ZAHLER/NENNER)

sonnenstand(time.time()+3600)


Leider ist die Rückgabe von

Code: Alles auswählen

-1.52457686676


Für mich recht unlogisch, es sollte doch ein Wert in Grad rauskommen, oder?

Liebe Grüße und mein bester Dank,
Iopodx
Benutzeravatar
Hyperion
Moderator
Beiträge: 7471
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Beitragvon Hyperion » Montag 23. Juni 2008, 13:24

Da Du ja nur radians() benutzt, ist es kein Wunder, dass eine Angabe in rad zurückkommt! In der Doku zu math bekommst Du eine Funktion, die das wieder in Grad zurückwandelt.
Iopodx
User
Beiträge: 68
Registriert: Sonntag 5. September 2004, 08:58

Beitragvon Iopodx » Montag 23. Juni 2008, 13:30

Ach stimmt, schlag mich =)

Ich habe also noch ein a = math.degrees(a) eingebaut...

Code: Alles auswählen

Zeitpunkt: 1214224141.77 -87.3376594354
Zeitpunkt: 1214227741.78 -87.2943521399


Ist für mich dennoch ziemlich unwahrscheinlich, da eine Differenz von 3600 Sekunden ja immerhin eine Differenz von 15°C ergeben müsste - oder liege ich da falsch?

MfG
Iopodx
Benutzeravatar
Hyperion
Moderator
Beiträge: 7471
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Beitragvon Hyperion » Montag 23. Juni 2008, 13:58

k.A. - damit kenne ich mich nicht aus!

Aber bist Du Dir sicher, dass die ganzen Berechnungen so klappen? Speziell bei der Mischung von ints und floats kann ja viel schief gehen ...

Insbesondere kapiere ich zeile 9 nicht!

Generell wären da ein wenig mehr Kommentare evtl. nützlich.
Iopodx
User
Beiträge: 68
Registriert: Sonntag 5. September 2004, 08:58

Beitragvon Iopodx » Montag 23. Juni 2008, 14:01

Das meiste ist einfach aus der Wikipedia übernommen.

Zeile neun macht einfach Tage aus dem Sekunden. 60 Sekunden pro Minute, 60 Minuten pro Stunde, 24 Stunden pro Tag.

Danke trotzdem!

MfG
Iopodx
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Beitragvon numerix » Montag 23. Juni 2008, 14:06

Hyperion hat geschrieben:k.A. - damit kenne ich mich nicht aus!


Ich auch nicht, aber :

Hyperion hat geschrieben:Insbesondere kapiere ich zeile 9 nicht!


Dabei dürfte es sich um die Umrechnung von Sekunden in Tage handeln.
Also eigentlich das hier:

Code: Alles auswählen

tage = sekunden/86400


und ich vermute, dass hier auch ein Fehler liegt, weil hier eine Ganzzahldivision vorliegt, die wahrscheinlich aber nicht gemeint ist. Also mal so probieren:

Code: Alles auswählen

tage = sekunden/86400.0
Iopodx
User
Beiträge: 68
Registriert: Sonntag 5. September 2004, 08:58

Beitragvon Iopodx » Montag 23. Juni 2008, 14:11

@pütone

Ja, du hast Recht, aber auch das bringt wohl nicht den Unterschied. Ich muss irgendwo einen Fehler in der Rechnung haben, den ich aber einfach nicht sehen will =(

Das wurmt mich jetzt schon...
Benutzeravatar
Hyperion
Moderator
Beiträge: 7471
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Beitragvon Hyperion » Montag 23. Juni 2008, 14:20

Da hilft wohl nur händisches Debuggen per print oder einem echten Debugger, um sich die einzelnen Ergebnisse der Schritte einmal anzugucken!
BlackJack

Beitragvon BlackJack » Montag 23. Juni 2008, 14:34

Das ist keine Ganzzahldivision, weil `timestamp` ja als Fliesskommazahl in die Funktion kommt. Da Julianische Datum dürfte trotzdem falsch sein, weil 2001-01-01 ja nicht 0 ist.

Und im Text von der Wikipediaseite stehen teilweise Bedingungen, dass bestimmte Werte zum Beispiel zwischen 0 und 360 liegen müssen und auch etwas über Vorzeichen, die man eventuell anpassen muss. Darauf wird im Quelltext aber nirgends eingegangen.
Iopodx
User
Beiträge: 68
Registriert: Sonntag 5. September 2004, 08:58

Beitragvon Iopodx » Montag 23. Juni 2008, 14:57

@BlackJack

Ja, aber bei Trigonometrischen Funktionen sollte man das ja vergessen können... Ich werde berichten.

Ich ziehe ja vom aktuellen Timestamp die Zeit ab, die seit 1970 bis zum Jahre 2000 vergangen ist. Sollte doch hinhauen, oder?

Mein Proble mist denke ich, dass ich hätte weiterlesen müssen. Ich suche nämlich eher den Azimut als irgendwas anderes *grummel* =)
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Beitragvon numerix » Montag 23. Juni 2008, 15:40

BlackJack hat geschrieben:Das ist keine Ganzzahldivision, weil `timestamp` ja als Fliesskommazahl in die Funktion kommt.


Ups! :oops:

Iopodx hat geschrieben:Ja, aber bei Trigonometrischen Funktionen sollte man das ja vergessen können...


Korrekt. Auch die Vorzeichengeschichte löst das Problem nicht. Dabei geht es ja - wenn ich nichts übersehen habe - nur um die Positionierung im richtigen Quadranten.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Beitragvon birkenfeld » Montag 23. Juni 2008, 18:18

Hyperion hat geschrieben:k.A. - damit kenne ich mich nicht aus!

Aber bist Du Dir sicher, dass die ganzen Berechnungen so klappen? Speziell bei der Mischung von ints und floats kann ja viel schief gehen ...


Ja? Was kann denn da so alles schief gehen, wenn man auf Ganzzahldivision aufpasst?
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Montag 23. Juni 2008, 23:49

birkenfeld hat geschrieben:
Hyperion hat geschrieben:k.A. - damit kenne ich mich nicht aus!

Aber bist Du Dir sicher, dass die ganzen Berechnungen so klappen? Speziell bei der Mischung von ints und floats kann ja viel schief gehen ...


Ja? Was kann denn da so alles schief gehen, wenn man auf Ganzzahldivision aufpasst?

Immer wenn ich durch Null teile kommen Exceptions. Da ist wohl was kaputt.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Iopodx
User
Beiträge: 68
Registriert: Sonntag 5. September 2004, 08:58

Beitragvon Iopodx » Dienstag 24. Juni 2008, 12:28

;)

Okay ich brauchte einfach eine andere Gleichung... Nennt sich dann "Wahre Sonne"... Und das soll einer Wissen ;)

http://de.wikipedia.org/wiki/Zeitgleichung#Wahre_Sonne

Dennoch hab ich hier (wieder) ein Problem:

Recht weit unten des Abschnittes findet sich dann eine formel r = tan²(e/2)

Bitte wie - oder was ist überhaupt - tan²?

Glaub dazu fehlen mir noch die zwei Jahre Mathe LK ab nächstem Jahr...

MfG
Iopodx
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Beitragvon HWK » Dienstag 24. Juni 2008, 12:30

Das Quadrat des Tangens.
MfG
HWK

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]