/// <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); }
/// <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 }); }