vada писал(а):Осталось то всего-ничего - понять где кончается прямая, а начинается кривая. Мелочи
)))))))))))))) Да! Именно это, сейчас и пытаюсь понять, чтобы сделать в виде алгоритма.
Вот из какого-то примера на Си честно стырил. С помощью неё можно, найти мне кажется.
- Код: Выделить всё
- // Вычисление коэффициентов аппроксимирующей прямой
 void getApprox(double **x, double *a, double *b, int n) {
 double sumx = 0;
 double sumy = 0;
 double sumx2 = 0;
 double sumxy = 0;
 for (int i = 0; i<n; i++) {
 sumx += x[0][i];
 sumy += x[1][i];
 sumx2 += x[0][i] * x[0][i];
 sumxy += x[0][i] * x[1][i];
 }
 *a = (n*sumxy - (sumx*sumy)) / (n*sumx2 - sumx*sumx);
 *b = (sumy - *a*sumx) / n;
 return;
 }
 https://prog-cpp.ru/mnk/
 мат. формула: http://mathhelpplanet.com/viewtopic.php?f=37&t=630
 //сплайн по четырем координатам
 private void drawSpline(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4,
 Pen pen)
 {
 //подсчет коэффициентов сплайна
 float a0 = countSplineCoefficient(0, x1, x2, x3, x4);
 float a1 = countSplineCoefficient(1, x1, x2, x3, x4);
 float a2 = countSplineCoefficient(2, x1, x2, x3, x4);
 float a3 = countSplineCoefficient(3, x1, x2, x3, x4);
 
 float b0 = countSplineCoefficient(0, y1, y2, y3, y4);
 float b1 = countSplineCoefficient(1, y1, y2, y3, y4);
 float b2 = countSplineCoefficient(2, y1, y2, y3, y4);
 float b3 = countSplineCoefficient(3, y1, y2, y3, y4);
 
 float xPrev = a0, yPrev = b0;
 
 for (int i = 1; i <= 20; i++) //разбиваем кривую на 20 отрезков
 {
 float t = i / 20.0f;
 float x = ((a3 * t + a2) * t + a1) * t + a0; //x(t)
 float y = ((b3 * t + b2) * t + b1) * t + b0; //y(t)
 
 g.DrawLine(pen, xPrev, yPrev, x, y); //соединяем подсчитанные точки
 xPrev = x;
 yPrev = y;
 }
 }
 
 //пересчет коэффициентов сплайна
 private float countSplineCoefficient(int index, int x1, int x2, int x3, int x4)
 {
 switch (index)
 {
 case 0:
 return (x1 + 4 * x2 + x3) / 6.0f; //свободный член
 case 1:
 return (-x1 + x3) / 2.0f; //коэффициент при t
 case 2:
 return (x1 - 2 * x2 + x3) / 2.0f; //коэффициент при t^2
 case 3:
 return (-x1 + 3 * x2 - 3 * x3 + x4) / 6.0f; //коэффициент при t^3
 }
 
 return 0;
 }
 http://grafika.me/node/458







