public class Frame extends Object implements Serializable
This class is the base class for all frames in OREKIT. The frames are
linked together in a tree with some specific frame chosen as the root of the tree.
Each frame is defined by transforms
combining any number
of translations and rotations from a reference frame which is its
parent frame in the tree structure.
When we say a transform
t is from frameA
to frameB, we mean that if the coordinates of some absolute
vector (say the direction of a distant star for example) has coordinates
uA in frameA and uB in frameB,
then uB=t.transformVector(uA)
.
The transforms may be constant or varying, depending on the implementation of
the transform provider
used to define the frame. For simple
fixed transforms, using FixedTransformProvider
is sufficient. For varying
transforms (time-dependent or telemetry-based for example), it may be useful to define
specific implementations of transform provider
.
Constructor and Description |
---|
Frame(Frame parent,
TransformProvider transformProvider,
String name)
Build a non-inertial frame from its transform with respect to its parent.
|
Frame(Frame parent,
TransformProvider transformProvider,
String name,
boolean pseudoInertial)
Build a frame from its transform with respect to its parent.
|
Frame(Frame parent,
Transform transform,
String name)
Build a non-inertial frame from its transform with respect to its parent.
|
Frame(Frame parent,
Transform transform,
String name,
boolean pseudoInertial)
Build a frame from its transform with respect to its parent.
|
Modifier and Type | Method and Description |
---|---|
Frame |
getAncestor(int n)
Get the nth ancestor of the frame.
|
int |
getDepth()
Get the depth of the frame.
|
Frame |
getFrozenFrame(Frame reference,
AbsoluteDate freezingDate,
String frozenName)
Get a new version of the instance, frozen with respect to a reference frame.
|
String |
getName()
Get the name.
|
Frame |
getParent()
Get the parent frame.
|
static Frame |
getRoot()
Get the unique root frame.
|
TransformProvider |
getTransformProvider()
Get the provider for transform from parent frame to instance.
|
Transform |
getTransformTo(Frame destination,
AbsoluteDate date)
Get the transform from the instance to another frame.
|
<T extends RealFieldElement<T>> |
getTransformTo(Frame destination,
FieldAbsoluteDate<T> date)
Get the transform from the instance to another frame.
|
boolean |
isChildOf(Frame potentialAncestor)
Determine if a Frame is a child of another one.
|
boolean |
isPseudoInertial()
Check if the frame is pseudo-inertial.
|
String |
toString()
New definition of the java.util toString() method.
|
public Frame(Frame parent, Transform transform, String name) throws IllegalArgumentException
calling this constructor is equivalent to call
{link
.Frame(parent, transform, name, false)
parent
- parent frame (must be non-null)transform
- transform from parent frame to instancename
- name of the frameIllegalArgumentException
- if the parent frame is nullpublic Frame(Frame parent, TransformProvider transformProvider, String name) throws IllegalArgumentException
calling this constructor is equivalent to call
{link
.Frame(parent, transform, name, false)
parent
- parent frame (must be non-null)transformProvider
- provider for transform from parent frame to instancename
- name of the frameIllegalArgumentException
- if the parent frame is nullpublic Frame(Frame parent, Transform transform, String name, boolean pseudoInertial) throws IllegalArgumentException
The convention for the transform is that it is from parent frame to instance. This means that the two following frames are similar:
Frame frame1 = new Frame(FramesFactory.getGCRF(), new Transform(t1, t2)); Frame frame2 = new Frame(new Frame(FramesFactory.getGCRF(), t1), t2);
parent
- parent frame (must be non-null)transform
- transform from parent frame to instancename
- name of the framepseudoInertial
- true if frame is considered pseudo-inertial
(i.e. suitable for propagating orbit)IllegalArgumentException
- if the parent frame is nullpublic Frame(Frame parent, TransformProvider transformProvider, String name, boolean pseudoInertial) throws IllegalArgumentException
The convention for the transform is that it is from parent frame to instance. This means that the two following frames are similar:
Frame frame1 = new Frame(FramesFactory.getGCRF(), new Transform(t1, t2)); Frame frame2 = new Frame(new Frame(FramesFactory.getGCRF(), t1), t2);
parent
- parent frame (must be non-null)transformProvider
- provider for transform from parent frame to instancename
- name of the framepseudoInertial
- true if frame is considered pseudo-inertial
(i.e. suitable for propagating orbit)IllegalArgumentException
- if the parent frame is nullpublic String getName()
public boolean isPseudoInertial()
Pseudo-inertial frames are frames that do have a linear motion and either do not rotate or rotate at a very low rate resulting in neglectible inertial forces. This means they are suitable for orbit definition and propagation using Newtonian mechanics. Frames that are not pseudo-inertial are not suitable for orbit definition and propagation.
public String toString()
public Frame getParent()
public int getDepth()
The depth of a frame is the number of parents frame between it and the frames tree root. It is 0 for the root frame, and the depth of a frame is the depth of its parent frame plus one.
public Frame getAncestor(int n) throws IllegalArgumentException
n
- index of the ancestor (0 is the instance, 1 is its parent,
2 is the parent of its parent...)IllegalArgumentException
- if n is larger than the depth
of the instancepublic Transform getTransformTo(Frame destination, AbsoluteDate date)
destination
- destination frame to which we want to transform vectorsdate
- the date (can be null if it is sure than no date dependent frame is used)public <T extends RealFieldElement<T>> FieldTransform<T> getTransformTo(Frame destination, FieldAbsoluteDate<T> date)
T
- the type of the field elementsdestination
- destination frame to which we want to transform vectorsdate
- the date (can be null if it is sure than no date dependent frame is used)public TransformProvider getTransformProvider()
public boolean isChildOf(Frame potentialAncestor)
potentialAncestor
- supposed ancestor framepublic static Frame getRoot()
public Frame getFrozenFrame(Frame reference, AbsoluteDate freezingDate, String frozenName)
Freezing a frame consist in computing its position and orientation with respect to another frame at some freezing date and fixing them so they do not depend on time anymore. This means the frozen frame is fixed with respect to the reference frame.
One typical use of this method is to compute an inertial launch reference frame
by freezing a topocentric frame
at launch date
with respect to an inertial frame. Another use is to freeze an equinox-related
celestial frame at a reference epoch date.
Only the frame returned by this method is frozen, the instance by itself is not affected by calling this method and still moves freely.
reference
- frame with respect to which the instance will be frozenfreezingDate
- freezing datefrozenName
- name of the frozen frameCopyright © 2002-2020 CS Group. All rights reserved.