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

AddPoint() public method

public AddPoint ( DVector2 point, double altitude ) : void
point VectorMath.DVector2
altitude double
return void
        public void AddPoint(DVector2 point, double altitude)
        {
            if (altitude > Apogee)
            {
                Apogee = altitude;
                _apogeeIndex = _points.Count;
            }
            else if (altitude < Perigee)
            {
                Perigee = altitude;

                _perigeeIndex = _points.Count;
            }

            _points.Add(point);
        }

Usage Example

コード例 #1
0
ファイル: OrbitHelper.cs プロジェクト: rdancer/SpaceSim
        /// <summary>
        /// Traces a massive body orbit by re-centering the world around the parent.
        /// </summary>
        public static OrbitTrace TraceMassiveBody(MassiveBodyBase body)
        {
            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 orbitalTerminationRadius;
            double altitude = body.GetRelativeAltitude();

            double orbitalDt = GetOrbitalDt(initialPosition, proxySatellite.Velocity, out orbitalTerminationRadius);

            var trace = new OrbitTrace(body.Position, altitude);

            for (int i=0; i < 300; i++)
            {
                proxySatellite.ResetAccelerations();

                proxySatellite.ResolveGravitation(proxyParent);

                proxySatellite.Update(orbitalDt);

                altitude = proxyParent.GetRelativeHeight(proxySatellite.Position);

                // Check expensive termination conditions after half of the iterations
                if (i > 150)
                {
                    DVector2 offsetVector = proxySatellite.Position - initialPosition;

                    double distanceFromStart = offsetVector.Length();

                    // Terminate and add the end point
                    if (distanceFromStart < orbitalTerminationRadius)
                    {
                        trace.AddPoint(proxySatellite.Position + parent.Position, altitude);
                        break;
                    }
                }

                trace.AddPoint(proxySatellite.Position + parent.Position, altitude);
            }

            return trace;
        }
All Usage Examples Of SpaceSim.Orbits.OrbitTrace::AddPoint