Exemplo n.º 1
0
        private void polynomialButton_Click(object sender, EventArgs e)
        {
            if (!polynomialTurnedOn)
            {
                (sender as MaterialSkin.Controls.MaterialFlatButton).Text = "STOP POLYNOMIAL";
                polynomialPoints = new List <DataPoint> ();

                myModel       = new PlotModel();
                myModel.Title = "Polynomial";

                FunctionSeries series = new FunctionSeries();
                series.Points.Add(new DataPoint(100, 100));

                myModel.Series.Add(series);

                plot.Model = myModel;

                myModel.MouseDown += plot_MouseDown;
                polynomialPointsListView.Items.Clear();
                polynomialPointsListView.Items.Add("Selected points:");

                polynomialTurnedOn = true;

                (sender as MaterialSkin.Controls.MaterialFlatButton).ForeColor = Color.Red;
            }
            else
            {
                myModel.MouseDown -= plot_MouseDown;
                polynomialTurnedOn = false;

                if (polynomialPoints.Count < 2)
                {
                    MessageBox.Show("Please input more than 1 point!"); (sender as MaterialSkin.Controls.MaterialFlatButton).Text = "START POLYNOMIAL"; return;
                }

                var polynomial = plotter.CreatePolynomialThroughPoints(polynomialPoints.ToArray());
                polynomial = plotter.SimplifyTree(polynomial);

                string ans = "";

                for (int i = 0; i < polynomialPoints.Count; i++)
                {
                    var x = string.Format("For your input X and Y : {0} , {1}\nPolynomial gives: {2}", polynomialPoints[i].X, polynomialPoints[i].Y, plotter.ProcessTree(polynomialPoints[i].X, polynomial));
                    ans += x + "\n";
                }

                plotter.GetGraphImage(graphPictureBox, polynomial);

                MessageBox.Show(ans);


                List <DataPoint> points = new List <DataPoint> ();
                FunctionSeries   series = new FunctionSeries();

                var boundaries     = Boundaries(xValueTextbox.Text);
                var realBoundaries = GetNewRangeBasedUponFixatedLimits(polynomial, polynomialPoints.ToArray(), boundaries[0], boundaries[1]);

                for (double i = realBoundaries.lower; i < realBoundaries.upper; i += 0.3)
                {
                    points.Add(new DataPoint(i, plotter.ProcessTree(i, polynomial)));
                }

                series.Points.AddRange(points);

                myModel = new PlotModel()
                {
                    Title = "Polynomial through points"
                };
                myModel.Series.Add(series);
                plot.Model = myModel;

                (sender as MaterialSkin.Controls.MaterialFlatButton).Text = "START POLYNOMIAL";
            }
        }