Exemplo n.º 1
0
        /// <summary>
        /// Уточнить диапазон соседних реперных (узловых) точек к указанному значению аргумента
        /// </summary>
        /// <param name="nameAlg">Наименование функции</param>
        /// <param name="xValue">Значение аргумента</param>
        /// <param name="fRunk">Ранг аргумента</param>
        /// <param name="arNearby">Массив с реперными точками, требующий уточнения (приближение к значению)</param>
        private void interpolation(string nameAlg, float xValue, FRUNK fRunk, ref RangePOINT rangeNearby, ListLIMIT listLimit)
        {
            float x = -1F
            , min = rangeNearby.Left.X(fRunk), max = rangeNearby.Right.X(fRunk);

            foreach (POINT pt in m_dictValues[nameAlg])
            {
                if (listLimit.IsAllowedPoint(pt) == true)
                {
                    x = pt.X(fRunk);

                    if (((xValue - x) < (xValue - min)) &&
                        (!((xValue - x) < 0)) &&
                        (!(x == max)))
                    {
                        min = x;
                        rangeNearby.Left = pt;

                        continue;
                    }
                    else
                    {
                        ;
                    }

                    if (((x - xValue) < (max - xValue)) &&
                        (!((x - xValue) < 0)) &&
                        (!(x == min)))
                    {
                        max = x;
                        rangeNearby.Right = pt;
                    }
                    else
                    {
                        ;
                    }
                }
                else
                {
                    ;
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Возвратить диапазон точек по указанному рангу аргумента (кол-во точек должно быть - не меньше 1-ой)
        /// </summary>
        /// <param name="nameAlg">Наименование функции</param>
        /// <param name="fRunk">Ранг аргумента</param>
        /// <returns>Массив точек</returns>
        private RangePOINT getRange(string nameAlg, FRUNK fRunk, ListLIMIT listLimit)
        {
            RangePOINT rangeRes = new RangePOINT(); //Результат
            float      x = -1F                      //Аргумент функции
            , min = float.MaxValue, max = float.MinValue;

            foreach (POINT pt in m_dictValues[nameAlg])
            {
                if (listLimit.IsAllowedPoint(pt) == true)
                {
                    x = pt.X(fRunk);

                    if (x < min)
                    {
                        min           = x;
                        rangeRes.Left = pt;
                    }
                    else
                    {
                        ;
                    }

                    if (x > max)
                    {
                        max            = x;
                        rangeRes.Right = pt;
                    }
                    else
                    {
                        ;
                    }
                }
                else
                {
                    ;
                }
            }

            return(rangeRes);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Уточнить диапазон соседних реперных (узловых) точек к указанному значению аргумента
        /// </summary>
        /// <param name="nameAlg">Наименование функции</param>
        /// <param name="xValue">Значение аргумента</param>
        /// <param name="fRunk">Ранг аргумента</param>
        /// <param name="arNearby">Массив с реперными точками, требующий уточнения (приближение к значению)</param>
        /// <param name="indxConstNearby">Граница диапазона, остающейся постоянной</param>
        private void extrapolation(string nameAlg, float xValue, FRUNK fRunk, ref RangePOINT rangeNearby, INDEX_NEAR indxConstNearby, ListLIMIT listLimit)
        {
            float min = -1F, max = -1F
            , x = -1F;

            min = float.MaxValue; //rangeNearby.Left.X(fRunk);
            max = float.MinValue; //rangeNearby.Right.X(fRunk);

            foreach (POINT pt in m_dictValues[nameAlg])
            {
                if (listLimit.IsAllowedPoint(pt) == true)
                {
                    x = pt.X(fRunk);

                    if (min == float.MaxValue)
                    {
                        min = x;
                        rangeNearby.Left = pt;

                        continue;
                    }
                    else
                    {
                        ;
                    }

                    if ((max == float.MinValue) &&
                        (!(min == x)))
                    {
                        max = x;
                        rangeNearby.Right = pt;

                        continue;
                    }
                    else
                    {
                        ;
                    }

                    if ((!(min == float.MaxValue)) &&
                        (!(max == float.MinValue)))
                    {
                        if ((Math.Abs(xValue - x) < Math.Abs(xValue - min)) &&
                            (!(x == max)))
                        {
                            if ((xValue - min) < (xValue - max))
                            {
                                max = min;
                                rangeNearby.Right = rangeNearby.Left;
                            }
                            else
                            {
                                ;
                            }

                            min = x;
                            rangeNearby.Left = pt;
                        }
                        else
                        {
                            ;
                        }
                    }
                    else
                    if ((Math.Abs(xValue - x) < Math.Abs(xValue - max)) &&
                        (!(x == min)))
                    {
                        max = x;
                        rangeNearby.Right = pt;
                    }
                    else
                    {
                        ;
                    }
                }
                else
                {
                    ;
                }
            }
        }