亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? lunar.cpp

?? This is a pgm can be used for astronomy
?? CPP
字號(hào):
/*****************************************************************************\
 * Lunar.cpp
 *
 * Lunar is a class that can calculate lunar fundmentals for any reasonable
 *   time.
 *
 * author: mark huss (mark@mhuss.com)
 * Based on Bill Gray's open-source code at projectpluto.com
 *
\*****************************************************************************/

#include "Lunar.h"
#include "LunarTerms.h"  // data extracted from vsop.bin file

#include "MathOps.h"
#include "AstroOps.h"
#include "Vsop.h"
#include "PlanetData.h"

#include <stdlib.h>

//-------------------------------------------------------------------------
/**
  * calculate current phase angle in radians (Meeus' easy lower precision method)
  */
double Lunar::phaseAngle() {
  if ( !m_initialized )
    return -1.;

  return normalize(
      180 - Astro::toDegrees(m_f.D)
          - 6.289 * sin( m_f.Mp )
          + 2.110 * sin( m_f.M )
          - 1.274 * sin( (2 * m_f.D) - m_f.Mp )
          - 0.658 * sin( 2 * m_f.D )
          - 0.214 * sin( 2 * m_f.Mp )
          - 0.110 * sin( m_f.D )
          );
}

//-------------------------------------------------------------------------
double Lunar::illuminatedFraction() {
  if ( !m_initialized )
    return -1.;

  return (1. + cos( phaseAngle() )) / 2.;
}

//-------------------------------------------------------------------------
/**
  * Calculate age of the moon in days (0.0 to 29.53...)
  * @param jd - Julian day for which lunar age is required
  */
double Lunar::ageOfMoonInDays( double jd ) {

  double jCenturies = Astro::toMillenia( jd ); // convert jd to jm ref. J2000

  // first calculate solar ecliptic longitude (in RAD)
  //
  double earthLon = Vsop::calcLoc( jCenturies, EARTH, Vsop::ECLIPTIC_LON );
  /*
  * What we _really_ want is the location of the sun as seen from
  * the earth (geocentric view).  VSOP gives us the opposite
  * (heliocentric) view, i.e., the earth as seen from the sun.
  * To work around this, we add PI to the longitude (rotate 180 degrees)
  */
  double sunLon = earthLon + Astro::PI;

  // next calculate lunar ecliptic longitude (in RAD)
  //
  Lunar luna(jCenturies);
  double moonLon = luna.longitudeRadians();

  // age of moon in radians = difference
  double moonAge = AstroOps::normalizeRadians( Astro::TWO_PI - (sunLon - moonLon) );

  // convert radians to Synodic day
  double sday = SYNODIC_MONTH * (moonAge / Astro::TWO_PI);
  return sday;
}

//----------------------------------------------------------------------------
// calculate an individual fundimental
//  tptr - points to array of doubles
//  t - time in decimal Julian centuries
//
double Lunar::getFund( const double* tptr, double t )
{
  double d = *tptr++;
  double tpow = t;
  for( int i=4; i!=0; i-- ) {
    d += tpow * (*tptr++);
    tpow *= t;
  }
  return normalize( d );
}

//----------------------------------------------------------------------------
// calculate the fundamanentals given the vsop.bin data and a time
//   ad has vsop.bin data
//   t = decimal julian centuries
//
void Lunar::calcFundamentals( double t )
{
  m_f.Lp = getFund( LunarFundimentals_Lp, t );
  m_f.D = getFund( LunarFundimentals_D, t );
  m_f.M = getFund( LunarFundimentals_M, t );
  m_f.Mp = getFund( LunarFundimentals_Mp, t );
  m_f.F = getFund( LunarFundimentals_F, t );

  m_f.A1 = normalize( 119.75 + 131.849 * t );
  m_f.A2 = normalize( 53.09 + 479264.290 * t );
  m_f.A3 = normalize( 313.45 + 481266.484 * t );
  m_f.T  = normalize( t );

  // indicate values need to be recalculated
  m_lat = m_lon = m_r = -1.;

  // set init'd flag to true
  m_initialized = true;
}

