Example usage for org.apache.commons.math3.geometry.euclidean.threed Vector3D PLUS_J

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

Introduction

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

Prototype

Vector3D PLUS_J

To view the source code for org.apache.commons.math3.geometry.euclidean.threed Vector3D PLUS_J.

Click Source Link

Document

Second canonical vector (coordinates: 0, 1, 0).

Usage

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

@Test
public void testShift() {

    // the following transform corresponds to a frame moving along the line x=1 and rotating around its -z axis
    // the linear motion velocity is (0, +1, 0), the angular rate is PI/2
    // at t = -1 the frame origin is at (1, -1, 0), its X axis is equal to  Xref and its Y axis is equal to  Yref
    // at t =  0 the frame origin is at (1,  0, 0), its X axis is equal to -Yref and its Y axis is equal to  Xref
    // at t = +1 the frame origin is at (1, +1, 0), its X axis is equal to -Xref and its Y axis is equal to -Yref
    AbsoluteDate date = AbsoluteDate.GALILEO_EPOCH;
    double alpha0 = 0.5 * FastMath.PI;
    double omega = 0.5 * FastMath.PI;
    Transform t = new Transform(date, new Transform(date, Vector3D.MINUS_I, Vector3D.MINUS_J, Vector3D.ZERO),
            new Transform(date, new Rotation(Vector3D.PLUS_K, alpha0), new Vector3D(omega, Vector3D.MINUS_K)));

    for (double dt = -10.0; dt < 10.0; dt += 0.125) {

        Transform shifted = t.shiftedBy(dt);

        // the following point should always remain at moving frame origin
        PVCoordinates expectedFixedPoint = shifted.transformPVCoordinates(
                new PVCoordinates(new Vector3D(1, dt, 0), Vector3D.PLUS_J, Vector3D.ZERO));
        checkVector(expectedFixedPoint.getPosition(), Vector3D.ZERO, 1.0e-14);
        checkVector(expectedFixedPoint.getVelocity(), Vector3D.ZERO, 1.0e-14);
        checkVector(expectedFixedPoint.getAcceleration(), Vector3D.ZERO, 1.0e-14);

        // fixed frame origin apparent motion in moving frame
        PVCoordinates expectedApparentMotion = shifted.transformPVCoordinates(PVCoordinates.ZERO);
        double c = FastMath.cos(alpha0 + omega * dt);
        double s = FastMath.sin(alpha0 + omega * dt);
        Vector3D referencePosition = new Vector3D(-c + dt * s, -s - dt * c, 0);
        Vector3D referenceVelocity = new Vector3D((1 + omega) * s + dt * omega * c,
                -(1 + omega) * c + dt * omega * s, 0);
        Vector3D referenceAcceleration = new Vector3D(omega * (2 + omega) * c - dt * omega * omega * s,
                omega * (2 + omega) * s + dt * omega * omega * c, 0);
        checkVector(expectedApparentMotion.getPosition(), referencePosition, 1.0e-14);
        checkVector(expectedApparentMotion.getVelocity(), referenceVelocity, 1.0e-14);
        checkVector(expectedApparentMotion.getAcceleration(), referenceAcceleration, 1.0e-14);

    }//  w  ww.  ja  v a2s .  c  om

}

From source file:org.orekit.models.earth.GeoidTest.java

/**
 * check {@link Geoid#getIntersectionPoint(Line, Vector3D, Frame,
 * AbsoluteDate)} returns null when there is no intersection
 *
 * @throws OrekitException on error//from w  w w. j av a 2 s  . c  o  m
 */
@Test
public void testGetIntersectionPointNoIntersection() throws OrekitException {
    Geoid geoid = getComponent();
    Vector3D closeMiss = new Vector3D(geoid.getEllipsoid().getEquatorialRadius() + 18, 0, 0);
    Line line = new Line(closeMiss, closeMiss.add(Vector3D.PLUS_J), 0);

    // action
    final GeodeticPoint actual = geoid.getIntersectionPoint(line, closeMiss, geoid.getBodyFrame(), date);

    // verify
    assertThat(actual, nullValue());
}

From source file:org.orekit.propagation.semianalytical.dsst.DSSTPropagatorTest.java

