コード例 #1
0
        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();           
        }
コード例 #2
0
        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();
        }
コード例 #3
0
        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;
        }
コード例 #4
0
        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;
            }            
        }
コード例 #5
0
        /// <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();
        }
コード例 #6
0
        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("Не найдена точка для указанног времени.");
        }
コード例 #7
0
        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;
        }
コード例 #8
0
 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: не указана сторона датчика.");
     }
 }
コード例 #9
0
        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("Не найдена точка для указанног времени.");
        }
コード例 #10
0
 public SensorValueEntity(ISensorValueInfo aValue)
 {
     SensorId = aValue.GetSensorId();
     Value = aValue.GetValue();
     Time = aValue.GetTime();
 }                
コード例 #11
0
 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);
     }
 }
コード例 #12
0
 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);
     }
 }