Example usage for org.apache.commons.math3.geometry.euclidean.threed Rotation Rotation

List of usage examples for org.apache.commons.math3.geometry.euclidean.threed Rotation Rotation

Introduction

In this page you can find the example usage for org.apache.commons.math3.geometry.euclidean.threed Rotation Rotation.

Prototype

public Rotation(Vector3D u, Vector3D v) throws MathArithmeticException 

Source Link

Document

Build one of the rotations that transform one vector into another one.

Usage

From source file:org.orekit.attitudes.InertialAttitudeTest.java

@Test
public void testSpin() throws OrekitException {

    AbsoluteDate date = new AbsoluteDate(new DateComponents(1970, 01, 01), new TimeComponents(3, 25, 45.6789),
            TimeScalesFactory.getUTC());

    AttitudeProvider law = new InertialProvider(new Rotation(new Vector3D(-0.64, 0.6, 0.48), 0.2));

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

    Propagator propagator = new KeplerianPropagator(orbit, law);

    double h = 100.0;
    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, 1.0e-6 * 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, 1.0e-6 * evolutionAnglePlus);

    // compute spin axis using finite differences
    Rotation rMinus = sMinus.getAttitude().getRotation();
    Rotation rPlus = sPlus.getAttitude().getRotation();
    Rotation dr = rPlus.applyTo(rMinus.revert());
    Assert.assertEquals(0, dr.getAngle(), 1.0e-10);

    Vector3D spin0 = s0.getAttitude().getSpin();
    Assert.assertEquals(0, spin0.getNorm(), 1.0e-10);

}

From source file:org.orekit.attitudes.SpinStabilized.java

/** {@inheritDoc} */
public Attitude getAttitude(final PVCoordinatesProvider pvProv, final AbsoluteDate date, final Frame frame)
        throws OrekitException {

    // get attitude from underlying non-rotating law
    final Attitude base = nonRotatingLaw.getAttitude(pvProv, date, frame);
    final Transform baseTransform = new Transform(date, base.getOrientation());

    // compute spin transform due to spin from reference to current date
    final Transform spinInfluence = new Transform(date, new Rotation(axis, -rate * date.durationFrom(start)),
            spin);/*w  w  w  . j a  va 2 s.com*/

    // combine the two transforms
    final Transform combined = new Transform(date, baseTransform, spinInfluence);

    // build the attitude
    return new Attitude(date, frame, combined.getRotation(), combined.getRotationRate(),
            combined.getRotationAcceleration());

}

From source file:org.orekit.forces.gravity.CunninghamAttractionModelTest.java

@Test
public void testHelioSynchronous() throws ParseException, FileNotFoundException, OrekitException {

    // initialization
    AbsoluteDate date = new AbsoluteDate(new DateComponents(1970, 07, 01), new TimeComponents(13, 59, 27.816),
            TimeScalesFactory.getUTC());
    Transform itrfToEME2000 = itrf2008.getTransformTo(FramesFactory.getEME2000(), date);
    Vector3D pole = itrfToEME2000.transformVector(Vector3D.PLUS_K);
    Frame poleAligned = new Frame(FramesFactory.getEME2000(),
            new Transform(date, new Rotation(pole, Vector3D.PLUS_K)), "pole aligned", true);

    double i = FastMath.toRadians(98.7);
    double omega = FastMath.toRadians(93.0);
    double OMEGA = FastMath.toRadians(15.0 * 22.5);
    Orbit orbit = new KeplerianOrbit(7201009.7124401, 1e-3, i, omega, OMEGA, 0, PositionAngle.MEAN, poleAligned,
            date, mu);//from  w  ww  . j  a  v a 2s  . c om
    double[][] c = new double[3][1];
    c[0][0] = 0.0;
    c[2][0] = c20;
    double[][] s = new double[3][1];
    propagator.addForceModel(new CunninghamAttractionModel(itrf2008,
            GravityFieldFactory.getUnnormalizedProvider(6378136.460, mu, TideSystem.UNKNOWN, c, s)));

    // let the step handler perform the test
    propagator.setMasterMode(Constants.JULIAN_DAY, new SpotStepHandler(date, mu));
    propagator.setInitialState(new SpacecraftState(orbit));
    propagator.propagate(date.shiftedBy(7 * Constants.JULIAN_DAY));
    Assert.assertTrue(propagator.getCalls() < 9200);

}

