summaryrefslogtreecommitdiffstats
path: root/org/madore/ephem/VSOP87.java
diff options
context:
space:
mode:
authorDavid A. Madore <david+git@madore.org>2012-03-27 17:39:45 +0200
committerDavid A. Madore <david+git@madore.org>2012-03-27 19:42:18 +0200
commitd7ffd8429e8fa68a43710f2d27c266c5c2ab670c (patch)
tree6e7edfca4cac62948947d4ccd8a5a321c48f07b8 /org/madore/ephem/VSOP87.java
parentf3b19e381097c01c1abb119e91487191d7e2ef5e (diff)
downloadephem-d7ffd8429e8fa68a43710f2d27c266c5c2ab670c.tar.gz
ephem-d7ffd8429e8fa68a43710f2d27c266c5c2ab670c.tar.bz2
ephem-d7ffd8429e8fa68a43710f2d27c266c5c2ab670c.zip
Use generalized Poisson series for VSOP87.
Diffstat (limited to 'org/madore/ephem/VSOP87.java')
-rw-r--r--org/madore/ephem/VSOP87.java36
1 files changed, 27 insertions, 9 deletions
diff --git a/org/madore/ephem/VSOP87.java b/org/madore/ephem/VSOP87.java
index e8a5fb1..442e985 100644
--- a/org/madore/ephem/VSOP87.java
+++ b/org/madore/ephem/VSOP87.java
@@ -23,14 +23,29 @@ public final class VSOP87 {
Variable(String name) { this.name = name; }
}
- private static EnumMap<Planet, EnumMap<Variable, Comput.SumPoissonTerms>> data = new EnumMap<Planet, EnumMap<Variable, Comput.SumPoissonTerms>>(Planet.class);
+ public static Comput.Polynomial[] lambdas = new Comput.Polynomial[] {
+ new Comput.Polynomial(4.40260884240, 26087.9031415742), // Mercury
+ new Comput.Polynomial(3.17614669689, 10213.2855462110), // Venus
+ new Comput.Polynomial(1.75347045953, 6283.0758499914), // Earth
+ new Comput.Polynomial(6.20347611291, 3340.6124266998), // Mars
+ new Comput.Polynomial(0.59954649739, 529.6909650946), // Jupiter
+ new Comput.Polynomial(0.87401675650, 213.2990954380), // Saturn
+ new Comput.Polynomial(5.48129387159, 74.7815985673), // Uranus
+ new Comput.Polynomial(5.31188628676, 38.1330356378), // Neptune
+ new Comput.Polynomial(5.19846674103, 77713.7714681205), // Moon D
+ new Comput.Polynomial(1.62790523337, 84334.6615813083), // Moon F
+ new Comput.Polynomial(2.35555589827, 83286.9142695536), // Moon l
+ new Comput.Polynomial(3.81034454697, 83997.0911355954) // Moon Lm
+ };
- public static Comput.SumPoissonTerms getFunc(Planet pl, Variable v) {
+ private static EnumMap<Planet, EnumMap<Variable, Comput.SumPoisson2Terms>> data = new EnumMap<Planet, EnumMap<Variable, Comput.SumPoisson2Terms>>(Planet.class);
+
+ public static Comput.SumPoisson2Terms getFunc(Planet pl, Variable v) {
if ( ! data.containsKey(pl) ) {
- data.put(pl, new EnumMap<Variable, Comput.SumPoissonTerms>(Variable.class));
+ data.put(pl, new EnumMap<Variable, Comput.SumPoisson2Terms>(Variable.class));
}
if ( ! data.get(pl).containsKey(v) ) {
- List<Comput.PoissonTerm> series = new ArrayList<Comput.PoissonTerm>();
+ List<Comput.Poisson2Term> series = new ArrayList<Comput.Poisson2Term>();
try {
InputStream str = VSOP87.class.getResourceAsStream("vsop87-simp.dat");
BufferedReader in = new BufferedReader(new InputStreamReader(str, "utf-8"));
@@ -40,15 +55,18 @@ public final class VSOP87 {
if ( ! fields[0].equals(pl.name) || ! fields[1].equals(v.name) )
continue;
int deg = Integer.parseInt(fields[2]);
- double c = Double.parseDouble(fields[3]);
- double phi = Double.parseDouble(fields[4]);
- double om = Double.parseDouble(fields[5]);
- series.add(Comput.PoissonTerm.cphi(deg, c, phi, om));
+ String[] subfields = fields[3].split(",");
+ double[] om = new double[12];
+ for ( int j=0 ; j<12 ; j++ )
+ om[j] = Double.parseDouble(subfields[j]);
+ double b = Double.parseDouble(fields[4]);
+ double a = Double.parseDouble(fields[5]);
+ series.add(Comput.Poisson2Term.ab(deg, a, b, om, lambdas));
}
} catch ( Exception e ) {
throw new RuntimeException(e);
}
- data.get(pl).put(v, new Comput.SumPoissonTerms(series));
+ data.get(pl).put(v, new Comput.SumPoisson2Terms(series));
}
return data.get(pl).get(v);
}