//----------------------------------------------------------------------------
// calculate longitude and radius
//
// NOTE: calcFundamentals() must have been called first
//
void Lunar::calcLonRad()
{
  if ( !m_initialized ) {
    m_r = m_lon = -1.;
  }
  else {
    const LunarTerms1* tptr = LunarLonRad;

    double sl = 0., sr = 0.;
    const double e = 1. - .002516 * m_f.T - .0000074 * m_f.T * m_f.T;

    for( int i=N_LTERM1; i!=0; i-- ) {
      if( labs( tptr->sl ) > 0 || labs( tptr->sr ) > 0 ) {
        double arg;

        switch( tptr->d )
        {
          case  1:   arg = m_f.D;          break;
          case -1:   arg =-m_f.D;          break;
          case  2:   arg = m_f.D+m_f.D;    break;
          case -2:   arg =-m_f.D-m_f.D;    break;
          case  0:   arg = 0.;             break;
          default:   arg = (double)(tptr->d) * m_f.D;  break;
        }

        switch( tptr->m )
        {
          case  1:   arg += m_f.M;         break;
          case -1:   arg -= m_f.M;         break;
          case  2:   arg += m_f.M+m_f.M;   break;
          case -2:   arg -= m_f.M+m_f.M;   break;
          case  0:           ;             break;
          default:   arg += (double)(tptr->m) * m_f.M;  break;
        }

        switch( tptr->mp )
        {
          case  1:   arg += m_f.Mp;        break;
          case -1:   arg -= m_f.Mp;        break;
          case  2:   arg += m_f.Mp+m_f.Mp; break;
          case -2:   arg -= m_f.Mp+m_f.Mp; break;
          case  0:           ;             break;
          default:   arg += (double)(tptr->mp) * m_f.Mp;  break;
        }

        switch( tptr->f )
        {
          case  1:   arg += m_f.F;         break;
          case -1:   arg -= m_f.F;         break;
          case  2:   arg += m_f.F+m_f.F;   break;
          case -2:   arg -= m_f.F+m_f.F;   break;
          case  0:           ;             break;
          default:   arg += (double)(tptr->f) * m_f.F;  break;
        }

        if( tptr->sl )
        {
          double term = (double)(tptr->sl) * sin(arg);
          for( int j=abs(tptr->m); j!=0; j-- )
            term *= e;
          sl += term;
        }

        if( tptr->sr )
        {
          double term = (double)(tptr->sr) * cos(arg);
          for( int j=abs(tptr->m); j!=0; j-- )
            term *= e;
          sr += term;
        }
      }
      tptr++;
    }

    sl += 3958. * sin( m_f.A1 ) +
          1962. * sin( m_f.Lp - m_f.F ) +
          318.  * sin( m_f.A2 );

    m_lon = (m_f.Lp * 180. / Astro::PI) + sl * 1.e-6;

    // reduce signed angle to ( 0 < m_lon < 360 )
    m_lon = AstroOps::normalizeDegrees( m_lon );
    m_r = 385000.56 + sr / 1000.;
  }
}

