/// <summary> /// 5. Constructor for a projectile motion Quantities. Computes an initial height based on the length. /// </summary> /// <param name="α">An elevation angle.</param> /// <param name="l">The length.</param> /// <param name="v">An initial velocity.</param> /// <param name="g">A gravitation acceleration of the planet.</param> /// <param name="units">The units of Quantities. By default metre per second, radian, metre and metre per square second.</param> public ProjectileMotionQuantities(Length l, ElevationAngle α, InitialVelocity v, GravAcceleration g, ProjectileMotionResultsUnits units = null) { Units = units ?? new ProjectileMotionResultsUnits(); V = v; Α = α; G = g; H = new InitialHeight( GetResultWithComputeExpection( Α.IsRight() ? double.NaN : ( Math.Pow(l.GetBasicVal(), 2.0) * G.GetBasicVal() / Math.Pow(Math.Cos(Α.GetBasicVal()), 2.0) - 2.0 * l.GetBasicVal() * Math.Pow(V.GetBasicVal(), 2.0) * Math.Tan(Α.GetBasicVal()) ) / (2.0 * Math.Pow(V.GetBasicVal(), 2.0)) ), UnitLength.Basic ).Convert(Units.Length); UsedAssignmentType = AssignmentsTypes.InitialHeightByLength; }
/// <summary> /// 6. Constructor for a projectile motion Quantities. Computes an initial velocity based on the length. /// </summary> /// <param name="α">An elevation angle.</param> /// <param name="l">The length.</param> /// <param name="h">An initial height.</param> /// <param name="g">A gravitation acceleration of the planet.</param> /// <param name="units">The units of Quantities. By default metre per second, radian, metre and metre per square second.</param> public ProjectileMotionQuantities(Length l, ElevationAngle α, InitialHeight h, GravAcceleration g, ProjectileMotionResultsUnits units = null) { Units = units ?? new ProjectileMotionResultsUnits(); Α = α; H = h; G = g; V = new InitialVelocity( GetResultWithComputeExpection( Α.IsRight() ? double.NaN : l.GetBasicVal() == 0 && H.GetBasicVal() == 0 && Α.GetBasicVal() > 0 ? 0 : l.GetBasicVal() * Math.Sqrt(G.GetBasicVal() / Math.Cos(Α.GetBasicVal())) / Math.Sqrt( 2.0 * l.GetBasicVal() * Math.Sin(Α.GetBasicVal()) + 2.0 * H.GetBasicVal() * Math.Cos(Α.GetBasicVal()) ) ), UnitVelocity.Basic ).Convert(Units.Velocity); UsedAssignmentType = AssignmentsTypes.InitialVelocityByLength; }