File Coverage

lib/Astro/Montenbruck/Ephemeris/Planet/Moon.pm
Criterion Covered Total %
statement 234 234 100.0
branch 2 2 100.0
condition n/a
subroutine 21 21 100.0
pod 3 3 100.0
total 260 260 100.0


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