summaryrefslogtreecommitdiffstats
path: root/org/madore/ephem/VSOP87.java
diff options
context:
space:
mode:
authorDavid A. Madore <david+git@madore.org>2012-03-24 00:54:50 +0100
committerDavid A. Madore <david+git@madore.org>2012-03-27 19:31:16 +0200
commitd64c37f6f24abbfb7e02b8f9ea670a9b5e794f2e (patch)
treef7c901d0554b3d822dab70a627e209fb4923f2b9 /org/madore/ephem/VSOP87.java
downloadephem-d64c37f6f24abbfb7e02b8f9ea670a9b5e794f2e.tar.gz
ephem-d64c37f6f24abbfb7e02b8f9ea670a9b5e794f2e.tar.bz2
ephem-d64c37f6f24abbfb7e02b8f9ea670a9b5e794f2e.zip
Initial commit. This version doesn't do much but evaluate VSOP87/Smart97 series.
Diffstat (limited to 'org/madore/ephem/VSOP87.java')
-rw-r--r--org/madore/ephem/VSOP87.java56
1 files changed, 56 insertions, 0 deletions
diff --git a/org/madore/ephem/VSOP87.java b/org/madore/ephem/VSOP87.java
new file mode 100644
index 0000000..e8a5fb1
--- /dev/null
+++ b/org/madore/ephem/VSOP87.java
@@ -0,0 +1,56 @@
+package org.madore.ephem;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.EnumMap;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.BufferedReader;
+
+public final class VSOP87 {
+
+ public static enum Planet {
+ MERCURY("mercury"), VENUS("venus"), EARTH("earth"),
+ JUPITER("jupiter"), SATURN("saturn"),
+ URANUS("uranus"), NEPTUNE("neptune");
+ final String name;
+ Planet(String name) { this.name = name; }
+ }
+
+ public static enum Variable {
+ LAT("lat"), LONG("long"), DIST("dist");
+ final String name;
+ 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.SumPoissonTerms getFunc(Planet pl, Variable v) {
+ if ( ! data.containsKey(pl) ) {
+ data.put(pl, new EnumMap<Variable, Comput.SumPoissonTerms>(Variable.class));
+ }
+ if ( ! data.get(pl).containsKey(v) ) {
+ List<Comput.PoissonTerm> series = new ArrayList<Comput.PoissonTerm>();
+ try {
+ InputStream str = VSOP87.class.getResourceAsStream("vsop87-simp.dat");
+ BufferedReader in = new BufferedReader(new InputStreamReader(str, "utf-8"));
+ String s;
+ while ( ( s = in.readLine() ) != null ) {
+ String[] fields = s.split("\t");
+ 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));
+ }
+ } catch ( Exception e ) {
+ throw new RuntimeException(e);
+ }
+ data.get(pl).put(v, new Comput.SumPoissonTerms(series));
+ }
+ return data.get(pl).get(v);
+ }
+
+}