Пример #1
0
        public void Tick(object s, EventArgs e)
        {
            foreach (var movingObject in _objects.Rockets)
            {
                movingObject.DragForces    = new List <Force>();
                movingObject.GravityForces = new List <Force>();

                foreach (var gravityObject in _objects.Terrains)
                {
                    var distance = PointCalculator.Distance(movingObject.Location, gravityObject.Location);
                    var angle    = PointCalculator.CalculateAngle(movingObject.Location, gravityObject.Location);
                    var force    = GravityCalculator.CalculateGravity(movingObject.Mass, gravityObject.Mass, distance, angle);
                    movingObject.GravityForces.Add(force);

                    var altitude = distance - gravityObject.Diameter;
                    if (altitude < 100000)
                    {
                        // Drag Relevant
                        var rocketForceAngle   = movingObject._angle;
                        var dragAngle          = Angle.FromDegrees(movingObject.Speed.Angle.Degree + 180);
                        var speedDirectionDiff =
                            Angle.FromDegrees(rocketForceAngle.Degree - movingObject.Speed.Angle.Degree);
                        var cd        = movingObject.Drag.GetDragCoefficient(speedDirectionDiff);
                        var a         = movingObject.Drag.GetArea(speedDirectionDiff);
                        var p         = AtmosphereCalculator.CalculateAirDensityAtAltitude(altitude);
                        var dragForce = DragCalculator.CalculateDrag(dragAngle, cd, p, movingObject.Speed, a);
                        movingObject.DragForces.Add(dragForce);
                    }
                }
                movingObject.Tick();
            }
        }
        public void DragIsCalculatedCorrectly()
        {
            var zeroAngle = Angle.FromDegrees(0);
            var p         = AtmosphereCalculator.CalculateAirDensityAtAltitude(5000);
            var s         = new Speed(zeroAngle, 500);
            var f         = DragCalculator.CalculateDrag(zeroAngle, 0.25, p, s, 21);

            Assert.AreEqual(476787.3, f.Value, 0.1);
        }
 public void AirDensityCalculatedCorrectly8()
 {
     Assert.AreEqual(0, AtmosphereCalculator.CalculateAirDensityAtAltitude(90000));
 }
 public void AirDensityCalculatedCorrectly7()
 {
     Assert.AreEqual(0.00022, AtmosphereCalculator.CalculateAirDensityAtAltitude(62100.12312312), 0.00001);
 }
 public void AirDensityCalculatedCorrectly6()
 {
     Assert.AreEqual(0.00859, AtmosphereCalculator.CalculateAirDensityAtAltitude(35000), 0.00001);
 }
 public void AirDensityCalculatedCorrectly3()
 {
     Assert.AreEqual(1.121, AtmosphereCalculator.CalculateAirDensityAtAltitude(1000), 0.001);
 }
 public void AirDensityCalculatedCorrectly2()
 {
     Assert.AreEqual(1.2496, AtmosphereCalculator.CalculateAirDensityAtAltitude(0), 0.001);
 }