@Test
public void testImpulseManeuver() throws OrekitException {
    final Orbit initialOrbit = new KeplerianOrbit(24532000.0, 0.72, 0.3, FastMath.PI, 0.4, 2.0,
            PositionAngle.MEAN, FramesFactory.getEME2000(), new AbsoluteDate(new DateComponents(2008, 06, 23),
                    new TimeComponents(14, 18, 37), TimeScalesFactory.getUTC()),
            3.986004415e14);//from ww  w  . j  a v a  2s .co m
    final double a = initialOrbit.getA();
    final double e = initialOrbit.getE();
    final double i = initialOrbit.getI();
    final double mu = initialOrbit.getMu();
    final double vApo = FastMath.sqrt(mu * (1 - e) / (a * (1 + e)));
    double dv = 0.99 * FastMath.tan(i) * vApo;

    // Set propagator with state
    setDSSTProp(new SpacecraftState(initialOrbit));

    // Add impulse maneuver
    dsstProp.setAttitudeProvider(new LofOffset(initialOrbit.getFrame(), LOFType.VVLH));
    dsstProp.addEventDetector(
            new ImpulseManeuver<NodeDetector>(new NodeDetector(initialOrbit, FramesFactory.getEME2000()),
                    new Vector3D(dv, Vector3D.PLUS_J), 400.0));
    SpacecraftState propagated = dsstProp.propagate(initialOrbit.getDate().shiftedBy(8000));

    Assert.assertEquals(0.0028257, propagated.getI(), 1.0e-6);
}

From source file:org.orekit.propagation.semianalytical.dsst.forces.TesseralContribution.java

/** {@inheritDoc} */
@Override/*from   ww  w .  j a v a 2  s.  c o  m*/
public void initializeStep(final AuxiliaryElements aux) throws OrekitException {

    // Equinoctial elements
    a = aux.getSma();
    k = aux.getK();
    h = aux.getH();
    q = aux.getQ();
    p = aux.getP();
    lm = aux.getLM();

    // Eccentricity
    ecc = aux.getEcc();
    e2 = ecc * ecc;

    // Retrograde factor
    I = aux.getRetrogradeFactor();

    // Equinoctial frame vectors
    f = aux.getVectorF();
    g = aux.getVectorG();

    // Central body rotation angle from equation 2.7.1-(3)(4).
    final Transform t = bodyFrame.getTransformTo(aux.getFrame(), aux.getDate());
    final Vector3D xB = t.transformVector(Vector3D.PLUS_I);
    final Vector3D yB = t.transformVector(Vector3D.PLUS_J);
    theta = FastMath.atan2(-f.dotProduct(yB) + I * g.dotProduct(xB), f.dotProduct(xB) + I * g.dotProduct(yB));

    // Direction cosines
    alpha = aux.getAlpha();
    beta = aux.getBeta();
    gamma = aux.getGamma();

    // Equinoctial coefficients
    // A = sqrt( * a)
    final double A = aux.getA();
    // B = sqrt(1 - h - k)
    final double B = aux.getB();
    // C = 1 + p + q
    final double C = aux.getC();
    // Common factors from equinoctial coefficients
    // 2 * a / A
    ax2oA = 2. * a / A;
    // B / A
    BoA = B / A;
    // 1 / AB
    ooAB = 1. / (A * B);
    // C / 2AB
    Co2AB = C * ooAB / 2.;
    // B / (A * (1 + B))
    BoABpo = BoA / (1. + B);
    // &mu / a
    moa = provider.getMu() / a;
    // R / a
    roa = provider.getAe() / a;

    // &Chi; = 1 / B
    chi = 1. / B;
    chi2 = chi * chi;

    //mean motion n
    meanMotion = aux.getMeanMotion();
}

From source file:org.orekit.propagation.semianalytical.dsst.forces.TesseralContribution.java

