コード例 #1
0
        public TimeSpan Race(int trackLengthInMeters)
        {
            // Oohh boy, you shouldn't have missed the PHYSICS class in high school.
            var acceleration = this.Acceleration;
            var topSpeed     = this.TopSpeed;

            foreach (var tunningPart in this.TunningParts)
            {
                acceleration += tunningPart.Acceleration;
                topSpeed     += tunningPart.TopSpeed;
            }
            var topSpeedInMetersPS = MetricUnitsConverter.GetMetersPerSecondFrom(topSpeed);

            var decAcceleration  = (double)acceleration;
            var decTopSpeedInMPS = (double)topSpeedInMetersPS;

            var timeToMaxSpeed = decTopSpeedInMPS / decAcceleration;
            var distanceTravelledToTopSpeed = (decAcceleration * timeToMaxSpeed * timeToMaxSpeed) / 2;

            var distanceRemaining = trackLengthInMeters - distanceTravelledToTopSpeed;

            if (distanceRemaining < 0)
            {
                //timeToMaxSpeed += distanceRemaining*acceleration;
                //todo: decrement time
                return(TimeSpan.FromSeconds((double)timeToMaxSpeed));
            }

            timeToMaxSpeed += distanceRemaining / topSpeedInMetersPS;

            return(TimeSpan.FromSeconds((double)timeToMaxSpeed));
        }
コード例 #2
0
        public TimeSpan Race(int trackLengthInMeters)
        {
            var topSpeedInMetersPerSecond            = MetricUnitsConverter.GetMetersPerSecondFrom(this.TopSpeed);
            var accelerationInMetersPerSecondSquared = this.Acceleration;

            var timeRequiredToReachTopSpeedInSeconds           = (topSpeedInMetersPerSecond / accelerationInMetersPerSecondSquared);
            var distanceTravelledWhileReachingTopSpeedInMeters = accelerationInMetersPerSecondSquared * Math.Pow(timeRequiredToReachTopSpeedInSeconds, 2);

            if (trackLengthInMeters == distanceTravelledWhileReachingTopSpeedInMeters)
            {
                return(TimeSpan.FromSeconds(timeRequiredToReachTopSpeedInSeconds));
            }
            else if (trackLengthInMeters > distanceTravelledWhileReachingTopSpeedInMeters)
            {
                var remainingDistanceInMeters = trackLengthInMeters - distanceTravelledWhileReachingTopSpeedInMeters;
                var timeRequiredToTravelRemainingDistanceInSeconds = remainingDistanceInMeters / topSpeedInMetersPerSecond;
                var totalTimeInSeconds = timeRequiredToReachTopSpeedInSeconds + timeRequiredToTravelRemainingDistanceInSeconds;

                return(TimeSpan.FromSeconds(totalTimeInSeconds));
            }
            else
            {
                var totalTime = Math.Sqrt((trackLengthInMeters / accelerationInMetersPerSecondSquared));

                return(TimeSpan.FromSeconds(totalTime));
            }
        }
 static void Main(string[] args)
 {
     #region #metricprefix
     // The pressure value is set to 760 mmHg.
     QuantityValue <Pressure> pressure = (760).MmHg();
     // Since it is a quantity value, it should be transformed to a proper measurement unit
     // to obtain a value for display or for comparison.
     // The pressure is obtained in Pascals and then converted into hectoPascals.
     MetricUnitsConverter prefixConverter = new MetricUnitsConverter();
     double pressure_in_hPa = prefixConverter.Convert(pressure.ToPascals(), MetricPrefix.None, MetricPrefix.Hecto);
     Debug.WriteLine(pressure_in_hPa);
     #endregion #metricprefix
 }
コード例 #4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="trackLengthInMeters"></param>
        /// <returns></returns>
        public TimeSpan Race(int trackLengthInMeters)
        {
            var topSpeedInMetersSecDecimal = TypeCaster.IntToDecimal(MetricUnitsConverter.GetMetersPerSecondFrom(this.TopSpeed));
            var accelerationDecimal        = TypeCaster.IntToDecimal(this.Acceleration);

            var timeToMaxSpeed = topSpeedInMetersSecDecimal / accelerationDecimal;

            var distanceToMaxSpeed = (accelerationDecimal * (timeToMaxSpeed * timeToMaxSpeed)) / 2m;

            var remainingDistance = trackLengthInMeters - distanceToMaxSpeed;

            var timeForRemainingDistance = remainingDistance / topSpeedInMetersSecDecimal;

            var totalTime = timeForRemainingDistance + timeToMaxSpeed;

            return(new TimeSpan());
        }
コード例 #5
0
        public TimeSpan Race(int trackLengthInMeters)
        {
            // Oohh boy, you shouldn't have missed the PHYSICS class in high school.
            TimeSpan output       = new TimeSpan();
            TimeSpan second       = new TimeSpan(0, 0, 1);
            var      acceleration = this.Acceleration;
            var      topSpeed     = this.TopSpeed;
            var      weight       = this.Weight;

            foreach (var tunningPart in TunningParts)
            {
                acceleration += tunningPart.Acceleration;
                topSpeed     += tunningPart.TopSpeed;
                weight       += tunningPart.Weight;
            }
            var      topSpeedInMetersPS = MetricUnitsConverter.GetMetersPerSecondFrom(topSpeed);
            var      currentSpeed       = 0;
            var      distanceTravelled  = 0;
            double   secondsElapsed     = topSpeed / acceleration;
            TimeSpan timeToTopSpeed     = TimeSpan.FromSeconds(secondsElapsed);


            return(output);
        }