Example usage for org.apache.commons.math.geometry Vector3D PLUS_K

List of usage examples for org.apache.commons.math.geometry Vector3D PLUS_K

Introduction

In this page you can find the example usage for org.apache.commons.math.geometry Vector3D PLUS_K.

Prototype

Vector3D PLUS_K

To view the source code for org.apache.commons.math.geometry Vector3D PLUS_K.

Click Source Link

Document

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

Usage

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

/** Simple constructor.
 * @param name name of the frame/*from w  w  w  . j  av a 2  s. c om*/
 */
protected EME2000Frame(final String name) {

    super(FramesFactory.getGCRF(), null, name, true);

    // build the bias transform
    final Rotation r1 = new Rotation(Vector3D.PLUS_I, D_EPSILON_B);
    final Rotation r2 = new Rotation(Vector3D.PLUS_J, -D_PSI_B * Math.sin(EPSILON_0));
    final Rotation r3 = new Rotation(Vector3D.PLUS_K, -ALPHA_0);
    final Rotation bias = r1.applyTo(r2.applyTo(r3));

    // store the bias transform
    setTransform(new Transform(bias));

}

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

/** Update the frame to the given date.
 * <p>The update considers the pole motion from IERS data.</p>
 * @param date new value of the date/*from  w w  w . ja  v  a  2s .c  om*/
 * @exception OrekitException if the nutation model data embedded in the
 * library cannot be read
 */
protected void updateFrame(final AbsoluteDate date) throws OrekitException {

    if ((cachedDate == null) || !cachedDate.equals(date)) {

        // offset from J2000 epoch in julian centuries
        final double tts = date.durationFrom(AbsoluteDate.J2000_EPOCH);
        final double ttc = tts / Constants.JULIAN_CENTURY;

        // pole correction parameters
        final PoleCorrection pCorr = ((TIRF2000Frame) getParent()).getPoleCorrection(date);
        final PoleCorrection nCorr = nutationCorrection(date);

        // elementary rotations due to pole motion in terrestrial frame
        final Rotation r1 = new Rotation(Vector3D.PLUS_I, -(pCorr.getYp() + nCorr.getYp()));
        final Rotation r2 = new Rotation(Vector3D.PLUS_J, -(pCorr.getXp() + nCorr.getXp()));
        final Rotation r3 = new Rotation(Vector3D.PLUS_K, S_PRIME_RATE * ttc);

        // complete pole motion in terrestrial frame
        final Rotation wRot = r3.applyTo(r2.applyTo(r1));

        // combined effects
        final Rotation combined = wRot.revert();

        // set up the transform from parent TIRF
        setTransform(new Transform(combined, Vector3D.ZERO));
        cachedDate = date;

    }
}

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

/** {@inheritDoc} */
protected void updateFrame(final AbsoluteDate date) throws OrekitException {

    // get position/velocity with respect to parent frame
    final PVCoordinates pv = provider.getPVCoordinates(date, getParent());
    final Vector3D p = pv.getPosition();
    final Vector3D v = pv.getVelocity();
    final Vector3D momentum = pv.getMomentum();

    // compute the translation part of the transform
    final Transform translation = new Transform(p.negate(), v.negate());

    // compute the rotation part of the transform
    final Rotation r = new Rotation((type == LOFType.TNW) ? v : p, momentum, Vector3D.PLUS_I, Vector3D.PLUS_K);
    final Transform rotation = new Transform(r, new Vector3D(1.0 / p.getNormSq(), r.applyTo(momentum)));

    // update the frame defining transform
    setTransform(new Transform(translation, rotation));

}

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

/** Update the frame to the given date.
 * <p>The update considers the precession effects.</p>
 * @param date new value of the date//w w w  .  j a  v  a 2 s . c  o m
 */
protected void updateFrame(final AbsoluteDate date) {

    if ((cachedDate == null) || !cachedDate.equals(date)) {

        // offset from J2000 epoch in julian centuries
        final double tts = date.durationFrom(AbsoluteDate.J2000_EPOCH);
        final double ttc = tts / Constants.JULIAN_CENTURY;

        // compute the zeta precession angle
        final double zeta = ((ZETA_3 * ttc + ZETA_2) * ttc + ZETA_1) * ttc;

        // compute the theta precession angle
        final double theta = ((THETA_3 * ttc + THETA_2) * ttc + THETA_1) * ttc;

        // compute the z precession angle
        final double z = ((Z_3 * ttc + Z_2) * ttc + Z_1) * ttc;

        // elementary rotations for precession
        final Rotation r1 = new Rotation(Vector3D.PLUS_K, z);
        final Rotation r2 = new Rotation(Vector3D.PLUS_J, -theta);
        final Rotation r3 = new Rotation(Vector3D.PLUS_K, zeta);

        // complete precession
        final Rotation precession = r1.applyTo(r2.applyTo(r3));

        // set up the transform from parent GCRF
        setTransform(new Transform(precession));

        cachedDate = date;
    }

}

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

/** Update the frame to the given date.
 * <p>The update considers the earth rotation from IERS data.</p>
 * @param date new value of the date/*from  www.  java  2  s.c o  m*/
 * @exception OrekitException if the nutation model data embedded in the
 * library cannot be read
 */
protected void updateFrame(final AbsoluteDate date) throws OrekitException {

    if ((cachedDate == null) || !cachedDate.equals(date)) {

        // offset from J2000.0 epoch
        final double tts = date.durationFrom(AbsoluteDate.J2000_EPOCH);

        // evaluate the nutation elements
        setInterpolatedNutationElements(tts);

        // offset from J2000 epoch in julian centuries
        final double ttc = tts / Constants.JULIAN_CENTURY;

        // compute the mean obliquity of the ecliptic
        moe = ((MOE_3 * ttc + MOE_2) * ttc + MOE_1) * ttc + MOE_0;

        final double eqe = getNewEquationOfEquinoxes(date, ttc);

        // offset in julian centuries from J2000 epoch (UT1 scale)
        final double dtai = date.durationFrom(GMST_REFERENCE);
        final double dutc = TimeScalesFactory.getUTC().offsetFromTAI(date);
        final double dut1 = eopHistory.getUT1MinusUTC(date);

        final double tut1 = dtai + dutc + dut1;
        final double tt = tut1 / Constants.JULIAN_CENTURY;

        // Seconds in the day, adjusted by 12 hours because the
        // UT1 is supplied as a Julian date beginning at noon.
        final double sd = (tut1 + Constants.JULIAN_DAY / 2.) % Constants.JULIAN_DAY;

        // compute Greenwich mean sidereal time, in radians
        final double gmst = (((GMST_3 * tt + GMST_2) * tt + GMST_1) * tt + GMST_0 + sd) * RADIANS_PER_SECOND;

        // compute Greenwich apparent sidereal time, in radians
        final double gast = gmst + eqe;

        // compute true angular rotation of Earth, in rad/s
        final double lod = ((TEMEFrame) getParent()).isEOPCorrectionApplied() ? eopHistory.getLOD(date) : 0.0;
        final double omp = AVE * (1 - lod / Constants.JULIAN_DAY);
        final Vector3D rotationRate = new Vector3D(omp, Vector3D.PLUS_K);

        // set up the transform from parent TEME
        setTransform(new Transform(new Rotation(Vector3D.PLUS_K, -gast), rotationRate));

        cachedDate = date;

    }
}

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

/** Update the frame to the given date.
 * <p>The update considers the nutation effects from IERS data.</p>
 * @param date new value of the date//from   w w w  . j a va  2  s . co  m
 * @exception OrekitException if the nutation model data embedded in the
 * library cannot be read
 */
