Represents a rotation as a sequence of three ElementaryRotations about consecutive axes. The first elementary rotation results in an intermediate orientation and associated set of axes from which the second elementary rotation is performed. Likewise, the third elementary rotation is performed from the intermediate orientation and set of axes which result from the second rotation.
A 321 Euler sequence is commonly used to represent yaw about the z-axis, followed by pitch about the resulting y-axis, and then roll about the resulting x-axis when expressing the attitude of a vehicle relative to some reference orientation.
public struct EulerSequence : IEquatable<EulerSequence>, IEquatableEpsilon<EulerSequence>
Public Structure EulerSequence Implements IEquatable(Of EulerSequence), IEquatableEpsilon(Of EulerSequence)
public value class EulerSequence : IEquatable<EulerSequence>, IEquatableEpsilon<EulerSequence>
[<SealedAttribute>] type EulerSequence = struct interface IEquatable<EulerSequence> interface IEquatableEpsilon<EulerSequence> end
The EulerSequence type exposes the following members.
Initializes an EulerSequence from the provided YawPitchRoll sequence.
Initializes an EulerSequence from the provided AngleAxisRotation and sequence.
Initializes an EulerSequence from the provided Matrix3By3 and sequence.
Initializes an EulerSequence from the provided UnitQuaternion and sequence.
|EulerSequence(ElementaryRotation, ElementaryRotation, ElementaryRotation)|
Initializes an EulerSequence from the provided ElementaryRotations.
|EulerSequence(Double, Double, Double, EulerSequenceIndicator)|
Initializes an EulerSequence from the provided angles and sequence.
Gets the first rotation.
Gets the second rotation.
Gets the order of the axes rotations for this instance.
Gets the third rotation.
Indicates whether another instance of this type is exactly equal to this instance.
Indicates whether another object is exactly equal to this instance.(Overrides ValueTypeEquals(Object).)
Returns if all of the elements of this rotation are within epsilon of the same elements of the specified rotation. That is, in order for the rotations to be considered equal (and for this function to return ), the absolute value of the difference between each of their elements must be less than or equal to epsilon.
Determines the first axis indicator from the provided EulerSequenceIndicator.
Returns a hash code for this instance, which is suitable for use in hashing algorithms and data structures like a hash table.(Overrides ValueTypeGetHashCode.)
Gets the Type of the current instance.(Inherited from Object.)
Composes a EulerSequenceIndicator from three individual AxisIndicator items.
Inverts this instance, yielding a new EulerSequence.
Determines the second axis indicator from the provided EulerSequenceIndicator.
Determines the third axis indicator from the provided EulerSequenceIndicator.
Returns the value of this set of EulerSequence coordinates in the form "first rotation, second rotation, third rotation"(Overrides ValueTypeToString.)
Returns if the two instances are exactly equal.
Returns if the two instances are not exactly equal.
A 321 Euler sequence can be used to express the yaw (heading), pitch (elevation), and roll (bank) orientation of the vehicle body axis relative to the local North-East-Down axes of the vehicle. To obtain these angles, use a 321 EulerSequence as shown below:
Point myVehiclePoint = propagator.CreatePoint(); EarthCentralBody earth = CentralBodiesFacet.GetFromContext().Earth; AxesNorthEastDown ned = new AxesNorthEastDown(earth, myVehiclePoint); Vector surfaceNormal = new VectorEllipsoidSurfaceNormal(earth.Shape, earth.FixedFrame, myVehiclePoint); AxesAlignedConstrained vehicleBodyAxes = new AxesAlignedConstrained( new VectorVelocity(myVehiclePoint, earth.FixedFrame), AxisIndicator.First, new VectorInverted(surfaceNormal), AxisIndicator.Third); AxesEvaluator rotationEvaluator = GeometryTransformer.GetAxesTransformation(ned, vehicleBodyAxes); UnitQuaternion ned2body = rotationEvaluator.Evaluate(propagator.TimeInterval.Start); EulerSequence yawPitchRoll = new EulerSequence(ned2body, EulerSequenceIndicator.Euler321); double yaw = yawPitchRoll.FirstRotation.Angle; double pitch = yawPitchRoll.SecondRotation.Angle; double roll = yawPitchRoll.ThirdRotation.Angle;