summaryrefslogtreecommitdiffstats
path: root/org/madore/ephem/Precession.java
diff options
context:
space:
mode:
Diffstat (limited to 'org/madore/ephem/Precession.java')
-rw-r--r--org/madore/ephem/Precession.java22
1 files changed, 22 insertions, 0 deletions
diff --git a/org/madore/ephem/Precession.java b/org/madore/ephem/Precession.java
new file mode 100644
index 0000000..5ac3a03
--- /dev/null
+++ b/org/madore/ephem/Precession.java
@@ -0,0 +1,22 @@
+package org.madore.ephem;
+
+public final class Precession {
+
+ // The following angles are in arcseconds, argument is in Julian centuries since J2000.
+ public static final double epsilon = 84381.406;
+ public static Comput.Polynomial psi
+ = new Comput.Polynomial(0, 5038.481507, -1.0790069, -0.00114045, 0.000132851, -0.0000000951);
+ public static Comput.Polynomial omega
+ = new Comput.Polynomial(epsilon, -0.025754, 0.0512623, -0.00772503, -0.000000467, 0.0000003337);
+ public static Comput.Polynomial chi
+ = new Comput.Polynomial(0, 10.556403, -2.3814292, -0.00121197, 0.000170663, -0.0000000560);
+
+ public static Frames.RotationMatrix matrix(double t) {
+ Frames.RotationMatrix mat1 = Frames.RotationMatrix.rotx(epsilon*Comput.arcsecond);
+ Frames.RotationMatrix mat2 = Frames.RotationMatrix.rotz(-psi.v(t)*Comput.arcsecond).apply(mat1);
+ Frames.RotationMatrix mat3 = Frames.RotationMatrix.rotx(-omega.v(t)*Comput.arcsecond).apply(mat2);
+ Frames.RotationMatrix mat4 = Frames.RotationMatrix.rotz(chi.v(t)*Comput.arcsecond).apply(mat3);
+ return mat4;
+ }
+
+}