Обработка точек для создания сплайна - C#

Формулировка задачи:

Строю сплайн по введенным точкам. Все готово, но есть проблема: если эти точки меняют знак (направление справа налево), рисуется не то, что надо. Короче, вот примеры Ввожу точки в такой последовательности: Получается превосходный результат: Ввожу точки в другой последовательности: Получается не очень: Все дело в том, что третья и четвертая точки получается с отрицательным значением по отношению к предыдущим (направление справа налево), а я не могу придумать как их правильно занести в массив для отрисовки. Вот нужная часть кода:
double[] XX, YY; //массивы координат по X и Y, до этого заполняются координатами введенных точек
 
double xMin, xMax; //нахожу минимум и максимум по Х
xMin = double.PositiveInfinity;
xMax = double.NegativeInfinity;
for (int i = 0; i < XX.length; i++) {
    if (xMin > XX[i]) xMin = XX[i];
    if (xMax < XX[i]) xMax = XX[i];                   
}
                
int counter = 0; //определяю количество элементов для новых массивов точек от min до max
for (double i = xMin; i < xMax; i+=step) { //step - это шаг
     counter++;
}
 
int[] goodX = new int[counter]; //новые массивы точек, по ним строится сплайн
double[] goodY = new double[counter];
                
int flag = (int)xMin; //заполняю эти массивы
for (int i = 0; i < counter; i++) {
     goodX[i] = flag;
     goodY[i] = spline.Interpolate(goodX[i]); //метод возвращает значение в точке Х
     flag += step;
}
 
XPoint point; // заношу эти точки в массив points_list, из которого они рисуются
for (int i = 0; i < goodX.length; i++) {
     point = new XPoint(goodX[i], goodY[i]);
     points_list.add(point);
}
Как переделать эту часть кода, чтобы все работало и при изменении знака (направление справа налево) введенных точек?

Код к задаче: «Обработка точек для создания сплайна - C#»

textual
var points = new List<Points>();
for(int i = 0; ...)
 list.Add(new Point(XX,YY)); //Тыкаем точки в цикле
list = list.OrderBy(p => p.X).ToList(); //Отсортировали по X
//и только теперь строим сплайны
BuildSplines(result);
Эта работа вам не подошла?

Вы всегда можете заказать любую учебную работу у наших авторов от 20 руб.

13   голосов, оценка 3.923 из 5


СДЕЛАЙТЕ РЕПОСТ