Astro-Montenbruck

 view release on metacpan or  search on metacpan

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

package Astro::Montenbruck::Ephemeris::Planet::Venus;

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

our $VERSION = 0.01;

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

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

    # mean anomalies of planets in [rad]
    my $m1 = pi2 * frac( 0.4861431 + 415.2018375 * $t );
    my $m2 = pi2 * frac( 0.1400197 + 162.5494552 * $t );
    my $m3 = pi2 * frac( 0.9944153 + 99.9982208 * $t );
    my $m4 = pi2 * frac( 0.0556297 + 53.1674631 * $t );
    my $m5 = pi2 * frac( 0.0567028 + 8.4305083 * $t );
    my $m6 = pi2 * frac( 0.8830539 + 3.3947206 * $t );

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

    # Perturbations by Mercury
    my $term = pert(
        T        => $t,
        M        => $m2,
        m        => $m1,
        I_min    => 1,
        I_max    => 5,
        i_min    => -2,
        i_max    => -1,
        callback => $pert_cb
    );

    $term->( 1, -1, 0, 0.00,  0.00,  0.06,  -0.09, 0.01,  0.00 );
    $term->( 2, -1, 0, 0.25,  -0.09, -0.09, -0.27, 0.00,  0.00 );
    $term->( 4, -2, 0, -0.07, -0.08, -0.14, 0.14,  -0.01, -0.01 );
    $term->( 5, -2, 0, -0.35, 0.08,  0.02,  0.09,  0.00,  0.00 );

    # Keplerian motion and perturbations by the Earth
    $term = pert(
        T        => $t,
        M        => $m2,
        m        => $m3,
        I_min    => 1,
        I_max    => 8,
        i_min    => -8,
        i_max    => 0,
        callback => $pert_cb
    );

    $term->( 1, 0,  0, 2.37,    2793.23, -4899.07, 0.11,   9995.27, 7027.22 );
    $term->( 1, 0,  1, 0.10,    -19.65,  34.40,    0.22,   64.95,   -86.10 );
    $term->( 1, 0,  2, 0.06,    0.04,    -0.07,    0.11,   -0.55,   -0.07 );
    $term->( 2, 0,  0, -170.42, 73.13,   -16.59,   0.00,   67.71,   47.56 );
    $term->( 2, 0,  1, 0.93,    2.91,    0.23,     0.00,   -0.03,   -0.92 );
    $term->( 3, 0,  0, -2.31,   0.90,    -0.08,    0.00,   0.04,    2.09 );
    $term->( 1, -1, 0, -2.38,   -4.27,   3.27,     -1.82,  0.00,    0.00 );
    $term->( 1, -2, 0, 0.09,    0.00,    -0.08,    0.05,   -0.02,   -0.25 );
    $term->( 2, -2, 0, -9.57,   -5.93,   8.57,     -13.83, -0.01,   -0.01 );
    $term->( 2, -3, 0, -2.47,   -2.40,   0.83,     -0.95,  0.16,    0.24 );
    $term->( 3, -2, 0, -0.09,   -0.05,   0.08,     -0.13,  -0.28,   0.12 );
    $term->( 3, -3, 0, 7.12,    0.32,    -0.62,    13.76,  -0.07,   0.01 );
    $term->( 3, -4, 0, -0.65,   -0.17,   0.18,     -0.73,  0.10,    0.05 );
    $term->( 3, -5, 0, -1.08,   -0.95,   -0.17,    0.22,   -0.03,   -0.03 );



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