Astro-Montenbruck

 view release on metacpan or  search on metacpan

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

package Astro::Montenbruck::Ephemeris::Planet::Sun;

use strict;
use warnings;

use base qw/Astro::Montenbruck::Ephemeris::Planet/;
use Math::Trig qw/:pi rad2deg deg2rad/;
use Astro::Montenbruck::MathUtils qw /frac ARCS reduce_rad cart polar/;
use Astro::Montenbruck::Ephemeris::Pert qw/pert/;
use Astro::Montenbruck::Ephemeris::Planet qw/$SU/;

our $VERSION = 0.01;

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

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

  # mean anomalies of planets and mean arguments of lunar orbit [rad]
  my $m2 = pi2 * frac( 0.1387306 + 162.5485917 * $t );
  my $m3 = pi2 * frac( 0.9931266 + 99.9973604 * $t );
  my $m4 = pi2 * frac( 0.0543250 + 53.1666028 * $t );
  my $m5 = pi2 * frac( 0.0551750 + 8.4293972 * $t );
  my $m6 = pi2 * frac( 0.8816500 + 3.3938722 * $t );

  my $d = pi2 * frac( 0.8274 + 1236.8531 * $t );
  my $a = pi2 * frac( 0.3749 + 1325.5524 * $t );
  my $u = pi2 * frac( 0.2591 + 1342.2278 * $t );

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

  # Keplerian terms and perturbations by Venus
  my $term = pert(
      T        => $t,
      M        => $m3,
      m        => $m2,
      I_min    => 0,
      I_max    => 7,
      i_min    => -6,
      i_max    => 0,
      callback => $pert_cb
  );

  $term->( 1, 0,  0, -0.22, 6892.76, -16707.37, -0.54, 0,     0 );
  $term->( 1, 0,  1, -0.06, -17.35,  42.04,     -0.15, 0.00,  0.00 );
  $term->( 1, 0,  2, -0.01, -0.05,   0.13,      -0.02, 0.00,  0.00 );
  $term->( 2, 0,  0, 0.00,  71.98,   -139.57,   0.00,  0.00,  0.00 );
  $term->( 2, 0,  1, 0.00,  -0.36,   0.70,      0.00,  0.00,  0.00 );
  $term->( 3, 0,  0, 0.00,  1.04,    -1.75,     0.00,  0.00,  0.00 );
  $term->( 0, -1, 0, 0.03,  -0.07,   -0.16,     -0.07, 0.02,  -0.02 );
  $term->( 1, -1, 0, 2.35,  -4.23,   -4.75,     -2.64, 0.00,  0.00 );
  $term->( 1, -2, 0, -0.10, 0.06,    0.12,      0.20,  0.02,  0.00 );
  $term->( 2, -1, 0, -0.06, -0.03,   0.20,      -0.01, 0.01,  -0.09 );
  $term->( 2, -2, 0, -4.70, 2.90,    8.28,      13.42, 0.01,  -0.01 );
  $term->( 3, -2, 0, 1.80,  -1.74,   -1.44,     -1.57, 0.04,  -0.06 );
  $term->( 3, -3, 0, -0.67, 0.03,    0.11,      2.43,  0.01,  0.00 );
  $term->( 4, -2, 0, 0.03,  -0.03,   0.10,      0.09,  0.01,  -0.01 );
  $term->( 4, -3, 0, 1.51,  -0.40,   -0.88,     -3.36, 0.18,  -0.10 );
  $term->( 4, -4, 0, -0.19, -0.09,   -0.38,     0.77,  0.00,  0.00 );
  $term->( 5, -3, 0, 0.76,  -0.68,   0.30,      0.37,  0.01,  0.00 );
  $term->( 5, -4, 0, -0.14, -0.04,   -0.11,     0.43,  -0.03, 0.00 );
  $term->( 5, -5, 0, -0.05, -0.07,   -0.31,     0.21,  0.00,  0.00 );
  $term->( 6, -4, 0, 0.15,  -0.04,   -0.06,     -0.21, 0.01,  0.00 );
  $term->( 6, -5, 0, -0.03, -0.03,   -0.09,     0.09,  -0.01, 0.00 );
  $term->( 6, -6, 0, 0.00,  -0.04,   -0.18,     0.02,  0.00,  0.00 );
  $term->( 7, -5, 0, -0.12, -0.03,   -0.08,     0.31,  -0.02, -0.01 );

  # perturbations by Mars
  $term = pert(
      T        => $t,
      M        => $m3,
      m        => $m4,



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