Astro-Montenbruck

 view release on metacpan or  search on metacpan

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

package Astro::Montenbruck::Ephemeris::Planet::Uranus;

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/$UR/;

our $VERSION = 0.01;

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

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

    # Mean anomalies of planets in [rad]
    my $m5 = pi2 * frac( 0.0564472 + 8.4302889 * $t );
    my $m6 = pi2 * frac( 0.8829611 + 3.3947583 * $t );
    my $m7 = pi2 * frac( 0.3967117 + 1.1902849 * $t );
    my $m8 = pi2 * frac( 0.7216833 + 0.6068528 * $t );

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

    # Perturbations by Uranus
    my $term = pert(
        T        => $t,
        M        => $m7,
        m        => $m5,
        I_min    => -1,
        I_max    => 3,
        i_min    => -2,
        i_max    => -1,
        callback => $pert_cb
    );

    $term->( -1, -1, 0, 0.0,   0.0,  -0.1,   1.7,    -0.1, 0.0 );
    $term->( 0,  -1, 0, 0.5,   -1.2, 18.9,   9.1,    -0.9, 0.1 );
    $term->( 1,  -1, 0, -21.2, 48.7, -455.5, -198.8, 0.0,  0.0 );
    $term->( 1,  -2, 0, -0.5,  1.2,  -10.9,  -4.8,   0.0,  0.0 );
    $term->( 2,  -1, 0, -1.3,  3.2,  -23.2,  -11.1,  0.3,  0.1 );
    $term->( 2,  -2, 0, -0.2,  0.2,  1.1,    1.5,    0.0,  0.0 );
    $term->( 3,  -1, 0, 0.0,   0.2,  -1.8,   0.4,    0.0,  0.0 );

    # Perturbations by Saturn
    $term = pert(
        T        => $t,
        M        => $m7,
        m        => $m6,
        I_min    => 0,
        I_max    => 11,
        i_min    => -6,
        i_max    => 0,
        callback => $pert_cb
    );
    $term->( 0, -1, 0, 1.4,   -0.5,   -6.4,   9.0,    -0.4, -0.8 );
    $term->( 1, -1, 0, -18.6, -12.6,  36.7,   -336.8, 1.0,  0.3 );
    $term->( 1, -2, 0, -0.7,  -0.3,   0.5,    -7.5,   0.1,  0.0 );
    $term->( 2, -1, 0, 20.0,  -141.6, -587.1, -107.0, 3.1,  -0.8 );
    $term->( 2, -1, 1, 1.0,   1.4,    5.8,    -4.0,   0.0,  0.0 );
    $term->( 2, -2, 0, 1.6,   -3.8,   -35.6,  -16.0,  0.0,  0.0 );
    $term->( 3, -1, 0, 75.3,  -100.9, 128.9,  77.5,   -0.8, 0.1 );
    $term->( 3, -1, 1, 0.2,   1.8,    -1.9,   0.3,    0.0,  0.0 );
    $term->( 3, -2, 0, 2.3,   -1.3,   -9.5,   -17.9,  0.0,  0.1 );
    $term->( 3, -3, 0, -0.7,  -0.5,   -4.9,   6.8,    0.0,  0.0 );
    $term->( 4, -1, 0, 3.4,   -5.0,   21.6,   14.3,   -0.8, -0.5 );



( run in 2.021 seconds using v1.01-cache-2.11-cpan-d80b1682f3f )