/// <summary> /// Returns min Y for values between X an X + offset /// </summary> /// <param name="x">X Coordinate</param> /// <param name="offset"></param> /// <returns></returns> private decimal GetMinY(decimal x, decimal offset) { List<Coordinates> extendedCoordinatesList = new List<Coordinates>(); Coordinates[] tempArray = new Coordinates[CoordinateList.Count]; CoordinateList.CopyTo(tempArray); extendedCoordinatesList = tempArray.ToList(); Coordinates previousCoordinate = CoordinateList.First(); for (int i = CoordinateList.Count - 1; i > 0; i--) { if (CoordinateList[i].X < previousCoordinate.X) { extendedCoordinatesList.Insert(0, new Coordinates(CoordinateList[i].X, CoordinateList[i].Y)); previousCoordinate = CoordinateList.First(); } else break; } if (345 > x && x > 344) { tempArray = null; } List<Coordinates> outerCoordinatesList = GetOuterPoints(extendedCoordinatesList, Helpers.Methods.GetMin(x, x + offset), Helpers.Methods.GetMax(x, x + offset)); List<Coordinates> minMaxCoordinatesList = GetMinMaxCoordinates(outerCoordinatesList, x, offset); return minMaxCoordinatesList.OrderBy(a => a.Y).First().Y; }
/// <summary> /// Returns max Y for values between X an X + offset /// </summary> /// <param name="x">X Coordinate</param> /// <param name="offset"></param> /// <returns></returns> private decimal GetMaxY(decimal x, decimal offset) { Coordinates[] tempArray = new Coordinates[CoordinateList.Count]; List<Coordinates> reversedList = new List<Coordinates>(); CoordinateList.CopyTo(tempArray); reversedList = tempArray.ToList(); reversedList.Reverse(); reversedList.Insert(0, new Coordinates(reversedList.Last().X, reversedList.Last().Y)); List<Coordinates> outerCoordinatesList = GetOuterPoints(reversedList, Helpers.Methods.GetMin(x, x + offset), Helpers.Methods.GetMax(x, x + offset)); List<Coordinates> minMaxCoordinatesList = GetMinMaxCoordinates(outerCoordinatesList, x, offset); return minMaxCoordinatesList.OrderBy(a => a.Y).Last().Y; }