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