From source file:org.orekit.forces.gravity.CunninghamAttractionModelTest.java

@Test
public void testEcksteinHechlerReference() throws ParseException, FileNotFoundException, OrekitException {

    //  Definition of initial conditions with position and velocity
    AbsoluteDate date = AbsoluteDate.J2000_EPOCH.shiftedBy(584.);
    Vector3D position = new Vector3D(3220103., 69623., 6449822.);
    Vector3D velocity = new Vector3D(6414.7, -2006., -3180.);

    Transform itrfToEME2000 = itrf2008.getTransformTo(FramesFactory.getEME2000(), date);
    Vector3D pole = itrfToEME2000.transformVector(Vector3D.PLUS_K);
    Frame poleAligned = new Frame(FramesFactory.getEME2000(),
            new Transform(date, new Rotation(pole, Vector3D.PLUS_K)), "pole aligned", true);

    Orbit initialOrbit = new EquinoctialOrbit(new PVCoordinates(position, velocity), poleAligned, date, mu);

    propagator.addForceModel(new CunninghamAttractionModel(itrf2008,
            GravityFieldFactory.getUnnormalizedProvider(ae, mu, TideSystem.UNKNOWN,
                    new double[][] { { 0.0 }, { 0.0 }, { c20 }, { c30 }, { c40 }, { c50 }, { c60 }, },
                    new double[][] { { 0.0 }, { 0.0 }, { 0.0 }, { 0.0 }, { 0.0 }, { 0.0 }, { 0.0 }, })));

    // let the step handler perform the test
    propagator.setInitialState(new SpacecraftState(initialOrbit));
    propagator.setMasterMode(20, new EckStepHandler(initialOrbit, ae, c20, c30, c40, c50, c60));
    propagator.propagate(date.shiftedBy(50000));
    Assert.assertTrue(propagator.getCalls() < 1300);

}

From source file:org.orekit.forces.gravity.DrozinerAttractionModelTest.java

@Test
public void testHelioSynchronous() throws ParseException, FileNotFoundException, OrekitException {

    // initialization
    AbsoluteDate date = new AbsoluteDate(new DateComponents(1970, 07, 01), new TimeComponents(13, 59, 27.816),
            TimeScalesFactory.getUTC());
    Transform itrfToEME2000 = itrf2008.getTransformTo(FramesFactory.getEME2000(), date);
    Vector3D pole = itrfToEME2000.transformVector(Vector3D.PLUS_K);
    Frame poleAligned = new Frame(FramesFactory.getEME2000(),
            new Transform(date, new Rotation(pole, Vector3D.PLUS_K)), "pole aligned", true);

    double i = FastMath.toRadians(98.7);
    double omega = FastMath.toRadians(93.0);
    double OMEGA = FastMath.toRadians(15.0 * 22.5);
    Orbit orbit = new KeplerianOrbit(7201009.7124401, 1e-3, i, omega, OMEGA, 0, PositionAngle.MEAN, poleAligned,
            date, mu);/*  w  ww  . ja  v a 2 s . c o  m*/

    propagator.addForceModel(new DrozinerAttractionModel(itrf2008,
            GravityFieldFactory.getUnnormalizedProvider(6378136.460, mu, TideSystem.UNKNOWN,
                    new double[][] { { 0.0 }, { 0.0 }, { c20 } },
                    new double[][] { { 0.0 }, { 0.0 }, { 0.0 } })));

    // let the step handler perform the test
    propagator.setMasterMode(Constants.JULIAN_DAY, new SpotStepHandler());
    propagator.setInitialState(new SpacecraftState(orbit));
    propagator.propagate(date.shiftedBy(7 * Constants.JULIAN_DAY));
    Assert.assertTrue(propagator.getCalls() < 9200);

}

From source file:org.orekit.forces.gravity.DrozinerAttractionModelTest.java

