Search in sources :

Example 1 with Tuple

use of org.hipparchus.util.Tuple in project Orekit by CS-SI.

the class FieldKeplerianPropagatorTest method testTuple.

@Test
public void testTuple() throws OrekitException {
    AbsoluteDate initDate = AbsoluteDate.J2000_EPOCH.shiftedBy(584.);
    KeplerianOrbit k0 = new KeplerianOrbit(7209668.0, 0.5e-4, 1.7, 2.1, 2.9, 6.2, PositionAngle.TRUE, FramesFactory.getEME2000(), initDate, mu);
    TimeStampedPVCoordinates pv0 = k0.getPVCoordinates();
    TimeStampedPVCoordinates pv1 = new TimeStampedPVCoordinates(pv0.getDate(), pv0.getPosition(), pv0.getVelocity().add(new Vector3D(2.0, pv0.getVelocity().normalize())));
    KeplerianOrbit k1 = new KeplerianOrbit(pv1, k0.getFrame(), k0.getMu());
    FieldOrbit<Tuple> twoOrbits = new FieldKeplerianOrbit<>(new Tuple(k0.getA(), k1.getA()), new Tuple(k0.getE(), k1.getE()), new Tuple(k0.getI(), k1.getI()), new Tuple(k0.getPerigeeArgument(), k1.getPerigeeArgument()), new Tuple(k0.getRightAscensionOfAscendingNode(), k1.getRightAscensionOfAscendingNode()), new Tuple(k0.getMeanAnomaly(), k1.getMeanAnomaly()), PositionAngle.MEAN, FramesFactory.getEME2000(), new FieldAbsoluteDate<>(initDate, new Tuple(0.0, 0.0)), mu);
    Field<Tuple> field = twoOrbits.getDate().getField();
    FieldPropagator<Tuple> propagator = new FieldKeplerianPropagator<>(twoOrbits);
    Min minTangential = new Min();
    Max maxTangential = new Max();
    Min minRadial = new Min();
    Max maxRadial = new Max();
    propagator.setMasterMode(field.getZero().add(10.0), (s, isLast) -> {
        FieldVector3D<Tuple> p = s.getPVCoordinates().getPosition();
        FieldVector3D<Tuple> v = s.getPVCoordinates().getVelocity();
        Vector3D p0 = new Vector3D(p.getX().getComponent(0), p.getY().getComponent(0), p.getZ().getComponent(0));
        Vector3D v0 = new Vector3D(v.getX().getComponent(0), v.getY().getComponent(0), v.getZ().getComponent(0));
        Vector3D t = v0.normalize();
        Vector3D r = Vector3D.crossProduct(v0, Vector3D.crossProduct(p0, v0)).normalize();
        Vector3D p1 = new Vector3D(p.getX().getComponent(1), p.getY().getComponent(1), p.getZ().getComponent(1));
        double dT = Vector3D.dotProduct(p1.subtract(p0), t);
        double dR = Vector3D.dotProduct(p1.subtract(p0), r);
        minTangential.increment(dT);
        maxTangential.increment(dT);
        minRadial.increment(dR);
        maxRadial.increment(dR);
    });
    propagator.propagate(twoOrbits.getDate().shiftedBy(Constants.JULIAN_DAY / 8));
    Assert.assertEquals(-72525.685, minTangential.getResult(), 1.0e-3);
    Assert.assertEquals(926.046, maxTangential.getResult(), 1.0e-3);
    Assert.assertEquals(-92.800, minRadial.getResult(), 1.0e-3);
    Assert.assertEquals(7739.532, maxRadial.getResult(), 1.0e-3);
}
Also used : Max(org.hipparchus.stat.descriptive.rank.Max) TimeStampedPVCoordinates(org.orekit.utils.TimeStampedPVCoordinates) FieldAbsoluteDate(org.orekit.time.FieldAbsoluteDate) AbsoluteDate(org.orekit.time.AbsoluteDate) FieldKeplerianOrbit(org.orekit.orbits.FieldKeplerianOrbit) Min(org.hipparchus.stat.descriptive.rank.Min) FieldVector3D(org.hipparchus.geometry.euclidean.threed.FieldVector3D) Vector3D(org.hipparchus.geometry.euclidean.threed.Vector3D) FieldKeplerianOrbit(org.orekit.orbits.FieldKeplerianOrbit) KeplerianOrbit(org.orekit.orbits.KeplerianOrbit) Tuple(org.hipparchus.util.Tuple) Test(org.junit.Test)

Aggregations

FieldVector3D (org.hipparchus.geometry.euclidean.threed.FieldVector3D)1 Vector3D (org.hipparchus.geometry.euclidean.threed.Vector3D)1 Max (org.hipparchus.stat.descriptive.rank.Max)1 Min (org.hipparchus.stat.descriptive.rank.Min)1 Tuple (org.hipparchus.util.Tuple)1 Test (org.junit.Test)1 FieldKeplerianOrbit (org.orekit.orbits.FieldKeplerianOrbit)1 KeplerianOrbit (org.orekit.orbits.KeplerianOrbit)1 AbsoluteDate (org.orekit.time.AbsoluteDate)1 FieldAbsoluteDate (org.orekit.time.FieldAbsoluteDate)1 TimeStampedPVCoordinates (org.orekit.utils.TimeStampedPVCoordinates)1