Sonnenauf- und untergang Kategorie: Programmierung (von Thomas - 15.12.2004 17:14) | |
| |
Hallo zusammen, für die eigene Haussteuerung mussten, damit die Rolladen bei Abwesenheit auf- und abfahren, die Zeitpunkte der Morgen- und Abenddämmerung bestimmt werden. Angeregt durch das Programm zu Jalusie-Steuerung von Axel Rathey sowie der Formeldarstellung unter http://lexikon.astronomie.info/zeitgleichung/ habe ich die Funktionen zur Berechnung von Sonnenauf und -untergang sowie der verschiedenen Dämmerungszeitpunkte in ein Modul zusammen- gefasst. sun.c2 Aufruf: sun.rise_set (int day, float breitengrad, float laengengrad) day ist eine Zahl von 1 (1.Januar) bis 365 (31.Dezember) - wir als day Null übergeben, so werden die Werte für den aktuellen Tag berechnet. Da in c2 keine komlexen Type als Return-Wert möglich sind, werden die Ergebnisse in sun.rs[] gespeichert. Vielleicht kann es jemand gebrauchen. Beste Grü�e Thomas Hier ein Testprogramm und nachfolgend das Modul: thread main { float Laenge, Breite; int Tage; // Berechnung fuer heute Tage = 0; // Koordinaten fuer Dortmund Laenge = 7.45; Breite = 51.53; // Aufruf der Berechnung sun.rise_set (Tage, Breite, Laenge); float auf, ab; int aufStd, aufMin, abStd, abMin; int i; // Die Ergebnisse stehen in sun.rs[i] für // i=sun.tranit = Transit, // i=civil = bürgerliche Dämmerung // i=nautical = nautische Dämmerung // i=astronomical = astronomische Dämmerung for i = sun.transit ... sun.astronomical { auf = sun.rs[i].riseTime; ab = sun.rs[i].setTime; aufStd = sun.rs[i].riseHour; aufMin = sun.rs[i].riseMinute; abStd = sun.rs[i].setHour; abMin = sun.rs[i].setMinute; } } Hier nur das Modul sun.c2: /******************************************************************** sun.c2 release : 2004/12/15 author : Thomas Wahle based on : Axel Rathey, Dr. Roland Brobeck) requires : math.c2, system.c2, myconst.c2 version : 0.1 contents : routine to calculate transit and twilight input: day 1 = 01.01 ... 356 = 31.12 current date is used if day is eq. 0 latitude (grad) longitude (grad) output: sun.rs[i].riseTime = sunrise as float sun.rs[i].setTime = sunset as float sun.rs[i].riseHour = sunrise hour as int sun.rs[i].riseMinute = sunrise minute as int sun.rs[i].setHour = sunset hour as int sun.rs[i].setMinute = sunset minute as int where i may be: sun.transit to get the transit sun.civil to get the civil twilight sun.nautical to get the nautical twilight sun.astronomical to get the astronomical twilight ********************************************************************/ // Constants for transit and twilight definitions const transit = 0; const civil = 1; const nautical = 2; const astronomical = 3; const h[] = -0.0145444, // transit -0.1047197, // civil twilight -0.2094395, // nautical twilight -0.3141592; // astronomical twilight // Type to return sunset and sunrise type stimeType { float riseTime; int riseHour; int riseMinute; float setTime; int setHour; int setMinute; } stimeType rs[4]; function rise_set (int day, float latitude, float longitude){ if day == 0 { int mcnt; for mcnt = 1 ... system.month()-1 day = day + myconst.DOM[mcnt]; day = day + system.day()+1; } // convert latizude from grad into rad latitude = latitude * constant.PI/180.0; float decl, eqTime, deltaTime; decl = 0.40954*math.sin(0.0172*(day-79.35)); eqTime = -0.1752*math.sin(0.033430*day+0.5474)-0.1340*math.sin(0.018234*day-0.1939); int time2utc; if system.dst() == 0 time2utc = 1; else time2utc = 2; int i; for i = transit ... astronomical { deltaTime = 12*math.acos((math.sin(h[i])-math.sin(latitude)*math.sin(decl))/(math.cos(latitude) *math.cos(decl)))/constant.PI; rs[i].riseTime = 12 - deltaTime - eqTime - longitude /15 + time2utc; rs[i].setTime = 12 + deltaTime - eqTime - longitude /15 + time2utc; rs[i].riseHour = rs[i].riseTime; rs[i].riseMinute = (rs[i].riseTime-rs[i].riseHour)*60; rs[i].setHour = rs[i].setTime; rs[i].setMinute = (rs[i].setTime-rs[i].setHour)*60; } } | |
Antwort schreiben Antworten: Re: Sonnenauf- und untergang (von Hansi - 22.12.2004 22:30) Re: Sonnenauf- und untergang (von Michael - 15.01.2005 19:26) |