コード例 #1
0
        /// <summary>
        /// Determines the closest approach distance between two orbiting bodies
        /// over the specified time interval.
        /// </summary>
        /// <returns>The approach distance.</returns>
        /// <param name="collider1">Collider1.</param>
        /// <param name="collider2">Collider2.</param>
        /// <param name="numSteps">Number steps.</param>
        /// <param name="interval">The time interval to check.</param>
        double ClosestApproachDistance(OrbitData collider1, OrbitData collider2, double interval, int numSteps = 30)
        {
            double    minDistance = double.PositiveInfinity;
            OrbitData orbit1      = new OrbitData(collider1);
            OrbitData orbit2      = new OrbitData(collider2);

            double intervalStepSize = interval / numSteps;
            double time             = 0.0;

            while (time <= interval)
            {
                orbit1.Step(intervalStepSize);
                orbit2.Step(intervalStepSize);
                double distance = (orbit1.Position - orbit2.Position).magnitude;
                if (distance < minDistance)
                {
                    minDistance = distance;
                }
                time += intervalStepSize;
            }
            return(minDistance);
        }