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

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

Introduction

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

Prototype

public FieldVector3D(final double a, final FieldVector3D<T> u) 

Source Link

Document

Multiplicative constructor Build a vector from another one and a scale factor.

Usage

From source file:org.orekit.forces.radiation.SolarRadiationPressure.java

/** {@inheritDoc} */
public FieldVector3D<DerivativeStructure> accelerationDerivatives(final AbsoluteDate date, final Frame frame,
        final FieldVector3D<DerivativeStructure> position, final FieldVector3D<DerivativeStructure> velocity,
        final FieldRotation<DerivativeStructure> rotation, final DerivativeStructure mass)
        throws OrekitException {

    final FieldVector3D<DerivativeStructure> sunSatVector = position
            .subtract(sun.getPVCoordinates(date, frame).getPosition());
    final DerivativeStructure r2 = sunSatVector.getNormSq();

    // compute flux
    final double ratio = getLightningRatio(position.toVector3D(), frame, date);
    final DerivativeStructure rawP = r2.reciprocal().multiply(kRef * ratio);
    final FieldVector3D<DerivativeStructure> flux = new FieldVector3D<DerivativeStructure>(
            rawP.divide(r2.sqrt()), sunSatVector);

    // compute acceleration with all its partial derivatives
    return spacecraft.radiationPressureAcceleration(date, frame, position, rotation, mass, flux);

}

From source file:org.orekit.forces.SphericalSpacecraft.java

/** {@inheritDoc} */
public FieldVector3D<DerivativeStructure> dragAcceleration(final AbsoluteDate date, final Frame frame,
        final FieldVector3D<DerivativeStructure> position, final FieldRotation<DerivativeStructure> rotation,
        final DerivativeStructure mass, final double density,
        final FieldVector3D<DerivativeStructure> relativeVelocity) {
    return new FieldVector3D<DerivativeStructure>(
            relativeVelocity.getNorm().multiply(density * dragCoeff * crossSection / 2).divide(mass),
            relativeVelocity);/*from  w  ww .  j  a v a 2s  .c om*/
}

From source file:org.orekit.forces.SphericalSpacecraft.java

/** {@inheritDoc} */
public FieldVector3D<DerivativeStructure> dragAcceleration(final AbsoluteDate date, final Frame frame,
        final Vector3D position, final Rotation rotation, final double mass, final double density,
        final Vector3D relativeVelocity, final String paramName) throws OrekitException {

    if (!DRAG_COEFFICIENT.equals(paramName)) {
        throw new OrekitException(OrekitMessages.UNSUPPORTED_PARAMETER_NAME, paramName, DRAG_COEFFICIENT);
    }//w ww  .  j  a v  a  2s . c  o m

    final DerivativeStructure dragCoeffDS = new DerivativeStructure(1, 1, 0, dragCoeff);

    return new FieldVector3D<DerivativeStructure>(
            dragCoeffDS.multiply(relativeVelocity.getNorm() * density * crossSection / (2 * mass)),
            relativeVelocity);

}

From source file:org.orekit.forces.SphericalSpacecraft.java

/** {@inheritDoc} */
public FieldVector3D<DerivativeStructure> radiationPressureAcceleration(final AbsoluteDate date,
        final Frame frame, final FieldVector3D<DerivativeStructure> position,
        final FieldRotation<DerivativeStructure> rotation, final DerivativeStructure mass,
        final FieldVector3D<DerivativeStructure> flux) {
    final double kP = crossSection * (1 + 4 * (1.0 - absorptionCoeff) * (1.0 - specularReflectionCoeff) / 9.0);
    return new FieldVector3D<DerivativeStructure>(mass.reciprocal().multiply(kP), flux);
}

From source file:org.orekit.forces.SphericalSpacecraft.java

