private static TrajectoryPoint[] Calculate(double bc, DragTableId id) { var dragTable = new MyDrag(); var ammo = new Ammunition( weight: new Measurement <WeightUnit>(168, WeightUnit.Grain), ballisticCoefficient: new BallisticCoefficient(bc, id), muzzleVelocity: new Measurement <VelocityUnit>(555, VelocityUnit.MetersPerSecond), bulletDiameter: new Measurement <DistanceUnit>(0.224, DistanceUnit.Inch), bulletLength: new Measurement <DistanceUnit>(0.9, DistanceUnit.Inch)); //define ACOG scope var sight = new Sight( sightHeight: new Measurement <DistanceUnit>(3.5, DistanceUnit.Inch), verticalClick: new Measurement <AngularUnit>(1.0 / 3.0, AngularUnit.InchesPer100Yards), horizontalClick: new Measurement <AngularUnit>(1.0 / 3.0, AngularUnit.InchesPer100Yards) ); //M16 rifling var rifling = new Rifling( riflingStep: new Measurement <DistanceUnit>(12, DistanceUnit.Inch), direction: TwistDirection.Right); //standard 100 yard ACOG zeroing var zero = new ZeroingParameters( distance: new Measurement <DistanceUnit>(50, DistanceUnit.Yard), ammunition: null, atmosphere: null ); //define rifle by sight, zeroing and rifling parameters var rifle = new Rifle(sight: sight, zero: zero, rifling: rifling); //define atmosphere var atmosphere = new Atmosphere( altitude: new Measurement <DistanceUnit>(0, DistanceUnit.Foot), pressure: new Measurement <PressureUnit>(29.92, PressureUnit.InchesOfMercury), pressureAtSeaLevel: false, temperature: new Measurement <TemperatureUnit>(59, TemperatureUnit.Fahrenheit), humidity: 0.78); var calc = new TrajectoryCalculator(); //shot parameters var shot = new ShotParameters() { MaximumDistance = new Measurement <DistanceUnit>(2000, DistanceUnit.Meter), Step = new Measurement <DistanceUnit>(100, DistanceUnit.Meter), //calculate sight angle for the specified zero distance SightAngle = calc.SightAngle(ammo, rifle, atmosphere, id == DragTableId.GC ? dragTable : null) }; //calculate trajectory return(calc.Calculate(ammo, rifle, atmosphere, shot, null, id == DragTableId.GC ? dragTable : null)); }
internal static TrajectoryPoint[] M193(bool hasWind, Measurement <DistanceUnit> step) { //define M193 projectile out of 20 inch barrel var ammo = new Ammunition( weight: new Measurement <WeightUnit>(55, WeightUnit.Grain), ballisticCoefficient: new BallisticCoefficient(0.202, DragTableId.G1), muzzleVelocity: new Measurement <VelocityUnit>(3240, VelocityUnit.FeetPerSecond), bulletDiameter: new Measurement <DistanceUnit>(0.224, DistanceUnit.Inch), bulletLength: new Measurement <DistanceUnit>(0.76, DistanceUnit.Inch)); //define ACOG scope var sight = new Sight( sightHeight: new Measurement <DistanceUnit>(3.5, DistanceUnit.Inch), verticalClick: new Measurement <AngularUnit>(1.0 / 3.0, AngularUnit.InchesPer100Yards), horizontalClick: new Measurement <AngularUnit>(1.0 / 3.0, AngularUnit.InchesPer100Yards) ); //M16 rifling var rifling = new Rifling( riflingStep: new Measurement <DistanceUnit>(12, DistanceUnit.Inch), direction: TwistDirection.Right); //standard 100 yard ACOG zeroing var zero = new ZeroingParameters( distance: new Measurement <DistanceUnit>(100, DistanceUnit.Yard), ammunition: null, atmosphere: null ); //define rifle by sight, zeroing and rifling parameters var rifle = new Rifle(sight: sight, zero: zero, rifling: rifling); //define atmosphere var atmosphere = new Atmosphere( altitude: new Measurement <DistanceUnit>(0, DistanceUnit.Foot), pressure: new Measurement <PressureUnit>(29.92, PressureUnit.InchesOfMercury), pressureAtSeaLevel: false, temperature: new Measurement <TemperatureUnit>(59, TemperatureUnit.Fahrenheit), humidity: 0.78); var calc = new TrajectoryCalculator(); //shot parameters var shot = new ShotParameters() { MaximumDistance = new Measurement <DistanceUnit>(1000, DistanceUnit.Yard), Step = step, //calculate sight angle for the specified zero distance SightAngle = calc.SightAngle(ammo, rifle, atmosphere) }; //define winds Wind[] wind = hasWind ? new Wind[2] { new Wind() { Direction = new Measurement <AngularUnit>(45, AngularUnit.Degree), Velocity = new Measurement <VelocityUnit>(10, VelocityUnit.MilesPerHour), MaximumRange = new Measurement <DistanceUnit>(500, DistanceUnit.Yard), }, new Wind() { Direction = new Measurement <AngularUnit>(15, AngularUnit.Degree), Velocity = new Measurement <VelocityUnit>(5, VelocityUnit.MilesPerHour), } } : null; //calculate trajectory return(calc.Calculate(ammo, rifle, atmosphere, shot, wind)); }