You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

47 lines
1.2 KiB

#pragma once
#include <Eigen/Eigen>
namespace ImplictSIM {
template <size_t dim>
class ImplictModel {
public:
typedef double (*disCalculationPtr)(const Eigen::Vector<double, dim>& point);
typedef double (*gradientDirXPtr)(const Eigen::Vector<double, dim>& point);
typedef double (*gradientDirYPtr)(const Eigen::Vector<double, dim>& point);
typedef double (*gradientDirZPtr)(const Eigen::Vector<double, dim>& point);
ImplictModel(disCalculationPtr disFunc_, gradientDirXPtr gradOnX_,
gradientDirYPtr gradOnY_, gradientDirZPtr gradOnZ_)
: disFunc(disFunc_)
, gradOnX(gradOnX_)
, gradOnY(gradOnY_)
, gradOnZ(gradOnZ_)
{
}
double getSignedDis(const Eigen::Vector<double, dim>& point)
{
return disFunc(point);
}
double getGradOnX(const Eigen::Vector<double, dim>& point)
{
return gradOnX(point);
}
double getGradOnY(const Eigen::Vector<double, dim>& point)
{
return gradOnY(point);
}
double getGradOnZ(const Eigen::Vector<double, dim>& point)
{
return gradOnZ(point);
}
private:
disCalculationPtr disFunc;
gradientDirXPtr gradOnX;
gradientDirXPtr gradOnY;
gradientDirXPtr gradOnZ;
};
}; // namespace ImplictSIM