Exemplo n.º 1
0
static double look_for_transit_time( const int planet_no,
                  double jd,
                  const double observer_lat, const double observer_lon,
                  const char *vsop_data, const int real_transit)
{
   int iterations = 10;
   double delta = 1.;

   do
      {
      PLANET_DATA pdata;

      fill_planet_data( &pdata, planet_no, jd,
                          observer_lat, observer_lon, vsop_data);

      delta = atan2( pdata.altaz_loc[1], pdata.altaz_loc[0]);
      if( !real_transit)
         delta += pi;
      while( delta < -pi)
         delta += pi + pi;
      while( delta > pi)
         delta -= pi + pi;
      if( planet_no == 10)       /* moon moves a little faster */
         delta *= 30.5 / 29.5;
      delta *= sqrt( 1. - pdata.altaz_loc[2] * pdata.altaz_loc[2]);
      jd += delta / (2. * pi);
      }
      while( fabs( delta) > .0001 && iterations--);
   return( jd);
}
Exemplo n.º 2
0
double look_for_rise_set( const int planet_no,
                  const double jd0, const double jd1,
                  const double observer_lat, const double observer_lon,
                  const char *vsop_data, int *is_setting)
{
   double alt0, alt1;
   double riseset_alt = -.83333 * pi / 180.;
   double rval = 0.;
   PLANET_DATA pdata;

   if( planet_no == 10)
      riseset_alt = .125 * pi / 180.;
   fill_planet_data( &pdata, planet_no, jd0,
                          observer_lat, observer_lon, vsop_data);
   alt0 = asin( pdata.altaz_loc[2]) - riseset_alt;
   fill_planet_data( &pdata, planet_no, jd1,
                          observer_lat, observer_lon, vsop_data);
   alt1 = asin( pdata.altaz_loc[2]) - riseset_alt;

   if( alt0 > 0. && alt1 <= 0.)        /* object is setting */
      *is_setting = 1;
   else if( alt0 <= 0. && alt1 > 0.)        /* object is rising */
      *is_setting = 0;
   else                                /* it's neither rising nor setting */
      *is_setting = -1;
   if( *is_setting != -1)
      {
      double fraction = 0., alt = alt0, delta = 1.;
      int iterations = 10;

      while( fabs( delta) > .0001 && iterations--)
         {
         PLANET_DATA pdata;

         delta = -alt / (alt1 - alt0);
         fraction += delta;
         rval = jd0 + (jd1 - jd0) * fraction;
         fill_planet_data( &pdata, planet_no, jd0 + (jd1 - jd0) * fraction,
                          observer_lat, observer_lon, vsop_data);
         alt = asin( pdata.altaz_loc[2]) - riseset_alt;
         }
      }
   return( rval);
}