the artist's coding log day2

本文介绍了一种基于二次多项式的趋势面插值方法。该方法通过构建矩阵方程求解系数来拟合数据点,实现对三维空间中点云数据的插值,并给出具体的实现代码。适用于地形建模等应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

void GQuadTrend::interpolate()
{
	int i, n;

	n = count();
	if (n < 6) return ;

	Eigen::MatrixXd M(n, 6);
	Eigen::MatrixXd Z(n, 1);
	for (i=0; i<n; i++)
	{
		GPoint3d &pt = mSrcPoints[i];
		double x = pt.x();
		double y = pt.z();//opengl中为xzy坐标系
		M(i, 0) = 1;
		M(i, 1) = x;
		M(i, 2) = y;
		M(i, 3) = x * x;
		M(i, 4) = x * y;
		M(i, 5) = y * y;
		Z(i, 0) = pt.y();
	}

	Eigen::MatrixXd MT = M.transpose();
	Eigen::MatrixXd A = MT * M;
	Eigen::MatrixXd b = MT * Z;
	Eigen::VectorXd coefs = A.lu().solve(b);
	for (i=0; i<6; i++)
	{
		mCoefs[i] = coefs[i];
	}
}

// 计算y值
double GQuadTrend::get(double x, double z)
{
	return mCoefs[0] + mCoefs[1]*x + mCoefs[2]*z + 
		   mCoefs[3]*x*x + mCoefs[4]*x*z +mCoefs[5]*z*z;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值