protected void updateFrame(final AbsoluteDate date) throws OrekitException {

    if ((cachedDate == null) || !cachedDate.equals(date)) {

        // offset from J2000.0 epoch
        final double tts = date.durationFrom(AbsoluteDate.J2000_EPOCH);

        // evaluate the nutation elements
        setInterpolatedNutationElements(tts);

        // offset from J2000 epoch in julian centuries
        final double ttc = tts / Constants.JULIAN_CENTURY;

        // compute the mean obliquity of the ecliptic
        moe = ((MOE_3 * ttc + MOE_2) * ttc + MOE_1) * ttc + MOE_0;

        // get the IAU1980 corrections for the nutation parameters
        final NutationCorrection nutCorr = (eopHistory == null) ? NutationCorrection.NULL_CORRECTION
                : eopHistory.getNutationCorrection(date);

        final double deps = depsCurrent + nutCorr.getDdeps();
        final double dpsi = dpsiCurrent + nutCorr.getDdpsi();

        // compute the true obliquity of the ecliptic
        final double toe = moe + deps;

        // set up the elementary rotations for nutation
        final Rotation r1 = new Rotation(Vector3D.PLUS_I, toe);
        final Rotation r2 = new Rotation(Vector3D.PLUS_K, dpsi);
        final Rotation r3 = new Rotation(Vector3D.PLUS_I, -moe);

        // complete nutation
        final Rotation precession = r1.applyTo(r2.applyTo(r3));

        // set up the transform from parent MEME
        setTransform(new Transform(precession));

        cachedDate = date;

    }

}

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

/** Update the frame to the given date.
 * <p>The update considers the earth rotation from IERS data.</p>
 * @param date new value of the date//from   ww  w.j  a  va2 s.co m
 * @exception OrekitException if the nutation model data embedded in the
 * library cannot be read
 */
protected void updateFrame(final AbsoluteDate date) throws OrekitException {

    if ((cachedDate == null) || !cachedDate.equals(date)) {

        // compute Earth Rotation Angle using Nicole Capitaine model (2000)
        final double tidalDtu1 = (tidalCorrection == null) ? 0 : tidalCorrection.getDUT1(date);
        final double dtu1 = eopHistory.getUT1MinusUTC(date);
        final double utcMinusTai = TimeScalesFactory.getUTC().offsetFromTAI(date);
        final double tu = (date.durationFrom(ERA_REFERENCE) + utcMinusTai + dtu1 + tidalDtu1)
                / Constants.JULIAN_DAY;
        era = ERA_0 + ERA_1A * tu + ERA_1B * tu;
        era -= TWO_PI * Math.floor((era + Math.PI) / TWO_PI);

        // set up the transform from parent CIRF
        final Vector3D rotationRate = new Vector3D((ERA_1A + ERA_1B) / Constants.JULIAN_DAY, Vector3D.PLUS_K);
        setTransform(new Transform(new Rotation(Vector3D.PLUS_K, -era), rotationRate));
        cachedDate = date;

    }
}

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

/** Update the frame to the given date.
 * @param date new value of the date/*from   w w w  .jav a 2  s. c om*/
 * @exception OrekitException if data embedded in the library cannot be read
 */
protected void updateFrame(final AbsoluteDate date) throws OrekitException {

    if ((cachedDate == null) || !cachedDate.equals(date)) {

        // offset from FIFTIES epoch (UT1 scale)
        final double dtai = date.durationFrom(VST_REFERENCE);
        final double dutc = TimeScalesFactory.getUTC().offsetFromTAI(date);
        final double dut1 = eopHistory.getUT1MinusUTC(date);

        final double tut1 = dtai + dutc + dut1;
        final double ttd = tut1 / Constants.JULIAN_DAY;
        final double rdtt = ttd - (int) ttd;

        // compute Veis sidereal time, in radians
        final double vst = (VST0 + VST1 * ttd + TWO_PI * rdtt) % TWO_PI;

        // compute angular rotation of Earth, in rad/s
        final Vector3D rotationRate = new Vector3D(-VSTD, Vector3D.PLUS_K);

        // set up the transform from parent PEF
        setTransform(new Transform(new Rotation(Vector3D.PLUS_K, vst), rotationRate));

        cachedDate = date;
    }

}