/// <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;
        }
Пример #4
0
 /// <summary>
 /// Создает источник-эмулятор данных
 /// </summary>
 /// <param name="_noiser"></param>
 /// <param name="_interval"></param>
 public SourceEmulator(EmulatorSettings _emulatorSettings, Noiser _noiser)
 {
     noiser = _noiser;
     settings = _emulatorSettings;
     IsCorrect = true;
 }
Пример #5
0
        /// <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;
        }
Пример #6
0
        /// <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);
            }
        }