/** {@inheritDoc} */
@Override//w  w w.  j  a  v  a  2s . co m
public double[] getShortPeriodicVariations(final AbsoluteDate date, final double[] meanElements)
        throws OrekitException {

    // Initialise the short periodic variations
    final double[] shortPeriodicVariation = new double[] { 0., 0., 0., 0., 0., 0. };

    // Compute only if there is at least one non-resonant tesseral or
    // only the m-daily tesseral should be taken into account
    if (!nonResOrders.isEmpty() || mDailiesOnly) {

        // Build an Orbit object from the mean elements
        final Orbit meanOrbit = OrbitType.EQUINOCTIAL.mapArrayToOrbit(meanElements, PositionAngle.MEAN, date,
                provider.getMu(), this.frame);

        //Build an auxiliary object
        final AuxiliaryElements aux = new AuxiliaryElements(meanOrbit, I);

        // Central body rotation angle from equation 2.7.1-(3)(4).
        final Transform t = bodyFrame.getTransformTo(aux.getFrame(), aux.getDate());
        final Vector3D xB = t.transformVector(Vector3D.PLUS_I);
        final Vector3D yB = t.transformVector(Vector3D.PLUS_J);
        final double currentTheta = FastMath.atan2(-f.dotProduct(yB) + I * g.dotProduct(xB),
                f.dotProduct(xB) + I * g.dotProduct(yB));

        //Add the m-daily contribution
        for (int m = 1; m <= maxOrderMdailyTesseralSP; m++) {
            // Phase angle
            final double jlMmt = -m * currentTheta;
            final double sinPhi = FastMath.sin(jlMmt);
            final double cosPhi = FastMath.cos(jlMmt);

            // compute contribution for each element
            for (int i = 0; i < 6; i++) {
                shortPeriodicVariation[i] += tesseralSPCoefs.getCijm(i, 0, m, date) * cosPhi
                        + tesseralSPCoefs.getSijm(i, 0, m, date) * sinPhi;
            }
        }

        // loop through all non-resonant (j,m) pairs
        for (final Map.Entry<Integer, List<Integer>> entry : nonResOrders.entrySet()) {
            final int m = entry.getKey();
            final List<Integer> listJ = entry.getValue();

            for (int j : listJ) {
                // Phase angle
                final double jlMmt = j * meanElements[5] - m * currentTheta;
                final double sinPhi = FastMath.sin(jlMmt);
                final double cosPhi = FastMath.cos(jlMmt);

                // compute contribution for each element
                for (int i = 0; i < 6; i++) {
                    shortPeriodicVariation[i] += tesseralSPCoefs.getCijm(i, j, m, date) * cosPhi
                            + tesseralSPCoefs.getSijm(i, j, m, date) * sinPhi;
                }

            }
        }
    }

    return shortPeriodicVariation;
}

From source file:org.orekit.utils.AngularCoordinatesTest.java

@Test
public void testShiftWithoutAcceleration() throws OrekitException {
    double rate = 2 * FastMath.PI / (12 * 60);
    AngularCoordinates ac = new AngularCoordinates(Rotation.IDENTITY, new Vector3D(rate, Vector3D.PLUS_K),
            Vector3D.ZERO);//from  w  w  w. j a  va  2 s  .  c o m
    Assert.assertEquals(rate, ac.getRotationRate().getNorm(), 1.0e-10);
    double dt = 10.0;
    double alpha = rate * dt;
    AngularCoordinates shifted = ac.shiftedBy(dt);
    Assert.assertEquals(rate, shifted.getRotationRate().getNorm(), 1.0e-10);
    Assert.assertEquals(alpha, Rotation.distance(ac.getRotation(), shifted.getRotation()), 1.0e-15);

    Vector3D xSat = shifted.getRotation().applyInverseTo(Vector3D.PLUS_I);
    Assert.assertEquals(0.0, xSat.subtract(new Vector3D(FastMath.cos(alpha), FastMath.sin(alpha), 0)).getNorm(),
            1.0e-15);
    Vector3D ySat = shifted.getRotation().applyInverseTo(Vector3D.PLUS_J);
    Assert.assertEquals(0.0,
            ySat.subtract(new Vector3D(-FastMath.sin(alpha), FastMath.cos(alpha), 0)).getNorm(), 1.0e-15);
    Vector3D zSat = shifted.getRotation().applyInverseTo(Vector3D.PLUS_K);
    Assert.assertEquals(0.0, zSat.subtract(Vector3D.PLUS_K).getNorm(), 1.0e-15);

}

From source file:org.orekit.utils.AngularCoordinatesTest.java

