So. Hier der Code dazu. Verbraucht schon relativ viel Speicher. Wie gesagt, der müsste noch optimiert werden. Ich denke das einige Variablen herausgenommen werden können, da sie später nicht mehr gebraucht werden können.
Code:
Declare Function Rev(byval A As Single) As Single
'Deklaration der Variablen
Dim Year As Long , Month As Long , D As Long
Dim Temp As Long
Dim Da As Long
Dim Day As Single , Tz As Single , Stunde As Single
Dim Minute As Single , Sekunde As Single
Dim Ut As Single
Dim W As Single , E As Single , M As Single
Dim Ecl As Single
Dim Tempsin As Single , Tempsin2 As Single , Tempsin3 As Single
Dim Convert_s As String * 16
Dim L As Single
Dim Ec As Single
Dim Longitude As Single
Dim Latitude As Single
Dim X As Single , Y As Single , Z As Single
Dim Xhor As Single , Yhor As Single , Zhor As Single
Dim R As Single , V As Single
Dim Lon As Single
Dim Ra As Single , Decl As Single
Dim Sidtime As Single , Gmst As Single , Ha As Single
Dim Az As Single , El As Single
Dim Bystd As Byte , Bymin As Byte
Dim Strstd As String * 2 , Strmin As String * 2
'Längen- und Breitengrad im Bogenmaß (Rad = Deg*PI/180)
Longitude = 0.113446403
Latitude = 0.8950048536
'Zeitzone
Tz = 1
'Zeitpunkt der Berechnung
Year = 2006
Month = 12
D = 9
Stunde = 19
Minute = 55
Sekunde = 0
Do
'Hier wird die Tageszahl bestimmt. Anhand der Tageszahl werden die weiteren Parameter bestimmt
Ut = Stunde - Tz
Tempsin = Minute / 60
Ut = Ut + Tempsin
Tempsin = Sekunde / 3600
Ut = Ut + Tempsin
Da = Month + 9
Da = Da / 12
Da = Da + Year
Da = Da * 7
Da = Da / 4
Da = -1 * Da
Temp = 367 * Year
Da = Da + Temp
Temp = 275 * Month
Temp = Temp / 9
Da = Da + Temp
Da = Da + D
Da = Da - 730530
Tempsin = Ut / 24
Day = Da + Tempsin
W = Day * 8.2193664343e-7
W = 4.938241639861 + W
W = Rev(w)
'Bestimmung von allgemeinen Parameter der Sonne (bzw. der Erde)
E = 1.151e-9 * Day
E = 0.016709 - E
M = Day * 0.017201966040564
M = 6.2141925336494 + M
M = Rev(m)
'Den Ekliptikwinkel bestimmen
Ecl = 6.2186082167e-9 * Day
Ecl = 0.40909296540617 - Ecl
L = W + M
L = Rev(l)
Tempsin = E * Cos(m)
Tempsin = Tempsin + 1
Ec = E * Sin(m)
Ec = Ec * Temp
Ec = M + Ec
Ec = Rev(ec)
Tempsin = Cos(ec)
X = Tempsin - E
Tempsin = E * E
Tempsin = 1 - Tempsin
Tempsin = Sqr(tempsin)
Tempsin2 = Sin(ec)
Y = Tempsin2 * Tempsin
Tempsin = X * X
Tempsin2 = Y * Y
Tempsin = Tempsin + Tempsin2
Tempsin = Sqr(tempsin)
R = Tempsin
V = Atn2(y , X)
Lon = V + W
Lon = Rev(lon)
Tempsin = Cos(lon)
X = R * Tempsin
Tempsin = Sin(lon)
Y = R * Tempsin
Z = 0
Tempsin2 = Y
Tempsin = Cos(ecl)
Y = Tempsin2 * Tempsin
Tempsin = Sin(ecl)
Z = Tempsin2 * Tempsin
Ra = Atn2(y , X)
Ra = Rev(ra)
Ra = Ra / 0.261799392
Tempsin = Z / R
Decl = Asin(tempsin)
Decl = Rev(decl)
Gmst = L + 3.1415927
Gmst = Gmst / 0.261799392
Sidtime = Gmst + Ut
Tempsin = Longitude / 0.261799392
Sidtime = Sidtime + Tempsin
Ha = Sidtime - Ra
Ha = Ha * 0.261799392
Tempsin = Cos(ha)
Tempsin2 = Cos(decl)
X = Tempsin * Tempsin2
Tempsin = Sin(ha)
Tempsin2 = Cos(decl)
Y = Tempsin * Tempsin2
Z = Sin(decl)
Tempsin = Sin(latitude)
Tempsin2 = Cos(latitude)
Tempsin3 = Z * Tempsin2
Xhor = X * Tempsin
Xhor = Xhor - Tempsin3
Yhor = Y
Tempsin = Cos(latitude)
Tempsin2 = Sin(latitude)
Tempsin3 = Z * Tempsin2
Zhor = X * Tempsin
Zhor = Zhor + Tempsin3
Az = Atn2(yhor , Xhor)
Az = Az + 3.1415927
Az = Az * 57.295779
El = Asin(zhor)
El = El * 57.295779
Loop
Function Rev(byval A As Single) As Single
Tempsin = A / 6.2831854
Temp = Tempsin
Tempsin = Temp * 6.2831854
Rev = A - Tempsin
If Rev < 0 Then Rev = Rev + 6.2831854
End Function
Ich habe nicht viel zu dem Code geschrieben. Unter www.stjarnhimlen.se kann man den genauen Rechenweg nachlesen. Ist eigentlich ne witzige Sache, das man mittels ein paar Formeln den genauen Sonnenstand bestimmen kann.
Sledge77
Lesezeichen