@Test
public void testEcksteinHechlerReference() throws ParseException, FileNotFoundException, OrekitException {

    //  Definition of initial conditions with position and velocity
    AbsoluteDate date = AbsoluteDate.J2000_EPOCH.shiftedBy(584.);
    Vector3D position = new Vector3D(3220103., 69623., 6449822.);
    Vector3D velocity = new Vector3D(6414.7, -2006., -3180.);

    Transform itrfToEME2000 = itrf2008.getTransformTo(FramesFactory.getEME2000(), date);
    Vector3D pole = itrfToEME2000.transformVector(Vector3D.PLUS_K);
    Frame poleAligned = new Frame(FramesFactory.getEME2000(),
            new Transform(date, new Rotation(pole, Vector3D.PLUS_K)), "pole aligned", true);

    Orbit initialOrbit = new EquinoctialOrbit(new PVCoordinates(position, velocity), poleAligned, date, mu);

    propagator.addForceModel(new DrozinerAttractionModel(itrf2008,
            GravityFieldFactory.getUnnormalizedProvider(ae, mu, TideSystem.UNKNOWN,
                    new double[][] { { 1.0 }, { 0.0 }, { c20 }, { c30 }, { c40 }, { c50 }, { c60 }, },
                    new double[][] { { 0.0 }, { 0.0 }, { 0.0 }, { 0.0 }, { 0.0 }, { 0.0 }, { 0.0 }, })));

    // let the step handler perform the test
    propagator.setMasterMode(20, new EckStepHandler(initialOrbit, ae, mu, c20, c30, c40, c50, c60));
    propagator.setInitialState(new SpacecraftState(initialOrbit));
    propagator.propagate(date.shiftedBy(50000));
    Assert.assertTrue(propagator.getCalls() < 1300);

}

From source file:org.orekit.forces.gravity.HolmesFeatherstoneAttractionModelTest.java

@Test
public void testHelioSynchronous() throws OrekitException {

    // initialization
    AbsoluteDate date = new AbsoluteDate(new DateComponents(1970, 07, 01), new TimeComponents(13, 59, 27.816),
            TimeScalesFactory.getUTC());
    Transform itrfToEME2000 = itrf.getTransformTo(FramesFactory.getEME2000(), date);
    Vector3D pole = itrfToEME2000.transformVector(Vector3D.PLUS_K);
    Frame poleAligned = new Frame(FramesFactory.getEME2000(),
            new Transform(date, new Rotation(pole, Vector3D.PLUS_K)), "pole aligned", true);

    double i = FastMath.toRadians(98.7);
    double omega = FastMath.toRadians(93.0);
    double OMEGA = FastMath.toRadians(15.0 * 22.5);
    Orbit orbit = new KeplerianOrbit(7201009.7124401, 1e-3, i, omega, OMEGA, 0, PositionAngle.MEAN, poleAligned,
            date, mu);// www.  j  a  v a 2  s.c  o  m
    double[][] c = new double[3][1];
    c[0][0] = 0.0;
    c[2][0] = normalizedC20;
    double[][] s = new double[3][1];
    propagator.addForceModel(new HolmesFeatherstoneAttractionModel(itrf,
            GravityFieldFactory.getNormalizedProvider(6378136.460, mu, TideSystem.UNKNOWN, c, s)));

    // let the step handler perform the test
    propagator.setMasterMode(Constants.JULIAN_DAY, new SpotStepHandler(date, mu));
    propagator.setInitialState(new SpacecraftState(orbit));
    propagator.propagate(date.shiftedBy(7 * Constants.JULIAN_DAY));
    Assert.assertTrue(propagator.getCalls() < 9200);

}

From source file:org.orekit.forces.gravity.HolmesFeatherstoneAttractionModelTest.java

@Test
public void testEcksteinHechlerReference() throws OrekitException {

    //  Definition of initial conditions with position and velocity
    AbsoluteDate date = AbsoluteDate.J2000_EPOCH.shiftedBy(584.);
    Vector3D position = new Vector3D(3220103., 69623., 6449822.);
    Vector3D velocity = new Vector3D(6414.7, -2006., -3180.);

    Transform itrfToEME2000 = itrf.getTransformTo(FramesFactory.getEME2000(), date);
    Vector3D pole = itrfToEME2000.transformVector(Vector3D.PLUS_K);
    Frame poleAligned = new Frame(FramesFactory.getEME2000(),
            new Transform(date, new Rotation(pole, Vector3D.PLUS_K)), "pole aligned", true);

    Orbit initialOrbit = new EquinoctialOrbit(new PVCoordinates(position, velocity), poleAligned, date, mu);

    propagator.addForceModel(new HolmesFeatherstoneAttractionModel(itrf,
            GravityFieldFactory.getNormalizedProvider(ae, mu, TideSystem.UNKNOWN,
                    new double[][] { { 0.0 }, { 0.0 }, { normalizedC20 }, { normalizedC30 }, { normalizedC40 },
                            { normalizedC50 }, { normalizedC60 }, },
                    new double[][] { { 0.0 }, { 0.0 }, { 0.0 }, { 0.0 }, { 0.0 }, { 0.0 }, { 0.0 }, })));

    // let the step handler perform the test
    propagator.setInitialState(new SpacecraftState(initialOrbit));
    propagator.setMasterMode(20, new EckStepHandler(initialOrbit, ae, unnormalizedC20, unnormalizedC30,
            unnormalizedC40, unnormalizedC50, unnormalizedC60));
    propagator.propagate(date.shiftedBy(50000));
    Assert.assertTrue(propagator.getCalls() < 1100);

}

