Exemple #1
0
        string ResolveTextFromPreviousFrame(int frameId, double angle)
        {
            var frame     = Timeline.Data[frameId];
            var lastFrame = Timeline.LatestFrame(f => f.Heading.Value, frameId - 1);

            if (lastFrame != null && (frame.Seconds - lastFrame.Seconds) < 1)
            {
                var lastFrameExtended = (ExtendedData)lastFrame.Heading.ForIndicatorUse;

                var dN = Math.Abs(Math2.DiffAngles(angle, lastFrameExtended.LastN));
                var dE = Math.Abs(Math2.DiffAngles(angle, lastFrameExtended.LastE));
                var dS = Math.Abs(Math2.DiffAngles(angle, lastFrameExtended.LastS));
                var dW = Math.Abs(Math2.DiffAngles(angle, lastFrameExtended.LastW));

                var T  = 15; // Degrees motion
                var tx = 0;

                if (dN < T)
                {
                    tx++;
                }
                if (dE < T)
                {
                    tx++;
                }
                if (dS < T)
                {
                    tx++;
                }
                if (dW < T)
                {
                    tx++;
                }

                if (tx == 1)
                {
                    if (dN < T)
                    {
                        return("N");
                    }
                    if (dE < T)
                    {
                        return("E");
                    }
                    if (dS < T)
                    {
                        return("S");
                    }
                    if (dW < T)
                    {
                        return("W");
                    }
                }
            }
            return(null);
        }
Exemple #2
0
        private double CheckResultValidity(double ret, int frameId)
        {
            var prev = Timeline.LatestFrame(d => d.Heading.Value, frameId);

            if (prev != null && !double.IsNaN(Timeline.Data[frameId].Heading.Value))
            {
                var dT = Timeline.Data[frameId].Heading.SecondsWhenComputed - prev.Heading.SecondsWhenComputed;
                if (dT < 1)
                {
                    var dX = Math2.DiffAngles(Timeline.Data[frameId].Heading.Value, prev.Heading.Value);
                    if (Math.Abs(dX) > 10)
                    {
                        // can't move more than 20 deg in one second
                        ret = double.NaN;
                    }
                }
            }
            return(ret);
        }