public static void Filter(ref ISensorValueInfo[] aPositionValues) { if (aPositionValues == null) { throw new ArgumentNullException("aPositionValues"); } var removed = new List<int>(); var inflectionPoint = 0; for (var i = 1; i < aPositionValues.Length; ++i) { if (aPositionValues[i].GetValue() > aPositionValues[inflectionPoint].GetValue()) { inflectionPoint = i; } else { removed.Add(i); } } var newPositionValues = new List<ISensorValueInfo>(); for (var i = 0; i < aPositionValues.Length; ++i) { if (!removed.Contains(i)) { newPositionValues.Add(aPositionValues[i]); } } aPositionValues = newPositionValues.ToArray(); }
public static void Filter(ref ISensorValueInfo[] aPositionValues) { //return; if (aPositionValues == null) { throw new ArgumentNullException("aPositionValues"); } var removed = new HashSet<int>(); var lastPoint = 0; for (var i = 1; i < aPositionValues.Length; ++i) { if (Math.Abs(aPositionValues[i].GetValue() - aPositionValues[lastPoint].GetValue()) > maxDistance * (i - lastPoint)) { removed.Add(i); } else { lastPoint = i; } } var newPositionValues = new List<ISensorValueInfo>(); for (var i = 0; i < aPositionValues.Length; ++i) { if (!removed.Contains(i)) { newPositionValues.Add(aPositionValues[i]); } } aPositionValues = newPositionValues.ToArray(); }
private static double GetMaxMinSummed(ISensorValueInfo[] aSensorValues) { var maximum = double.MinValue; var minimum = double.MaxValue; for (var i = 0; i < aSensorValues.Length; ++i) { maximum = Math.Max(maximum, aSensorValues[i].GetValue()); minimum = Math.Min(minimum, aSensorValues[i].GetValue()); } return maximum + minimum; }
public static void Convert(ref ISensorValueInfo[] aPositionValues) { if (aPositionValues == null || aPositionValues.Length == 0) { return; } var valuesCount = aPositionValues.Length; if (aPositionValues[0].GetValue() > aPositionValues[valuesCount - 1].GetValue()) { var maxMinSummed = GetMaxMinSummed(aPositionValues); var revercedValues = new SensorValueInfoImpl[valuesCount]; for (var i = 0; i < valuesCount; ++i) { var sourceValue = aPositionValues[i]; var reversedValue = -1.0 * aPositionValues[i].GetValue() + maxMinSummed; revercedValues[i] = new SensorValueInfoImpl(aPositionValues[i].GetSensorId(), reversedValue, aPositionValues[i].GetTime()); } aPositionValues = revercedValues; } }
/// <summary> /// Отфильтровывает только те показания, для которых есть данные датчика положения. /// </summary> /// <param name="sensorValues"></param> private void RemoveFilteredValues(ref ISensorValueInfo[] aSensorValues) { var newSensorValues = new List<ISensorValueInfo>(); for (var i = 0; i < aSensorValues.Length; ++i) { if (IsContainPositionByTime(aSensorValues[i].GetTime())) { newSensorValues.Add(aSensorValues[i]); } } aSensorValues = newSensorValues.ToArray(); }
private double GetPositionByTime(ISensorValueInfo[] aPositions, long aTime) { for (var i = 0; i < aPositions.Length; ++i) { if (aPositions[i].GetTime() == aTime) { return aPositions[i].GetValue(); } } throw new ArgumentException("Не найдена точка для указанног времени."); }
private Point3D[] BuildTopSideValues( ISensorValueInfo[] aPositions, ISensorValueInfo[] aSensorValues, double aShift, double aCenterDistance) { var result = new Point3D[aSensorValues.Length]; for (var i = 0; i < aSensorValues.Length; ++i) { result[i] = new Point3D { X = aShift, Y = aCenterDistance - aSensorValues[i].GetValue(), Z = GetPositionByTime(aPositions, aSensorValues[i].GetTime()) }; } return result; }
private Point3D[] BuildLineValues( ISensorInfo aSensor, ISensorValueInfo[] aPositions, ISensorValueInfo[] aSensorValues, double aShift, double aCenterDistance) { switch (aSensor.GetSensorSide()) { case SensorSide.TOP: return BuildTopSideValues(aPositions, aSensorValues, aShift, aCenterDistance); case SensorSide.BOTTOM: return BuildBottomSideValues(aPositions, aSensorValues, aShift, aCenterDistance); case SensorSide.LEFT: return BuildLeftSideValues(aPositions, aSensorValues, aShift, aCenterDistance); case SensorSide.RIGHT: return BuildRightSideValues(aPositions, aSensorValues, aShift, aCenterDistance); default: throw new ArgumentException("BuildLineValues: не указана сторона датчика."); } }
private double GetPositionByTime(ISensorValueInfo[] aPositions, long aTime) { //var leftIndex = 0; //var rightIndex = aPositions.Length - 1; //while (leftIndex < rightIndex) { // var medium = leftIndex + (rightIndex - leftIndex) / 2; // if (aPositions[medium].GetTime() == aTime) { // return aPositions[medium].GetValue(); // } // if (aPositions[medium].GetTime() < aTime) { // rightIndex = medium - 1; // } else { // leftIndex = medium + 1; // } //} for (var i = 0; i < aPositions.Length; ++i) { if (aPositions[i].GetTime() == aTime) { return aPositions[i].GetValue(); } } throw new ArgumentException("Не найдена точка для указанног времени."); }
public SensorValueEntity(ISensorValueInfo aValue) { SensorId = aValue.GetSensorId(); Value = aValue.GetValue(); Time = aValue.GetTime(); }
public void WriteSensorValueInfos(int aSlabId, ISensorValueInfo[] aValues) { try { if (aValues != null) { using (var session = NHibernateHelper.OpenSession()) { using (var t = session.BeginTransaction()) { foreach (var sensorValue in aValues) { var sensorValueEntity = new SensorValueEntity(sensorValue); sensorValueEntity.SlabId = aSlabId; session.Save(sensorValueEntity); } t.Commit(); } } } } catch (Exception ex) { logger.Error("Ошибка при сохранении SensorValue: " + ex.Message); } }
public void WriteSensorValueInfo(ISensorValueInfo aValue) { try { if (aValue != null) { var sensorValueEntity = new SensorValueEntity(aValue); using (var session = NHibernateHelper.OpenSession()) { using (var t = session.BeginTransaction()) { session.Save(sensorValueEntity); t.Commit(); } } } } catch (Exception ex) { logger.Error("Ошибка при сохранении SensorValue: " + ex.Message); } }