Astro-Montenbruck

 view release on metacpan or  search on metacpan

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

package Astro::Montenbruck::Ephemeris::Planet::Neptune;

use strict;
use warnings;

use base qw/Astro::Montenbruck::Ephemeris::Planet/;
use Math::Trig qw/:pi/;
use Astro::Montenbruck::Ephemeris::Pert qw/pert/;
use Astro::Montenbruck::MathUtils qw /frac ARCS/;
use Astro::Montenbruck::Ephemeris::Planet qw/$NE/;

our $VERSION = 0.02;

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

sub heliocentric {
    my ( $self, $t ) = @_;

    # Mean anomalies of planets in [rad]
    my $m5 = pi2 * frac( 0.0563867 + 8.4298907 * $t );
    my $m6 = pi2 * frac( 0.8825086 + 3.3957748 * $t );
    my $m7 = pi2 * frac( 0.3965358 + 1.1902851 * $t );
    my $m8 = pi2 * frac( 0.7214906 + 0.6068526 * $t );

    my ( $dl, $dr, $db ) = ( 0, 0, 0 );    # Corrections in longitude ["],
    my $pert_cb = sub { 
        $dl += $_[0]; 
        $dr += $_[1]; 
        $db += $_[2] 
    };

    # Perturbations by Jupiter
    my $term = pert(
        T        => $t,
        M        => $m8,
        m        => $m5,
        I_min    => 0,
        I_max    => 2,
        i_min    => -2,
        i_max    => 0,
        callback => $pert_cb
    );

    $term->( 0, -1, 0, 0.1,   0.1,   -3.0,  1.8,    -0.3, -0.3 );
    $term->( 1, 0,  0, 0.0,   0.0,   -15.9, 9.0,    0.0,  0.0 );
    $term->( 1, -1, 0, -17.6, -29.3, 416.1, -250.0, 0.0,  0.0 );
    $term->( 1, -2, 0, -0.4,  -0.7,  10.4,  -6.2,   0.0,  0.0 );
    $term->( 2, -1, 0, -0.2,  -0.4,  2.4,   -1.4,   0.4,  -0.3 );

    # Perturbations by Saturn
    $term = pert(
        T        => $t,
        M        => $m8,
        m        => $m6,
        I_min    => 0,
        I_max    => 2,
        i_min    => -2,
        i_max    => 0,
        callback => $pert_cb
    );

    $term->( 0, -1, 0, -0.1, 0.0,   0.2,   -1.8,  -0.1, -0.5 );
    $term->( 1, 0,  0, 0.0,  0.0,   -8.3,  -10.4, 0.0,  0.0 );
    $term->( 1, -1, 0, 13.6, -12.7, 187.5, 201.1, 0.0,  0.0 );
    $term->( 1, -2, 0, 0.4,  -0.4,  4.5,   4.5,   0.0,  0.0 );
    $term->( 2, -1, 0, 0.4,  -0.1,  1.7,   -3.2,  0.2,  0.2 );
    $term->( 2, -2, 0, -0.1, 0.0,   -0.2,  2.7,   0.0,  0.0 );

    # Perturbations by Uranus
    $term = pert(
        T        => $t,
        M        => $m8,
        m        => $m7,



( run in 1.303 second using v1.01-cache-2.11-cpan-d80b1682f3f )