示例#1
0
        /// <summary>
        /// Найти точки пересечения двух временных рядов. сравнивает первый ряд со вторым
        /// </summary>
        /// <param name="timeSeries1"></param>
        /// <param name="timeSeries2"></param>
        /// <returns></returns>
        static public List <Point> CompareTimeSeries(TimeSeriesModel timeSeries1, TimeSeriesModel timeSeries2)
        {
            List <Segment> ts1    = new List <Segment>();
            List <Segment> ts2    = new List <Segment>();
            List <Point>   result = new List <Point>();

            //Добавить в список первую точку
            if (timeSeries1.Points[0].Y > timeSeries2.Points[0].Y && timeSeries1.Points[0].X <= timeSeries2.Points[0].X)
            {
                result.Add(timeSeries1.Points[0]);
            }

            ts1 = CreateSegments(timeSeries1.Points);
            ts2 = CreateSegments(timeSeries2.Points);
            //Поиск пересечений отрезков
            for (int i = 0; i < ts1.Count; i++)
            {
                for (int j = 0; j < ts2.Count; j++)
                {
                    if (IntersectionOfSegments(ts1[i], ts2[j]).intersection)
                    {
                        result.Add(IntersectionOfSegments(ts1[i], ts2[j]).point);
                    }
                }
            }
            //Добавить в список последнюю точку
            if (timeSeries1.Points.Last().Y > timeSeries2.Points.Last().Y)
            {
                result.Add(timeSeries1.Points.Last());
            }

            return(result);
        }
示例#2
0
        /// <summary>
        /// Получить временные ряды
        /// </summary>
        /// <returns></returns>
        static public ObservableCollection <TimeSeriesModel> GetTimeSeries(int countPoint, int minValue, int maxValue)
        {
            DataGenerator dataGenerator = new DataGenerator();
            var           val1          = dataGenerator.GetRandomDoubles(countPoint, minValue, maxValue);
            var           val2          = dataGenerator.GetRandomDoubles(countPoint, minValue, maxValue);

            val1[0] = 0;
            val2[0] = 0;
            val1.Sort();
            val2.Sort();
            if (val2.Last() >= val1.Last())
            {
                val1[val1.Count - 1] = val2.Last();
            }
            else
            {
                val2[val2.Count - 1] = val1.Last();
            }
            var ts1 = new TimeSeriesModel(nameTimeSeries1, val1, dataGenerator.GetRandomDoubles(countPoint, minValue, maxValue));

            var ts2 = new TimeSeriesModel(nameTimeSeries2, val2, dataGenerator.GetRandomDoubles(countPoint, minValue, maxValue));

            return(new ObservableCollection <TimeSeriesModel>()
            {
                ts1, ts2
            });
        }