AGB  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Astro-Daten

Ein Thema von markus5766h · begonnen am 6. Jan 2010 · letzter Beitrag vom 19. Feb 2011
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von markus5766h
markus5766h

Registriert seit: 5. Mär 2009
Ort: Hamburg
384 Beiträge
 
Delphi 7 Enterprise
 
#1

Astro-Daten

  Alt 6. Jan 2010, 15:01
Hallo,
im Laufe der Zeit haben sich bei mir einige Funktionen zur Berechnung astronomischer Daten gesammelt, die ich nun in eine Unit gepackt habe :

Tag im Jahr, Woche im jahr, Schaltjahr(boolean), Sommerzeit(boolean), Jahreszeit,
Feiertage (in Abhängigkeit vom Bundesland), Sternzeichen ...
Für Mond und Sonne : -Aufgang, Untergang, Höchststand,
Mondphase, Mondalter, nächste und vorige Mondphase ...

Funktionen :
Delphi-Quellcode:
function GetDayOfYear(CDate:TDateTime):Integer;
function GetDaysPerYear(CDate:TDateTime):Integer;
function IsLeapYear(CDate:TDateTime):boolean;
function GetWeekOfYear(CDate:TDateTime):Integer;
function GetWeeksPerYear(CDate:TDateTime):Integer;
function GetDaysPerMonth(CDate:TDateTime):Integer;
function GetFirstDayOfWeek(CDate:TDateTime; DayIndex:Integer):TDateTime;
function IsSummertime(CDate:TDateTime):boolean;
function GetHolidayIndex(CDate:TDateTime; Land:TdeState):integer;
function last_phase(date:TDateTime; phase:TMoonPhase):TDateTime;
function next_phase(date:TDateTime; phase:TMoonPhase):TDateTime;
function age_of_moon(date: TDateTime):extended;
function current_phase(date:TDateTime):extended;
function moon_distance(date: TDateTime): extended;
function lunation(date:TDateTime):integer;
function sun_distance(date: TDateTime): extended;
function nextperigee(date:TDateTime):TDateTime;
function nextapogee(date:TDateTime):TDateTime;
function StartSeason(year: integer; season:TSeason):TDateTime;
function Eclipse(var date:TDateTime; sun:boolean):TEclipse;
function NextEclipse(var date:TDateTime; sun:boolean):TEclipse;
function Sun_Rise(date:TDateTime; latitude, longitude:extended):TDateTime;
function Sun_Set(date:TDateTime; latitude, longitude:extended):TDateTime;
function Sun_Transit(date:TDateTime; latitude, longitude:extended):TDateTime;
function Moon_Rise(date:TDateTime; latitude, longitude:extended):TDateTime;
function Moon_Set(date:TDateTime; latitude, longitude:extended):TDateTime;
function Moon_Transit(date:TDateTime; latitude, longitude:extended):TDateTime;
function GetSternzeichen(const CDat:TDateTime):Integer;
function GetSeason(CDat:TDate):String;
function StartDateSeason(CDat:TDate; Season:TSeason): TDate;
function GetMoonPhase(const Dat:TDateTime): String;
function GetMoonPhaseNum(Age : extended):Integer;
function GetMoonPhaseConst(Age : extended):TMoonPhase8;
function DateTimeReal(DtTm : TDateTime; Long : extended):TDateTime;
function DateTimeTZ(DtTm : TDateTime; Hour : ShortInt):TDateTime;
im Anhang :
- die Unit : AstroUnit
- ein Demo zur Übersicht
- ein Screenshot vom Demo

falls Ihr noch Funktionen vermisst >>> lässt sich ja noch einfügen
Miniaturansicht angehängter Grafiken
_bersicht_826.jpg  
Angehängte Dateien
Dateityp: rar astro_demo_859.rar (329,8 KB, 66x aufgerufen)
Dateityp: rar astrounit_300.rar (13,5 KB, 65x aufgerufen)
Markus H.
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk
Online

