use of org.orekit.orbits.KeplerianOrbit in project Orekit by CS-SI.
the class StopOnDecreasingTest method testIncreasing.
@Test
public void testIncreasing() throws OrekitException {
SpacecraftState s = new SpacecraftState(new KeplerianOrbit(24464560.0, 0.7311, 0.122138, 3.10686, 1.00681, 0.048363, PositionAngle.MEAN, FramesFactory.getEME2000(), AbsoluteDate.J2000_EPOCH, Constants.EIGEN5C_EARTH_MU));
Assert.assertSame(EventHandler.Action.CONTINUE, new StopOnDecreasing<EventDetector>().eventOccurred(s, null, true));
}
use of org.orekit.orbits.KeplerianOrbit in project Orekit by CS-SI.
the class StopOnEventTest method testNoReset.
@Test
public void testNoReset() throws OrekitException {
SpacecraftState s = new SpacecraftState(new KeplerianOrbit(24464560.0, 0.7311, 0.122138, 3.10686, 1.00681, 0.048363, PositionAngle.MEAN, FramesFactory.getEME2000(), AbsoluteDate.J2000_EPOCH, Constants.EIGEN5C_EARTH_MU));
Assert.assertSame(s, new StopOnEvent<EventDetector>().resetState(null, s));
}
use of org.orekit.orbits.KeplerianOrbit in project Orekit by CS-SI.
the class LofOffsetPointingTest method testTypesField.
@Test
public void testTypesField() throws OrekitException {
AbsoluteDate date = new AbsoluteDate(new DateComponents(1970, 01, 01), new TimeComponents(3, 25, 45.6789), TimeScalesFactory.getUTC());
KeplerianOrbit orbit = new KeplerianOrbit(7178000.0, 1.e-4, FastMath.toRadians(50.), FastMath.toRadians(10.), FastMath.toRadians(20.), FastMath.toRadians(30.), PositionAngle.MEAN, FramesFactory.getEME2000(), date, 3.986004415e14);
for (final LOFType type : LOFType.values()) {
RotationOrder order = RotationOrder.ZXY;
double alpha1 = 0.123;
double alpha2 = 0.456;
double alpha3 = 0.789;
LofOffset law = new LofOffset(orbit.getFrame(), type, order, alpha1, alpha2, alpha3);
final Vector3D dir;
switch(type) {
case TNW:
dir = Vector3D.PLUS_J;
break;
case QSW:
case LVLH:
dir = Vector3D.MINUS_I;
break;
case VVLH:
dir = Vector3D.PLUS_K;
break;
default:
// VNC
dir = Vector3D.MINUS_K;
}
LofOffsetPointing lop = new LofOffsetPointing(orbit.getFrame(), earthSpheric, law, dir);
checkField(Decimal64Field.getInstance(), lop, orbit, date, orbit.getFrame());
}
}
use of org.orekit.orbits.KeplerianOrbit in project Orekit by CS-SI.
the class NadirPointingTest method testSpin.
@Test
public void testSpin() throws OrekitException {
// Elliptic earth shape
OneAxisEllipsoid earthShape = new OneAxisEllipsoid(6378136.460, 1 / 298.257222101, itrf);
// Create earth center pointing attitude provider
NadirPointing law = new NadirPointing(FramesFactory.getEME2000(), earthShape);
// Satellite on any position
KeplerianOrbit orbit = new KeplerianOrbit(7178000.0, 1.e-4, FastMath.toRadians(50.), FastMath.toRadians(10.), FastMath.toRadians(20.), FastMath.toRadians(30.), PositionAngle.MEAN, FramesFactory.getEME2000(), date, mu);
Propagator propagator = new KeplerianPropagator(orbit, law, mu, 2500.0);
double h = 0.1;
SpacecraftState sMinus = propagator.propagate(date.shiftedBy(-h));
SpacecraftState s0 = propagator.propagate(date);
SpacecraftState sPlus = propagator.propagate(date.shiftedBy(h));
// check spin is consistent with attitude evolution
double errorAngleMinus = Rotation.distance(sMinus.shiftedBy(h).getAttitude().getRotation(), s0.getAttitude().getRotation());
double evolutionAngleMinus = Rotation.distance(sMinus.getAttitude().getRotation(), s0.getAttitude().getRotation());
Assert.assertEquals(0.0, errorAngleMinus, 5.3e-9 * evolutionAngleMinus);
double errorAnglePlus = Rotation.distance(s0.getAttitude().getRotation(), sPlus.shiftedBy(-h).getAttitude().getRotation());
double evolutionAnglePlus = Rotation.distance(s0.getAttitude().getRotation(), sPlus.getAttitude().getRotation());
Assert.assertEquals(0.0, errorAnglePlus, 8.1e-9 * evolutionAnglePlus);
Vector3D spin0 = s0.getAttitude().getSpin();
Rotation rM = sMinus.getAttitude().getRotation();
Rotation rP = sPlus.getAttitude().getRotation();
Vector3D reference = AngularCoordinates.estimateRate(rM, rP, 2 * h);
Assert.assertTrue(Rotation.distance(rM, rP) > 2.0e-4);
Assert.assertEquals(0.0, spin0.subtract(reference).getNorm(), 2.0e-6);
}
use of org.orekit.orbits.KeplerianOrbit in project Orekit by CS-SI.
the class NadirPointingTest method testNonSphericEarth.
/**
* Test in the case of an elliptic earth : nadir pointing shall be :
* - the same as earth center pointing in case of equatorial or polar position
* - different from earth center pointing in any other case
*/
@Test
public void testNonSphericEarth() throws OrekitException {
// Elliptic earth shape
OneAxisEllipsoid earthShape = new OneAxisEllipsoid(6378136.460, 1 / 298.257222101, itrf);
// Create nadir pointing attitude provider
NadirPointing nadirAttitudeLaw = new NadirPointing(FramesFactory.getEME2000(), earthShape);
// Create earth center pointing attitude provider
BodyCenterPointing earthCenterAttitudeLaw = new BodyCenterPointing(FramesFactory.getEME2000(), earthShape);
// Satellite on equatorial position
// **********************************
KeplerianOrbit kep = new KeplerianOrbit(7178000.0, 1.e-8, FastMath.toRadians(50.), 0., 0., 0., PositionAngle.TRUE, FramesFactory.getEME2000(), date, mu);
// Get nadir attitude
Rotation rotNadir = nadirAttitudeLaw.getAttitude(kep, date, kep.getFrame()).getRotation();
checkField(Decimal64Field.getInstance(), nadirAttitudeLaw, kep, kep.getDate(), kep.getFrame());
// Get earth center attitude
Rotation rotCenter = earthCenterAttitudeLaw.getAttitude(kep, date, kep.getFrame()).getRotation();
// For a satellite at equatorial position, earth center pointing attitude and nadir pointing
// attitude shall be the same, i.e the composition of inverse earth pointing rotation
// with nadir pointing rotation shall be identity.
Rotation rotCompo = rotCenter.composeInverse(rotNadir, RotationConvention.VECTOR_OPERATOR);
double angle = rotCompo.getAngle();
Assert.assertEquals(0.0, angle, 5.e-6);
// Satellite on polar position
// *****************************
CircularOrbit circ = new CircularOrbit(7178000.0, 1.e-5, 0., FastMath.toRadians(90.), 0., FastMath.toRadians(90.), PositionAngle.TRUE, FramesFactory.getEME2000(), date, mu);
// Get nadir attitude
rotNadir = nadirAttitudeLaw.getAttitude(circ, date, circ.getFrame()).getRotation();
// Get earth center attitude
rotCenter = earthCenterAttitudeLaw.getAttitude(circ, date, circ.getFrame()).getRotation();
// For a satellite at polar position, earth center pointing attitude and nadir pointing
// attitude shall be the same, i.e the composition of inverse earth pointing rotation
// with nadir pointing rotation shall be identity.
rotCompo = rotCenter.composeInverse(rotNadir, RotationConvention.VECTOR_OPERATOR);
angle = rotCompo.getAngle();
Assert.assertEquals(angle, 0.0, 5.e-6);
// Satellite on any position
// ***************************
circ = new CircularOrbit(7178000.0, 1.e-5, 0., FastMath.toRadians(50.), 0., FastMath.toRadians(90.), PositionAngle.TRUE, FramesFactory.getEME2000(), date, mu);
// Get nadir attitude
rotNadir = nadirAttitudeLaw.getAttitude(circ, date, circ.getFrame()).getRotation();
// Get earth center attitude
rotCenter = earthCenterAttitudeLaw.getAttitude(circ, date, circ.getFrame()).getRotation();
// For a satellite at any position, earth center pointing attitude and nadir pointing
// and nadir pointing attitude shall not be the same, i.e the composition of inverse earth
// pointing rotation with nadir pointing rotation shall be different from identity.
rotCompo = rotCenter.composeInverse(rotNadir, RotationConvention.VECTOR_OPERATOR);
angle = rotCompo.getAngle();
Assert.assertEquals(angle, FastMath.toRadians(0.16797386586252272), Utils.epsilonAngle);
}
Aggregations