SpaceSim.Orbits.OrbitTrace.Reset C# (CSharp) Method

Reset() public method

public Reset ( DVector2 start ) : void
start VectorMath.DVector2
return void
        public void Reset(DVector2 start)
        {
            Apogee = 0;
            Perigee = double.MaxValue;

            _apogeeIndex = 0;
            _perigeeIndex = 0;

            _points.Clear();
            _points.Add(start);
        }

Usage Example

Ejemplo n.º 1
0
        /// <summary>
        /// Traces a massive body orbit by re-centering the world around the parent.
        /// </summary>
        public static void TraceMassiveBody(MassiveBodyBase body, OrbitTrace trace)
        {
            IMassiveBody parent = body.GravitationalParent;

            DVector2 initialPosition = body.Position - parent.Position;

            var proxyParent    = new MassiveBodyProxy(DVector2.Zero, DVector2.Zero, parent);
            var proxySatellite = new MassiveBodyProxy(initialPosition, body.Velocity - parent.Velocity, body);

            double orbitalDt = GetOrbitalDt(initialPosition.Length(), parent.Mass, proxySatellite.Velocity.Length());

            trace.Reset(body.Position);

            // Assumes that the parent is (0,0) which will be true in this case
            double previousAngle            = proxySatellite.Position.Angle();
            double totalAngularDisplacement = 0;

            // Max of 1000 steps, in practice it's 150-200
            for (int i = 0; i < 1000; i++)
            {
                proxySatellite.ResetAccelerations();

                proxySatellite.ResolveGravitation(proxyParent);

                proxySatellite.Update(orbitalDt);

                double currentAngle = proxySatellite.Position.Angle();

                totalAngularDisplacement += DeltaAngle(currentAngle, previousAngle);

                // Made a full orbit
                if (totalAngularDisplacement > AngularCutoff)
                {
                    break;
                }

                previousAngle = currentAngle;

                double altitude = proxyParent.GetRelativeHeight(proxySatellite.Position);

                trace.AddPoint(proxySatellite.Position + parent.Position, altitude);
            }
        }
All Usage Examples Of SpaceSim.Orbits.OrbitTrace::Reset