/// <summary>
        /// Генерирует данные на основле параметром.
        /// </summary>
        /// <param name="aHorizont">Горизонт для датчика.</param>
        /// <param name="aSensorRemove">Удаление датчика от центра рамки.</param>
        /// <param name="aSideValue">Параметр слитка, влиящий на положение датчика.</param>
        /// <param name="aRattleFactor">Множитель дребезжания.</param>
        /// <param name="aShiftFactor">Множитель смещения.</param>
        /// <param name="aSag">Искривление поверхности.</param>
        /// <param name="aSensorShift">Смещение датчика от центра стороны.</param>
        /// <returns></returns>
        private SensorValue[] GenerateValuesByParameters(
            double aHorizont,
            double aSensorRemove,
            double aSideValue,
            double aRattleFactor,
            double aShiftFactor,
            double aSag,
            double aSensorShift)
        {
            //TODO: реализовать искривление.
            var values = new SensorValue[(int)(1 + (ingot.Length + prePosition + postPosition) / step)];
            var overHorizont = aHorizont + 100;
            var currentPosition = .0;
            var currentTime = 0;
            for (var i = 0; i < values.Length; ++i) {
                if (currentPosition < prePosition || currentPosition > prePosition + ingot.Length) {
                    values[i] = new SensorValue(overHorizont, currentTime);
                }
                else {
                    var value = aSensorRemove; // первоначально - удаление датчика от центра рамки.
                    value = value - aSideValue / 2; // учитываем высоту или ширину слитка слитка.
                    value = value + aRattleFactor * rattle[i]; // дребезжание слитка в пределах 2 мм.
                    value = value + aShiftFactor * shift; // учитываем смещение слитка относительно центра рамки.
                    value = value +
                        rnd.Next((int)(-ingot.Seediness * 1000),
                                 (int)(ingot.Seediness * 1000))
                        / 1000.0; // шероховатость.
                    var sensorValue = new SensorValue(value, currentTime);
                    values[i] = sensorValue;
                }

                currentTime++;
                currentPosition += step;
            }

            return values.ToArray();
        }
        private SensorValue[] GeneratePositionValues(Sensor aSensor)
        {
            var values = new SensorValue[(int)(1 + (ingot.Length + prePosition + postPosition) / step)];
            var currentPosition = .0;
            var currentTime = 0;
            for (var i = 0; i < values.Length; ++i) {
                var value = currentPosition; // обкновенное линейное движение.
                values[i] = new SensorValue(value, currentTime);
                currentTime++;
                currentPosition += step;
            }

            return values;
        }