Ejemplo n.º 1
0
        public static RacePassingComparison CompareTo(this IReadOnlyRacePassing passing, IEnumerable <IReadOnlyPassing> reference, TimeSpan precision, TimeSpan gapOffset, decimal delta = 20M)
        {
            if (passing == null || passing.Passed == null || reference == null)
            {
                return(null);
            }

            var nearest = (from r in reference
                           let passed = r.Passed
                                        where passed != null
                                        let d = Math.Abs(passed.Value - passing.Passed.Value)
                                                where d < delta
                                                orderby d
                                                select new
            {
                Passed = passed.Value,
                r.Time
            }).FirstOrDefault();

            if (nearest == null)
            {
                return(null);
            }

            var factor = nearest.Passed / passing.Passed.Value;
            var time   = TimeSpan.FromTicks((long)(passing.Time.Ticks * factor));
            var gap    = time.Truncate(precision) - nearest.Time.Truncate(precision) + gapOffset.Truncate(precision);

            return(new RacePassingComparison(passing.RaceId, passing.InstanceName, passing.PresentationSource, passing.When, passing.Time, gap));
        }
        public override decimal?PassedLength(IDistance distance, int startLane, IEnumerable <IReadOnlyRacePassing> passings, IReadOnlyRacePassing passing,
                                             IVenueDistance source)
        {
            IDistanceLaneLocations laneLocations;

            if (!source.Locations.TryGetValue(0, out laneLocations))
            {
                return(null);
            }

            return(passings.PassedLength(passing.PresentationSource, passing.When, laneLocations, source.Segments));
        }
Ejemplo n.º 3
0
 public static RacePassingComparison CompareTo(this IReadOnlyRacePassing passing, IEnumerable <IReadOnlyPassing> reference, TimeSpan precision, decimal delta = 20M)
 {
     return(CompareTo(passing, reference, precision, TimeSpan.Zero, delta));
 }
Ejemplo n.º 4
0
 public virtual decimal?Speed(IEnumerable <IReadOnlyRacePassing> passings, IReadOnlyRacePassing passing, decimal passed)
 {
     return(passings.Speed(passing.PresentationSource, passed, passing.When, 1));
 }