/** {@inheritDoc} */
public FieldVector3D<DerivativeStructure> radiationPressureAcceleration(final AbsoluteDate date,
        final Frame frame, final Vector3D position, final Rotation rotation, final double mass,
        final Vector3D flux, final String paramName) throws OrekitException {

    final DerivativeStructure absorptionCoeffDS;
    final DerivativeStructure specularReflectionCoeffDS;
    if (ABSORPTION_COEFFICIENT.equals(paramName)) {
        absorptionCoeffDS = new DerivativeStructure(1, 1, 0, absorptionCoeff);
        specularReflectionCoeffDS = new DerivativeStructure(1, 1, specularReflectionCoeff);
    } else if (REFLECTION_COEFFICIENT.equals(paramName)) {
        absorptionCoeffDS = new DerivativeStructure(1, 1, absorptionCoeff);
        specularReflectionCoeffDS = new DerivativeStructure(1, 1, 0, specularReflectionCoeff);
    } else {/*w  ww .ja  v  a  2  s .c o m*/
        throw new OrekitException(OrekitMessages.UNSUPPORTED_PARAMETER_NAME, paramName,
                ABSORPTION_COEFFICIENT + ", " + REFLECTION_COEFFICIENT);
    }

    final DerivativeStructure kP = absorptionCoeffDS.subtract(1).multiply(specularReflectionCoeffDS.subtract(1))
            .multiply(4.0 / 9.0).add(1).multiply(crossSection);
    return new FieldVector3D<DerivativeStructure>(kP.divide(mass), flux);

}

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

/** Estimate FieldRotation<T> rate between two orientations.
 * <p>Estimation is based on a simple fixed rate FieldRotation<T>
 * during the time interval between the two orientations.</p>
 * @param start start orientation//from w  w  w  .  j av  a  2 s. c o  m
 * @param end end orientation
 * @param dt time elapsed between the dates of the two orientations
 * @param <T> the type of the field elements
 * @return FieldRotation<T> rate allowing to go from start to end orientations
 */
public static <T extends RealFieldElement<T>> FieldVector3D<T> estimateRate(final FieldRotation<T> start,
        final FieldRotation<T> end, final double dt) {
    final FieldRotation<T> evolution = start.applyTo(end.revert());
    return new FieldVector3D<T>(evolution.getAngle().divide(dt), evolution.getAxis());
}

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

/** Get a time-shifted state.
 * <p>/*from  w w  w.  j  a va  2  s  .  c  om*/
 * The state can be slightly shifted to close dates. This shift is based on
 * a simple quadratic model. It is <em>not</em> intended as a replacement for
 * proper attitude propagation but should be sufficient for either small
 * time shifts or coarse accuracy.
 * </p>
 * @param dt time shift in seconds
 * @return a new state, shifted with respect to the instance (which is immutable)
 */
public FieldAngularCoordinates<T> shiftedBy(final double dt) {

    // the shiftedBy method is based on a local approximation.
    // It considers separately the contribution of the constant
    // rotation, the linear contribution or the rate and the
    // quadratic contribution of the acceleration. The rate
    // and acceleration contributions are small rotations as long
    // as the time shift is small, which is the crux of the algorithm.
    // Small rotations are almost commutative, so we append these small
    // contributions one after the other, as if they really occurred
    // successively, despite this is not what really happens.

    // compute the linear contribution first, ignoring acceleration
    // BEWARE: there is really a minus sign here, because if
    // the target frame rotates in one direction, the vectors in the origin
    // frame seem to rotate in the opposite direction
    final T rate = rotationRate.getNorm();
    final T zero = rate.getField().getZero();
    final T one = rate.getField().getOne();
    final FieldRotation<T> rateContribution = (rate.getReal() == 0.0)
            ? new FieldRotation<T>(one, zero, zero, zero, false)
            : new FieldRotation<T>(rotationRate, rate.multiply(-dt));

    // append rotation and rate contribution
    final FieldAngularCoordinates<T> linearPart = new FieldAngularCoordinates<T>(
            rateContribution.applyTo(rotation), rotationRate);

    final T acc = rotationAcceleration.getNorm();
    if (acc.getReal() == 0.0) {
        // no acceleration, the linear part is sufficient
        return linearPart;
    }

    // compute the quadratic contribution, ignoring initial rotation and rotation rate
    // BEWARE: there is really a minus sign here, because if
    // the target frame rotates in one direction, the vectors in the origin
    // frame seem to rotate in the opposite direction
    final FieldAngularCoordinates<T> quadraticContribution = new FieldAngularCoordinates<T>(
            new FieldRotation<T>(rotationAcceleration, acc.multiply(-0.5 * dt * dt)),
            new FieldVector3D<T>(dt, rotationAcceleration), rotationAcceleration);

    // the quadratic contribution is a small rotation:
    // its initial angle and angular rate are both zero.
    // small rotations are almost commutative, so we append the small
    // quadratic part after the linear part as a simple offset
    return quadraticContribution.addOffset(linearPart);

}

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

