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;
}
the artist's coding log day2
最新推荐文章于 2024-09-25 08:43:18 发布