| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
package Astro::Montenbruck::Ephemeris::Planet::Moon; |
|
2
|
|
|
|
|
|
|
|
|
3
|
1
|
|
|
1
|
|
612
|
use strict; |
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
29
|
|
|
4
|
1
|
|
|
1
|
|
5
|
use warnings; |
|
|
1
|
|
|
|
|
1
|
|
|
|
1
|
|
|
|
|
32
|
|
|
5
|
|
|
|
|
|
|
|
|
6
|
1
|
|
|
1
|
|
5
|
use Math::Trig qw/:pi rad2deg/; |
|
|
1
|
|
|
|
|
18
|
|
|
|
1
|
|
|
|
|
151
|
|
|
7
|
1
|
|
|
1
|
|
7
|
use Astro::Montenbruck::Ephemeris::Planet; |
|
|
1
|
|
|
|
|
19
|
|
|
|
1
|
|
|
|
|
44
|
|
|
8
|
1
|
|
|
1
|
|
5
|
use base qw/Astro::Montenbruck::Ephemeris::Planet/; |
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
92
|
|
|
9
|
1
|
|
|
1
|
|
12
|
use Astro::Montenbruck::Ephemeris::Planet qw/$MO/; |
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
76
|
|
|
10
|
1
|
|
|
1
|
|
7
|
use Astro::Montenbruck::MathUtils qw /frac sine ARCS reduce_deg/; |
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
62
|
|
|
11
|
1
|
|
|
1
|
|
379
|
use Astro::Montenbruck::Ephemeris::Pert qw /addthe/; |
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
2114
|
|
|
12
|
|
|
|
|
|
|
|
|
13
|
|
|
|
|
|
|
our $VERSION = 0.01; |
|
14
|
|
|
|
|
|
|
|
|
15
|
|
|
|
|
|
|
sub new { |
|
16
|
2
|
|
|
2
|
1
|
6
|
my $class = shift; |
|
17
|
2
|
|
|
|
|
13
|
$class->SUPER::new( id => $MO ); |
|
18
|
|
|
|
|
|
|
} |
|
19
|
|
|
|
|
|
|
|
|
20
|
|
|
|
|
|
|
# calculate long-periodic changes of the mean elements |
|
21
|
|
|
|
|
|
|
# l,l',F,D and L0 as well as dgamma |
|
22
|
|
|
|
|
|
|
sub _long_periodic { |
|
23
|
2
|
|
|
2
|
|
4
|
my $t = shift; |
|
24
|
|
|
|
|
|
|
|
|
25
|
2
|
|
|
|
|
12
|
my $s1 = sine( 0.19833 + 0.05611 * $t ); |
|
26
|
2
|
|
|
|
|
8
|
my $s2 = sine( 0.27869 + 0.04508 * $t ); |
|
27
|
2
|
|
|
|
|
6
|
my $s3 = sine( 0.16827 - 0.36903 * $t ); |
|
28
|
2
|
|
|
|
|
7
|
my $s4 = sine( 0.34734 - 5.37261 * $t ); |
|
29
|
2
|
|
|
|
|
6
|
my $s5 = sine( 0.10498 - 5.37899 * $t ); |
|
30
|
2
|
|
|
|
|
6
|
my $s6 = sine( 0.42681 - 0.41855 * $t ); |
|
31
|
2
|
|
|
|
|
7
|
my $s7 = sine( 0.14943 - 5.37511 * $t ); |
|
32
|
2
|
|
|
|
|
16
|
my $dl0 = |
|
33
|
|
|
|
|
|
|
0.84 * $s1 + |
|
34
|
|
|
|
|
|
|
0.31 * $s2 + |
|
35
|
|
|
|
|
|
|
14.27 * $s3 + |
|
36
|
|
|
|
|
|
|
7.26 * $s4 + |
|
37
|
|
|
|
|
|
|
0.28 * $s5 + |
|
38
|
|
|
|
|
|
|
0.24 * $s6; |
|
39
|
2
|
|
|
|
|
5
|
my $dl = |
|
40
|
|
|
|
|
|
|
2.94 * $s1 + |
|
41
|
|
|
|
|
|
|
0.31 * $s2 + |
|
42
|
|
|
|
|
|
|
14.27 * $s3 + |
|
43
|
|
|
|
|
|
|
9.34 * $s4 + |
|
44
|
|
|
|
|
|
|
1.12 * $s5 + |
|
45
|
|
|
|
|
|
|
0.83 * $s6; |
|
46
|
2
|
|
|
|
|
5
|
my $dls = -6.40 * $s1 - 1.89 * $s6; |
|
47
|
2
|
|
|
|
|
5
|
my $df = |
|
48
|
|
|
|
|
|
|
0.21 * $s1 + |
|
49
|
|
|
|
|
|
|
0.31 * $s2 + |
|
50
|
|
|
|
|
|
|
14.27 * $s3 - |
|
51
|
|
|
|
|
|
|
88.70 * $s4 - |
|
52
|
|
|
|
|
|
|
15.30 * $s5 + |
|
53
|
|
|
|
|
|
|
0.24 * $s6 - |
|
54
|
|
|
|
|
|
|
1.86 * $s7; |
|
55
|
2
|
|
|
|
|
3
|
my $dd = $dl0 - $dls; |
|
56
|
2
|
|
|
|
|
6
|
my $dgam = |
|
57
|
|
|
|
|
|
|
-3332e-9 * sine( 0.59734 - 5.37261 * $t ) - |
|
58
|
|
|
|
|
|
|
539e-9 * sine( 0.35498 - 5.37899 * $t ) - |
|
59
|
|
|
|
|
|
|
64e-9 * sine( 0.39943 - 5.37511 * $t ); |
|
60
|
|
|
|
|
|
|
|
|
61
|
2
|
|
|
|
|
8
|
$dl0, $dl, $dls, $df, $dd, $dgam; |
|
62
|
|
|
|
|
|
|
} |
|
63
|
|
|
|
|
|
|
|
|
64
|
|
|
|
|
|
|
sub position { |
|
65
|
2
|
|
|
2
|
1
|
10
|
my ( $self, $t ) = @_; |
|
66
|
2
|
|
|
|
|
5
|
my ( %co, %si ); |
|
67
|
2
|
|
|
|
|
0
|
my ( $dlam, $ds, $gam1c, $n ); |
|
68
|
2
|
|
|
|
|
5
|
my $sinpi = 3422.7; |
|
69
|
2
|
|
|
|
|
6
|
my ( $dl0, $dl, $dls, $df, $dd, $dgam, $l, $l0, $ls, $f, $d ); |
|
70
|
|
|
|
|
|
|
|
|
71
|
|
|
|
|
|
|
# INIT: calculates the mean elements and their sine and cosine |
|
72
|
|
|
|
|
|
|
# l mean anomaly of the Moon |
|
73
|
|
|
|
|
|
|
# l' mean anomaly of the Sun |
|
74
|
|
|
|
|
|
|
# F mean distance from the node |
|
75
|
|
|
|
|
|
|
# D mean elongation from the Sun |
|
76
|
|
|
|
|
|
|
my $init = sub { |
|
77
|
2
|
|
|
2
|
|
5
|
my $t2 = $t * $t; |
|
78
|
|
|
|
|
|
|
|
|
79
|
2
|
|
|
|
|
6
|
( $dl0, $dl, $dls, $df, $dd, $dgam ) = _long_periodic($t); |
|
80
|
|
|
|
|
|
|
|
|
81
|
2
|
|
|
|
|
7
|
$l0 = pi2 * frac( 0.60643382 + 1336.85522467 * $t - 0.00000313 * $t2 ) + |
|
82
|
|
|
|
|
|
|
$dl0 / ARCS; |
|
83
|
2
|
|
|
|
|
7
|
$l = pi2 * frac( 0.37489701 + 1325.55240982 * $t + 0.00002565 * $t2 ) + |
|
84
|
|
|
|
|
|
|
$dl / ARCS; |
|
85
|
2
|
|
|
|
|
6
|
$ls = pi2 * frac( 0.99312619 + 99.99735956 * $t - 0.00000044 * $t2 ) + |
|
86
|
|
|
|
|
|
|
$dls / ARCS; |
|
87
|
2
|
|
|
|
|
6
|
$f = pi2 * frac( 0.25909118 + 1342.22782980 * $t - 0.00000892 * $t2 ) + |
|
88
|
|
|
|
|
|
|
$df / ARCS; |
|
89
|
2
|
|
|
|
|
7
|
$d = pi2 * frac( 0.82736186 + 1236.85308708 * $t - 0.00000397 * $t2 ) + |
|
90
|
|
|
|
|
|
|
$dd / ARCS; |
|
91
|
|
|
|
|
|
|
|
|
92
|
2
|
|
|
|
|
8
|
for my $i ( 1 .. 4 ) { |
|
93
|
|
|
|
|
|
|
|
|
94
|
|
|
|
|
|
|
my ( $arg, $max, $fac ) = ( |
|
95
|
2
|
|
|
|
|
8
|
sub { $l, 4, 1.000002208 }, |
|
96
|
2
|
|
|
|
|
7
|
sub { $ls, 3, 0.997504612 - 0.002495388 * $t }, |
|
97
|
2
|
|
|
|
|
6
|
sub { $f, 4, 1.000002708 + 139.978 * $dgam }, |
|
98
|
2
|
|
|
|
|
4
|
sub { $d, 6, 1.0 } |
|
99
|
8
|
|
|
|
|
63
|
)[ $i - 1 ]->(); |
|
100
|
|
|
|
|
|
|
|
|
101
|
8
|
|
|
|
|
41
|
$co{0}->{$i} = 1.0; |
|
102
|
8
|
|
|
|
|
29
|
$co{1}->{$i} = cos($arg) * $fac; |
|
103
|
8
|
|
|
|
|
16
|
$si{0}->{$i} = 0.0; |
|
104
|
8
|
|
|
|
|
16
|
$si{1}->{$i} = sin($arg) * $fac; |
|
105
|
|
|
|
|
|
|
|
|
106
|
8
|
|
|
|
|
16
|
for ( 2 .. $max ) { |
|
107
|
26
|
|
|
|
|
88
|
my $k = $_ - 1; |
|
108
|
|
|
|
|
|
|
( $co{$_}->{$i}, $si{$_}->{$i} ) = addthe( |
|
109
|
|
|
|
|
|
|
$co{$k}->{$i}, $si{$k}->{$i}, |
|
110
|
26
|
|
|
|
|
69
|
$co{1}->{$i}, $si{1}->{$i} |
|
111
|
|
|
|
|
|
|
); |
|
112
|
|
|
|
|
|
|
} |
|
113
|
8
|
|
|
|
|
16
|
for ( 1 .. $max ) { |
|
114
|
34
|
|
|
|
|
74
|
$co{ -$_ }->{$i} = $co{$_}->{$i}; |
|
115
|
34
|
|
|
|
|
68
|
$si{ -$_ }->{$i} = -$si{$_}->{$i}; |
|
116
|
|
|
|
|
|
|
} |
|
117
|
|
|
|
|
|
|
} |
|
118
|
2
|
|
|
|
|
14
|
}; |
|
119
|
|
|
|
|
|
|
|
|
120
|
|
|
|
|
|
|
# TERM calculates X = cos(p * arg1 + q * arg2 + r * arg3 + s * arg4) |
|
121
|
|
|
|
|
|
|
# and Y = sin(p * arg1 + q * arg2 + r * arg3 + s * arg4) |
|
122
|
|
|
|
|
|
|
my $term = sub { |
|
123
|
226
|
|
|
226
|
|
343
|
my @pqrs = @_; |
|
124
|
226
|
|
|
|
|
365
|
my %i = map { $_ + 1, $pqrs[$_] } ( 0 .. 3 ); |
|
|
904
|
|
|
|
|
1630
|
|
|
125
|
226
|
|
|
|
|
396
|
my $x = 1.0; |
|
126
|
226
|
|
|
|
|
290
|
my $y = 0.0; |
|
127
|
|
|
|
|
|
|
|
|
128
|
226
|
|
|
|
|
381
|
for ( 1 .. 4 ) { |
|
129
|
904
|
100
|
|
|
|
1960
|
if ( $i{$_} != 0 ) { |
|
130
|
526
|
|
|
|
|
743
|
my $j = $i{$_}; |
|
131
|
526
|
|
|
|
|
1161
|
( $x, $y ) = addthe( $x, $y, $co{$j}->{$_}, $si{$j}->{$_} ); |
|
132
|
|
|
|
|
|
|
} |
|
133
|
|
|
|
|
|
|
} |
|
134
|
226
|
|
|
|
|
533
|
$x, $y; |
|
135
|
2
|
|
|
|
|
10
|
}; |
|
136
|
|
|
|
|
|
|
|
|
137
|
|
|
|
|
|
|
my $addsol = sub { |
|
138
|
208
|
|
|
208
|
|
377
|
my ( $coeffl, $coeffs, $coeffg, $coeffp, $p, $q, $r, $s ) = @_; |
|
139
|
208
|
|
|
|
|
348
|
my ( $x, $y ) = $term->( $p, $q, $r, $s ); |
|
140
|
|
|
|
|
|
|
|
|
141
|
208
|
|
|
|
|
314
|
$dlam += $coeffl * $y; |
|
142
|
208
|
|
|
|
|
283
|
$ds += $coeffs * $y; |
|
143
|
208
|
|
|
|
|
276
|
$gam1c += $coeffg * $x; |
|
144
|
208
|
|
|
|
|
294
|
$sinpi += $coeffp * $x; |
|
145
|
2
|
|
|
|
|
8
|
}; |
|
146
|
|
|
|
|
|
|
|
|
147
|
|
|
|
|
|
|
my $solar_1 = sub { |
|
148
|
2
|
|
|
2
|
|
8
|
$addsol->( 13.902, 14.06, -0.001, 0.2607, 0, 0, 0, 4 ); |
|
149
|
2
|
|
|
|
|
6
|
$addsol->( 0.403, -4.01, +0.394, 0.0023, 0, 0, 0, 3 ); |
|
150
|
2
|
|
|
|
|
8
|
$addsol->( 2369.912, 2373.36, +0.601, 28.2333, 0, 0, 0, 2 ); |
|
151
|
2
|
|
|
|
|
7
|
$addsol->( -125.154, -112.79, -0.725, -0.9781, 0, 0, 0, 1 ); |
|
152
|
2
|
|
|
|
|
6
|
$addsol->( 1.979, 6.98, -0.445, 0.0433, 1, 0, 0, 4 ); |
|
153
|
2
|
|
|
|
|
6
|
$addsol->( 191.953, 192.72, +0.029, 3.0861, 1, 0, 0, 2 ); |
|
154
|
2
|
|
|
|
|
6
|
$addsol->( -8.466, -13.51, +0.455, -0.1093, 1, 0, 0, 1 ); |
|
155
|
2
|
|
|
|
|
8
|
$addsol->( 22639.500, 22609.07, +0.079, 186.5398, 1, 0, 0, 0 ); |
|
156
|
2
|
|
|
|
|
7
|
$addsol->( 18.609, 3.59, -0.094, 0.0118, 1, 0, 0, -1 ); |
|
157
|
2
|
|
|
|
|
7
|
$addsol->( -4586.465, -4578.13, -0.077, 34.3117, 1, 0, 0, -2 ); |
|
158
|
2
|
|
|
|
|
11
|
$addsol->( +3.215, 5.44, +0.192, -0.0386, 1, 0, 0, -3 ); |
|
159
|
2
|
|
|
|
|
6
|
$addsol->( -38.428, -38.64, +0.001, 0.6008, 1, 0, 0, -4 ); |
|
160
|
2
|
|
|
|
|
7
|
$addsol->( -0.393, -1.43, -0.092, 0.0086, 1, 0, 0, -6 ); |
|
161
|
2
|
|
|
|
|
7
|
$addsol->( -0.289, -1.59, +0.123, -0.0053, 0, 1, 0, 4 ); |
|
162
|
2
|
|
|
|
|
7
|
$addsol->( -24.420, -25.10, +0.040, -0.3000, 0, 1, 0, 2 ); |
|
163
|
2
|
|
|
|
|
12
|
$addsol->( 18.023, 17.93, +0.007, 0.1494, 0, 1, 0, 1 ); |
|
164
|
2
|
|
|
|
|
6
|
$addsol->( -668.146, -126.98, -1.302, -0.3997, 0, 1, 0, 0 ); |
|
165
|
2
|
|
|
|
|
6
|
$addsol->( 0.560, 0.32, -0.001, -0.0037, 0, 1, 0, -1 ); |
|
166
|
2
|
|
|
|
|
5
|
$addsol->( -165.145, -165.06, +0.054, 1.9178, 0, 1, 0, -2 ); |
|
167
|
2
|
|
|
|
|
8
|
$addsol->( -1.877, -6.46, -0.416, 0.0339, 0, 1, 0, -4 ); |
|
168
|
2
|
|
|
|
|
6
|
$addsol->( 0.213, 1.02, -0.074, 0.0054, 2, 0, 0, 4 ); |
|
169
|
2
|
|
|
|
|
6
|
$addsol->( 14.387, 14.78, -0.017, 0.2833, 2, 0, 0, 2 ); |
|
170
|
2
|
|
|
|
|
6
|
$addsol->( -0.586, -1.20, +0.054, -0.0100, 2, 0, 0, 1 ); |
|
171
|
2
|
|
|
|
|
7
|
$addsol->( 769.016, 767.96, +0.107, 10.1657, 2, 0, 0, 0 ); |
|
172
|
2
|
|
|
|
|
15
|
$addsol->( +1.750, 2.01, -0.018, 0.0155, 2, 0, 0, -1 ); |
|
173
|
2
|
|
|
|
|
5
|
$addsol->( -211.656, -152.53, +5.679, -0.3039, 2, 0, 0, -2 ); |
|
174
|
2
|
|
|
|
|
6
|
$addsol->( +1.225, 0.91, -0.030, -0.0088, 2, 0, 0, -3 ); |
|
175
|
2
|
|
|
|
|
6
|
$addsol->( -30.773, -34.07, -0.308, 0.3722, 2, 0, 0, -4 ); |
|
176
|
2
|
|
|
|
|
6
|
$addsol->( -0.570, -1.40, -0.074, 0.0109, 2, 0, 0, -6 ); |
|
177
|
2
|
|
|
|
|
7
|
$addsol->( -2.921, -11.75, +0.787, -0.0484, 1, 1, 0, 2 ); |
|
178
|
2
|
|
|
|
|
8
|
$addsol->( +1.267, 1.52, -0.022, 0.0164, 1, 1, 0, 1 ); |
|
179
|
2
|
|
|
|
|
6
|
$addsol->( -109.673, -115.18, +0.461, -0.9490, 1, 1, 0, 0 ); |
|
180
|
2
|
|
|
|
|
6
|
$addsol->( -205.962, -182.36, +2.056, +1.4437, 1, 1, 0, -2 ); |
|
181
|
2
|
|
|
|
|
6
|
$addsol->( 0.233, 0.36, 0.012, -0.0025, 1, 1, 0, -3 ); |
|
182
|
2
|
|
|
|
|
5
|
$addsol->( -4.391, -9.66, -0.471, 0.0673, 1, 1, 0, -4 ); |
|
183
|
2
|
|
|
|
|
10
|
}; |
|
184
|
|
|
|
|
|
|
|
|
185
|
|
|
|
|
|
|
my $solar_2 = sub { |
|
186
|
2
|
|
|
2
|
|
5
|
$addsol->( 0.283, 1.53, -0.111, +0.0060, 1, -1, 0, +4 ); |
|
187
|
2
|
|
|
|
|
15
|
$addsol->( 14.577, 31.70, -1.540, +0.2302, 1, -1, 0, 2 ); |
|
188
|
2
|
|
|
|
|
6
|
$addsol->( 147.687, 138.76, +0.679, +1.1528, 1, -1, 0, 0 ); |
|
189
|
2
|
|
|
|
|
15
|
$addsol->( -1.089, 0.55, +0.021, 0.0, 1, -1, 0, -1 ); |
|
190
|
2
|
|
|
|
|
7
|
$addsol->( 28.475, 23.59, -0.443, -0.2257, 1, -1, 0, -2 ); |
|
191
|
2
|
|
|
|
|
6
|
$addsol->( -0.276, -0.38, -0.006, -0.0036, 1, -1, 0, -3 ); |
|
192
|
2
|
|
|
|
|
7
|
$addsol->( 0.636, 2.27, +0.146, -0.0102, 1, -1, 0, -4 ); |
|
193
|
2
|
|
|
|
|
7
|
$addsol->( -0.189, -1.68, +0.131, -0.0028, 0, 2, 0, 2 ); |
|
194
|
2
|
|
|
|
|
7
|
$addsol->( -7.486, -0.66, -0.037, -0.0086, 0, 2, 0, 0 ); |
|
195
|
2
|
|
|
|
|
6
|
$addsol->( -8.096, -16.35, -0.740, 0.0918, 0, 2, 0, -2 ); |
|
196
|
2
|
|
|
|
|
7
|
$addsol->( -5.741, -0.04, 0.0, -0.0009, 0, 0, 2, 2 ); |
|
197
|
2
|
|
|
|
|
5
|
$addsol->( 0.255, 0.0, 0.0, 0.0, 0, 0, 2, 1 ); |
|
198
|
2
|
|
|
|
|
5
|
$addsol->( -411.608, -0.20, 0.0, -0.0124, 0, 0, 2, 0 ); |
|
199
|
2
|
|
|
|
|
6
|
$addsol->( 0.584, 0.84, 0.0, +0.0071, 0, 0, 2, -1 ); |
|
200
|
2
|
|
|
|
|
6
|
$addsol->( -55.173, -52.14, 0.0, -0.1052, 0, 0, 2, -2 ); |
|
201
|
2
|
|
|
|
|
8
|
$addsol->( 0.254, 0.25, 0.0, -0.0017, 0, 0, 2, -3 ); |
|
202
|
2
|
|
|
|
|
5
|
$addsol->( +0.025, -1.67, 0.0, +0.0031, 0, 0, 2, -4 ); |
|
203
|
2
|
|
|
|
|
6
|
$addsol->( 1.060, 2.96, -0.166, 0.0243, 3, 0, 0, +2 ); |
|
204
|
2
|
|
|
|
|
8
|
$addsol->( 36.124, 50.64, -1.300, 0.6215, 3, 0, 0, 0 ); |
|
205
|
2
|
|
|
|
|
8
|
$addsol->( -13.193, -16.40, +0.258, -0.1187, 3, 0, 0, -2 ); |
|
206
|
2
|
|
|
|
|
11
|
$addsol->( -1.187, -0.74, +0.042, 0.0074, 3, 0, 0, -4 ); |
|
207
|
2
|
|
|
|
|
8
|
$addsol->( -0.293, -0.31, -0.002, 0.0046, 3, 0, 0, -6 ); |
|
208
|
2
|
|
|
|
|
11
|
$addsol->( -0.290, -1.45, +0.116, -0.0051, 2, 1, 0, 2 ); |
|
209
|
2
|
|
|
|
|
7
|
$addsol->( -7.649, -10.56, +0.259, -0.1038, 2, 1, 0, 0 ); |
|
210
|
2
|
|
|
|
|
12
|
$addsol->( -8.627, -7.59, +0.078, -0.0192, 2, 1, 0, -2 ); |
|
211
|
2
|
|
|
|
|
6
|
$addsol->( -2.740, -2.54, +0.022, 0.0324, 2, 1, 0, -4 ); |
|
212
|
2
|
|
|
|
|
7
|
$addsol->( 1.181, 3.32, -0.212, 0.0213, 2, -1, 0, +2 ); |
|
213
|
2
|
|
|
|
|
6
|
$addsol->( 9.703, 11.67, -0.151, 0.1268, 2, -1, 0, 0 ); |
|
214
|
2
|
|
|
|
|
5
|
$addsol->( -0.352, -0.37, +0.001, -0.0028, 2, -1, 0, -1 ); |
|
215
|
2
|
|
|
|
|
6
|
$addsol->( -2.494, -1.17, -0.003, -0.0017, 2, -1, 0, -2 ); |
|
216
|
2
|
|
|
|
|
6
|
$addsol->( 0.360, 0.20, -0.012, -0.0043, 2, -1, 0, -4 ); |
|
217
|
2
|
|
|
|
|
6
|
$addsol->( -1.167, -1.25, +0.008, -0.0106, 1, 2, 0, 0 ); |
|
218
|
2
|
|
|
|
|
5
|
$addsol->( -7.412, -6.12, +0.117, 0.0484, 1, 2, 0, -2 ); |
|
219
|
2
|
|
|
|
|
6
|
$addsol->( -0.311, -0.65, -0.032, 0.0044, 1, 2, 0, -4 ); |
|
220
|
2
|
|
|
|
|
5
|
$addsol->( +0.757, 1.82, -0.105, 0.0112, 1, -2, 0, 2 ); |
|
221
|
2
|
|
|
|
|
7
|
$addsol->( +2.580, 2.32, +0.027, 0.0196, 1, -2, 0, 0 ); |
|
222
|
2
|
|
|
|
|
7
|
$addsol->( +2.533, 2.40, -0.014, -0.0212, 1, -2, 0, -2 ); |
|
223
|
2
|
|
|
|
|
13
|
$addsol->( -0.344, -0.57, -0.025, +0.0036, 0, 3, 0, -2 ); |
|
224
|
2
|
|
|
|
|
7
|
$addsol->( -0.992, -0.02, 0.0, 0.0, 1, 0, 2, 2 ); |
|
225
|
2
|
|
|
|
|
5
|
$addsol->( -45.099, -0.02, 0.0, -0.0010, 1, 0, 2, 0 ); |
|
226
|
2
|
|
|
|
|
6
|
$addsol->( -0.179, -9.52, 0.0, -0.0833, 1, 0, 2, -2 ); |
|
227
|
2
|
|
|
|
|
7
|
$addsol->( -0.301, -0.33, 0.0, 0.0014, 1, 0, 2, -4 ); |
|
228
|
2
|
|
|
|
|
6
|
$addsol->( -6.382, -3.37, 0.0, -0.0481, 1, 0, -2, 2 ); |
|
229
|
2
|
|
|
|
|
6
|
$addsol->( 39.528, 85.13, 0.0, -0.7136, 1, 0, -2, 0 ); |
|
230
|
2
|
|
|
|
|
5
|
$addsol->( 9.366, 0.71, 0.0, -0.0112, 1, 0, -2, -2 ); |
|
231
|
2
|
|
|
|
|
4
|
$addsol->( 0.202, 0.02, 0.0, 0.0, 1, 0, -2, -4 ); |
|
232
|
2
|
|
|
|
|
11
|
}; |
|
233
|
|
|
|
|
|
|
|
|
234
|
|
|
|
|
|
|
my $solar_3 = sub { |
|
235
|
2
|
|
|
2
|
|
6
|
$addsol->( 0.415, 0.10, 0.0, 0.0013, 0, 1, 2, 0 ); |
|
236
|
2
|
|
|
|
|
7
|
$addsol->( -2.152, -2.26, 0.0, -0.0066, 0, 1, 2, -2 ); |
|
237
|
2
|
|
|
|
|
6
|
$addsol->( -1.440, -1.30, 0.0, +0.0014, 0, 1, -2, 2 ); |
|
238
|
2
|
|
|
|
|
6
|
$addsol->( 0.384, -0.04, 0.0, 0.0, 0, 1, -2, -2 ); |
|
239
|
2
|
|
|
|
|
5
|
$addsol->( +1.938, +3.60, -0.145, +0.0401, 4, 0, 0, 0 ); |
|
240
|
2
|
|
|
|
|
8
|
$addsol->( -0.952, -1.58, +0.052, -0.0130, 4, 0, 0, -2 ); |
|
241
|
2
|
|
|
|
|
8
|
$addsol->( -0.551, -0.94, +0.032, -0.0097, 3, 1, 0, 0 ); |
|
242
|
2
|
|
|
|
|
6
|
$addsol->( -0.482, -0.57, +0.005, -0.0045, 3, 1, 0, -2 ); |
|
243
|
2
|
|
|
|
|
6
|
$addsol->( 0.681, 0.96, -0.026, 0.0115, 3, -1, 0, 0 ); |
|
244
|
2
|
|
|
|
|
7
|
$addsol->( -0.297, -0.27, 0.002, -0.0009, 2, 2, 0, -2 ); |
|
245
|
2
|
|
|
|
|
7
|
$addsol->( 0.254, +0.21, -0.003, 0.0, 2, -2, 0, -2 ); |
|
246
|
2
|
|
|
|
|
5
|
$addsol->( -0.250, -0.22, 0.004, 0.0014, 1, 3, 0, -2 ); |
|
247
|
2
|
|
|
|
|
6
|
$addsol->( -3.996, 0.0, 0.0, +0.0004, 2, 0, 2, 0 ); |
|
248
|
2
|
|
|
|
|
7
|
$addsol->( 0.557, -0.75, 0.0, -0.0090, 2, 0, 2, -2 ); |
|
249
|
2
|
|
|
|
|
7
|
$addsol->( -0.459, -0.38, 0.0, -0.0053, 2, 0, -2, 2 ); |
|
250
|
2
|
|
|
|
|
7
|
$addsol->( -1.298, 0.74, 0.0, +0.0004, 2, 0, -2, 0 ); |
|
251
|
2
|
|
|
|
|
6
|
$addsol->( 0.538, 1.14, 0.0, -0.0141, 2, 0, -2, -2 ); |
|
252
|
2
|
|
|
|
|
5
|
$addsol->( 0.263, 0.02, 0.0, 0.0, 1, 1, 2, 0 ); |
|
253
|
2
|
|
|
|
|
6
|
$addsol->( 0.426, +0.07, 0.0, -0.0006, 1, 1, -2, -2 ); |
|
254
|
2
|
|
|
|
|
6
|
$addsol->( -0.304, +0.03, 0.0, +0.0003, 1, -1, 2, 0 ); |
|
255
|
2
|
|
|
|
|
6
|
$addsol->( -0.372, -0.19, 0.0, -0.0027, 1, -1, -2, 2 ); |
|
256
|
2
|
|
|
|
|
6
|
$addsol->( +0.418, 0.0, 0.0, 0.0, 0, 0, 4, 0 ); |
|
257
|
2
|
|
|
|
|
6
|
$addsol->( -0.330, -0.04, 0.0, 0.0, 3, 0, 2, 0 ); |
|
258
|
2
|
|
|
|
|
17
|
}; |
|
259
|
|
|
|
|
|
|
|
|
260
|
|
|
|
|
|
|
# part N of the perturbations of ecliptic latitude |
|
261
|
|
|
|
|
|
|
my $solar_n = sub { |
|
262
|
|
|
|
|
|
|
my $addn = sub { |
|
263
|
18
|
|
|
|
|
29
|
my $coeffn = shift; |
|
264
|
18
|
|
|
|
|
28
|
my ( $x, $y ) = $term->(@_); |
|
265
|
18
|
|
|
|
|
36
|
$n += $coeffn * $y; |
|
266
|
2
|
|
|
2
|
|
12
|
}; |
|
267
|
|
|
|
|
|
|
|
|
268
|
2
|
|
|
|
|
15
|
$addn->( -526.069, 0, 0, 1, -2 ); |
|
269
|
2
|
|
|
|
|
9
|
$addn->( -3.352, 0, 0, 1, -4 ); |
|
270
|
2
|
|
|
|
|
5
|
$addn->( +44.297, +1, 0, 1, -2 ); |
|
271
|
2
|
|
|
|
|
7
|
$addn->( -6.000, +1, 0, 1, -4 ); |
|
272
|
2
|
|
|
|
|
7
|
$addn->( +20.599, -1, 0, 1, 0 ); |
|
273
|
2
|
|
|
|
|
6
|
$addn->( -30.598, -1, 0, 1, -2 ); |
|
274
|
2
|
|
|
|
|
8
|
$addn->( -24.649, -2, 0, 1, 0 ); |
|
275
|
2
|
|
|
|
|
6
|
$addn->( -2.000, -2, 0, 1, -2 ); |
|
276
|
2
|
|
|
|
|
6
|
$addn->( -22.571, 0, +1, 1, -2 ); |
|
277
|
2
|
|
|
|
|
15
|
}; |
|
278
|
|
|
|
|
|
|
|
|
279
|
|
|
|
|
|
|
# perturbations of ecliptic latitude by Venus and Moon |
|
280
|
|
|
|
|
|
|
my $planetary = sub { |
|
281
|
2
|
|
|
2
|
|
9
|
$dlam += |
|
282
|
|
|
|
|
|
|
+0.82 * sine( 0.7736 - 62.5512 * $t ) + |
|
283
|
|
|
|
|
|
|
0.31 * sine( 0.0466 - 125.1025 * $t ) + |
|
284
|
|
|
|
|
|
|
0.35 * sine( 0.5785 - 25.1042 * $t ) + |
|
285
|
|
|
|
|
|
|
0.66 * sine( 0.4591 + 1335.8075 * $t ) + |
|
286
|
|
|
|
|
|
|
0.64 * sine( 0.3130 - 91.5680 * $t ) + |
|
287
|
|
|
|
|
|
|
1.14 * sine( 0.1480 + 1331.2898 * $t ) + |
|
288
|
|
|
|
|
|
|
0.21 * sine( 0.5918 + 1056.5859 * $t ) + |
|
289
|
|
|
|
|
|
|
0.44 * sine( 0.5784 + 1322.8595 * $t ) + |
|
290
|
|
|
|
|
|
|
0.24 * sine( 0.2275 - 5.7374 * $t ) + |
|
291
|
|
|
|
|
|
|
0.28 * sine( 0.2965 + 2.6929 * $t ) + |
|
292
|
|
|
|
|
|
|
0.33 * sine( 0.3132 + 6.3368 * $t ); |
|
293
|
2
|
|
|
|
|
11
|
}; |
|
294
|
|
|
|
|
|
|
|
|
295
|
|
|
|
|
|
|
# |
|
296
|
|
|
|
|
|
|
# start |
|
297
|
|
|
|
|
|
|
# |
|
298
|
2
|
|
|
|
|
5
|
$init->(); |
|
299
|
2
|
|
|
|
|
9
|
$solar_1->(); |
|
300
|
2
|
|
|
|
|
6
|
$solar_2->(); |
|
301
|
2
|
|
|
|
|
7
|
$solar_3->(); |
|
302
|
2
|
|
|
|
|
6
|
$solar_n->(); |
|
303
|
2
|
|
|
|
|
5
|
$planetary->(); |
|
304
|
|
|
|
|
|
|
|
|
305
|
2
|
|
|
|
|
12
|
my $lambda = reduce_deg( rad2deg( $l0 + $dlam / ARCS ) ); |
|
306
|
2
|
|
|
|
|
15
|
my $s = $f + $ds / ARCS; |
|
307
|
2
|
|
|
|
|
10
|
my $fac = 1.000002708 + 139.978 * $dgam; |
|
308
|
2
|
|
|
|
|
8
|
my $beta = |
|
309
|
|
|
|
|
|
|
( $fac * ( 18518.511 + 1.189 + $gam1c ) * sin($s) - |
|
310
|
|
|
|
|
|
|
6.24 * sin( 3 * $s ) + |
|
311
|
|
|
|
|
|
|
$n ) / 3600.0; |
|
312
|
|
|
|
|
|
|
|
|
313
|
|
|
|
|
|
|
# equatorial horizontal parallax |
|
314
|
2
|
|
|
|
|
4
|
$sinpi *= 0.999953253; |
|
315
|
|
|
|
|
|
|
|
|
316
|
|
|
|
|
|
|
# the original: wrong value my $r = ARCS / $sinpi; |
|
317
|
2
|
|
|
|
|
3
|
my $delta = 8.794 / $sinpi; |
|
318
|
|
|
|
|
|
|
|
|
319
|
2
|
|
|
|
|
133
|
$lambda, $beta, $delta |
|
320
|
|
|
|
|
|
|
|
|
321
|
|
|
|
|
|
|
} |
|
322
|
|
|
|
|
|
|
|
|
323
|
|
|
|
|
|
|
1; |
|
324
|
|
|
|
|
|
|
|
|
325
|
|
|
|
|
|
|
__END__ |
|
326
|
|
|
|
|
|
|
|
|
327
|
|
|
|
|
|
|
=pod |
|
328
|
|
|
|
|
|
|
|
|
329
|
|
|
|
|
|
|
=encoding UTF-8 |
|
330
|
|
|
|
|
|
|
|
|
331
|
|
|
|
|
|
|
=head1 NAME |
|
332
|
|
|
|
|
|
|
|
|
333
|
|
|
|
|
|
|
Astro::Montenbruck::Ephemeris::Planet::Moon - Moon. |
|
334
|
|
|
|
|
|
|
|
|
335
|
|
|
|
|
|
|
=head1 SYNOPSIS |
|
336
|
|
|
|
|
|
|
|
|
337
|
|
|
|
|
|
|
use Astro::Montenbruck::Ephemeris::Planet::Moon; |
|
338
|
|
|
|
|
|
|
my $planet = Astro::Montenbruck::Ephemeris::Planet::Moon->new(); |
|
339
|
|
|
|
|
|
|
my @geo = $planet->position($t); # apparent geocentric ecliptical coordinates |
|
340
|
|
|
|
|
|
|
|
|
341
|
|
|
|
|
|
|
=head1 DESCRIPTION |
|
342
|
|
|
|
|
|
|
|
|
343
|
|
|
|
|
|
|
Child class of L<Astro::Montenbruck::Ephemeris::Planet>, responsible for calculating |
|
344
|
|
|
|
|
|
|
B<Moon> position. |
|
345
|
|
|
|
|
|
|
|
|
346
|
|
|
|
|
|
|
=head1 METHODS |
|
347
|
|
|
|
|
|
|
|
|
348
|
|
|
|
|
|
|
=head2 Astro::Montenbruck::Ephemeris::Planet::Moon->new |
|
349
|
|
|
|
|
|
|
|
|
350
|
|
|
|
|
|
|
Constructor. |
|
351
|
|
|
|
|
|
|
|
|
352
|
|
|
|
|
|
|
=head2 $self->position($t) |
|
353
|
|
|
|
|
|
|
|
|
354
|
|
|
|
|
|
|
Geocentric ecliptic coordinates of the Moon |
|
355
|
|
|
|
|
|
|
|
|
356
|
|
|
|
|
|
|
=head3 Arguments |
|
357
|
|
|
|
|
|
|
|
|
358
|
|
|
|
|
|
|
=over |
|
359
|
|
|
|
|
|
|
|
|
360
|
|
|
|
|
|
|
=item B<$t> â time in Julian centuries since J2000: (JD-2451545.0)/36525.0 |
|
361
|
|
|
|
|
|
|
|
|
362
|
|
|
|
|
|
|
=back |
|
363
|
|
|
|
|
|
|
|
|
364
|
|
|
|
|
|
|
=head3 Returns |
|
365
|
|
|
|
|
|
|
|
|
366
|
|
|
|
|
|
|
Hash of geocentric ecliptical coordinates. |
|
367
|
|
|
|
|
|
|
|
|
368
|
|
|
|
|
|
|
=over |
|
369
|
|
|
|
|
|
|
|
|
370
|
|
|
|
|
|
|
=item * B<x> â geocentric longitude, arc-degrees |
|
371
|
|
|
|
|
|
|
|
|
372
|
|
|
|
|
|
|
=item * B<y> â geocentric latitude, arc-degrees |
|
373
|
|
|
|
|
|
|
|
|
374
|
|
|
|
|
|
|
=item * B<z> â distance from Earth, AU |
|
375
|
|
|
|
|
|
|
|
|
376
|
|
|
|
|
|
|
=back |
|
377
|
|
|
|
|
|
|
|
|
378
|
|
|
|
|
|
|
|
|
379
|
|
|
|
|
|
|
=head1 AUTHOR |
|
380
|
|
|
|
|
|
|
|
|
381
|
|
|
|
|
|
|
Sergey Krushinsky, C<< <krushi at cpan.org> >> |
|
382
|
|
|
|
|
|
|
|
|
383
|
|
|
|
|
|
|
=head1 COPYRIGHT AND LICENSE |
|
384
|
|
|
|
|
|
|
|
|
385
|
|
|
|
|
|
|
Copyright (C) 2009-2019 by Sergey Krushinsky |
|
386
|
|
|
|
|
|
|
|
|
387
|
|
|
|
|
|
|
This library is free software; you can redistribute it and/or modify |
|
388
|
|
|
|
|
|
|
it under the same terms as Perl itself. |
|
389
|
|
|
|
|
|
|
|
|
390
|
|
|
|
|
|
|
=cut |