@Test
public void testShift() throws OrekitException {
    double rate = 2 * FastMath.PI / (12 * 60);
    FieldAngularCoordinates<DerivativeStructure> angularCoordinates = new FieldAngularCoordinates<DerivativeStructure>(
            createRotation(1, 0, 0, 0, false),
            new FieldVector3D<DerivativeStructure>(rate, createVector(0, 0, 1, 4)), createVector(0, 0, 0, 4));
    Assert.assertEquals(rate, angularCoordinates.getRotationRate().getNorm().getReal(), 1.0e-10);
    double dt = 10.0;
    double alpha = rate * dt;
    FieldAngularCoordinates<DerivativeStructure> shifted = angularCoordinates.shiftedBy(dt);
    Assert.assertEquals(rate, shifted.getRotationRate().getNorm().getReal(), 1.0e-10);
    Assert.assertEquals(alpha,//from   w  w w.  j  av  a 2 s  .  c  o m
            FieldRotation.distance(angularCoordinates.getRotation(), shifted.getRotation()).getReal(), 1.0e-10);

    FieldVector3D<DerivativeStructure> xSat = shifted.getRotation().applyInverseTo(createVector(1, 0, 0, 4));
    Assert.assertEquals(0.0,
            xSat.subtract(createVector(FastMath.cos(alpha), FastMath.sin(alpha), 0, 4)).getNorm().getReal(),
            1.0e-10);
    FieldVector3D<DerivativeStructure> ySat = shifted.getRotation().applyInverseTo(createVector(0, 1, 0, 4));
    Assert.assertEquals(0.0,
            ySat.subtract(createVector(-FastMath.sin(alpha), FastMath.cos(alpha), 0, 4)).getNorm().getReal(),
            1.0e-10);
    FieldVector3D<DerivativeStructure> zSat = shifted.getRotation().applyInverseTo(createVector(0, 0, 1, 4));
    Assert.assertEquals(0.0, zSat.subtract(createVector(0, 0, 1, 4)).getNorm().getReal(), 1.0e-10);

}

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

