Example usage for org.apache.commons.math3.geometry.euclidean.threed FieldRotation applyInverseTo

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

Introduction

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

Prototype

public FieldRotation<T> applyInverseTo(final Rotation r) 

Source Link

Document

Apply the inverse of the instance to another rotation.

Usage

From source file:org.orekit.forces.BoxAndSolarArraySpacecraft.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) throws OrekitException {

    if (flux.getNormSq().getValue() < Precision.SAFE_MIN) {
        // null illumination (we are probably in umbra)
        return new FieldVector3D<DerivativeStructure>(0.0, flux);
    }//w w w.j  av  a  2  s  . c  o  m

    // radiation flux in spacecraft frame
    final FieldVector3D<DerivativeStructure> fluxSat = rotation.applyTo(flux);

    // solar array contribution
    FieldVector3D<DerivativeStructure> normal = getNormal(date, frame, position, rotation);
    DerivativeStructure dot = FieldVector3D.dotProduct(normal, fluxSat);
    if (dot.getValue() > 0) {
        // the solar array is illuminated backward,
        // fix signs to compute contribution correctly
        dot = dot.negate();
        normal = normal.negate();
    }
    FieldVector3D<DerivativeStructure> force = facetRadiationAcceleration(normal, solarArrayArea, fluxSat, dot);

    // body facets contribution
    for (final Facet bodyFacet : facets) {
        normal = new FieldVector3D<DerivativeStructure>(mass.getField().getOne(), bodyFacet.getNormal());
        dot = FieldVector3D.dotProduct(normal, fluxSat);
        if (dot.getValue() < 0) {
            // the facet intercepts the incoming flux
            force = force.add(facetRadiationAcceleration(normal, bodyFacet.getArea(), fluxSat, dot));
        }
    }

    // convert to inertial frame
    return rotation.applyInverseTo(new FieldVector3D<DerivativeStructure>(mass.reciprocal(), force));

}

From source file:org.orekit.forces.maneuvers.ConstantThrustManeuver.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 {
    if (firing) {
        return new FieldVector3D<DerivativeStructure>(mass.reciprocal().multiply(thrust),
                rotation.applyInverseTo(direction));
    } else {/*from   w w  w.  j a  va  2s .c  o  m*/
        // constant (and null) acceleration when not firing
        final int parameters = mass.getFreeParameters();
        final int order = mass.getOrder();
        return new FieldVector3D<DerivativeStructure>(new DerivativeStructure(parameters, order, 0.0),
                new DerivativeStructure(parameters, order, 0.0),
                new DerivativeStructure(parameters, order, 0.0));
    }
}