Exemple #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);
        }
Exemple #3
0
        public Velocity CalculateVelocity(Velocity previousVelocity)
        {
            var x_netForce = DragCalculator.CalculateDragAtVelocity(previousVelocity.Vx, initialValues);
            var y_netForce = (initialValues.Gravity) + DragCalculator.CalculateDragAtVelocity(previousVelocity.Vy, initialValues);

            var velocity = new Velocity
            {
                Vx = previousVelocity.Vx - DeltaVelocityCalculator.CalculateDeltaVelocity(deltaTime, x_netForce),
                Vy = previousVelocity.Vy - DeltaVelocityCalculator.CalculateDeltaVelocity(deltaTime, y_netForce),
            };

            return(velocity);
        }