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