public abstract class Orbit extends Object implements TimeStamped, TimeShiftable<Orbit>, Serializable, PVCoordinatesProvider
For user convenience, both the Cartesian and the equinoctial elements are provided by this class, regardless of the canonical representation implemented in the derived class (which may be classical Keplerian elements for example).
The parameters are defined in a frame specified by the user. It is important to make sure this frame is consistent: it probably is inertial and centered on the central body. This information is used for example by some force models.
Instance of this class are guaranteed to be immutable.
Modifier | Constructor and Description |
---|---|
protected |
Orbit(Frame frame,
AbsoluteDate date,
double mu)
Default constructor.
|
protected |
Orbit(TimeStampedPVCoordinates pvCoordinates,
Frame frame,
double mu)
Set the orbit from Cartesian parameters.
|
Modifier and Type | Method and Description |
---|---|
abstract void |
addKeplerContribution(PositionAngleType type,
double gm,
double[] pDot)
Add the contribution of the Keplerian motion to parameters derivatives
|
protected abstract double[][] |
computeJacobianEccentricWrtCartesian()
Compute the Jacobian of the orbital parameters with eccentric angle with respect to the Cartesian parameters.
|
protected abstract double[][] |
computeJacobianMeanWrtCartesian()
Compute the Jacobian of the orbital parameters with mean angle with respect to the Cartesian parameters.
|
protected abstract double[][] |
computeJacobianTrueWrtCartesian()
Compute the Jacobian of the orbital parameters with true angle with respect to the Cartesian parameters.
|
protected static void |
fillHalfRow(double a,
org.hipparchus.geometry.euclidean.threed.Vector3D v,
double[] row,
int j)
Fill a Jacobian half row with a single vector.
|
protected static void |
fillHalfRow(double a1,
org.hipparchus.geometry.euclidean.threed.Vector3D v1,
double a2,
org.hipparchus.geometry.euclidean.threed.Vector3D v2,
double[] row,
int j)
Fill a Jacobian half row with a linear combination of vectors.
|
protected static void |
fillHalfRow(double a1,
org.hipparchus.geometry.euclidean.threed.Vector3D v1,
double a2,
org.hipparchus.geometry.euclidean.threed.Vector3D v2,
double a3,
org.hipparchus.geometry.euclidean.threed.Vector3D v3,
double[] row,
int j)
Fill a Jacobian half row with a linear combination of vectors.
|
protected static void |
fillHalfRow(double a1,
org.hipparchus.geometry.euclidean.threed.Vector3D v1,
double a2,
org.hipparchus.geometry.euclidean.threed.Vector3D v2,
double a3,
org.hipparchus.geometry.euclidean.threed.Vector3D v3,
double a4,
org.hipparchus.geometry.euclidean.threed.Vector3D v4,
double[] row,
int j)
Fill a Jacobian half row with a linear combination of vectors.
|
protected static void |
fillHalfRow(double a1,
org.hipparchus.geometry.euclidean.threed.Vector3D v1,
double a2,
org.hipparchus.geometry.euclidean.threed.Vector3D v2,
double a3,
org.hipparchus.geometry.euclidean.threed.Vector3D v3,
double a4,
org.hipparchus.geometry.euclidean.threed.Vector3D v4,
double a5,
org.hipparchus.geometry.euclidean.threed.Vector3D v5,
double[] row,
int j)
Fill a Jacobian half row with a linear combination of vectors.
|
protected static void |
fillHalfRow(double a1,
org.hipparchus.geometry.euclidean.threed.Vector3D v1,
double a2,
org.hipparchus.geometry.euclidean.threed.Vector3D v2,
double a3,
org.hipparchus.geometry.euclidean.threed.Vector3D v3,
double a4,
org.hipparchus.geometry.euclidean.threed.Vector3D v4,
double a5,
org.hipparchus.geometry.euclidean.threed.Vector3D v5,
double a6,
org.hipparchus.geometry.euclidean.threed.Vector3D v6,
double[] row,
int j)
Fill a Jacobian half row with a linear combination of vectors.
|
abstract double |
getA()
Get the semi-major axis.
|
abstract double |
getADot()
Get the semi-major axis derivative.
|
AbsoluteDate |
getDate()
Get the date of orbital parameters.
|
abstract double |
getE()
Get the eccentricity.
|
abstract double |
getEDot()
Get the eccentricity derivative.
|
abstract double |
getEquinoctialEx()
Get the first component of the equinoctial eccentricity vector derivative.
|
abstract double |
getEquinoctialExDot()
Get the first component of the equinoctial eccentricity vector.
|
abstract double |
getEquinoctialEy()
Get the second component of the equinoctial eccentricity vector derivative.
|
abstract double |
getEquinoctialEyDot()
Get the second component of the equinoctial eccentricity vector.
|
Frame |
getFrame()
Get the frame in which the orbital parameters are defined.
|
abstract double |
getHx()
Get the first component of the inclination vector.
|
abstract double |
getHxDot()
Get the first component of the inclination vector derivative.
|
abstract double |
getHy()
Get the second component of the inclination vector.
|
abstract double |
getHyDot()
Get the second component of the inclination vector derivative.
|
abstract double |
getI()
Get the inclination.
|
abstract double |
getIDot()
Get the inclination derivative.
|
void |
getJacobianWrtCartesian(PositionAngleType type,
double[][] jacobian)
Compute the Jacobian of the orbital parameters with respect to the Cartesian parameters.
|
void |
getJacobianWrtParameters(PositionAngleType type,
double[][] jacobian)
Compute the Jacobian of the Cartesian parameters with respect to the orbital parameters.
|
double |
getKeplerianMeanMotion()
Get the Keplerian mean motion.
|
double |
getKeplerianPeriod()
Get the Keplerian period.
|
abstract double |
getLE()
Get the eccentric longitude argument.
|
abstract double |
getLEDot()
Get the eccentric longitude argument derivative.
|
abstract double |
getLM()
Get the mean longitude argument.
|
abstract double |
getLMDot()
Get the mean longitude argument derivative.
|
abstract double |
getLv()
Get the true longitude argument.
|
abstract double |
getLvDot()
Get the true longitude argument derivative.
|
double |
getMeanAnomalyDotWrtA()
Get the derivative of the mean anomaly with respect to the semi major axis.
|
double |
getMu()
Get the central acceleration constant.
|
org.hipparchus.geometry.euclidean.threed.Vector3D |
getPosition()
Get the position in definition frame.
|
org.hipparchus.geometry.euclidean.threed.Vector3D |
getPosition(Frame outputFrame)
Get the position in a specified frame.
|
TimeStampedPVCoordinates |
getPVCoordinates()
Get the
TimeStampedPVCoordinates in definition frame. |
TimeStampedPVCoordinates |
getPVCoordinates(AbsoluteDate otherDate,
Frame otherFrame)
Get the
PVCoordinates of the body in the selected frame. |
TimeStampedPVCoordinates |
getPVCoordinates(Frame outputFrame)
Get the
TimeStampedPVCoordinates in a specified frame. |
abstract OrbitType |
getType()
Get the orbit type.
|
boolean |
hasDerivatives()
Check if orbit includes derivatives.
|
protected static boolean |
hasNonKeplerianAcceleration(PVCoordinates pva,
double mu)
Check if Cartesian coordinates include non-Keplerian acceleration.
|
protected abstract org.hipparchus.geometry.euclidean.threed.Vector3D |
initPosition()
Compute the position coordinates from the canonical parameters.
|
protected abstract TimeStampedPVCoordinates |
initPVCoordinates()
Compute the position/velocity coordinates from the canonical parameters.
|
boolean |
isElliptical()
Returns true if and only if the orbit is elliptical i.e.
|
abstract Orbit |
shiftedBy(double dt)
Get a time-shifted orbit.
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
durationFrom
getPosition
protected Orbit(Frame frame, AbsoluteDate date, double mu) throws IllegalArgumentException
frame
- the frame in which the parameters are defined
(must be a pseudo-inertial frame
)date
- date of the orbital parametersmu
- central attraction coefficient (m^3/s^2)IllegalArgumentException
- if frame is not a pseudo-inertial frame
protected Orbit(TimeStampedPVCoordinates pvCoordinates, Frame frame, double mu) throws IllegalArgumentException
The acceleration provided in pvCoordinates
is accessible using
getPVCoordinates()
and getPVCoordinates(Frame)
. All other methods
use mu
and the position to compute the acceleration, including
shiftedBy(double)
and getPVCoordinates(AbsoluteDate, Frame)
.
pvCoordinates
- the position and velocity in the inertial frameframe
- the frame in which the TimeStampedPVCoordinates
are defined
(must be a pseudo-inertial frame
)mu
- central attraction coefficient (m^3/s^2)IllegalArgumentException
- if frame is not a pseudo-inertial frame
protected static boolean hasNonKeplerianAcceleration(PVCoordinates pva, double mu)
pva
- Cartesian coordinatesmu
- central attraction coefficientpublic boolean isElliptical()
public abstract OrbitType getType()
public Frame getFrame()
public abstract double getA()
Note that the semi-major axis is considered negative for hyperbolic orbits.
public abstract double getADot()
Note that the semi-major axis is considered negative for hyperbolic orbits.
If the orbit was created without derivatives, the value returned is Double.NaN
.
hasDerivatives()
public abstract double getEquinoctialEx()
public abstract double getEquinoctialExDot()
If the orbit was created without derivatives, the value returned is Double.NaN
.
hasDerivatives()
public abstract double getEquinoctialEy()
public abstract double getEquinoctialEyDot()
If the orbit was created without derivatives, the value returned is Double.NaN
.
hasDerivatives()
public abstract double getHx()
public abstract double getHxDot()
If the orbit was created without derivatives, the value returned is Double.NaN
.
hasDerivatives()
public abstract double getHy()
public abstract double getHyDot()
If the orbit was created without derivatives, the value returned is Double.NaN
.
hasDerivatives()
public abstract double getLE()
public abstract double getLEDot()
If the orbit was created without derivatives, the value returned is Double.NaN
.
hasDerivatives()
public abstract double getLv()
public abstract double getLvDot()
If the orbit was created without derivatives, the value returned is Double.NaN
.
hasDerivatives()
public abstract double getLM()
public abstract double getLMDot()
If the orbit was created without derivatives, the value returned is Double.NaN
.
hasDerivatives()
public abstract double getE()
public abstract double getEDot()
If the orbit was created without derivatives, the value returned is Double.NaN
.
hasDerivatives()
public abstract double getI()
public abstract double getIDot()
If the orbit was created without derivatives, the value returned is Double.NaN
.
hasDerivatives()
public boolean hasDerivatives()
getADot()
,
getEquinoctialExDot()
,
getEquinoctialEyDot()
,
getHxDot()
,
getHyDot()
,
getLEDot()
,
getLvDot()
,
getLMDot()
,
getEDot()
,
getIDot()
public double getMu()
public double getKeplerianPeriod()
The Keplerian period is computed directly from semi major axis and central acceleration constant.
public double getKeplerianMeanMotion()
The Keplerian mean motion is computed directly from semi major axis and central acceleration constant.
public double getMeanAnomalyDotWrtA()
public AbsoluteDate getDate()
getDate
in interface TimeStamped
public TimeStampedPVCoordinates getPVCoordinates(Frame outputFrame)
TimeStampedPVCoordinates
in a specified frame.outputFrame
- frame in which the position/velocity coordinates shall be computedgetPVCoordinates()
public TimeStampedPVCoordinates getPVCoordinates(AbsoluteDate otherDate, Frame otherFrame)
PVCoordinates
of the body in the selected frame.getPVCoordinates
in interface PVCoordinatesProvider
otherDate
- current dateotherFrame
- the frame where to define the positionpublic org.hipparchus.geometry.euclidean.threed.Vector3D getPosition(Frame outputFrame)
outputFrame
- frame in which the position coordinates shall be computedgetPosition()
public org.hipparchus.geometry.euclidean.threed.Vector3D getPosition()
getPVCoordinates()
public TimeStampedPVCoordinates getPVCoordinates()
TimeStampedPVCoordinates
in definition frame.getPVCoordinates(Frame)
protected abstract org.hipparchus.geometry.euclidean.threed.Vector3D initPosition()
protected abstract TimeStampedPVCoordinates initPVCoordinates()
public abstract Orbit shiftedBy(double dt)
The orbit can be slightly shifted to close dates. The shifting model is a Keplerian one if no derivatives are available in the orbit, or Keplerian plus quadratic effect of the non-Keplerian acceleration if derivatives are available. Shifting is not intended as a replacement for proper orbit propagation but should be sufficient for small time shifts or coarse accuracy.
shiftedBy
in interface TimeShiftable<Orbit>
dt
- time shift in secondspublic void getJacobianWrtCartesian(PositionAngleType type, double[][] jacobian)
Element jacobian[i][j]
is the derivative of parameter i of the orbit with
respect to Cartesian coordinate j. This means each row corresponds to one orbital parameter
whereas columns 0 to 5 correspond to the Cartesian coordinates x, y, z, xDot, yDot and zDot.
type
- type of the position angle to usejacobian
- placeholder 6x6 (or larger) matrix to be filled with the Jacobian, if matrix
is larger than 6x6, only the 6x6 upper left corner will be modifiedpublic void getJacobianWrtParameters(PositionAngleType type, double[][] jacobian)
Element jacobian[i][j]
is the derivative of Cartesian coordinate i of the orbit with
respect to orbital parameter j. This means each row corresponds to one Cartesian coordinate
x, y, z, xdot, ydot, zdot whereas columns 0 to 5 correspond to the orbital parameters.
type
- type of the position angle to usejacobian
- placeholder 6x6 (or larger) matrix to be filled with the Jacobian, if matrix
is larger than 6x6, only the 6x6 upper left corner will be modifiedprotected abstract double[][] computeJacobianMeanWrtCartesian()
Element jacobian[i][j]
is the derivative of parameter i of the orbit with
respect to Cartesian coordinate j. This means each row correspond to one orbital parameter
whereas columns 0 to 5 correspond to the Cartesian coordinates x, y, z, xDot, yDot and zDot.
The array returned by this method will not be modified.
computeJacobianEccentricWrtCartesian()
,
computeJacobianTrueWrtCartesian()
protected abstract double[][] computeJacobianEccentricWrtCartesian()
Element jacobian[i][j]
is the derivative of parameter i of the orbit with
respect to Cartesian coordinate j. This means each row correspond to one orbital parameter
whereas columns 0 to 5 correspond to the Cartesian coordinates x, y, z, xDot, yDot and zDot.
The array returned by this method will not be modified.
computeJacobianMeanWrtCartesian()
,
computeJacobianTrueWrtCartesian()
protected abstract double[][] computeJacobianTrueWrtCartesian()
Element jacobian[i][j]
is the derivative of parameter i of the orbit with
respect to Cartesian coordinate j. This means each row correspond to one orbital parameter
whereas columns 0 to 5 correspond to the Cartesian coordinates x, y, z, xDot, yDot and zDot.
The array returned by this method will not be modified.
computeJacobianMeanWrtCartesian()
,
computeJacobianEccentricWrtCartesian()
public abstract void addKeplerContribution(PositionAngleType type, double gm, double[] pDot)
This method is used by integration-based propagators to evaluate the part of Keplerian motion to evolution of the orbital state.
type
- type of the position angle in the stategm
- attraction coefficient to usepDot
- array containing orbital state derivatives to update (the Keplerian
part must be added to the array components, as the array may already
contain some non-zero elements corresponding to non-Keplerian parts)protected static void fillHalfRow(double a, org.hipparchus.geometry.euclidean.threed.Vector3D v, double[] row, int j)
a
- coefficient of the vectorv
- vectorrow
- Jacobian matrix rowj
- index of the first element to set (row[j], row[j+1] and row[j+2] will all be set)protected static void fillHalfRow(double a1, org.hipparchus.geometry.euclidean.threed.Vector3D v1, double a2, org.hipparchus.geometry.euclidean.threed.Vector3D v2, double[] row, int j)
a1
- coefficient of the first vectorv1
- first vectora2
- coefficient of the second vectorv2
- second vectorrow
- Jacobian matrix rowj
- index of the first element to set (row[j], row[j+1] and row[j+2] will all be set)protected static void fillHalfRow(double a1, org.hipparchus.geometry.euclidean.threed.Vector3D v1, double a2, org.hipparchus.geometry.euclidean.threed.Vector3D v2, double a3, org.hipparchus.geometry.euclidean.threed.Vector3D v3, double[] row, int j)
a1
- coefficient of the first vectorv1
- first vectora2
- coefficient of the second vectorv2
- second vectora3
- coefficient of the third vectorv3
- third vectorrow
- Jacobian matrix rowj
- index of the first element to set (row[j], row[j+1] and row[j+2] will all be set)protected static void fillHalfRow(double a1, org.hipparchus.geometry.euclidean.threed.Vector3D v1, double a2, org.hipparchus.geometry.euclidean.threed.Vector3D v2, double a3, org.hipparchus.geometry.euclidean.threed.Vector3D v3, double a4, org.hipparchus.geometry.euclidean.threed.Vector3D v4, double[] row, int j)
a1
- coefficient of the first vectorv1
- first vectora2
- coefficient of the second vectorv2
- second vectora3
- coefficient of the third vectorv3
- third vectora4
- coefficient of the fourth vectorv4
- fourth vectorrow
- Jacobian matrix rowj
- index of the first element to set (row[j], row[j+1] and row[j+2] will all be set)protected static void fillHalfRow(double a1, org.hipparchus.geometry.euclidean.threed.Vector3D v1, double a2, org.hipparchus.geometry.euclidean.threed.Vector3D v2, double a3, org.hipparchus.geometry.euclidean.threed.Vector3D v3, double a4, org.hipparchus.geometry.euclidean.threed.Vector3D v4, double a5, org.hipparchus.geometry.euclidean.threed.Vector3D v5, double[] row, int j)
a1
- coefficient of the first vectorv1
- first vectora2
- coefficient of the second vectorv2
- second vectora3
- coefficient of the third vectorv3
- third vectora4
- coefficient of the fourth vectorv4
- fourth vectora5
- coefficient of the fifth vectorv5
- fifth vectorrow
- Jacobian matrix rowj
- index of the first element to set (row[j], row[j+1] and row[j+2] will all be set)protected static void fillHalfRow(double a1, org.hipparchus.geometry.euclidean.threed.Vector3D v1, double a2, org.hipparchus.geometry.euclidean.threed.Vector3D v2, double a3, org.hipparchus.geometry.euclidean.threed.Vector3D v3, double a4, org.hipparchus.geometry.euclidean.threed.Vector3D v4, double a5, org.hipparchus.geometry.euclidean.threed.Vector3D v5, double a6, org.hipparchus.geometry.euclidean.threed.Vector3D v6, double[] row, int j)
a1
- coefficient of the first vectorv1
- first vectora2
- coefficient of the second vectorv2
- second vectora3
- coefficient of the third vectorv3
- third vectora4
- coefficient of the fourth vectorv4
- fourth vectora5
- coefficient of the fifth vectorv5
- fifth vectora6
- coefficient of the sixth vectorv6
- sixth vectorrow
- Jacobian matrix rowj
- index of the first element to set (row[j], row[j+1] and row[j+2] will all be set)Copyright © 2002-2023 CS GROUP. All rights reserved.