Registriert seit: 9. Sep 2004
Ort: Eberfing
429 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Astro-Daten

  Alt 6. Jan 2010, 15:43
Als kleine Anmerkung:

Delphi-Quellcode:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ShellAPI, Registry, ShlObj, ComCtrls, DateUtils,
  ExtCtrls;
Was hältst du davon die Abhängigkeiten so weit wie möglich zu reduzieren? Ich denke nicht, dass Units wie Forms, ExtCtrls und Co. hier was verloren haben. Mit Free Pascal für Windows genügt zum Beispiel folgender Uses Abschnitt (müsste in Delphi genauso genügen):

Delphi-Quellcode:
uses
  SysUtils, Classes, DateUtils, Windows;
Ich musste zwar noch den Typ TDate definieren, der bei Delphi (zumindest laut Online Hilfe) in der System Unit rumkurvt, bei Free Pascal allerdings nur von Lazarus in der Controls Unit definiert wird, aber danach kompilierts. Unter nicht Windows Systemen müsste man größere Anpassungen vornehmen, aber für Windows kompiliert sie

Gruß,
Sven
Sven
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Benutzerbild von markus5766h
markus5766h

Registriert seit: 5. Mär 2009
Ort: Hamburg
384 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Astro-Daten

  Alt 6. Jan 2010, 16:10
Hallo,
@JamesTKirk : Abhängigkeiten sind reduziert, hatte ich vergessen, da ich
(zur besseren Kontrolle) das ganze erst mal visuell gemacht habe (DEMO).

Markus H.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)
Online

Registriert seit: 29. Mai 2002
34.675 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Astro-Daten

  Alt 6. Jan 2010, 16:12
Nicht schlecht. So wa shabe ich schon lange mal gesucht, insbesondere wegen der Mondphasen usw.
Michael
"Every language has an optimization operator. In Delphi that operator is: //"
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.174 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Astro-Daten

  Alt 6. Jan 2010, 17:29
Michael hat geschrieben:
Zitat:
Nicht schlecht. So wa shabe ich schon lange mal gesucht, insbesondere wegen der Mondphasen usw.
Gute Arbeit!
Ich habe lange nach den Berechnungen der Jahreszeiten gesucht.
Gibt es da noch Quellen zum Nachlesen?

Gruß

Wolfgang
Wolfgang Mix
Delphi-PRAXiS - Die freundliche Community mit Grüßen aus der MarzipanWeltHauptstadt
  Mit Zitat antworten Zitat
Benutzerbild von markus5766h
markus5766h

Registriert seit: 5. Mär 2009
Ort: Hamburg
384 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Astro-Daten

  Alt 6. Jan 2010, 18:26
Hallo

@Wolfgang : die Berechnungen basieren auf MEEUS (einfach mal googeln).

Viel der Berechnungen und Konstanten hab' ich mal bruchstückweise bekommen
und immer mal wieder (wenn ich mal Lust und Zeit hatte ...) vervollständigt.
Derzeit arbeite ich noch an einer Funktion zur Rückgabe von Positionswerten,
um Sonnen und Mondstand graphisch anzuzeigen (Kreisbahn, stimmt zwar nicht genau,
ist aber am einfachsten umzusetzen und soll ja auch nur eine ungefähre Position angeben).

.. ach ja : bei Wikipedia gibt's auch einiges, teilweise mit Tutorial-Charakter.

... ja, und dann mal sehen, was mir noch so einfällt ...

p.s. schönen Gruß an meine Heimatstadt (Marzipan ....
Markus H.
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.174 Beiträge
 
Delphi 2005 Personal
 
#7

Re: Astro-Daten

  Alt 6. Jan 2010, 18:37
@markus5766h;

Danke für den Tipp,
werde ich mir gerne 'mal antun

[OT] Audio-Highend und Analogfilter gehören auch zu meinen Hobbies [/OT]

Gruß nach Hamburg

Wolfgang
Wolfgang Mix
Delphi-PRAXiS - Die freundliche Community mit Grüßen aus der MarzipanWeltHauptstadt
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
1.380 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Astro-Daten

  Alt 7. Jan 2010, 12:48
Noch ein Tipp - definiere zuerst die Typen und dann lass die Konstanten folgen:
Delphi-Quellcode:
type
  ...
  TEclipse=(ecNone, ecPartial, ecNoncentral, ecCircular, ecCirculartotal, ecTotal, ecHalfshadow);
...
const
 EclipseName : array [TEclipse] of string = // vorher: array[0..6]
   ('', 'Teilfinsternis', 'Teilfinsternis', 'Randfinsternis',
    'Teilfinsternis mit Rand', 'Totale Finsternis', 'Halbschatten');
So kannst du die Deklaration für EclipseName verbessern.
Dies vereinfacht deinen Code und erhöht die Sicherheit weil der Compiler sicherstellt, dass die Anzahl der Strings genau auf den Typ TEclipse passt.
Das Gleiche gilt auch für "Bundesland", "Jahreszeit",...

Ausserdem würde ich empfehlen einen eigenen Datentyp für die Längen- und Breitenangaben zu deklarieren:
Delphi-Quellcode:
type
TGeoAngle = Extended;

function Sun_Rise(date:TDateTime; latitude, longitude:TGeoAngle):TDateTime;
Damit wird der Code besser lesbar denn man sieht, dass die Funktion Sun_Rise() zwei Winkelangaben erwartet.

Der Code enthält EXTREM viele hartcodierte Zahlen; man kann das bei astronomischen Berechnungen nicht ganz vermeiden.
Manche Werte können aber leicht durch Konstanten ersetzt werden.
HOURS_PER_DAY=24; EARTH_DIAMETER=...; AVERAGE_MOON_DISTANCE=...
Mit den Konstanten versteht man besser was da eigentlich gerechnet wird.
  Mit Zitat antworten Zitat
Benutzerbild von markus5766h
markus5766h

Registriert seit: 5. Mär 2009
Ort: Hamburg
384 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Astro-Daten

  Alt 7. Jan 2010, 12:59
@sx2008

danke für die Tipps, werd' ich bei der nächsten Bearbeitung umsetzen
Markus H.
  Mit Zitat antworten Zitat
Benutzerbild von markus5766h
markus5766h

Registriert seit: 5. Mär 2009
Ort: Hamburg
384 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Astro-Daten

  Alt 12. Jan 2010, 15:11
Hallo,

Die Attachments wurden aktualisiert. Einige Vorschläge wurden umgesetzt.

neue Funktionen :
Delphi-Quellcode:
function GetMoonPhaseNum(Age : extended):Integer;
function DateTimeReal(DtTm : TDateTime; Long : extended):TDateTime;
function DateTimeTZ(DtTm : TDateTime; Hour : ShortInt):TDateTime;
GetMoonPhaseNum liefert die Phase (1 .. 8) so dass Mondphasenbilder
entsprechend den Nummern angezeigt werden können (ist im Demo aktualisiert).
Die Verteilung ist :
1 : Neumond 1,00 Tage
2 : zunehmender Mond 4,5833 Tage
3 : zunehmender Halbmond, erstes Viertel 4,5833 Tage
4 : zunehmender Mond 4,5833 Tage
5 : Vollmond 1,00 Tage
6 : abnehmender Mond 4,5833 Tage
7 : abnehmender Mond, letztes Viertel 4,5833 Tage
8 : abnehmender Mond 4,5833 Tage

Die Verteilung und / oder Anzahl kann leicht in der entsprechenden Case - - Of - Anweisung geändert werden

DateTimeReal liefert den TDateTime-Wert an Hand des Längengrad
DateTimeTZ liefert den TDateTimeWert zur Zeitzone (der Vollständigkeit halber)
Markus H.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2012 by Daniel R. Wolf