日积一步1(平面直线的拟合及点到直线的距离)

情况一:

当平面直线的斜率存在时,可以使用最小二乘法进行直线的拟合,拟合的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;
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值