コード例 #1
0
        private void InitMatrices()
        {
            StatistMinMaxCriterionTask task = new StatistMinMaxCriterionTask(matrQ, matrZ);

            tblLayPnlQ1.InitMatrix("Q", matrQ);
            tblLayPnlZ1.InitMatrix("Z", matrZ);
            tblLayPnlL1.InitMatrix("L", task.GetMatrL);
            tblLayPnlZ2.InitMatrix("Z", matrZ);
            tblLayPnlG.InitGMatrix(2, 3, 9);
            tblLayPnlI.InitIMatrix(task.GetMatrI);
            chart1.InitPayoffSet(task);
            chart2.InitPayoffSet(task);
            chart2.InitTaskSolution(task);
        }
コード例 #2
0
        private void InitPage2()
        {
            task = new StatistMinMaxCriterionTask(matrQ, matrZ);
            int m = (int)Q_NUD.Value;//, r = (int)Z_NUD.Value + 1;

            tblLayPnlQlabel.NUD_ValueChanged(m, "α", true);
            tblLayPnlL.NUD_ValueChanged(m, "α");
            for (int i = 0; i < m; i++)
            {
                for (int j = 0; j < tblLayPnlQlabel.ColumnCount - 1; j++)
                {
                    tblLayPnlQlabel.GetControlFromPosition(j + 1, i + 1).Text = matrQ[i, j].ToString();
                }
            }
        }
コード例 #3
0
        public static void InitPayoffSet(this Chart chart, StatistMinMaxCriterionTask task)
        {
            chart.Series.Clear();
            List <Point> convexHull = task.CalcConvexHull();

            chart.Series.Add(new Series()
            {
                //Name = "ConvexHullSeries",
                ChartType   = SeriesChartType.Line,
                BorderWidth = 5,
                Color       = Color.Black
            });
            chart.Series.Add(new Series()
            {
                //Name = "FullSeries",
                ChartType         = SeriesChartType.Point,
                MarkerBorderColor = Color.Black,
                MarkerBorderWidth = 2,
                MarkerSize        = 10,
                MarkerColor       = Color.Lime,
                MarkerStyle       = MarkerStyle.Circle
            });
            chart.Series[0].Points.DataBind(convexHull, "X", "Y", "");
            chart.Series[1].Points.DataBind(task.GetMatrI, "X", "Y", "");

            double ratio = chart.Size.Width == 0 ? 0 : chart.Size.Height / (double)chart.Size.Width;

            chart.ChartAreas[0].AxisX.Minimum = 0;
            chart.ChartAreas[0].AxisY.Minimum = 0;

            double maxX = convexHull.Where(p => p.X == convexHull.Max(max => max.X)).First().X;
            double maxY = convexHull.Where(p => p.Y == convexHull.Max(max => max.Y)).First().Y;

            chart.ChartAreas[0].AxisX.Maximum = Math.Max(maxX, maxY / ratio);
            chart.ChartAreas[0].AxisY.Maximum = Math.Max(maxX * ratio, maxY);

            double interval = Math.Round(maxX / 5, Math.Max(0, -PowOf10(maxX / 5)));

            chart.ChartAreas[0].AxisX.Interval = interval;
            chart.ChartAreas[0].AxisY.Interval = interval;
        }
コード例 #4
0
        public static void InitTaskSolution(this Chart chart, StatistMinMaxCriterionTask task)
        {
            chart.Series.Add(new Series()
            {
                ChartType       = SeriesChartType.Line,
                BorderWidth     = 5,
                BorderDashStyle = ChartDashStyle.Dash,
                Color           = Color.Black
            });
            chart.Series[chart.Series.Count - 1].Points.DataBindXY(
                new double[] { 0, Math.Max(chart.Width, chart.Height) },
                new double[] { 0, Math.Max(chart.Width, chart.Height) });

            chart.Series.Add(new Series()
            {
                ChartType       = SeriesChartType.Line,
                BorderWidth     = 5,
                BorderDashStyle = ChartDashStyle.Dash,
                Color           = Color.Black
            });
            double[] taskSolution = MinMax.GetSolution(task.CalcConvexHull(), out Point taskPoint);
            chart.Series[chart.Series.Count - 1].Points.DataBindXY(
                new double[] { 0, taskPoint.X, taskPoint.X },
                new double[] { taskPoint.Y, taskPoint.Y, 0 });

            chart.Series.Add(new Series()
            {
                ChartType         = SeriesChartType.Point,
                MarkerBorderColor = Color.Black,
                MarkerBorderWidth = 2,
                MarkerSize        = 10,
                MarkerColor       = Color.Yellow,
                MarkerStyle       = MarkerStyle.Circle
            });
            int       ind   = chart.Series[chart.Series.Count - 1].Points.AddXY(taskPoint.X, taskPoint.Y);
            DataPoint point = chart.Series[chart.Series.Count - 1].Points[ind];

            point.Label          = $"({taskPoint.X}, {taskPoint.Y})";
            point.LabelBackColor = Color.White;
        }