/// <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 { ; } } }
/// <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); }
/// <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 { ; } } }