public class AngularCoordinates extends Object implements TimeShiftable<AngularCoordinates>, Serializable
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.
Modifier and Type | Field and Description |
---|---|
static AngularCoordinates |
IDENTITY
Fixed orientation parallel with reference frame
(identity rotation, zero rotation rate and acceleration).
|
Constructor and Description |
---|
AngularCoordinates()
Simple constructor.
|
AngularCoordinates(FieldRotation<DerivativeStructure> r)
Builds a AngularCoordinates from a
FieldRotation <DerivativeStructure >. |
AngularCoordinates(PVCoordinates u,
PVCoordinates v)
Build one of the rotations that transform one pv coordinates into another one.
|
AngularCoordinates(PVCoordinates u1,
PVCoordinates u2,
PVCoordinates v1,
PVCoordinates v2,
double tolerance)
Build the rotation that transforms a pair of pv coordinates into another one.
|
AngularCoordinates(Rotation rotation,
Vector3D rotationRate)
Builds a rotation/rotation rate pair.
|
AngularCoordinates(Rotation rotation,
Vector3D rotationRate,
Vector3D rotationAcceleration)
Builds a rotation/rotation rate/rotation acceleration triplet.
|
Modifier and Type | Method and Description |
---|---|
AngularCoordinates |
addOffset(AngularCoordinates offset)
Add an offset from the instance.
|
<T extends RealFieldElement<T>> |
applyTo(FieldPVCoordinates<T> pv)
Apply the rotation to a pv coordinates.
|
PVCoordinates |
applyTo(PVCoordinates pv)
Apply the rotation to a pv coordinates.
|
<T extends RealFieldElement<T>> |
applyTo(TimeStampedFieldPVCoordinates<T> pv)
Apply the rotation to a pv coordinates.
|
TimeStampedPVCoordinates |
applyTo(TimeStampedPVCoordinates pv)
Apply the rotation to a pv coordinates.
|
static AngularCoordinates |
createFromModifiedRodrigues(double[][] r)
Convert a modified Rodrigues vector and derivatives to angular coordinates.
|
static Vector3D |
estimateRate(Rotation start,
Rotation end,
double dt)
Estimate rotation rate between two orientations.
|
double[][] |
getModifiedRodrigues(double sign)
Convert rotation, rate and acceleration to modified Rodrigues vector and derivatives.
|
Rotation |
getRotation()
Get the rotation.
|
Vector3D |
getRotationAcceleration()
Get the rotation acceleration.
|
Vector3D |
getRotationRate()
Get the rotation rate.
|
AngularCoordinates |
revert()
Revert a rotation/rotation rate/ rotation acceleration triplet.
|
AngularCoordinates |
shiftedBy(double dt)
Get a time-shifted state.
|
AngularCoordinates |
subtractOffset(AngularCoordinates offset)
Subtract an offset from the instance.
|
FieldRotation<DerivativeStructure> |
toDerivativeStructureRotation(int order)
Transform the instance to a
FieldRotation <DerivativeStructure >. |
public static final AngularCoordinates IDENTITY
public AngularCoordinates()
Sets the Coordinates to default : Identity, Ω = (0 0 0), dΩ/dt = (0 0 0).
public AngularCoordinates(Rotation rotation, Vector3D rotationRate)
rotation
- rotationrotationRate
- rotation rate Ω (rad/s)public AngularCoordinates(Rotation rotation, Vector3D rotationRate, Vector3D rotationAcceleration)
rotation
- rotationrotationRate
- rotation rate Ω (rad/s)rotationAcceleration
- rotation acceleration dΩ/dt (rad²/s²)public AngularCoordinates(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²
.
u1
- 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 AngularCoordinates(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.
u
- origin vectorv
- desired image of u by the rotationpublic AngularCoordinates(FieldRotation<DerivativeStructure> r)
FieldRotation
<DerivativeStructure
>.
The rotation components must have time as their only derivation parameter and have consistent derivation orders.
r
- rotation with time-derivatives embedded within the coordinatespublic FieldRotation<DerivativeStructure> toDerivativeStructureRotation(int order)
FieldRotation
<DerivativeStructure
>.
The DerivativeStructure
coordinates correspond to time-derivatives up
to the user-specified order.
order
- derivation order for the vector componentspublic static Vector3D estimateRate(Rotation start, Rotation end, double dt)
Estimation is based on a simple fixed rate rotation during the time interval between the two orientations.
start
- start orientationend
- end orientationdt
- time elapsed between the dates of the two orientationspublic AngularCoordinates revert()
public AngularCoordinates shiftedBy(double dt)
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.
shiftedBy
in interface TimeShiftable<AngularCoordinates>
dt
- time shift in secondspublic Rotation getRotation()
public Vector3D getRotationRate()
public Vector3D getRotationAcceleration()
public AngularCoordinates 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.
offset
- offset to subtractsubtractOffset(AngularCoordinates)
public AngularCoordinates 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.
offset
- offset to subtractaddOffset(AngularCoordinates)
public PVCoordinates applyTo(PVCoordinates pv)
pv
- vector to apply the rotation topublic TimeStampedPVCoordinates applyTo(TimeStampedPVCoordinates pv)
pv
- vector to apply the rotation topublic <T extends RealFieldElement<T>> FieldPVCoordinates<T> applyTo(FieldPVCoordinates<T> pv)
T
- type of the field elementspv
- vector to apply the rotation topublic <T extends RealFieldElement<T>> TimeStampedFieldPVCoordinates<T> applyTo(TimeStampedFieldPVCoordinates<T> pv)
T
- type of the field elementspv
- vector to apply the rotation topublic double[][] getModifiedRodrigues(double sign)
The modified Rodrigues vector is tan(θ/4) u where θ and u are the rotation angle and axis respectively.
sign
- multiplicative sign for quaternion componentscreateFromModifiedRodrigues(double[][])
public static AngularCoordinates createFromModifiedRodrigues(double[][] r)
r
- modified Rodrigues vector (with first and second times derivatives)getModifiedRodrigues(double)
Copyright © 2002-2020 CS Group. All rights reserved.