Skip to content
Snippets Groups Projects
Commit c59c8aa2 authored by Joseph Boudreau's avatar Joseph Boudreau Committed by Vakhtang Tsulaia
Browse files

Adapted GeoXF to be able to handle scale transformations.

parent 3bc8efed
No related branches found
No related tags found
1 merge request!93Cherry-picked two commits from GeoModel master
......@@ -231,23 +231,25 @@ __attribute__ ((flatten))
//
// Get the translation part and the rotation part:
//
GeoTrf::RotationMatrix3D rotate = m_xf.rotation ();
Eigen::Matrix3d linear = m_xf.linear ();
Eigen::EigenSolver<GeoTrf::RotationMatrix3D> solver(linear);
Eigen::MatrixXcd D = solver.eigenvalues().asDiagonal();
Eigen::MatrixXcd V = solver.eigenvectors();
GeoTrf::Vector3D translate = m_xf.translation ();
Eigen::AngleAxis<double> aa(rotate);
//
// Evaluate the function
//
double nTimes = (*m_function) (x);
//
// Modify:
//
translate *= nTimes;
double& delta = aa.angle();
delta *= nTimes;
Eigen::Matrix3cd DPowN=Eigen::Matrix3cd::Zero();
for (unsigned int i=0;i<3;i++) DPowN(i,i)=pow(D(i,i),nTimes);
//
// Now compose these and return a result:
//
return GeoTrf::Translation3D (translate) * GeoTrf::Transform3D(aa);
GeoTrf::Transform3D tRPowN;
tRPowN.linear()=(V*DPowN*V.inverse()).real();
return GeoTrf::Translation3D (translate) * tRPowN;
}
GeoTrf::Transform3D Pow::operator () (const GeoGenfun::Argument & argument) const
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment