From 2ee3f055058d10ec7a50182e102ba0a235878f71 Mon Sep 17 00:00:00 2001 From: "David A. Madore" Date: Tue, 27 Mar 2012 16:08:35 +0200 Subject: Simple matrix library + formula for precession. --- org/madore/ephem/Precession.java | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 org/madore/ephem/Precession.java (limited to 'org/madore/ephem/Precession.java') 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; + } + +} -- cgit v1.2.3