@Test
public void testSpin() throws OrekitException {
    double rate = 2 * FastMath.PI / (12 * 60);
    FieldAngularCoordinates<DerivativeStructure> angularCoordinates = new FieldAngularCoordinates<DerivativeStructure>(
            createRotation(0.48, 0.64, 0.36, 0.48, false),
            new FieldVector3D<DerivativeStructure>(rate, createVector(0, 0, 1, 4)), createVector(0, 0, 0, 4));
    Assert.assertEquals(rate, angularCoordinates.getRotationRate().getNorm().getReal(), 1.0e-10);
    double dt = 10.0;
    FieldAngularCoordinates<DerivativeStructure> shifted = angularCoordinates.shiftedBy(dt);
    Assert.assertEquals(rate, shifted.getRotationRate().getNorm().getReal(), 1.0e-10);
    Assert.assertEquals(rate * dt,//from   w ww.  j  a v a  2 s.c o  m
            FieldRotation.distance(angularCoordinates.getRotation(), shifted.getRotation()).getReal(), 1.0e-10);

    FieldVector3D<DerivativeStructure> shiftedX = shifted.getRotation()
            .applyInverseTo(createVector(1, 0, 0, 4));
    FieldVector3D<DerivativeStructure> shiftedY = shifted.getRotation()
            .applyInverseTo(createVector(0, 1, 0, 4));
    FieldVector3D<DerivativeStructure> shiftedZ = shifted.getRotation()
            .applyInverseTo(createVector(0, 0, 1, 4));
    FieldVector3D<DerivativeStructure> originalX = angularCoordinates.getRotation()
            .applyInverseTo(createVector(1, 0, 0, 4));
    FieldVector3D<DerivativeStructure> originalY = angularCoordinates.getRotation()
            .applyInverseTo(createVector(0, 1, 0, 4));
    FieldVector3D<DerivativeStructure> originalZ = angularCoordinates.getRotation()
            .applyInverseTo(createVector(0, 0, 1, 4));
    Assert.assertEquals(FastMath.cos(rate * dt), FieldVector3D.dotProduct(shiftedX, originalX).getReal(),
            1.0e-10);
    Assert.assertEquals(FastMath.sin(rate * dt), FieldVector3D.dotProduct(shiftedX, originalY).getReal(),
            1.0e-10);
    Assert.assertEquals(0.0, FieldVector3D.dotProduct(shiftedX, originalZ).getReal(), 1.0e-10);
    Assert.assertEquals(-FastMath.sin(rate * dt), FieldVector3D.dotProduct(shiftedY, originalX).getReal(),
            1.0e-10);
    Assert.assertEquals(FastMath.cos(rate * dt), FieldVector3D.dotProduct(shiftedY, originalY).getReal(),
            1.0e-10);
    Assert.assertEquals(0.0, FieldVector3D.dotProduct(shiftedY, originalZ).getReal(), 1.0e-10);
    Assert.assertEquals(0.0, FieldVector3D.dotProduct(shiftedZ, originalX).getReal(), 1.0e-10);
    Assert.assertEquals(0.0, FieldVector3D.dotProduct(shiftedZ, originalY).getReal(), 1.0e-10);
    Assert.assertEquals(1.0, FieldVector3D.dotProduct(shiftedZ, originalZ).getReal(), 1.0e-10);

    FieldVector3D<DerivativeStructure> forward = FieldAngularCoordinates
            .estimateRate(angularCoordinates.getRotation(), shifted.getRotation(), dt);
    Assert.assertEquals(0.0, forward.subtract(angularCoordinates.getRotationRate()).getNorm().getReal(),
            1.0e-10);

    FieldVector3D<DerivativeStructure> reversed = FieldAngularCoordinates.estimateRate(shifted.getRotation(),
            angularCoordinates.getRotation(), dt);
    Assert.assertEquals(0.0, reversed.add(angularCoordinates.getRotationRate()).getNorm().getReal(), 1.0e-10);

}

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

@Test
@Deprecated // to be removed when AngularCoordinates.interpolate is removed
public void testInterpolationSimple() throws OrekitException {
    AbsoluteDate date = AbsoluteDate.GALILEO_EPOCH;
    double alpha0 = 0.5 * FastMath.PI;
    double omega = 0.5 * FastMath.PI;
    FieldAngularCoordinates<DerivativeStructure> reference = new FieldAngularCoordinates<DerivativeStructure>(
            createRotation(createVector(0, 0, 1, 4), alpha0),
            new FieldVector3D<DerivativeStructure>(omega, createVector(0, 0, -1, 4)), createVector(0, 0, 0, 4));

    List<Pair<AbsoluteDate, FieldAngularCoordinates<DerivativeStructure>>> sample = new ArrayList<Pair<AbsoluteDate, FieldAngularCoordinates<DerivativeStructure>>>();
    for (double dt : new double[] { 0.0, 0.5, 1.0 }) {
        sample.add(new Pair<AbsoluteDate, FieldAngularCoordinates<DerivativeStructure>>(date.shiftedBy(dt),
                reference.shiftedBy(dt)));
    }/*from  w  w  w .j a va  2  s .c o  m*/

    for (double dt = 0; dt < 1.0; dt += 0.001) {
        FieldAngularCoordinates<DerivativeStructure> interpolated = FieldAngularCoordinates
                .interpolate(date.shiftedBy(dt), true, sample);
        FieldRotation<DerivativeStructure> r = interpolated.getRotation();
        FieldVector3D<DerivativeStructure> rate = interpolated.getRotationRate();
        FieldVector3D<DerivativeStructure> acceleration = interpolated.getRotationAcceleration();
        Assert.assertEquals(0.0, FieldRotation
                .distance(createRotation(createVector(0, 0, 1, 4), alpha0 + omega * dt), r).getReal(), 1.1e-15);
        Assert.assertEquals(0.0, FieldVector3D.distance(createVector(0, 0, -omega, 4), rate).getReal(),
                4.0e-15);
        Assert.assertEquals(0.0, FieldVector3D.distance(createVector(0, 0, 0, 4), acceleration).getReal(),
                3.2e-14);
    }

}