Пример #1
0
        /// <summary>
        /// Gets the value at a specified time
        /// Currently, does not interpolate
        /// </summary>
        /// <param name="Time"></param>
        /// <param name="interpolate"></param>
        /// <returns></returns>
        public double GetValue(DateTime Time, InterpolationMethods interpolate)
        {
            double value = DeleteValue;
            int    index = GetIndexOfValue(Time);

            switch (interpolate)
            {
            case InterpolationMethods.Linear:
                break;

            case InterpolationMethods.CubicSpline:
                break;

            case InterpolationMethods.DeleteValue:
                if (index < Count & index >= 0)
                {
                    if (Items[index].Time == Time) //Time has to be correct
                    {
                        value = Items[index].Value;
                    }
                }
                break;

            case InterpolationMethods.Nearest:
                break;

            default:
                break;
            }
            return(value);
        }
Пример #2
0
        public void GapFill(InterpolationMethods Method, TimeSpan Timestep)
        {
            switch (Method)
            {
            case InterpolationMethods.Linear:
                break;

            case InterpolationMethods.CubicSpline:
                break;

            case InterpolationMethods.Nearest:
                break;

            case InterpolationMethods.DeleteValue:
                for (int i = Items.Count - 1; i > 0; i--)
                {
                    while (Items[i - 1].EndTime != Items[i].StartTime)
                    {
                        double newvalue = DeleteValue;
                        Items.Insert(i, new TimeSpanValue(Items[i].StartTime.Subtract(Timestep), Items[i].StartTime, newvalue));
                    }
                }
                break;

            default:
                break;
            }
        }
        private List <double> _RadList;    //For cressman analysis
        #endregion

        #region Constructor
        /// <summary>
        /// Constructor
        /// </summary>
        public InterpolationSetting()
        {
            _GridDataPara.XNum = 50;
            _GridDataPara.YNum = 50;
            _GridInterMethod   = InterpolationMethods.IDW_Radius;
            _MinPointNum       = 1;
            _Radius            = 1;
            _RadList           = new List <double>();
            _RadList.AddRange(new double[] { 10, 7, 4, 2, 1 });
        }
Пример #4
0
        // CONSTRUCTORS
        public MainForm()
        {
            InitializeComponent();

            a   = -1.0;
            b   = 1.0;
            n   = 20;
            eps = 1e-15;
            f   = (x) => x *Pow(3, x);

            interpolation = new InterpolationMethods(a, b, n, f);
            leastSquares  = new LeastSquaresMethod(a, b, n, f);
            mistake       = new CalcMistake();

            DrawGraphics();
        }
        /// <summary>
        /// Set grid interpolation parameters
        /// </summary>
        /// <param name="minX">mininum x</param>
        /// <param name="maxX">maxinum x</param>
        /// <param name="minY">mininum y</param>
        /// <param name="maxY">maxinum y</param>
        /// <param name="xNum">x number</param>
        /// <param name="yNum">y nunmber</param>
        /// <param name="aInterMethod">interpolation method</param>
        /// <param name="radList">radius</param>
        public InterpolationSetting(double minX, double maxX, double minY, double maxY, int xNum, int yNum,
                                    string aInterMethod, List <double> radList)
        {
            GridDataSetting aGDP = new GridDataSetting();

            aGDP.DataExtent.minX = minX;
            aGDP.DataExtent.maxX = maxX;
            aGDP.DataExtent.minY = minY;
            aGDP.DataExtent.maxY = maxY;
            aGDP.XNum            = xNum;
            aGDP.YNum            = yNum;
            _GridDataPara        = aGDP;

            _GridInterMethod = (InterpolationMethods)Enum.Parse(typeof(InterpolationMethods), aInterMethod, true);
            _RadList         = radList;
            _MinPointNum     = 1;
        }
        /// <summary>
        /// Set grid interpolation parameters
        /// </summary>
        /// <param name="minX">mininum x</param>
        /// <param name="maxX">maxinum x</param>
        /// <param name="minY">mininum y</param>
        /// <param name="maxY">maxinum y</param>
        /// <param name="xNum">x number</param>
        /// <param name="yNum">y nunmber</param>
        /// <param name="aInterMethod">interpolation method</param>
        /// <param name="radius">radius</param>
        /// <param name="minNum">mininum number</param>
        public InterpolationSetting(double minX, double maxX, double minY, double maxY, int xNum, int yNum,
                                    string aInterMethod, float radius, int minNum)
        {
            GridDataSetting aGDP = new GridDataSetting();

            aGDP.DataExtent.minX = minX;
            aGDP.DataExtent.maxX = maxX;
            aGDP.DataExtent.minY = minY;
            aGDP.DataExtent.maxY = maxY;
            aGDP.XNum            = xNum;
            aGDP.YNum            = yNum;
            _GridDataPara        = aGDP;

            _GridInterMethod = (InterpolationMethods)Enum.Parse(typeof(InterpolationMethods), aInterMethod, true);
            _Radius          = radius;
            _MinPointNum     = minNum;

            _RadList = new List <double>();
            _RadList.AddRange(new double[] { 10, 7, 4, 2, 1 });
        }
Пример #7
0
        public void GapFill(InterpolationMethods Method)
        {
            if (this.TimeStepSize == TimeStepUnit.None)
            {
                throw new Exception("Cannot GapFill when the timestep unit is not set");
            }

            List <int>    Xvalues = new List <int>();
            List <double> Yvalues = new List <double>();

            Xvalues.Add(0);
            Yvalues.Add(Items.First().Value);
            int counter = 0;

            for (int i = 1; i < Items.Count; i++)
            {
                DateTime next = Items[i - 1].Time;
                while ((next = TSTools.GetNextTime(next, this.TimeStepSize)) <= Items[i].Time)
                {
                    counter++;
                }
                Yvalues.Add(Items[i].Value);
                Xvalues.Add(counter);
            }

            if (Method == InterpolationMethods.DeleteValue)
            {
                for (int i = 1; i < Yvalues.Count; i++)
                {
                    for (int j = Xvalues[i - 1] + 1; j < Xvalues[i]; j++)
                    {
                        Items.Insert(j, new TimeStampValue(TSTools.GetNextTime(Items[j - 1].Time, this.TimeStepSize), DeleteValue));
                    }
                }
            }
            else
            {
                throw new Exception("Not implemented yet");
            }
        }