@Test
public void testShiftWithAcceleration() throws OrekitException {
    double rate = 2 * FastMath.PI / (12 * 60);
    double acc = 0.001;
    double dt = 1.0;
    int n = 2000;
    final AngularCoordinates quadratic = new AngularCoordinates(Rotation.IDENTITY,
            new Vector3D(rate, Vector3D.PLUS_K), new Vector3D(acc, Vector3D.PLUS_J));
    final AngularCoordinates linear = new AngularCoordinates(quadratic.getRotation(),
            quadratic.getRotationRate(), Vector3D.ZERO);

    final FirstOrderDifferentialEquations ode = new FirstOrderDifferentialEquations() {
        public int getDimension() {
            return 4;
        }/*w w w .j a  va2  s.  co  m*/

        public void computeDerivatives(final double t, final double[] q, final double[] qDot) {
            final double omegaX = quadratic.getRotationRate().getX()
                    + t * quadratic.getRotationAcceleration().getX();
            final double omegaY = quadratic.getRotationRate().getY()
                    + t * quadratic.getRotationAcceleration().getY();
            final double omegaZ = quadratic.getRotationRate().getZ()
                    + t * quadratic.getRotationAcceleration().getZ();
            qDot[0] = 0.5 * MathArrays.linearCombination(-q[1], omegaX, -q[2], omegaY, -q[3], omegaZ);
            qDot[1] = 0.5 * MathArrays.linearCombination(q[0], omegaX, -q[3], omegaY, q[2], omegaZ);
            qDot[2] = 0.5 * MathArrays.linearCombination(q[3], omegaX, q[0], omegaY, -q[1], omegaZ);
            qDot[3] = 0.5 * MathArrays.linearCombination(-q[2], omegaX, q[1], omegaY, q[0], omegaZ);
        }
    };
    FirstOrderIntegrator integrator = new DormandPrince853Integrator(1.0e-6, 1.0, 1.0e-12, 1.0e-12);
    integrator.addStepHandler(new StepNormalizer(dt / n, new FixedStepHandler() {
        public void init(double t0, double[] y0, double t) {
        }

        public void handleStep(double t, double[] y, double[] yDot, boolean isLast) {
            Rotation reference = new Rotation(y[0], y[1], y[2], y[3], true);

            // the error in shiftedBy taking acceleration into account is cubic
            double expectedCubicError = 1.4544e-6 * t * t * t;
            Assert.assertEquals(expectedCubicError,
                    Rotation.distance(reference, quadratic.shiftedBy(t).getRotation()),
                    0.0001 * expectedCubicError);

            // the error in shiftedBy not taking acceleration into account is quadratic
            double expectedQuadraticError = 5.0e-4 * t * t;
            Assert.assertEquals(expectedQuadraticError,
                    Rotation.distance(reference, linear.shiftedBy(t).getRotation()),
                    0.00001 * expectedQuadraticError);

        }
    }));

    double[] y = new double[] { quadratic.getRotation().getQ0(), quadratic.getRotation().getQ1(),
            quadratic.getRotation().getQ2(), quadratic.getRotation().getQ3() };
    integrator.integrate(ode, 0, y, dt, y);

}

From source file:org.orekit.utils.AngularCoordinatesTest.java

