| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
=head1 NAME |
|
2
|
|
|
|
|
|
|
|
|
3
|
|
|
|
|
|
|
Astro::Coord::ECI::Star - Compute the position of a star. |
|
4
|
|
|
|
|
|
|
|
|
5
|
|
|
|
|
|
|
=head1 SYNOPSIS |
|
6
|
|
|
|
|
|
|
|
|
7
|
|
|
|
|
|
|
use Astro::Coord::ECI; |
|
8
|
|
|
|
|
|
|
use Astro::Coord::ECI::Star; |
|
9
|
|
|
|
|
|
|
use Astro::Coord::ECI::Utils qw{deg2rad}; |
|
10
|
|
|
|
|
|
|
|
|
11
|
|
|
|
|
|
|
# 1600 Pennsylvania Ave, Washington DC USA |
|
12
|
|
|
|
|
|
|
# latitude 38.899 N, longitude 77.038 W, |
|
13
|
|
|
|
|
|
|
# altitude 16.68 meters above sea level |
|
14
|
|
|
|
|
|
|
my $lat = deg2rad (38.899); # Radians |
|
15
|
|
|
|
|
|
|
my $long = deg2rad (-77.038); # Radians |
|
16
|
|
|
|
|
|
|
my $alt = 16.68 / 1000; # Kilometers |
|
17
|
|
|
|
|
|
|
|
|
18
|
|
|
|
|
|
|
my $star = Astro::Coord::ECI::Star->new ( |
|
19
|
|
|
|
|
|
|
name => 'Spica')->position( |
|
20
|
|
|
|
|
|
|
3.51331869544372, # Right ascension, radians |
|
21
|
|
|
|
|
|
|
-0.194802985206623, # Declination, radians |
|
22
|
|
|
|
|
|
|
); |
|
23
|
|
|
|
|
|
|
my $sta = Astro::Coord::ECI-> |
|
24
|
|
|
|
|
|
|
universal (time ())-> |
|
25
|
|
|
|
|
|
|
geodetic ($lat, $long, $alt); |
|
26
|
|
|
|
|
|
|
my ($time, $rise) = $sta->next_elevation ($star); |
|
27
|
|
|
|
|
|
|
print "Star @{[$rise ? 'rise' : 'set']} is ", |
|
28
|
|
|
|
|
|
|
scalar localtime $time, "\n"; |
|
29
|
|
|
|
|
|
|
|
|
30
|
|
|
|
|
|
|
=head1 DESCRIPTION |
|
31
|
|
|
|
|
|
|
|
|
32
|
|
|
|
|
|
|
This module implements the position of a star (or any other object |
|
33
|
|
|
|
|
|
|
which can be regarded as fixed on the celestial sphere) as a function |
|
34
|
|
|
|
|
|
|
of time, as described in Jean Meeus' "Astronomical Algorithms," second |
|
35
|
|
|
|
|
|
|
edition. It is a subclass of L, |
|
36
|
|
|
|
|
|
|
with a position() method to set the catalog position (and optionally |
|
37
|
|
|
|
|
|
|
proper motion as well), and the time_set() method overridden to compute |
|
38
|
|
|
|
|
|
|
the position of the star at the given time. |
|
39
|
|
|
|
|
|
|
|
|
40
|
|
|
|
|
|
|
=head2 Methods |
|
41
|
|
|
|
|
|
|
|
|
42
|
|
|
|
|
|
|
The following methods should be considered public: |
|
43
|
|
|
|
|
|
|
|
|
44
|
|
|
|
|
|
|
=over |
|
45
|
|
|
|
|
|
|
|
|
46
|
|
|
|
|
|
|
=cut |
|
47
|
|
|
|
|
|
|
|
|
48
|
|
|
|
|
|
|
package Astro::Coord::ECI::Star; |
|
49
|
|
|
|
|
|
|
|
|
50
|
4
|
|
|
4
|
|
3038
|
use strict; |
|
|
4
|
|
|
|
|
10
|
|
|
|
4
|
|
|
|
|
121
|
|
|
51
|
4
|
|
|
4
|
|
21
|
use warnings; |
|
|
4
|
|
|
|
|
8
|
|
|
|
4
|
|
|
|
|
228
|
|
|
52
|
|
|
|
|
|
|
|
|
53
|
|
|
|
|
|
|
our $VERSION = '0.129'; |
|
54
|
|
|
|
|
|
|
|
|
55
|
4
|
|
|
4
|
|
27
|
use base qw{Astro::Coord::ECI}; |
|
|
4
|
|
|
|
|
22
|
|
|
|
4
|
|
|
|
|
419
|
|
|
56
|
|
|
|
|
|
|
|
|
57
|
4
|
|
|
4
|
|
27
|
use Astro::Coord::ECI::Utils qw{ @CARP_NOT :mainstream }; |
|
|
4
|
|
|
|
|
10
|
|
|
|
4
|
|
|
|
|
1639
|
|
|
58
|
4
|
|
|
4
|
|
39
|
use Carp; |
|
|
4
|
|
|
|
|
9
|
|
|
|
4
|
|
|
|
|
245
|
|
|
59
|
4
|
|
|
4
|
|
1228
|
use Data::Dumper; |
|
|
4
|
|
|
|
|
13707
|
|
|
|
4
|
|
|
|
|
246
|
|
|
60
|
4
|
|
|
4
|
|
28
|
use POSIX qw{floor strftime}; |
|
|
4
|
|
|
|
|
9
|
|
|
|
4
|
|
|
|
|
39
|
|
|
61
|
|
|
|
|
|
|
|
|
62
|
|
|
|
|
|
|
=item $star = Astro::Coord::ECI::Star->new(); |
|
63
|
|
|
|
|
|
|
|
|
64
|
|
|
|
|
|
|
This method instantiates an object to represent the coordinates of a |
|
65
|
|
|
|
|
|
|
star, or some other object which may be regarded as fixed on the |
|
66
|
|
|
|
|
|
|
celestial sphere. This is a subclass of B, with the |
|
67
|
|
|
|
|
|
|
angularvelocity attribute initialized to zero. |
|
68
|
|
|
|
|
|
|
|
|
69
|
|
|
|
|
|
|
Truth in advertising: The positions produced by this model are about |
|
70
|
|
|
|
|
|
|
four arc seconds off Dr. Meeus' worked example for the position of |
|
71
|
|
|
|
|
|
|
Theta Persei for Dynamical time November 13.19, 2028. This seems |
|
72
|
|
|
|
|
|
|
excessive, but it's difficult to check intermediate results because |
|
73
|
|
|
|
|
|
|
this calculation goes through ecliptic coordinates, whereas Dr. Meeus' |
|
74
|
|
|
|
|
|
|
worked example is in equatorial coordinates. |
|
75
|
|
|
|
|
|
|
|
|
76
|
|
|
|
|
|
|
=cut |
|
77
|
|
|
|
|
|
|
|
|
78
|
|
|
|
|
|
|
sub new { |
|
79
|
2
|
|
|
2
|
1
|
111
|
my ($class, @args) = @_; |
|
80
|
2
|
50
|
|
|
|
10
|
ref $class and $class = ref $class; |
|
81
|
2
|
|
|
|
|
20
|
return $class->SUPER::new (angularvelocity => 0, |
|
82
|
|
|
|
|
|
|
@args); |
|
83
|
|
|
|
|
|
|
} |
|
84
|
|
|
|
|
|
|
|
|
85
|
|
|
|
|
|
|
=item @almanac = $star->almanac($station, $start, $end); |
|
86
|
|
|
|
|
|
|
|
|
87
|
|
|
|
|
|
|
This method produces almanac data for the star for the given observing |
|
88
|
|
|
|
|
|
|
station, between the given start and end times. The station is assumed |
|
89
|
|
|
|
|
|
|
to be Earth-Fixed - that is, you can not do this for something in orbit. |
|
90
|
|
|
|
|
|
|
|
|
91
|
|
|
|
|
|
|
The C<$station> argument may be omitted if the C attribute has |
|
92
|
|
|
|
|
|
|
been set. That is, this method can also be called as |
|
93
|
|
|
|
|
|
|
|
|
94
|
|
|
|
|
|
|
@almanac = $star->almanac( $start, $end ) |
|
95
|
|
|
|
|
|
|
|
|
96
|
|
|
|
|
|
|
The start time defaults to the current time setting of the $star |
|
97
|
|
|
|
|
|
|
object, and the end time defaults to a day after the start time. |
|
98
|
|
|
|
|
|
|
|
|
99
|
|
|
|
|
|
|
The almanac data consists of a list of list references. Each list |
|
100
|
|
|
|
|
|
|
reference points to a list containing the following elements: |
|
101
|
|
|
|
|
|
|
|
|
102
|
|
|
|
|
|
|
[0] => time |
|
103
|
|
|
|
|
|
|
[1] => event (string) |
|
104
|
|
|
|
|
|
|
[2] => detail (integer) |
|
105
|
|
|
|
|
|
|
[3] => description (string) |
|
106
|
|
|
|
|
|
|
|
|
107
|
|
|
|
|
|
|
The @almanac list is returned sorted by time. |
|
108
|
|
|
|
|
|
|
|
|
109
|
|
|
|
|
|
|
The following events, details, and descriptions are at least |
|
110
|
|
|
|
|
|
|
potentially returned: |
|
111
|
|
|
|
|
|
|
|
|
112
|
|
|
|
|
|
|
horizon: 0 = star sets, 1 = star rises; |
|
113
|
|
|
|
|
|
|
transit: 1 = star transits meridian; |
|
114
|
|
|
|
|
|
|
|
|
115
|
|
|
|
|
|
|
=cut |
|
116
|
|
|
|
|
|
|
|
|
117
|
|
|
|
|
|
|
sub __almanac_event_type_iterator { |
|
118
|
0
|
|
|
0
|
|
0
|
my ( $self, $station ) = @_; |
|
119
|
|
|
|
|
|
|
|
|
120
|
0
|
|
|
|
|
0
|
my $inx = 0; |
|
121
|
|
|
|
|
|
|
|
|
122
|
0
|
|
|
|
|
0
|
my $horizon = $station->__get_almanac_horizon(); |
|
123
|
|
|
|
|
|
|
|
|
124
|
0
|
|
|
|
|
0
|
my @events = ( |
|
125
|
|
|
|
|
|
|
[ $station, next_elevation => [ $self, $horizon, 1 ], |
|
126
|
|
|
|
|
|
|
horizon => '__horizon_name' ], |
|
127
|
|
|
|
|
|
|
[ $station, next_meridian => [ $self ], |
|
128
|
|
|
|
|
|
|
transit => '__transit_name' ], |
|
129
|
|
|
|
|
|
|
); |
|
130
|
|
|
|
|
|
|
|
|
131
|
|
|
|
|
|
|
return sub { |
|
132
|
|
|
|
|
|
|
$inx < @events |
|
133
|
0
|
0
|
|
0
|
|
0
|
and return @{ $events[$inx++] }; |
|
|
0
|
|
|
|
|
0
|
|
|
134
|
0
|
|
|
|
|
0
|
return; |
|
135
|
0
|
|
|
|
|
0
|
}; |
|
136
|
|
|
|
|
|
|
} |
|
137
|
|
|
|
|
|
|
|
|
138
|
4
|
|
|
4
|
|
1426
|
use Astro::Coord::ECI::Mixin qw{ almanac }; |
|
|
4
|
|
|
|
|
9
|
|
|
|
4
|
|
|
|
|
219
|
|
|
139
|
|
|
|
|
|
|
|
|
140
|
|
|
|
|
|
|
=item @almanac = $star->almanac_hash($station, $start, $end); |
|
141
|
|
|
|
|
|
|
|
|
142
|
|
|
|
|
|
|
This convenience method wraps $star->almanac(), but returns a list of |
|
143
|
|
|
|
|
|
|
hash references, sort of like Astro::Coord::ECI::TLE->pass() |
|
144
|
|
|
|
|
|
|
does. The hashes contain the following keys: |
|
145
|
|
|
|
|
|
|
|
|
146
|
|
|
|
|
|
|
{almanac} => { |
|
147
|
|
|
|
|
|
|
{event} => the event type; |
|
148
|
|
|
|
|
|
|
{detail} => the event detail (typically 0 or 1); |
|
149
|
|
|
|
|
|
|
{description} => the event description; |
|
150
|
|
|
|
|
|
|
} |
|
151
|
|
|
|
|
|
|
{body} => the original object ($star); |
|
152
|
|
|
|
|
|
|
{station} => the observing station; |
|
153
|
|
|
|
|
|
|
{time} => the time the quarter occurred. |
|
154
|
|
|
|
|
|
|
|
|
155
|
|
|
|
|
|
|
The {time}, {event}, {detail}, and {description} keys correspond to |
|
156
|
|
|
|
|
|
|
elements 0 through 3 of the list returned by almanac(). |
|
157
|
|
|
|
|
|
|
|
|
158
|
|
|
|
|
|
|
=cut |
|
159
|
|
|
|
|
|
|
|
|
160
|
4
|
|
|
4
|
|
26
|
use Astro::Coord::ECI::Mixin qw{ almanac_hash }; |
|
|
4
|
|
|
|
|
9
|
|
|
|
4
|
|
|
|
|
181
|
|
|
161
|
|
|
|
|
|
|
|
|
162
|
4
|
|
|
4
|
|
23
|
use constant NEVER_PASS_ELEV => 2 * __PACKAGE__->SECSPERDAY; |
|
|
4
|
|
|
|
|
8
|
|
|
|
4
|
|
|
|
|
869
|
|
|
163
|
|
|
|
|
|
|
|
|
164
|
|
|
|
|
|
|
=item $star = $star->position($ra, $dec, $range, $mra, $mdc, $mrg, $time); |
|
165
|
|
|
|
|
|
|
|
|
166
|
|
|
|
|
|
|
This method sets the position and proper motion of the star in |
|
167
|
|
|
|
|
|
|
equatorial coordinates. Right ascension and declination are |
|
168
|
|
|
|
|
|
|
specified in radians, and range in kilometers. Proper motion in |
|
169
|
|
|
|
|
|
|
range and declination is specified in radians B (an |
|
170
|
|
|
|
|
|
|
B small number!), and the proper motion in recession |
|
171
|
|
|
|
|
|
|
in kilometers per second. |
|
172
|
|
|
|
|
|
|
|
|
173
|
|
|
|
|
|
|
The range defaults to 1 parsec, which is too close but probably good |
|
174
|
|
|
|
|
|
|
enough since we do not take parallax into account when computing |
|
175
|
|
|
|
|
|
|
position, and since you can override it with a range (in km!) if you so |
|
176
|
|
|
|
|
|
|
desire. The proper motions default to 0. The time defaults to J2000.0, |
|
177
|
|
|
|
|
|
|
and is used to set not only the current time of the object but also the |
|
178
|
|
|
|
|
|
|
equinox_dynamical. If you are not interested in proper motion but are |
|
179
|
|
|
|
|
|
|
interested in time, omit the proper motion arguments completely and |
|
180
|
|
|
|
|
|
|
specify time as the fourth argument. |
|
181
|
|
|
|
|
|
|
|
|
182
|
|
|
|
|
|
|
If you call this as a class method, a new Astro::Coord::ECI::Star |
|
183
|
|
|
|
|
|
|
object will be constructed. If you call it without arguments, the |
|
184
|
|
|
|
|
|
|
position of the star is returned. |
|
185
|
|
|
|
|
|
|
|
|
186
|
|
|
|
|
|
|
Note that this is B simply a synonym for the equatorial() method. |
|
187
|
|
|
|
|
|
|
The equatorial() method returns the position of the star corrected for |
|
188
|
|
|
|
|
|
|
precession and nutation. This method is used to set the catalog |
|
189
|
|
|
|
|
|
|
position of the star in question. |
|
190
|
|
|
|
|
|
|
|
|
191
|
|
|
|
|
|
|
=cut |
|
192
|
|
|
|
|
|
|
|
|
193
|
|
|
|
|
|
|
sub position { |
|
194
|
2
|
|
|
2
|
1
|
10
|
my ($self, @args) = @_; |
|
195
|
2
|
50
|
|
|
|
15
|
return @{$self->{_star_position}} unless @args; |
|
|
0
|
|
|
|
|
0
|
|
|
196
|
2
|
|
50
|
|
|
7
|
$args[2] ||= PARSEC; |
|
197
|
2
|
50
|
|
|
|
9
|
@args < 5 and splice @args, 3, 0, 0, 0, 0; |
|
198
|
2
|
|
50
|
|
|
7
|
$args[3] ||= 0; |
|
199
|
2
|
|
50
|
|
|
7
|
$args[4] ||= 0; |
|
200
|
2
|
|
100
|
|
|
8
|
$args[5] ||= 0; |
|
201
|
2
|
|
50
|
|
|
13
|
$args[6] ||= PERL2000; |
|
202
|
2
|
50
|
|
|
|
5
|
$self = $self->new () unless ref $self; |
|
203
|
2
|
|
|
|
|
8
|
$self->{_star_position} = [@args]; |
|
204
|
|
|
|
|
|
|
# CAVEAT: time_set() picks the equinox directly out of the above |
|
205
|
|
|
|
|
|
|
# hash. |
|
206
|
2
|
|
|
|
|
18
|
$self->dynamical ($args[6]); |
|
207
|
2
|
|
|
|
|
7
|
return $self; |
|
208
|
|
|
|
|
|
|
} |
|
209
|
|
|
|
|
|
|
|
|
210
|
|
|
|
|
|
|
=item $star->time_set() |
|
211
|
|
|
|
|
|
|
|
|
212
|
|
|
|
|
|
|
This method sets coordinates of the object to the coordinates of the |
|
213
|
|
|
|
|
|
|
star at the object's currently-set universal time. Proper motion is |
|
214
|
|
|
|
|
|
|
taken into account if this was specified. |
|
215
|
|
|
|
|
|
|
|
|
216
|
|
|
|
|
|
|
Although there's no reason this method can't be called directly, it |
|
217
|
|
|
|
|
|
|
exists to take advantage of the hook in the B |
|
218
|
|
|
|
|
|
|
object, to allow the position of the star to be computed when the |
|
219
|
|
|
|
|
|
|
time is set. |
|
220
|
|
|
|
|
|
|
|
|
221
|
|
|
|
|
|
|
The computation comes from Jean Meeus' "Astronomical Algorithms", 2nd |
|
222
|
|
|
|
|
|
|
Edition, Chapter 23, pages 149ff. |
|
223
|
|
|
|
|
|
|
|
|
224
|
|
|
|
|
|
|
B, however, that for consistency with the |
|
225
|
|
|
|
|
|
|
L and |
|
226
|
|
|
|
|
|
|
L classes, the position |
|
227
|
|
|
|
|
|
|
is precessed to the current time setting. |
|
228
|
|
|
|
|
|
|
|
|
229
|
|
|
|
|
|
|
=cut |
|
230
|
|
|
|
|
|
|
|
|
231
|
4
|
|
|
4
|
|
31
|
use constant CONSTANT_OF_ABERRATION => deg2rad (20.49552 / 3600); |
|
|
4
|
|
|
|
|
8
|
|
|
|
4
|
|
|
|
|
19
|
|
|
232
|
|
|
|
|
|
|
|
|
233
|
|
|
|
|
|
|
sub time_set { |
|
234
|
1124
|
|
|
1124
|
1
|
1595
|
my $self = shift; |
|
235
|
|
|
|
|
|
|
|
|
236
|
1124
|
50
|
|
|
|
2341
|
$self->{_star_position} or croak <
|
|
237
|
|
|
|
|
|
|
Error - The position of the star has not been set. |
|
238
|
|
|
|
|
|
|
eod |
|
239
|
|
|
|
|
|
|
|
|
240
|
|
|
|
|
|
|
my ($ra, $dec, $range, $mra, $mdc, $mrg, $epoch) = @{ |
|
241
|
1124
|
|
|
|
|
1526
|
$self->{_star_position}}; |
|
|
1124
|
|
|
|
|
2821
|
|
|
242
|
|
|
|
|
|
|
|
|
243
|
1124
|
|
|
|
|
2886
|
my $time = $self->universal; |
|
244
|
1124
|
|
|
|
|
2508
|
my $end = $self->dynamical; |
|
245
|
|
|
|
|
|
|
|
|
246
|
|
|
|
|
|
|
# Account for the proper motion of the star, and set our |
|
247
|
|
|
|
|
|
|
# equatorial coordinates to the result. |
|
248
|
|
|
|
|
|
|
|
|
249
|
1124
|
|
|
|
|
2154
|
my $deltat = $end - $epoch; |
|
250
|
|
|
|
|
|
|
#### $ra += $mra * $deltat; |
|
251
|
1124
|
|
|
|
|
2788
|
$ra = mod2pi($ra + $mra * $deltat); |
|
252
|
1124
|
|
|
|
|
1831
|
$dec += $mdc * $deltat; |
|
253
|
1124
|
|
|
|
|
1608
|
$range += $mrg * $deltat; |
|
254
|
|
|
|
|
|
|
##!! $self->set (equinox => $epoch); |
|
255
|
1124
|
|
|
|
|
3426
|
$self->equatorial ($ra, $dec, $range); |
|
256
|
|
|
|
|
|
|
|
|
257
|
|
|
|
|
|
|
# NOTE: The call to precess() used to be here. I have no idea why, |
|
258
|
|
|
|
|
|
|
# other than that I thought I could go back and forth between |
|
259
|
|
|
|
|
|
|
# coordinates less (since I implemented in terms equatorial |
|
260
|
|
|
|
|
|
|
# coordinates). It seems to me at this point (version 0.003_04, |
|
261
|
|
|
|
|
|
|
# 25-Oct-2007) that since precessing to a different equinox is |
|
262
|
|
|
|
|
|
|
# actually just a coordinate transform that it should come last. |
|
263
|
|
|
|
|
|
|
# Meeus actually gives the algorithm in ecliptic coordinates also; |
|
264
|
|
|
|
|
|
|
# if the transform could be smart, I could skip a couple |
|
265
|
|
|
|
|
|
|
# coordinate transforms. |
|
266
|
|
|
|
|
|
|
|
|
267
|
|
|
|
|
|
|
# Get ecliptic coordinates, and correct for nutation. |
|
268
|
|
|
|
|
|
|
|
|
269
|
1124
|
|
|
|
|
3022
|
my ($beta, $lambda) = $self->ecliptic (); |
|
270
|
1124
|
|
|
|
|
3027
|
my ( $delta_psi ) = $self->nutation(); |
|
271
|
1124
|
|
|
|
|
1856
|
$lambda += $delta_psi; |
|
272
|
|
|
|
|
|
|
|
|
273
|
|
|
|
|
|
|
# Calculate and add in the aberration terms (Meeus 23.2); |
|
274
|
|
|
|
|
|
|
|
|
275
|
1124
|
|
|
|
|
2122
|
my $T = jcent2000 ($time); # Meeus (22.1) |
|
276
|
1124
|
|
|
|
|
1941
|
my $e = (-0.0000001267 * $T - 0.000042037) * $T + 0.016708634;# Meeus (25.4) |
|
277
|
1124
|
|
|
|
|
2219
|
my $pi = deg2rad ((0.00046 * $T + 1.71946) * $T + 102.93735); |
|
278
|
1124
|
|
|
|
|
2852
|
my $sun = $self->get( 'sun' ); |
|
279
|
1124
|
|
|
|
|
3564
|
$sun->universal ($time); |
|
280
|
|
|
|
|
|
|
|
|
281
|
1124
|
|
|
|
|
2951
|
my $geoterm = $sun->geometric_longitude () - $lambda; |
|
282
|
1124
|
|
|
|
|
1788
|
my $periterm = $pi - $lambda; |
|
283
|
1124
|
|
|
|
|
2900
|
my $deltalamda = ($e * cos ($periterm) - cos ($geoterm)) * |
|
284
|
|
|
|
|
|
|
CONSTANT_OF_ABERRATION / cos ($beta); |
|
285
|
1124
|
|
|
|
|
2265
|
my $deltabeta = - (sin ($geoterm) - $e * sin ($periterm)) * sin ($beta) * |
|
286
|
|
|
|
|
|
|
CONSTANT_OF_ABERRATION; |
|
287
|
1124
|
|
|
|
|
2072
|
$lambda += $deltalamda; |
|
288
|
1124
|
|
|
|
|
1748
|
$beta += $deltabeta; |
|
289
|
|
|
|
|
|
|
|
|
290
|
1124
|
|
|
|
|
3347
|
$self->ecliptic ($beta, $lambda, $range); |
|
291
|
|
|
|
|
|
|
|
|
292
|
|
|
|
|
|
|
# Set the equinox to that implied when our position was set. |
|
293
|
|
|
|
|
|
|
|
|
294
|
|
|
|
|
|
|
## $self->set (equinox_dynamical => $epoch); |
|
295
|
1124
|
|
|
|
|
3389
|
$self->equinox_dynamical ($epoch); |
|
296
|
|
|
|
|
|
|
|
|
297
|
|
|
|
|
|
|
# Precess ourselves to the current equinox. |
|
298
|
|
|
|
|
|
|
|
|
299
|
1124
|
|
|
|
|
3555
|
$self->precess_dynamical ($end); |
|
300
|
|
|
|
|
|
|
|
|
301
|
1124
|
|
|
|
|
2672
|
return $self; |
|
302
|
|
|
|
|
|
|
} |
|
303
|
|
|
|
|
|
|
|
|
304
|
|
|
|
|
|
|
1; |
|
305
|
|
|
|
|
|
|
|
|
306
|
|
|
|
|
|
|
=back |
|
307
|
|
|
|
|
|
|
|
|
308
|
|
|
|
|
|
|
=head1 ACKNOWLEDGMENTS |
|
309
|
|
|
|
|
|
|
|
|
310
|
|
|
|
|
|
|
The author wishes to acknowledge Jean Meeus, whose book "Astronomical |
|
311
|
|
|
|
|
|
|
Algorithms" (second edition) formed the basis for this module. |
|
312
|
|
|
|
|
|
|
|
|
313
|
|
|
|
|
|
|
=head1 SEE ALSO |
|
314
|
|
|
|
|
|
|
|
|
315
|
|
|
|
|
|
|
The L |
|
316
|
|
|
|
|
|
|
documentation for a discussion of how the pieces/parts of this |
|
317
|
|
|
|
|
|
|
distribution go together and how to use them. |
|
318
|
|
|
|
|
|
|
|
|
319
|
|
|
|
|
|
|
L by Alasdair Allan, which accommodates a |
|
320
|
|
|
|
|
|
|
much more fulsome description of a star. The star's coordinates are |
|
321
|
|
|
|
|
|
|
represented by an B object. |
|
322
|
|
|
|
|
|
|
|
|
323
|
|
|
|
|
|
|
L by Tim Jenness can also be used to find |
|
324
|
|
|
|
|
|
|
the position of a star at a given time given a catalog entry for the |
|
325
|
|
|
|
|
|
|
star. A wide variety of coordinate representations is accommodated. |
|
326
|
|
|
|
|
|
|
This package requires B, which in its turn requires the |
|
327
|
|
|
|
|
|
|
SLALIB library. |
|
328
|
|
|
|
|
|
|
|
|
329
|
|
|
|
|
|
|
=head1 SUPPORT |
|
330
|
|
|
|
|
|
|
|
|
331
|
|
|
|
|
|
|
Support is by the author. Please file bug reports at |
|
332
|
|
|
|
|
|
|
L, |
|
333
|
|
|
|
|
|
|
L, or in |
|
334
|
|
|
|
|
|
|
electronic mail to the author. |
|
335
|
|
|
|
|
|
|
|
|
336
|
|
|
|
|
|
|
=head1 AUTHOR |
|
337
|
|
|
|
|
|
|
|
|
338
|
|
|
|
|
|
|
Thomas R. Wyant, III (F) |
|
339
|
|
|
|
|
|
|
|
|
340
|
|
|
|
|
|
|
=head1 COPYRIGHT AND LICENSE |
|
341
|
|
|
|
|
|
|
|
|
342
|
|
|
|
|
|
|
Copyright (C) 2005-2023 by Thomas R. Wyant, III |
|
343
|
|
|
|
|
|
|
|
|
344
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or modify it |
|
345
|
|
|
|
|
|
|
under the same terms as Perl 5.10.0. For more details, see the full text |
|
346
|
|
|
|
|
|
|
of the licenses in the directory LICENSES. |
|
347
|
|
|
|
|
|
|
|
|
348
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful, but |
|
349
|
|
|
|
|
|
|
without any warranty; without even the implied warranty of |
|
350
|
|
|
|
|
|
|
merchantability or fitness for a particular purpose. |
|
351
|
|
|
|
|
|
|
|
|
352
|
|
|
|
|
|
|
=cut |
|
353
|
|
|
|
|
|
|
|
|
354
|
|
|
|
|
|
|
# ex: set textwidth=72 : |