/*****************************************************************************\
 * Vsop
\*****************************************************************************/

package com.mhuss.AstroLib;

/**
 * This class wraps the VSOP87 data and provides VSOP planetary
 * position calculation functions for Mercury through Neptune
 * (VSOP doesn't handle the moon or Pluto).
 * 

* Based on C code by Bill Gray (www.projectpluto.com) */ public class Vsop { // All "magic numbers" are from Meeus, Astronomical Algorithms, 2ed /** * Calculate a single location element (latitude, longitude, or radius). *

* This function, using the simplified VSOP87 data in Meeus, can * compute planetary positions in heliocentric ecliptic coordinates. *

* Longitude & latitude are in radians. * * @param t Time in Julian centuries from J2000 * @param planet One of the constants from Planets.MERCURY * to Planets.NEPTUNE inclusive. * @param ltype location element type: *

* (These are ecliptic coordinates of date, by the way!) * @return The selected element, or 0.0 if planet parameter is * invalid. */ public static double calcLE( double t, // time in decimal centuries int planet, // must be in the range SUN...NEPTUNE int ltype) // LocationElements.LATITUDE, LONGITUDE, or RADIUS { double rval = 0.0; if( planet > Planets.SUN && planet < Planets.PLUTO ) { t /= 10.; // convert to julian millenia double tPower = 1.0; VsopTerms pT[] = null; switch ( planet ) { case Planets.MERCURY: switch ( ltype ) { case LocationElements.LONGITUDE: pT = VsopData.MercuryLonTerms; break; case LocationElements.LATITUDE: pT = VsopData.MercuryLatTerms; break; case LocationElements.RADIUS: pT = VsopData.MercuryRadTerms; break; } break; case Planets.VENUS: switch ( ltype ) { case LocationElements.LONGITUDE: pT = VsopData.VenusLonTerms; break; case LocationElements.LATITUDE: pT = VsopData.VenusLatTerms; break; case LocationElements.RADIUS: pT = VsopData.VenusRadTerms; break; } break; case Planets.EARTH: switch ( ltype ) { case LocationElements.LONGITUDE: pT = VsopData.EarthLonTerms; break; case LocationElements.LATITUDE: pT = VsopData.EarthLatTerms; break; case LocationElements.RADIUS: pT = VsopData.EarthRadTerms; break; } break; case Planets.MARS: switch ( ltype ) { case LocationElements.LONGITUDE: pT = VsopData.MarsLonTerms; break; case LocationElements.LATITUDE: pT = VsopData.MarsLatTerms; break; case LocationElements.RADIUS: pT = VsopData.MarsRadTerms; break; } break; case Planets.JUPITER: switch ( ltype ) { case LocationElements.LONGITUDE: pT = VsopData.JupiterLonTerms; break; case LocationElements.LATITUDE: pT = VsopData.JupiterLatTerms; break; case LocationElements.RADIUS: pT = VsopData.JupiterRadTerms; break; } break; case Planets.SATURN: switch ( ltype ) { case LocationElements.LONGITUDE: pT = VsopData.SaturnLonTerms; break; case LocationElements.LATITUDE: pT = VsopData.SaturnLatTerms; break; case LocationElements.RADIUS: pT = VsopData.SaturnRadTerms; break; } break; case Planets.URANUS: switch ( ltype ) { case LocationElements.LONGITUDE: pT = VsopData.UranusLonTerms; break; case LocationElements.LATITUDE: pT = VsopData.UranusLatTerms; break; case LocationElements.RADIUS: pT = VsopData.UranusRadTerms; break; } break; case Planets.NEPTUNE: switch ( ltype ) { case LocationElements.LONGITUDE: pT = VsopData.NeptuneLonTerms; break; case LocationElements.LATITUDE: pT = VsopData.NeptuneLatTerms; break; case LocationElements.RADIUS: pT = VsopData.NeptuneRadTerms; break; } break; default: break; }; // Always six series to calculate int i=0, j=0; try { for( ; i<6; i++ ) { double sum = 0.; VsopSet pv[] = pT[i].pTerms; // sum the term = A x cos( B + C x tc ) for each row for( j=0; j

Ads help maintain this website.