﻿ Rotating-Pulsating Systems

# Rotating-Pulsating Systems

Top  Previous  Next

The RotatingPulsatingSystem object supports mathematical calculations and coordinate system transformations to and from the rotating-pulsating frame. The rotating-pulsating frame can be visualized in FreeFlyer using the rotating-pulsating Viewpoint of the ViewWindow. The rotating-pulsating system is a reference frame that takes two bodies as the primary and secondary bodies for the system, around which the frame is built. In addition to the primary and secondary bodies, the frame requires the input of a reference vector and a reference distance so that it can scale the positions of all other bodies appropriately.

A key element of the rotating-pulsating system is the pulsating behavior itself. A pulsating frame is one where the distance between all objects and the size of all objects are both modified based on a scale factor. This scale factor is obtained such that the secondary object is at the same position at all times, and is determined by the distance between the primary and secondary objects.

The following Sample Mission Plans (included with your FreeFlyer installation) demonstrate the use of the RotatingPulsatingSystem object:

 Demos

## Using a RotatingPulsatingSystem

There are a number of properties that must be set for a RotatingPulsatingSystem object to configure it for use. Chiefly among these are the primary and secondary objects, which can be either CelestialObject or Spacecraft objects and must be set through appropriate methods. As part of this configuration, the RotatingPulsatingSystem object supports three types of calculations based on the second vector used in defining the frame as follows.

 •Based on the relative velocity between the primary and secondary objectsoThis vector results in ideal calculations for cases where the secondary object is orbiting the primary objectoAn example of where this is the case is the Earth/Moon system or an Earth/Spacecraft system•Based on the MJ2000 Earth Equator north directionoThis vector results in ideal calculations for cases where the secondary object is not orbiting the primary object, or for specific Earth/Spacecraft orbital geometriesoAn example of where this is the case is the Earth/Spacecraft system for a Spacecraft in a geosynchronous orbit•Based on the MJ2000 Earth Ecliptic north directionoThis vector results in ideal calculations for cases where the secondary object is not orbiting the primary object, particularly systems built from multiple planetsoAn example of where this is the case is the Earth/Mars system

Several different types of calculations can be performed using the RotatingPulsatingSystem as well, and you can also assign a Spacecraft object's state in this reference frame. See below for script examples of how to perform these operations.

 RotatingPulsatingSystem rps;   rps.SetPrimaryObject(Earth); rps.SetSecondaryObject(Moon);   rps.ReferenceDistance = 384400; // Roughly the distance between the Earth and Moon rps.ReferenceVector   = 0;      // Relative Velocity rps.Pulsating         = 1;      // Pulsating Enabled (Default)   Spacecraft sc; Array stateToSet = {0.848482281, 0, 0, 0, 0, 0}*rps.ReferenceDistance; rps.SetSpacecraftState(sc, stateToSet); // Earth-Moon L1 state in the rotating-pulsating frame

Interaction with the Rotating-Pulsating View

Due to the want to both perform calculations with the rotating-pulsating frame and to visualize it, there are a number of direct interactions with the rotating-pulsating Viewpoint type in FreeFlyer that make working with both it and the RotatingPulsatingSystem much easier. In many cases you'll either configure a RotatingPulsatingSystem object and then want to mirror its setup to the Viewpoint, or vice versa, and both directions are fully supported natively in FreeFlyer. An example script demonstrating both directions of interaction follows.

 // The RotatingPulsatingSystem and Viewpoint must be configured at a basic level first RotatingPulsatingSystem rps; rps.SetPrimaryObject(Earth); rps.SetSecondaryObject(Moon);   Viewpoint vp; vp.ViewpointType = "rotatingpulsatingview";   // Initialize a Viewpoint from the RotatingPulsatingSystem vp.RotatingPulsatingView.InitializeFromRotatingPulsatingSystem(rps); // Initialize the RotatingPulsatingSystem from a Viewpoint rps.InitializeFromRotatingPulsatingViewpoint(vp);

Note: When basing the second vector of the frame on the relative velocity between the primary and secondary objects and visualizing it in a rotating-pulsating Viewpoint, you must configure the primary and secondary objects a specific way. These objects must have their velocity stored to the ViewWindow for the view to draw their history. This can be enabled for an object associated with a ViewWindow at any point in the Mission Plan's execution by calling the ViewWindow.SetObjectStoreVelocity() method.