Astro-Montenbruck

 view release on metacpan or  search on metacpan

lib/Astro/Montenbruck/Ephemeris/Planet/Moon.pm  view on Meta::CPAN

package Astro::Montenbruck::Ephemeris::Planet::Moon;

use strict;
use warnings;

use Readonly;
use Math::Trig qw/:pi rad2deg deg2rad/;
use Astro::Montenbruck::Ephemeris::Planet;
use base qw/Astro::Montenbruck::Ephemeris::Planet/;
use Astro::Montenbruck::Ephemeris::Planet qw/$MO/;
use Astro::Montenbruck::MathUtils qw /frac sine ARCS reduce_deg cart polar/;
use Astro::Montenbruck::Ephemeris::Pert qw /addthe/;

our $VERSION = 0.02;

Readonly our $ARC => 206264.81; # 3600 * 180 / PI = arcsec per radian
Readonly our $RADII_TO_AU => 4.26354E-5;

sub new {
    my $class = shift;
    $class->SUPER::new( id => $MO );
}

# calculate long-periodic changes of the mean elements
# l,l',F,D and L0 as well as dgamma
sub _long_periodic {
    my $t = shift;

    my $s1 = sine( 0.19833 + 0.05611 * $t );
    my $s2 = sine( 0.27869 + 0.04508 * $t );
    my $s3 = sine( 0.16827 - 0.36903 * $t );
    my $s4 = sine( 0.34734 - 5.37261 * $t );
    my $s5 = sine( 0.10498 - 5.37899 * $t );
    my $s6 = sine( 0.42681 - 0.41855 * $t );
    my $s7 = sine( 0.14943 - 5.37511 * $t );
    my $dl0 =
      0.84 * $s1 +
      0.31 * $s2 +
      14.27 * $s3 +
      7.26 * $s4 +
      0.28 * $s5 +
      0.24 * $s6;
    my $dl =
      2.94 * $s1 +
      0.31 * $s2 +
      14.27 * $s3 +
      9.34 * $s4 +
      1.12 * $s5 +
      0.83 * $s6;
    my $dls = -6.40 * $s1 - 1.89 * $s6;
    my $df =
      0.21 * $s1 +
      0.31 * $s2 +
      14.27 * $s3 -
      88.70 * $s4 -
      15.30 * $s5 +
      0.24 * $s6 -
      1.86 * $s7;
    my $dd = $dl0 - $dls;
    my $dgam =
      -3332e-9 * sine( 0.59734 - 5.37261 * $t ) -
      539e-9 * sine( 0.35498 - 5.37899 * $t ) -
      64e-9 * sine( 0.39943 - 5.37511 * $t );

    $dl0, $dl, $dls, $df, $dd, $dgam;
}

sub moonpos {
    my ( $self, $t ) = @_;
    my ( %co, %si );
    my ( $dlam, $ds, $gam1c, $n );
    my $sinpi = 3422.7;
    my ( $dl0, $dl, $dls, $df, $dd, $dgam, $l, $l0, $ls, $f, $d );

    # INIT: calculates the mean elements and their sine and cosine
    # l mean anomaly of the Moon
    # l' mean anomaly of the Sun
    # F mean distance from the node
    # D  mean elongation from the Sun
    my $init = sub {
        my $t2 = $t * $t;



( run in 0.618 second using v1.01-cache-2.11-cpan-54e63673c56 )