/// <summary> /// Создает линейный источник-эмулятор данных /// </summary> /// <param name="_noiser"></param> /// <param name="_min"></param> /// <param name="_max"></param> /// <param name="_step"></param> public SourceEmulatorLinear(EmulatorSettings _emulatorSettings, Noiser _noiser, double _min, double _max) : base(_emulatorSettings, _noiser) { min = _min; max = _max; thread.Name = "SourceEmulatorLinear"; }
/// <summary> /// Создает синусоидальный источник-эмулятор данных /// </summary> /// <param name="_noiser"></param> /// <param name="_step"></param> /// <param name="_amplitude"></param> /// <param name="_average"></param> public SourceEmulatorSin(EmulatorSettings _emulatorSettings, Noiser _noiser, double _amplitude, double _average, double _period) : base(_emulatorSettings, _noiser) { amplitude = _amplitude; average = _average; period = _period; thread.Name = "SourceEmulatorSin"; }
/// <summary> /// Создает источник-эмулятор данных по функции частичной суммы ряда Фурье /// </summary> /// <param name="_noiser"></param> /// <param name="_halfOffset"></param> /// <param name="_aList"></param> /// <param name="_bList"></param> public SourceEmulatorFourier(EmulatorSettings _emulatorSettings, Noiser _noiser, double _halfOffset, List<double> _aList, List<double> _bList) : base(_emulatorSettings, _noiser) { if (_aList.Count != _bList.Count) throw new ExceptionServer("Coefficient lists length mismatch"); aList = _aList; bList = _bList; halfOffset = _halfOffset; order = aList.Count; thread.Name = "SourceEmulatorFourier"; current = -Math.PI * order; }
/// <summary> /// Создает источник-эмулятор данных /// </summary> /// <param name="_noiser"></param> /// <param name="_interval"></param> public SourceEmulator(EmulatorSettings _emulatorSettings, Noiser _noiser) { noiser = _noiser; settings = _emulatorSettings; IsCorrect = true; }
/// <summary> /// Установка стратегий (настроек) /// </summary> /// <param name="emulatorSettings"></param> /// <returns></returns> private StrategiesParameters setParameters(EmulatorSettings emulatorSettings) { StrategiesParameters parameters = new StrategiesParameters(); parameters.FilterLength = int.Parse(textFilterLength.Text); if (radioFilterMovingAverage.Checked) parameters.Filter = FilterType.MovingAverage; else if (radioFilterSinglePole.Checked) { parameters.Filter = FilterType.SignlePole; parameters.SinglePoleK = double.Parse(textFilterSinglePoleK.Text, CultureInfo.InvariantCulture); } else { parameters.Filter = FilterType.Gaussian; parameters.GaussianA = double.Parse(textFilterGaussianA.Text, CultureInfo.InvariantCulture); } if (radioNoiserIdle.Checked) { parameters.Noiser = NoiserType.Idle; } else if (radioNoiserUniform.Checked) { parameters.Noiser = NoiserType.Uniform; parameters.UniformMin = double.Parse(textNoiseUniformMin.Text, CultureInfo.InvariantCulture); parameters.UniformMax = double.Parse(textNoiseUniformMax.Text, CultureInfo.InvariantCulture); } else if (radioNoiserNormal.Checked) { parameters.Noiser = NoiserType.Normal; parameters.NormalMean = double.Parse(textNoiseNormalMean.Text, CultureInfo.InvariantCulture); parameters.NormalDeviation = double.Parse(textNoiseNormalDeviation.Text, CultureInfo.InvariantCulture); } else parameters.Noiser = NoiserType.Function; if (radioSourceNetwork.Checked) { parameters.Source = SourceType.Network; parameters.IP = IPAddress.Parse(comboIp.Text); if (radioSourcePitch.Checked) parameters.Axis = RotationAxis.Pitch; else if (radioSourceRoll.Checked) parameters.Axis = RotationAxis.Roll; else parameters.Axis = RotationAxis.Yaw; } else if (radioSourceEmulatorSin.Checked) { parameters.Source = SourceType.Sin; parameters.SinAmplitude = double.Parse(textSourceSinAmplitude.Text, CultureInfo.InvariantCulture); parameters.SinAverage = double.Parse(textSourceSinAverage.Text, CultureInfo.InvariantCulture); parameters.SinPeriod = double.Parse(textSourceSinPeriod.Text, CultureInfo.InvariantCulture); } else if (radioSourceEmulatorLinear.Checked) { parameters.Source = SourceType.Linear; parameters.LinearMin = double.Parse(textSourceLinearMin.Text, CultureInfo.InvariantCulture); parameters.LinearMax = double.Parse(textSourceLinearMax.Text, CultureInfo.InvariantCulture); } else { parameters.Source = SourceType.Fourier; parameters.HalfOffset = double.Parse(textSourceFourierHalfOffset.Text, CultureInfo.InvariantCulture); parameters.aList = aList; parameters.bList = bList; } parameters.EmulatorSetting = emulatorSettings; return parameters; }
/// <summary> /// Обработчик события кнопки включения /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonSwitch_Click(object sender, EventArgs e) { EmulatorSettings emulatorSettings = new EmulatorSettings(); emulatorSettings.Fast = checkBoxFast.Checked && !radioSourceNetwork.Checked; emulatorSettings.Interval = int.Parse(textEmulationInterval.Text); emulatorSettings.Range = double.Parse(textEmulationRange.Text, CultureInfo.InvariantCulture); emulatorSettings.Step = double.Parse(textEmulationStep.Text, CultureInfo.InvariantCulture); if (!emulatorSettings.Fast) { if (!access.IsWorking) { buttonSwitch.Text = "Выключить"; timerNetwork.Enabled = true; timerNetwork.Interval = emulatorSettings.Interval; switchControls(false); } else { buttonSwitch.Text = "Включить"; timerNetwork.Enabled = false; switchControls(true); textEmulationRange.Enabled = checkBoxFast.Checked; } } StrategiesParameters parameters = setParameters(emulatorSettings); double distance, manhattan, euclid, correlation, cos; access.Switch(parameters, out distance, out manhattan, out euclid, out correlation, out cos); if (access.IsEmulation) { textDistance.Text = String.Format("{0:0.000}", distance); textManhattan.Text = String.Format("{0:0.000}", manhattan); textEuclid.Text = String.Format("{0:0.000}", euclid); textCorrelation.Text = String.Format("{0:0.000}", correlation); textCos.Text = String.Format("{0:0.000}", cos); } }