#include #include "LineFit.h" bool LineFit(const std::vector x, const std::vector y, int size, double &k, double &b) { if (size < 2) { k = 0; b = 0; return false; } double x_mean = 0; double y_mean = 0; for (int i = 0; i < size; i++) { x_mean += x[i]; y_mean += y[i]; } x_mean /= size; y_mean /= size; double Dxx = 0, Dxy = 0, Dyy = 0; for (int i = 0; i < size; i++) { Dxx += (x[i] - x_mean) * (x[i] - x_mean); Dxy += (x[i] - x_mean) * (y[i] - y_mean); Dyy += (y[i] - y_mean) * (y[i] - y_mean); } double lambda = ((Dxx + Dyy) - sqrt((Dxx - Dyy) * (Dxx - Dyy) + 4 * Dxy * Dxy)) / 2.0; double den = sqrt(Dxy * Dxy + (lambda - Dxx) * (lambda - Dxx)); k = Dxy / (Dxx - lambda); b = (Dxy * x_mean) / (lambda - Dxx) + y_mean; return true; }