From source file:org.orekit.forces.maneuvers.ConstantThrustManeuverTest.java

@Test
public void testRoughBehaviour() throws OrekitException {
    final double isp = 318;
    final double mass = 2500;
    final double a = 24396159;
    final double e = 0.72831215;
    final double i = FastMath.toRadians(7);
    final double omega = FastMath.toRadians(180);
    final double OMEGA = FastMath.toRadians(261);
    final double lv = 0;

    final double duration = 3653.99;
    final double f = 420;
    final double delta = FastMath.toRadians(-7.4978);
    final double alpha = FastMath.toRadians(351);
    final AttitudeProvider law = new InertialProvider(
            new Rotation(new Vector3D(alpha, delta), Vector3D.PLUS_I));

    final AbsoluteDate initDate = new AbsoluteDate(new DateComponents(2004, 01, 01),
            new TimeComponents(23, 30, 00.000), TimeScalesFactory.getUTC());
    final Orbit orbit = new KeplerianOrbit(a, e, i, omega, OMEGA, lv, PositionAngle.TRUE,
            FramesFactory.getEME2000(), initDate, mu);
    final SpacecraftState initialState = new SpacecraftState(orbit,
            law.getAttitude(orbit, orbit.getDate(), orbit.getFrame()), mass);

    final AbsoluteDate fireDate = new AbsoluteDate(new DateComponents(2004, 01, 02),
            new TimeComponents(04, 15, 34.080), TimeScalesFactory.getUTC());
    final ConstantThrustManeuver maneuver = new ConstantThrustManeuver(fireDate, duration, f, isp,
            Vector3D.PLUS_I);/*from   ww  w  .j  a  v a  2s .c o  m*/
    Assert.assertEquals(f, maneuver.getThrust(), 1.0e-10);
    Assert.assertEquals(isp, maneuver.getISP(), 1.0e-10);

    double[] absTolerance = { 0.001, 1.0e-9, 1.0e-9, 1.0e-6, 1.0e-6, 1.0e-6, 0.001 };
    double[] relTolerance = { 1.0e-7, 1.0e-4, 1.0e-4, 1.0e-7, 1.0e-7, 1.0e-7, 1.0e-7 };
    AdaptiveStepsizeIntegrator integrator = new DormandPrince853Integrator(0.001, 1000, absTolerance,
            relTolerance);
    integrator.setInitialStepSize(60);
    final NumericalPropagator propagator = new NumericalPropagator(integrator);
    propagator.setInitialState(initialState);
    propagator.setAttitudeProvider(law);
    propagator.addForceModel(maneuver);
    final SpacecraftState finalorb = propagator.propagate(fireDate.shiftedBy(3800));

    final double massTolerance = FastMath.abs(maneuver.getFlowRate())
            * maneuver.getEventsDetectors()[0].getThreshold();
    Assert.assertEquals(2007.8824544261233, finalorb.getMass(), massTolerance);
    Assert.assertEquals(2.6872, FastMath.toDegrees(MathUtils.normalizeAngle(finalorb.getI(), FastMath.PI)),
            1e-4);
    Assert.assertEquals(28970, finalorb.getA() / 1000, 1);

}

From source file:org.orekit.frames.EclipticProvider.java

@Override
public Transform getTransform(final AbsoluteDate date) throws OrekitException {
    //mean obliquity of date
    final double epsA = obliquity.value(date);
    return new Transform(date, new Rotation(Vector3D.MINUS_I, epsA));
}