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