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; } }