diff options
Diffstat (limited to 'org/madore/ephem/VSOP87.java')
-rw-r--r-- | org/madore/ephem/VSOP87.java | 56 |
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); + } + +} |