Обработка точек для создания сплайна - 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); }
Решение задачи: «Обработка точек для создания сплайна»
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);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д