コード例 #1
0
        /// <summary>
        /// Drawing plot of a given regression
        /// </summary>
        /// <param name="container"></param>
        private void DrawPlot(RegressionContainer container)
        {
            AbstractRegression regression = container.Regression;
            Brush  brush       = colorValuePairs[container.BrushKeyValue];
            int    predictDays = container.PredictDays;
            double min         = regression.yVals.Min();
            double max         = regression.yVals.Max();

            TopYLabel.Content    = $"{max:f2}";
            BottomYLabel.Content = $"{min:f2}";
            double height = max - min;

            MiddleYLabel.Content = $"{(min + max) / 2.0:f2}";
            double predictCoefficient = 1 + (double)predictDays / regression.xVals.Length;
            double width             = regression.xVals.Length;
            double heightCoefficient = PlotCanvas.ActualHeight / (height * predictCoefficient);
            double widthCoefficient  = PlotCanvas.ActualWidth / (width * predictCoefficient);
            Line   line = new Line
            {
                Y2 = Math.Min(PlotCanvas.ActualHeight,
                              PlotCanvas.ActualHeight - heightCoefficient * (regression.PredictY(0.1) - min)),
                X2 = 0.1 * widthCoefficient,
                HorizontalAlignment = HorizontalAlignment.Left,
                VerticalAlignment   = VerticalAlignment.Center,
                StrokeThickness     = 1.25,
                Stroke = brush
            };


            for (double i = 0.1; i < regression.xVals.Length * predictCoefficient; i += 0.5)
            {
                double lastY = line.Y2;
                double lastX = line.X2;
                line = new Line
                {
                    Y1 = lastY,
                    X1 = lastX,
                    Y2 = Math.Min(PlotCanvas.ActualHeight,
                                  PlotCanvas.ActualHeight - heightCoefficient * (regression.PredictY(i) - min)),
                    X2 = i * widthCoefficient,
                    HorizontalAlignment = HorizontalAlignment.Left,
                    VerticalAlignment   = VerticalAlignment.Center,
                    StrokeThickness     = 1.25,
                    Stroke = brush
                };

                PlotCanvas.Children.Add(line);
            }
        }
コード例 #2
0
        /// <summary>
        /// Drawing source values
        /// </summary>
        /// <param name="container"></param>
        private void DrawPoints(RegressionContainer container)
        {
            AbstractRegression regression = container.Regression;
            int    predictDays            = container.PredictDays;
            double min = regression.yVals.Min();
            double max = regression.yVals.Max();

            TopYLabel.Content    = $"{max:f2}";
            BottomYLabel.Content = $"{min:f2}";
            double height = max - min;

            MiddleYLabel.Content = $"{(min + max) / 2.0:f2}";
            double predictCoefficient = 1 + (double)predictDays / regression.xVals.Length;
            double width             = regression.xVals.Length;
            double heightCoefficient = PlotCanvas.ActualHeight / (height * predictCoefficient);
            double widthCoefficient  = PlotCanvas.ActualWidth / (width * predictCoefficient);

            for (int i = 0; i < regression.xVals.Length; i++)
            {
                Rectangle point = new Rectangle
                {
                    HorizontalAlignment = HorizontalAlignment.Left,
                    VerticalAlignment   = VerticalAlignment.Center,
                    Stroke = Brushes.Red,
                    Width  = 2,
                    Height = 2,
                    Margin = new Thickness(regression.xVals[i] * widthCoefficient,
                                           PlotCanvas.ActualHeight - heightCoefficient * (regression.yVals[i] - min),
                                           regression.xVals[i] * widthCoefficient,
                                           PlotCanvas.ActualHeight - heightCoefficient * (regression.yVals[i] - min))
                };

                PlotCanvas.Children.Add(point);
            }
            companyChanged = false;
        }
コード例 #3
0
        /// <summary>
        /// Opening a *.rgrs file
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OpenButton_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog fileDialog = new OpenFileDialog
            {
                Filter = "Regression file (*.rgrs)|*.rgrs"
            };

            if (fileDialog.ShowDialog() == true)
            {
                try
                {
                    using (FileStream fs = new FileStream(fileDialog.FileName, FileMode.Open))
                    {
                        BinaryFormatter bf = new BinaryFormatter();
                        regressions = (List <RegressionContainer>)bf.Deserialize(fs);
                    }
                }
                catch (SerializationException)
                {
                    MessageBox.Show("Сериалиазция не удалась");
                    ClearButton_Click(this, new RoutedEventArgs());
                    return;
                }
                PlotCanvas.Children.Clear();
                if (regressions.Count == 0)
                {
                    MessageBox.Show("Выходной файл пуст");
                    return;
                }
                foreach (RegressionContainer item in regressions)
                {
                    DrawPlot(item);
                }
                RegressionContainer rc = regressions[0];
                DrawPoints(rc);
                int baseDays = rc.Regression.yVals.Length;
                TopXLabel.Content           = rc.Dates[0];
                BottomXLabel.Content        = rc.Dates[baseDays - 1];
                MiddleXLabel.Content        = rc.Dates[baseDays / 2];
                BaseTextBox.Text            = rc.Regression.xVals.Length.ToString();
                PredictTextBox.Text         = rc.PredictDays.ToString();
                CompanyListBox.SelectedItem = CompanyListBox.Items[CompanyListBox.Items.IndexOf(rc.CompanyName)];
                UncheckAll();
                for (int i = 0; i < regressions.Count; i++)
                {
                    if (regressions[i].Regression is ExponentialRegression)
                    {
                        ExponentialCheck.IsChecked = true;
                        continue;
                    }
                    if (regressions[i].Regression is LogarifmicRegression)
                    {
                        LogarifmicCheck.IsChecked = true;
                        continue;
                    }
                    if (regressions[i].Regression is HyperbolicRegression)
                    {
                        HyperbolicCheck.IsChecked = true;
                        continue;
                    }
                    if (regressions[i].Regression is SquareRegression)
                    {
                        SquareCheck.IsChecked = true;
                        continue;
                    }
                    if (regressions[i].Regression is CubicRegression)
                    {
                        CubicCheck.IsChecked = true;
                        continue;
                    }
                }
            }
        }