LinearFunction HTWKMath::LinearRegression(std::vector<Point2f> values)
{
    tFloat32 x_sum = 0;
    tFloat32 y_sum = 0;

    for (unsigned int i = 0; i < values.size(); ++i)
    {
        x_sum += values.at(i).x;
        y_sum += values.at(i).y;
    }

    x_sum = x_sum / values.size();
    y_sum = y_sum / values.size();

    tFloat32 xy_star_sum = 0;
    tFloat32 x_star_sum = 0;

    for (unsigned int i = 0; i < values.size(); ++i)
    {
        xy_star_sum += (values.at(i).x - x_sum) * (values.at(i).y - y_sum);
        x_star_sum += pow((values.at(i).x - x_sum), 2);
    }

    tFloat32 a = xy_star_sum / x_star_sum;
    tFloat32 m = y_sum - (a * x_sum);

    return LinearFunction(a, m);
}
LinearFunction GlueFunction::make_fix_unconstrained(const GnomonBsplineCoords& c) {
	return LinearFunction(
		-1.0 / c.shift_x,
		-1.0 / c.shift_y,
		0.75 + c.x_mid / c.shift_x + c.y_mid / c.shift_y
	);
}