forked from vain/asciiworld
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsonnenstand.txt
85 lines (59 loc) · 3.25 KB
/
sonnenstand.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
Horizontal
----------
Gesucht ist zunächst der Längengrad (also horizontale Richtung), bei dem
die Sonne gerade den Tageshöchststand erreicht hat. Es wird angenommen,
dass um 12:00 UTC dies beim nullten Längengrad der Fall ist. Die
Abweichung durch die Zeitgleichung wird zunächst nicht berücksichtigt.
Testweise an der Shell:
$ date -u '+%H %M %S' | awk '{ print (($1 * 60 * 60 + $2 * 60 + $3) - (86400 / 2)) * (-360 / 86400) }'
Erklärung:
(($1 * 60 * 60 + $2 * 60 + $3) - (86400 / 2)) * (-360 / 86400)
| | | \_________/ \____________/
| | | | |
| | | | \- Grad pro
| | | | Sekunde.
| | | |
| | | \- Hierdurch Differenz zum UTC-
| | | Mittag in Sekunden.
| | |
| | \- Sekunden der UTC-Zeit.
| |
| \- Minuten,
|
\- Stunden,
Gute numerische Näherung der Zeitgleichung:
http://lexikon.astronomie.info/zeitgleichung/
WOZ - MOZ = -0.171*sin(0.0337 * T + 0.465) - 0.1299*sin(0.01787 * T - 0.168)
wobei T die Tagnummer darstellt. Der erste Januar hat die Nummer 1,
der zweite Januar die Nummer 2 usw. Das Ergebnis wird in Stunden
ausgegeben, und nicht etwa in Minuten.
Man muss den UTC-Mittag also um diesen Wert korrigieren. An der Shell
kann das dann so aussehen:
$ date -u '+%H %M %S %j' | awk '{ print (($1 * 60 * 60 + $2 * 60 + $3) - (86400 / 2 + ((-0.171 * sin(0.0337 * $4 + 0.465) - 0.1299 * sin(0.01787 * $4 - 0.168)) * -3600))) * (-360 / 86400) }'
Und für das konkrete Beispiel, was in der Wikipedia angegeben wurde
(https://de.wikipedia.org/wiki/Mittag), es kommt also korrekterweise die
geographische Länge von München heraus:
$ date -d '2008-07-12 13:19 CEST' -u '+%H %M %S %j' | awk '{ print (($1 * 60 * 60 + $2 * 60 + $3) - (86400 / 2 + ((-0.171 * sin(0.0337 * $4 + 0.465) - 0.1299 * sin(0.01787 * $4 - 0.168)) * -3600))) * (-360 / 86400) }'
11.6356
Vertikal
--------
Das Astronomie-Lexikon hat hier wieder eine schöne Näherung:
Deklination = 0.4095 * sin(0.016906 * (T - 80.086))
T ist wieder der Tag des Jahres. Im Laufe eines Tages ist die Schwankung
so gering, dass das wie bei der Zeitgleichung ausreicht.
Das ist auch gleichzeitig die geographische Breite, bei der die Sonne am
"heutigen" Mittag im Zenit stehen wird.
Licht-Schatten-Grenze
---------------------
Bei der ganzen Aktion wird angenommen, dass die Sonne paralleles Licht
auf eine kugelförmige Erde wirft. Das heißt, dass genau eine Kugelhälfte
beleuchtet ist.
Seit das Zeichnen von Klein- und Großkreisen im asciiworld-Kern
angekommen ist, wird die Licht-Schatten-Grenze darüber realisiert.
Gezeichnet wird ein Kreis, dessen Mittelpunkt der Ort auf der Erde ist,
an dem die Sonne momentan im Zenit steht. Der Radius dieses Kreises ist
90°, was ihn zu einem Großkreis macht.
Dieser Ansatz hat gegenüber der vorherigen Herangehensweise
(Großkreisgleichung nach phi und lambda auflösen) hauptsächlich den
Vorteil, dass der Code wiederverwendbar ist. Kreise zeichnen zu können,
ist allgemein nützlich, zum Beispiel für den Footprint von Satelliten.