//возвращает копию выборки public Sampling Clone() { Sampling Result = new Sampling(); for (int i = 0; i < GetVolume(); i++) { Result.AddValue(GetValue(i)); } return Result; }
private Sampling sampling = null; //выборка #endregion Fields #region Constructors //конструктор public KolmogorovController(ZedGraphControl panel, Sampling sample, AnswerContainer answer, int type) { //сохрание входных даных в локальные переменные FuncType = type; DrawPanel = panel; lock (sample) { sampling = sample; } lock (answer) { Answer = answer; } }
private List<double> UniversalBorders = null; //границы интервалов универсального метода #endregion Fields #region Constructors //конструктор public PirsonController(ZedGraphControl panel, Sampling sample, AnswerContainer answer, int type,int intervals, List<double> Borders) { //сохрание входных даных в локальные переменные FuncType = type; DrawPanel = panel; Intervals = intervals; UniversalBorders = Borders; lock(sample) { sampling = sample; } lock(answer) { Answer = answer; } }
public void DrawGraph1(ZedGraphControl control,Sampling sampling,int type) { GraphPane pane = control.GraphPane; // Получим панель для рисования pane.CurveList.Clear(); // Очистим список кривых на тот случай, если до этого сигналы уже были нарисованы pane.Title.Text = "Выборка и её характеристика"; // Название панели и осей pane.XAxis.Title.Text = "N"; pane.YAxis.Title.Text = "X"; PointPairList list2 = new PointPairList(); // Создадим список точек list2.Add(0, sampling.AvеrageValue()); // добавим в список точки list2.Add(sampling.GetVolume(), sampling.AvеrageValue()); // Создадим кривую с названием "Sinc", // которая будет рисоваться голубым цветом (Color.Blue), // Опорные точки выделяться не будут (SymbolType.None) LineItem myCurve2 = pane.AddCurve("среднее значение", list2, Color.Green, SymbolType.None); myCurve2.Line.Width = 2.0F; // Толщина графиков IDensityFunction function1 = null; switch (type) { case 0: function1 = UniversalDistributionFunction.Create(); break; case 1: function1 = InverseDistributionFunction.Create(); break; case 2: function1 = DiscreteDistributionFunction.Create(); break; default: throw new Exception("Неизвестная функция"); } double Expectation = function1.GetExpectation(); double MeanSquareDeviation = function1.GetMeanSquareDeviation(); PointPairList list3 = new PointPairList(); // Создадим список точек list3.Add(0, Expectation); // добавим в список точки list3.Add(sampling.GetVolume(), Expectation); // Создадим кривую с названием "Sinc", // которая будет рисоваться голубым цветом (Color.Blue), // Опорные точки выделяться не будут (SymbolType.None) LineItem myCurve3 = pane.AddCurve("математическое ожидание", list3, Color.Red, SymbolType.None); myCurve3.Line.Width = 2.0F; // Толщина графиков PointPairList list4 = new PointPairList(); // Создадим список точек list4.Add(sampling.GetVolume(), Expectation + MeanSquareDeviation); // добавим в список точки list4.Add(0, Expectation + MeanSquareDeviation); list4.Add(0, Expectation - MeanSquareDeviation);// добавим в список точки list4.Add(sampling.GetVolume(), Expectation - MeanSquareDeviation); // Создадим кривую с названием "Sinc", // которая будет рисоваться голубым цветом (Color.Blue), // Опорные точки выделяться не будут (SymbolType.None) LineItem myCurve4 = pane.AddCurve("СКО", list4, Color.Maroon, SymbolType.None); myCurve4.Line.Width = 2.0F; // Толщина графиков PointPairList list = new PointPairList(); // Создадим список точек list.Add(0, 0); for (int i = 0; i < sampling.GetVolume(); i++) // Заполняем список точек { // добавим в список точку list.Add(i+1, 0); list.Add(i+1, sampling.GetValue(i)); list.Add(i+1, 0); } // Создадим кривую с названием "Sinc", // которая будет рисоваться голубым цветом (Color.Blue), // Опорные точки выделяться не будут (SymbolType.None) LineItem myCurve = pane.AddCurve("Генерируемые значения", list, Color.DarkOrchid, SymbolType.None); myCurve.Line.Width = 2.0F; pane.XAxis.Scale.Min = -1; // Устанавливаем интересующий нас интервал по оси X if(sampling.GetVolume()>=50) { pane.XAxis.Scale.Max = 51; } else { pane.XAxis.Scale.Max = sampling.GetVolume() + 1; } double Min = sampling.Min(); double Max = sampling.Max(); pane.YAxis.Scale.Min = Min - (Max - Min) / 20; // Устанавливаем интересующий нас интервал по оси Y pane.YAxis.Scale.Max = Max + (Max - Min) / 20; pane.XAxis.MajorGrid.IsVisible = true; // Включаем отображение сетки напротив крупных рисок по оси X // Задаем вид пунктирной линии для крупных рисок по оси X: // Длина штрихов равна 10 пикселям, ... pane.XAxis.MajorGrid.DashOn = 10; // затем 5 пикселей - пропуск pane.XAxis.MajorGrid.DashOff = 5; // Включаем отображение сетки напротив крупных рисок по оси Y pane.YAxis.MajorGrid.IsVisible = true; // Аналогично задаем вид пунктирной линии для крупных рисок по оси Y pane.YAxis.MajorGrid.DashOn = 10; pane.YAxis.MajorGrid.DashOff = 5; // Включаем отображение сетки напротив мелких рисок по оси X pane.YAxis.MinorGrid.IsVisible = true; // Задаем вид пунктирной линии для крупных рисок по оси Y: // Длина штрихов равна одному пикселю, ... pane.YAxis.MinorGrid.DashOn = 1; // затем 2 пикселя - пропуск pane.YAxis.MinorGrid.DashOff = 2; // Включаем отображение сетки напротив мелких рисок по оси Y pane.XAxis.MinorGrid.IsVisible = true; // Аналогично задаем вид пунктирной линии для крупных рисок по оси Y pane.XAxis.MinorGrid.DashOn = 1; pane.XAxis.MinorGrid.DashOff = 2; //Цвет сетки pane.XAxis.MajorGrid.Color = Color.LightGray; pane.YAxis.MajorGrid.Color = Color.LightGray; //Оси pane.XAxis.MajorGrid.IsZeroLine = true; pane.YAxis.MajorGrid.IsZeroLine = true; // Вызываем метод AxisChange (), чтобы обновить данные об осях. // В противном случае на рисунке будет показана только часть графика, // которая умещается в интервалы по осям, установленные по умолчанию control.AxisChange(); // Обновляем график control.Invalidate(); }