public class TimeStampedAngularCoordinates extends AngularCoordinates implements TimeStamped
IDENTITY
Constructor and Description |
---|
TimeStampedAngularCoordinates(AbsoluteDate date,
FieldRotation<U> r)
Builds a TimeStampedAngularCoordinates from a
FieldRotation <Derivative >. |
TimeStampedAngularCoordinates(AbsoluteDate date,
PVCoordinates u,
PVCoordinates v)
Build one of the rotations that transform one pv coordinates into another one.
|
TimeStampedAngularCoordinates(AbsoluteDate date,
PVCoordinates u1,
PVCoordinates u2,
PVCoordinates v1,
PVCoordinates v2,
double tolerance)
Build the rotation that transforms a pair of pv coordinates into another pair.
|
TimeStampedAngularCoordinates(AbsoluteDate date,
Rotation rotation,
Vector3D rotationRate,
Vector3D rotationAcceleration)
Builds a rotation/rotation rate pair.
|
Modifier and Type | Method and Description |
---|---|
TimeStampedAngularCoordinates |
addOffset(AngularCoordinates offset)
Add an offset from the instance.
|
AbsoluteDate |
getDate()
Get the date.
|
static TimeStampedAngularCoordinates |
interpolate(AbsoluteDate date,
AngularDerivativesFilter filter,
Collection<TimeStampedAngularCoordinates> sample)
Interpolate angular coordinates.
|
TimeStampedAngularCoordinates |
revert()
Revert a rotation/rotation rate pair.
|
TimeStampedAngularCoordinates |
shiftedBy(double dt)
Get a time-shifted state.
|
TimeStampedAngularCoordinates |
subtractOffset(AngularCoordinates offset)
Subtract an offset from the instance.
|
applyTo, applyTo, applyTo, applyTo, createFromModifiedRodrigues, estimateRate, getModifiedRodrigues, getRotation, getRotationAcceleration, getRotationRate, toDerivativeStructureRotation, toUnivariateDerivative1Rotation, toUnivariateDerivative2Rotation
public TimeStampedAngularCoordinates(AbsoluteDate date, Rotation rotation, Vector3D rotationRate, Vector3D rotationAcceleration)
date
- coordinates daterotation
- rotationrotationRate
- rotation rate Ω (rad/s)rotationAcceleration
- rotation acceleration dΩ/dt (rad²/s²)public TimeStampedAngularCoordinates(AbsoluteDate date, PVCoordinates u1, PVCoordinates u2, PVCoordinates v1, PVCoordinates v2, double tolerance)
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²
.
date
- coordinates dateu1
- first vector of the origin pairu2
- second vector of the origin pairv1
- desired image of u1 by the rotationv2
- desired image of u2 by the rotationtolerance
- relative tolerance factor used to check singularitiespublic TimeStampedAngularCoordinates(AbsoluteDate date, PVCoordinates u, PVCoordinates v)
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.
date
- coordinates dateu
- origin vectorv
- desired image of u by the rotationpublic TimeStampedAngularCoordinates(AbsoluteDate date, FieldRotation<U> r)
FieldRotation
<Derivative
>.
The rotation components must have time as their only derivation parameter and have consistent derivation orders.
U
- type of the derivativedate
- coordinates dater
- rotation with time-derivatives embedded within the coordinatespublic AbsoluteDate getDate()
getDate
in interface TimeStamped
public TimeStampedAngularCoordinates revert()
revert
in class AngularCoordinates
public TimeStampedAngularCoordinates shiftedBy(double dt)
The state can be slightly shifted to close dates. This shift is based on a simple linear model. It is not intended as a replacement for proper attitude propagation but should be sufficient for either small time shifts or coarse accuracy.
shiftedBy
in interface TimeShiftable<AngularCoordinates>
shiftedBy
in class AngularCoordinates
dt
- time shift in secondspublic TimeStampedAngularCoordinates addOffset(AngularCoordinates offset)
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.
addOffset
in class AngularCoordinates
offset
- offset to subtractsubtractOffset(AngularCoordinates)
public TimeStampedAngularCoordinates subtractOffset(AngularCoordinates offset)
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.
subtractOffset
in class AngularCoordinates
offset
- offset to subtractaddOffset(AngularCoordinates)
public static TimeStampedAngularCoordinates interpolate(AbsoluteDate date, AngularDerivativesFilter filter, Collection<TimeStampedAngularCoordinates> sample)
The interpolated instance is created by polynomial Hermite interpolation on Rodrigues vector ensuring rotation rate remains the exact derivative of rotation.
This method is based on Sergei Tanygin's paper Attitude Interpolation, changing the norm of the vector to match the modified Rodrigues vector as described in Malcolm D. Shuster's paper A Survey of Attitude Representations. This change avoids the singularity at π. There is still a singularity at 2π, which is handled by slightly offsetting all rotations when this singularity is detected. Another change is that the mean linear motion is first removed before interpolation and added back after interpolation. This allows to use interpolation even when the sample covers much more than one turn and even when sample points are separated by more than one turn.
Note that even if first and second time derivatives (rotation rates and acceleration) from sample can be ignored, the interpolated instance always includes interpolated derivatives. This feature can be used explicitly to compute these derivatives when it would be too complex to compute them from an analytical formula: just compute a few sample points from the explicit formula and set the derivatives to zero in these sample points, then use interpolation to add derivatives consistent with the rotations.
date
- interpolation datefilter
- filter for derivatives from the sample to use in interpolationsample
- sample points on which interpolation should be doneCopyright © 2002-2021 CS GROUP. All rights reserved.