@Test
public void testSpin() throws OrekitException {
    double rate = 2 * FastMath.PI / (12 * 60);
    AngularCoordinates angularCoordinates = new AngularCoordinates(new Rotation(0.48, 0.64, 0.36, 0.48, false),
            new Vector3D(rate, Vector3D.PLUS_K));
    Assert.assertEquals(rate, angularCoordinates.getRotationRate().getNorm(), 1.0e-10);
    double dt = 10.0;
    AngularCoordinates shifted = angularCoordinates.shiftedBy(dt);
    Assert.assertEquals(rate, shifted.getRotationRate().getNorm(), 1.0e-10);
    Assert.assertEquals(rate * dt, Rotation.distance(angularCoordinates.getRotation(), shifted.getRotation()),
            1.0e-10);//from w w w  .  j  a va2 s .  c  o m

    Vector3D shiftedX = shifted.getRotation().applyInverseTo(Vector3D.PLUS_I);
    Vector3D shiftedY = shifted.getRotation().applyInverseTo(Vector3D.PLUS_J);
    Vector3D shiftedZ = shifted.getRotation().applyInverseTo(Vector3D.PLUS_K);
    Vector3D originalX = angularCoordinates.getRotation().applyInverseTo(Vector3D.PLUS_I);
    Vector3D originalY = angularCoordinates.getRotation().applyInverseTo(Vector3D.PLUS_J);
    Vector3D originalZ = angularCoordinates.getRotation().applyInverseTo(Vector3D.PLUS_K);
    Assert.assertEquals(FastMath.cos(rate * dt), Vector3D.dotProduct(shiftedX, originalX), 1.0e-10);
    Assert.assertEquals(FastMath.sin(rate * dt), Vector3D.dotProduct(shiftedX, originalY), 1.0e-10);
    Assert.assertEquals(0.0, Vector3D.dotProduct(shiftedX, originalZ), 1.0e-10);
    Assert.assertEquals(-FastMath.sin(rate * dt), Vector3D.dotProduct(shiftedY, originalX), 1.0e-10);
    Assert.assertEquals(FastMath.cos(rate * dt), Vector3D.dotProduct(shiftedY, originalY), 1.0e-10);
    Assert.assertEquals(0.0, Vector3D.dotProduct(shiftedY, originalZ), 1.0e-10);
    Assert.assertEquals(0.0, Vector3D.dotProduct(shiftedZ, originalX), 1.0e-10);
    Assert.assertEquals(0.0, Vector3D.dotProduct(shiftedZ, originalY), 1.0e-10);
    Assert.assertEquals(1.0, Vector3D.dotProduct(shiftedZ, originalZ), 1.0e-10);

    Vector3D forward = AngularCoordinates.estimateRate(angularCoordinates.getRotation(), shifted.getRotation(),
            dt);
    Assert.assertEquals(0.0, forward.subtract(angularCoordinates.getRotationRate()).getNorm(), 1.0e-10);

    Vector3D reversed = AngularCoordinates.estimateRate(shifted.getRotation(), angularCoordinates.getRotation(),
            dt);
    Assert.assertEquals(0.0, reversed.add(angularCoordinates.getRotationRate()).getNorm(), 1.0e-10);

}

From source file:org.orekit.utils.AngularCoordinatesTest.java

@Test
public void testInverseCrossProducts() throws OrekitException {
    checkInverse(Vector3D.PLUS_K, Vector3D.PLUS_I, Vector3D.PLUS_J);
    checkInverse(Vector3D.ZERO, Vector3D.ZERO, Vector3D.ZERO);
    checkInverse(Vector3D.ZERO, Vector3D.ZERO, Vector3D.PLUS_J);
    checkInverse(Vector3D.PLUS_K, Vector3D.PLUS_K, Vector3D.PLUS_J);
    checkInverse(Vector3D.ZERO, Vector3D.PLUS_K, Vector3D.ZERO);
    checkInverse(Vector3D.PLUS_K, Vector3D.PLUS_I, Vector3D.PLUS_K);
    checkInverse(Vector3D.PLUS_K, Vector3D.PLUS_I, Vector3D.PLUS_I);
    checkInverse(Vector3D.PLUS_K, Vector3D.PLUS_I, new Vector3D(1, 0, -1).normalize());
    checkInverse(Vector3D.ZERO, Vector3D.PLUS_I, Vector3D.ZERO, Vector3D.PLUS_J, Vector3D.ZERO);
}

From source file:org.orekit.utils.AngularCoordinatesTest.java

@Test
public void testInverseCrossProductsFailures() {
    checkInverseFailure(Vector3D.PLUS_K, Vector3D.ZERO, Vector3D.PLUS_J, Vector3D.PLUS_I, Vector3D.PLUS_K);
    checkInverseFailure(Vector3D.PLUS_K, Vector3D.ZERO, Vector3D.ZERO, Vector3D.ZERO, Vector3D.PLUS_K);
    checkInverseFailure(Vector3D.PLUS_I, Vector3D.PLUS_I, Vector3D.ZERO, Vector3D.MINUS_I, Vector3D.PLUS_K);
    checkInverseFailure(Vector3D.PLUS_I, Vector3D.PLUS_I, Vector3D.ZERO, Vector3D.PLUS_J, Vector3D.PLUS_J);
    checkInverseFailure(Vector3D.PLUS_I, Vector3D.PLUS_I, Vector3D.PLUS_J, Vector3D.PLUS_J, Vector3D.ZERO);
    checkInverseFailure(Vector3D.PLUS_I, Vector3D.PLUS_I, Vector3D.PLUS_J, Vector3D.ZERO, Vector3D.PLUS_J);
}