Click or drag to resize


The various Points, Axes, and Scalars provided by DME Component Libraries enable flexibility in the representation of the trajectory of an object, as well as the ability to produce additional data along the route. For more information on geometry types see the Reference Frames and Transformations topic.

Note Note

The functionality described in this topic requires a license for the Route Design Library.

Available Geometry Types




After configuring a RoutePropagator and generating a PropagatedRoute, the CreatePointFromRoute method produces a Point representing the position and its derivatives along the route. This represents the geometry of the true fixed-frame behavior of the route, including the effects of the curvature of the underlying surface.


Defines the orientation for a platform based on analyzing the route to determine the angle at which an aircraft in a steady turn would need to bank (roll) in order to create the centripetal acceleration necessary to produce the horizontal turn acceleration. The Axes also take into account the set of transition times indicating transitions between straight segments and turns. At these points, the bank angle transitions smoothly based on a specified maximum roll-rate. The AxesFromBankAngle can be applied to other trajectories besides those generated from Route Design Library. In which case, if no transition times are present, the bank angle will simply represent the instantaneous bank angle along the path, without adding any additional transitions over discontinuities that may exist.


Defines the orientation for a platform based on aligning the x-axis along the velocity and constraining the z-axis to lie parallel to the downward facing vector orthogonal to the local terrain surface. This is useful when modeling ground vehicles driving along terrain.


Produces the scalar value of the heading along the route and its derivatives when they are available. The heading is defined to be zero toward true north and measured positive toward east. The values produced are in radians and radians per second.


Produces the scalar value of the height of the route with respect to a specified TerrainProvider. The height is produced in meters and meters per second. The derivatives of the height represent the "Flat Earth" dynamics specified by the user when specifying the Profiles and may differ slightly from the values generated from measuring the height directly from the Point, created by calling CreatePointFromRoute. Furthermore, the dynamics of the underlying TerrainProvider will also be removed. So if the specified surface is the local terrain and the platform moves along it at a constant height, the rate of change of height reported by the scalar will be zero. Whereas, if the reference surface is the underlying ellipsoid, the rate of change will in general be non-zero.


Produces the scalar value of the speed along the underlying Ellipsoid upon which the surface path is constructed. This represents the "ground speed" of the platform in the "Flat Earth" space as specified by the user in the Profiles. In general, the surface speed may differ slightly from values specified in the Profiles as the route accounts for the curvature when producing the Point. The values produced are in meters per second and meters per second squared.


Produces the scalar value of the linear speed along the route, including the vertical rate of change of the height. This represents the "true speed" (without accounting for any atmospheric effects or other effects beside the geometry and dynamics of the route) of the platform in the "Flat Earth" space as specified by the user in the Profiles. In general, the total speed will differ slightly from the velocity reported by the Point due to the point accounting for the Non-Euclidean effects of traversing along the curved reference surface. The values produced are in meters per second and meters per second squared. Also note that the acceleration produced by this Scalar represents only the linear acceleration or deceleration along the route and does not include centripetal accelerations in turns or pitch maneuvers.

For more information on the "Flat Earth" space and how the above scalars represent their values, see the discussion of "Flat Earth" in the Profiles topic.

Using Geometry

In order to use the geometry types, first create a route and propagate it to obtain an instance of PropagatedRoute. From there, the various geometry types take the route and produce values along it. Here is an example:

PropagatedRoute route = propagator.PropagateFromTime(start);

// Define geometry
double bankRate = Trig.DegreesToRadians(5.0); // 5 deg/sec
AxesFromBankAngle aircraftAxes = new AxesFromBankAngle(route, Constants.EarthSurfaceGravity, bankRate);
Scalar routeHeight = new ScalarRouteHeight(route, localTerrain);
Scalar routeHeading = new ScalarRouteHeading(route);
Scalar routeTotalSpeed = new ScalarRouteTotalSpeed(route, localTerrain);
Scalar routeSurfaceSpeed = new ScalarRouteSurfaceSpeed(route);

// Create evaluators
EvaluatorGroup group = new EvaluatorGroup();
AxesEvaluator axesEvaluator = GeometryTransformer.GetAxesTransformation(earth.FixedFrame.Axes, aircraftAxes, group);
ScalarEvaluator heightEvaluator = routeHeight.GetEvaluator(group);
ScalarEvaluator headingEvaluator = routeHeading.GetEvaluator(group);
ScalarEvaluator totalSpeedEvaluator = routeTotalSpeed.GetEvaluator(group);
ScalarEvaluator surfaceSpeedEvaluator = routeSurfaceSpeed.GetEvaluator(group);

// Optimize for performance
heightEvaluator = group.UpdateReference(heightEvaluator);
headingEvaluator = group.UpdateReference(headingEvaluator);
totalSpeedEvaluator = group.UpdateReference(totalSpeedEvaluator);
surfaceSpeedEvaluator = group.UpdateReference(surfaceSpeedEvaluator);

// Perform analysis here