Class AngularCoordinates

java.lang.Object
org.orekit.utils.AngularCoordinates
All Implemented Interfaces:
TimeShiftable<AngularCoordinates>
Direct Known Subclasses:
TimeStampedAngularCoordinates

public class AngularCoordinates extends Object implements TimeShiftable<AngularCoordinates>
Simple container for rotation/rotation rate/rotation acceleration triplets.

The state can be slightly shifted to close dates. This shift is based on an approximate solution of the fixed acceleration motion. It is not intended as a replacement for proper attitude propagation but should be sufficient for either small time shifts or coarse accuracy.

This class is the angular counterpart to PVCoordinates.

Instances of this class are guaranteed to be immutable.

Author:
Luc Maisonobe
  • Field Details

    • IDENTITY

      public static final AngularCoordinates IDENTITY
      Fixed orientation parallel with reference frame (identity rotation, zero rotation rate and acceleration).
  • Constructor Details

    • AngularCoordinates

      public AngularCoordinates()
      Simple constructor.

      Sets the Coordinates to default : Identity, Ω = (0 0 0), dΩ/dt = (0 0 0).

    • AngularCoordinates

      public AngularCoordinates(Rotation rotation, Vector3D rotationRate)
      Builds a rotation/rotation rate pair.
      Parameters:
      rotation - rotation
      rotationRate - rotation rate Ω (rad/s)
    • AngularCoordinates

      public AngularCoordinates(Rotation rotation, Vector3D rotationRate, Vector3D rotationAcceleration)
      Builds a rotation/rotation rate/rotation acceleration triplet.
      Parameters:
      rotation - rotation
      rotationRate - rotation rate Ω (rad/s)
      rotationAcceleration - rotation acceleration dΩ/dt (rad/s²)
    • AngularCoordinates

      public AngularCoordinates(Rotation rotation)
      Builds angular coordinates with the given rotation, zero angular velocity, and zero angular acceleration.
      Parameters:
      rotation - rotation
    • AngularCoordinates

      public AngularCoordinates(PVCoordinates u1, PVCoordinates u2, PVCoordinates v1, PVCoordinates v2, double tolerance)
      Build the rotation that transforms a pair of pv coordinates into another one.

      WARNING! This method requires much more stringent assumptions on its parameters than the similar constructor from the Rotation class. As far as the Rotation constructor is concerned, the v₂ vector from the second pair can be slightly misaligned. The Rotation constructor will compensate for this misalignment and create a rotation that ensure v₁ = r(u₁) and v₂ ∈ plane (r(u₁), r(u₂)). THIS IS NOT TRUE ANYMORE IN THIS CLASS! As derivatives are involved and must be preserved, this constructor works only if the two pairs are fully consistent, i.e. if a rotation exists that fulfill all the requirements: v₁ = r(u₁), v₂ = r(u₂), dv₁/dt = dr(u₁)/dt, dv₂/dt = dr(u₂)/dt, d²v₁/dt² = d²r(u₁)/dt², d²v₂/dt² = d²r(u₂)/dt².

      Parameters:
      u1 - first vector of the origin pair
      u2 - second vector of the origin pair
      v1 - desired image of u1 by the rotation
      v2 - desired image of u2 by the rotation
      tolerance - relative tolerance factor used to check singularities
    • AngularCoordinates

      public AngularCoordinates(PVCoordinates u, PVCoordinates v)
      Build one of the rotations that transform one pv coordinates into another one.

      Except for a possible scale factor, if the instance were applied to the vector u it will produce the vector v. There is an infinite number of such rotations, this constructor choose the one with the smallest associated angle (i.e. the one whose axis is orthogonal to the (u, v) plane). If u and v are collinear, an arbitrary rotation axis is chosen.

      Parameters:
      u - origin vector
      v - desired image of u by the rotation
    • AngularCoordinates

      public AngularCoordinates(FieldRotation<U> r)
      Builds a AngularCoordinates from a FieldRotation<Derivative>.

      The rotation components must have time as their only derivation parameter and have consistent derivation orders.

      Type Parameters:
      U - type of the derivative
      Parameters:
      r - rotation with time-derivatives embedded within the coordinates
  • Method Details

    • toDerivativeStructureRotation

      public FieldRotation<DerivativeStructure> toDerivativeStructureRotation(int order)
      Transform the instance to a FieldRotation<DerivativeStructure>.

      The DerivativeStructure coordinates correspond to time-derivatives up to the user-specified order.

      Parameters:
      order - derivation order for the vector components
      Returns:
      rotation with time-derivatives embedded within the coordinates
    • toUnivariateDerivative1Rotation

      public FieldRotation<UnivariateDerivative1> toUnivariateDerivative1Rotation()
      Transform the instance to a FieldRotation<UnivariateDerivative1>.

      The UnivariateDerivative1 coordinates correspond to time-derivatives up to the order 1.

      Returns:
      rotation with time-derivatives embedded within the coordinates
    • toUnivariateDerivative2Rotation

      public FieldRotation<UnivariateDerivative2> toUnivariateDerivative2Rotation()
      Transform the instance to a FieldRotation<UnivariateDerivative2>.

      The UnivariateDerivative2 coordinates correspond to time-derivatives up to the order 2.

      Returns:
      rotation with time-derivatives embedded within the coordinates
    • estimateRate

      public static Vector3D estimateRate(Rotation start, Rotation end, double dt)
      Estimate rotation rate between two orientations.

      Estimation is based on a simple fixed rate rotation during the time interval between the two orientations.

      Parameters:
      start - start orientation
      end - end orientation
      dt - time elapsed between the dates of the two orientations
      Returns:
      rotation rate allowing to go from start to end orientations
    • revert

      public AngularCoordinates revert()
      Revert a rotation/rotation rate/ rotation acceleration triplet. Build a triplet which reverse the effect of another triplet.
      Returns:
      a new triplet whose effect is the reverse of the effect of the instance
    • rotationShiftedBy

      public Rotation rotationShiftedBy(double dt)
      Get a time-shifted rotation. Same as shiftedBy(double) except only the shifted rotation is computed.

      The state can be slightly shifted to close dates. This shift is based on an approximate solution of the fixed acceleration motion. It is not intended as a replacement for proper attitude propagation but should be sufficient for either small time shifts or coarse accuracy.

      Parameters:
      dt - time shift in seconds
      Returns:
      a new state, shifted with respect to the instance (which is immutable)
      See Also:
    • shiftedBy

      public AngularCoordinates shiftedBy(double dt)
      Get a time-shifted state.

      The state can be slightly shifted to close dates. This shift is based on an approximate solution of the fixed acceleration motion. It is not intended as a replacement for proper attitude propagation but should be sufficient for either small time shifts or coarse accuracy.

      Specified by:
      shiftedBy in interface TimeShiftable<AngularCoordinates>
      Parameters:
      dt - time shift in seconds
      Returns:
      a new state, shifted with respect to the instance (which is immutable)
    • getRotation

      public Rotation getRotation()
      Get the rotation.
      Returns:
      the rotation.
    • getRotationRate

      public Vector3D getRotationRate()
      Get the rotation rate.
      Returns:
      the rotation rate vector Ω (rad/s).
    • getRotationAcceleration

      public Vector3D getRotationAcceleration()
      Get the rotation acceleration.
      Returns:
      the rotation acceleration vector dΩ/dt (rad/s²).
    • addOffset

      public AngularCoordinates addOffset(AngularCoordinates offset)
      Add an offset from the instance.

      We consider here that the offset rotation is applied first and the instance is applied afterward. Note that angular coordinates do not commute under this operation, i.e. a.addOffset(b) and b.addOffset(a) lead to different results in most cases.

      The two methods addOffset and subtractOffset are designed so that round trip applications are possible. This means that both ac1.subtractOffset(ac2).addOffset(ac2) and ac1.addOffset(ac2).subtractOffset(ac2) return angular coordinates equal to ac1.

      Parameters:
      offset - offset to subtract
      Returns:
      new instance, with offset subtracted
      See Also:
    • subtractOffset

      public AngularCoordinates subtractOffset(AngularCoordinates offset)
      Subtract an offset from the instance.

      We consider here that the offset rotation is applied first and the instance is applied afterward. Note that angular coordinates do not commute under this operation, i.e. a.subtractOffset(b) and b.subtractOffset(a) lead to different results in most cases.

      The two methods addOffset and subtractOffset are designed so that round trip applications are possible. This means that both ac1.subtractOffset(ac2).addOffset(ac2) and ac1.addOffset(ac2).subtractOffset(ac2) return angular coordinates equal to ac1.

      Parameters:
      offset - offset to subtract
      Returns:
      new instance, with offset subtracted
      See Also:
    • applyTo

      public PVCoordinates applyTo(PVCoordinates pv)
      Apply the rotation to a pv coordinates.
      Parameters:
      pv - vector to apply the rotation to
      Returns:
      a new pv coordinates which is the image of pv by the rotation
    • applyTo

      Apply the rotation to a pv coordinates.
      Parameters:
      pv - vector to apply the rotation to
      Returns:
      a new pv coordinates which is the image of pv by the rotation
    • applyTo

      public <T extends CalculusFieldElement<T>> FieldPVCoordinates<T> applyTo(FieldPVCoordinates<T> pv)
      Apply the rotation to a pv coordinates.
      Type Parameters:
      T - type of the field elements
      Parameters:
      pv - vector to apply the rotation to
      Returns:
      a new pv coordinates which is the image of pv by the rotation
      Since:
      9.0
    • applyTo

      Apply the rotation to a pv coordinates.
      Type Parameters:
      T - type of the field elements
      Parameters:
      pv - vector to apply the rotation to
      Returns:
      a new pv coordinates which is the image of pv by the rotation
      Since:
      9.0
    • getModifiedRodrigues

      public double[][] getModifiedRodrigues(double sign)
      Convert rotation, rate and acceleration to modified Rodrigues vector and derivatives.

      The modified Rodrigues vector is tan(θ/4) u where θ and u are the rotation angle and axis respectively.

      Parameters:
      sign - multiplicative sign for quaternion components
      Returns:
      modified Rodrigues vector and derivatives (vector on row 0, first derivative on row 1, second derivative on row 2)
      See Also:
    • createFromModifiedRodrigues

      public static AngularCoordinates createFromModifiedRodrigues(double[][] r)
      Convert a modified Rodrigues vector and derivatives to angular coordinates.
      Parameters:
      r - modified Rodrigues vector (with first and second times derivatives)
      Returns:
      angular coordinates
      See Also: