Exemple #1
0
        public static void FilterData(ZedGraph.PointPairList data, ref ZedGraph.PointPairList filter, double speed_max, double alfa_max, double alfa_null, int periodInMin)
        {
            if (data != null)
            {
                if (filter == null || filter.Count < 2)
                {
                    filter = new ZedGraph.PointPairList();
                    filter.Add(data[0]);
                    filter.Add(data[1]);
                }

                ZedGraph.PointPairList filterPoints = new ZedGraph.PointPairList();

                for (int i = filter.Count; i < data.Count; i++)
                {
                    filterPoints.Clear();
                    ZedGraph.PointPair notFilteredMeasure = data[i];
                    for (int j = filter.Count-1; j > 0 ; j--)
                    {
                        if (DateTime.FromOADate(notFilteredMeasure.X).Subtract(new TimeSpan(0, periodInMin, 0)) < DateTime.FromOADate(filter[j].X))
                        {
                            filterPoints.Add(filter[j]);
                        }
                        else
                            break;
                    }
                    double midX = filterPoints.Average(value => value.X);
                    double midY = filterPoints.Average(value => value.Y);
                    double alfa = 0.0;
                    double nominalSpeed = speed_max / 2.0;
                    //raschet skorosti
                    TimeSpan interval = DateTime.FromOADate(notFilteredMeasure.X) - DateTime.FromOADate(midX);
                    double speed = Math.Abs(notFilteredMeasure.Y - midY) / (0.5 * interval.TotalSeconds);
                    //alfa ot v
                    if (speed < nominalSpeed)
                    {
                        alfa = (alfa_max - alfa_null) * speed / nominalSpeed + alfa_null;
                    }
                    else if (speed >= nominalSpeed && speed < speed_max)
                    {
                        alfa = alfa_max;
                    }
                    else if (speed >= speed_max && speed < 2 * speed_max)
                    {
                        alfa = 2 - speed / speed_max;
                    }
                    else if (speed > 2 * speed_max)
                    {
                        alfa = 0;
                    }

                    //vichislenie skorrekt urovnia
                    double skor_uroven = notFilteredMeasure.Y * alfa + (1 - alfa) * midY;
                    //skor_uroven = Math.Round(skor_uroven, 2);
                    //vichislenie skorrekt urovnia

                    filter.Add(new ZedGraph.PointPair(notFilteredMeasure.X, skor_uroven));
                }
                if (filter.Count > 3)
                {
                    filter[0].Y = filter[2].Y;
                    filter[1].Y = filter[2].Y;
                }
            }
        }