情况一:
当平面直线的斜率存在时,可以使用最小二乘法进行直线的拟合,拟合的C++代码如下。
//直线拟合,斜截式
bool LinearFitting(const std::vector<double> &x, const std::vector<double> &y,
double &slope, double &intercept)
{
if (x.size() != y.size())
return false;
int length = x.size();
double xmean = 0.0;
double ymean = 0.0;
for (int i = 0; i < length; ++i)
{
xmean += x[i]/length;
ymean += y[i]/length;
}
double sumx2 = 0.0;
double sumy2 = 0.0;
double sumxy = 0.0;
for (int i = 0; i < length; i++)
{
sumx2 += (x[i] - xmean) * (x[i] - xmean);
sumy2 += (y[i] - ymean) * (y[i] - ymean);
sumxy += (y[i] - ymean) * (x[i] - xmean);
}
slope = sumxy / sumx2;
intercept = ymean - slope * xmean;
return true;
}
2. 求解点到平面的距离,已知直线的斜率和截距
//点到直线的距离
double Function::DistanceToLine(const double slope, const double intercept, const double px, const double py)
{
double element = abs(slope*px - py + intercept);
double denominator = sqrt(1.0 + slope*slope);
return element / denominator;
}