//----------------------------------------------------------------------------
// calculate (or return prev. calculated) latitude
//
// NOTE: calcFundamentals() must have been called first
//
double Lunar::latitude()
{
  if ( !m_initialized )
    return -1.;

  if ( m_lat < 0. ) {
    const LunarTerms2* tptr = LunarLat;
    double rval = 0.;

    const double e = 1. - .002516 * m_f.T - .0000074 * m_f.T * m_f.T;

    for( int i=N_LTERM2; i!=0; i-- ) {

      if( labs( tptr->sb ) > 0. ) {
        double arg;

        switch( tptr->d )
        {
          case  1:   arg = m_f.D;          break;
          case -1:   arg =-m_f.D;          break;
          case  2:   arg = m_f.D+m_f.D;    break;
          case -2:   arg =-m_f.D-m_f.D;    break;
          case  0:   arg = 0.;             break;
          default:   arg = (double)(tptr->d) * m_f.D;  break;
        }

        switch( tptr->m )
        {
          case  1:   arg += m_f.M;         break;
          case -1:   arg -= m_f.M;         break;
          case  2:   arg += m_f.M+m_f.M;   break;
          case -2:   arg -= m_f.M+m_f.M;   break;
          case  0:           ;             break;
          default:   arg += (double)(tptr->m) * m_f.M;  break;
        }

        switch( tptr->mp )
        {
          case  1:   arg += m_f.Mp;        break;
          case -1:   arg -= m_f.Mp;        break;
          case  2:   arg += m_f.Mp+m_f.Mp; break;
          case -2:   arg -= m_f.Mp+m_f.Mp; break;
          case  0:           ;             break;
          default:   arg += (double)(tptr->mp) * m_f.Mp;  break;
        }

        switch( tptr->f )
        {
          case  1:   arg += m_f.F;         break;
          case -1:   arg -= m_f.F;         break;
          case  2:   arg += m_f.F+m_f.F;   break;
          case -2:   arg -= m_f.F+m_f.F;   break;
          case  0:           ;             break;
          default:   arg += (double)(tptr->f) * m_f.F;  break;
        }

        double term = (double)(tptr->sb) * sin( arg );
        for( int j = abs(tptr->m); j!=0; j-- )
          term *= e;

        rval += term;
      }
      rval += -2235. * sin( m_f.Lp ) +
               382.  * sin( m_f.A3 ) +
               175.  * sin( m_f.A1 - m_f.F ) +
               175.  * sin( m_f.A1 + m_f.F ) +
               127.  * sin( m_f.Lp - m_f.Mp ) -
               115.  * sin( m_f.Lp + m_f.Mp );

      tptr++;
    }
    m_lat = rval * 1.e-6;
  }
  return m_lat;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久久久久搜平片 | 欧美手机在线视频| 国产欧美日韩另类视频免费观看| 成人福利视频在线看| 亚洲一区二区三区视频在线播放| 国产精品乱码人人做人人爱| eeuss鲁片一区二区三区在线看| 亚洲一区二区三区四区五区中文| 日韩三区在线观看| 丁香五精品蜜臀久久久久99网站 | 欧美精品久久一区二区三区| 久久精品久久久精品美女| 国产精品视频在线看| 欧美色图免费看| 国模一区二区三区白浆| 亚洲精品乱码久久久久久日本蜜臀| 538在线一区二区精品国产| 国产精品99久久久| 亚洲自拍偷拍图区| 久久精品视频免费| 欧美精品丝袜中出| 91丨porny丨国产| 午夜一区二区三区在线观看| 国产亚洲一区字幕| 67194成人在线观看| 波多野结衣中文字幕一区二区三区| 亚洲国产精品久久不卡毛片 | 欧美人妖巨大在线| 成人va在线观看| 人人狠狠综合久久亚洲| 日韩一区欧美小说| 日本欧美久久久久免费播放网| 在线中文字幕一区二区| 亚洲成在人线免费| 亚洲欧洲国产专区| 久久天天做天天爱综合色| 欧美体内she精视频| caoporn国产精品| 国产一区二区精品久久99| 午夜伦理一区二区| 亚洲欧美成人一区二区三区| 久久久www免费人成精品| 欧美疯狂性受xxxxx喷水图片| 精品一区二区免费看| 香蕉成人啪国产精品视频综合网| 国产精品伦理在线| 欧美丰满高潮xxxx喷水动漫| 91在线丨porny丨国产| 高清成人免费视频| 狠狠久久亚洲欧美| 久久精品国产免费| 日本视频免费一区| 午夜电影网一区| 亚洲午夜视频在线观看| 亚洲日本免费电影| 国产精品久久久久久久久久久免费看| 欧美成人a视频| 日韩三级精品电影久久久| 欧美日韩精品是欧美日韩精品| 色噜噜夜夜夜综合网| 99精品一区二区| 色又黄又爽网站www久久| 国产高清精品网站| 国产精品 日产精品 欧美精品| 狠狠色综合色综合网络| 极品少妇xxxx偷拍精品少妇| 亚洲一区二区三区免费视频| 亚洲午夜羞羞片| 视频一区在线播放| 免播放器亚洲一区| 日韩精品五月天| 久久aⅴ国产欧美74aaa| 国产一区视频导航| 激情综合网av| 国产在线视视频有精品| 国产高清一区日本| 成人丝袜高跟foot| 色美美综合视频| 欧美日韩大陆在线| 欧美大胆一级视频| 国产日产精品一区| 亚洲精品视频在线观看网站| 香蕉久久一区二区不卡无毒影院 | 欧美丰满一区二区免费视频| 91麻豆精品国产91久久久使用方法| 精品国免费一区二区三区| 中文字幕欧美激情| 亚洲777理论| 国产精品1024| 欧美精品日韩综合在线| 国产欧美日韩视频在线观看| 亚洲成人在线免费| 成人免费不卡视频| 6080亚洲精品一区二区| 国产精品女上位| 日本不卡视频一二三区| 99视频国产精品| 精品久久久久久久久久久久久久久久久| 国产亚洲欧洲一区高清在线观看| 亚洲精品ww久久久久久p站| 激情国产一区二区| 欧美无乱码久久久免费午夜一区| 国产亚洲综合性久久久影院| 亚洲小说春色综合另类电影| 粉嫩一区二区三区性色av| 欧美日本免费一区二区三区| 中文字幕在线不卡| 激情成人综合网| 欧美日韩日本视频| 中文字幕在线一区| 国产一区二区三区高清播放| 欧美日韩国产在线播放网站| 国产精品久久久久久久久晋中 | 久久综合久久综合久久| 亚洲第一搞黄网站| 91丨九色丨蝌蚪丨老版| 久久久久国产精品麻豆| 热久久国产精品| 欧美日韩一区高清| 亚洲免费电影在线| 成人性色生活片| xvideos.蜜桃一区二区| 五月激情六月综合| 欧美亚洲动漫另类| 亚洲欧美国产高清| 99国产精品99久久久久久| 国产欧美一区二区精品性色 | 久久综合色天天久久综合图片| 日韩高清电影一区| 欧美日本一道本在线视频| 亚洲国产毛片aaaaa无费看| av一区二区三区在线| 欧美国产精品v| 成人一区在线观看| 欧美激情综合在线| 国产成人综合精品三级| 久久久久国产精品厨房| 国产麻豆一精品一av一免费| 精品福利视频一区二区三区| 麻豆精品久久精品色综合| 欧美一区二区三区日韩视频| 热久久一区二区| 日韩欧美一二三| 精品一区二区三区香蕉蜜桃| 欧美成人精品1314www| 精品一区二区三区日韩| 精品1区2区在线观看| 国产精品99久久久久久有的能看 | 国产精品丝袜黑色高跟| av中文字幕一区| 一区二区欧美视频| 欧美视频三区在线播放| 日韩成人一级片| 欧美v国产在线一区二区三区| 久久99精品久久久久久国产越南 | 欧美天天综合网| 免费在线观看一区| 国产亚洲欧美色| 91小视频免费观看| 亚洲一级二级在线| 日韩欧美专区在线| 久久成人免费电影| 国产精品乱码久久久久久| 色综合视频一区二区三区高清| 亚洲综合清纯丝袜自拍| 欧美日韩精品三区| 老鸭窝一区二区久久精品| 国产午夜精品久久久久久久| 99国产精品久久久久久久久久| 伊人夜夜躁av伊人久久| 欧美一区二区在线不卡| 国产精品18久久久久久久久| 亚洲欧美偷拍三级| 91精品国产日韩91久久久久久| 蜜桃视频一区二区| 国产精品美女久久久久aⅴ| 欧美视频完全免费看| 精一区二区三区| 中文字幕一区视频| 欧美一级二级在线观看| 不卡av在线网| 日韩1区2区日韩1区2区| 国产精品色婷婷| **性色生活片久久毛片| 91精品在线一区二区| 成人18精品视频| 日韩 欧美一区二区三区| 国产精品色哟哟| 欧美精品久久天天躁| 国产99久久久国产精品潘金| 亚洲高清免费在线| 亚洲国产精品av| 777久久久精品| 99九九99九九九视频精品| 九色|91porny| 视频在线观看一区| 中文字幕一区三区| 久久久综合九色合综国产精品| 欧美性xxxxxxxx| 9人人澡人人爽人人精品|