26 n_poly_basis_(
model.poly_basis_size()) {
27 auto n_src_points = src_points.size();
28 auto bbox = geometry::bbox3d::from_points(src_points);
29 a_ = std::make_unique<fmm::fmm_evaluator<Order>>(
model, fmm::fmm_tree_height(n_src_points), bbox);
30 if(n_poly_basis_ > 0) {
31 p_ = std::make_unique<PolynomialEvaluator>(
model.poly_dimension(),
model.poly_degree());
33 set_source_points(src_points);
37 : n_poly_basis_(
model.poly_basis_size()){
38 auto n_src_points = src_points.size();
39 a_ = std::make_unique<fmm::fmm_evaluator<Order>>(
model, fmm::fmm_tree_height(n_src_points), bbox);
40 if(n_poly_basis_ > 0) {
41 p_ = std::make_unique<PolynomialEvaluator>(
model.poly_dimension(),
model.poly_degree());
43 set_source_points(src_points);
47 : n_poly_basis_(
model.poly_basis_size()){
48 a_ = std::make_unique<fmm::fmm_evaluator<Order>>(
model, tree_height, bbox);
49 if(n_poly_basis_ > 0) {
50 p_ = std::make_unique<PolynomialEvaluator>(
model.poly_dimension(),
model.poly_degree());
54 [[nodiscard]] valuesd evaluate()
const {
55 auto y = a_->evaluate();
57 if(n_poly_basis_ > 0) {
65 set_field_points(points);
70 a_->set_field_points(points);
71 if(n_poly_basis_ > 0) {
72 p_->set_field_points(points);
77 n_src_points_ = points.rows();
79 a_->set_source_points(points);
82 template<
class Derived>
83 void set_weights(
const Eigen::MatrixBase<Derived>& weights) {
84 RSMESH_ASSERT(weights.rows() == n_src_points_ + n_poly_basis_);
86 a_->set_weights(weights.head(n_src_points_));
88 if(n_poly_basis_ > 0) {
89 p_->set_weights(weights.tail(n_poly_basis_));
94 const index_t n_poly_basis_;
96 index_t n_src_points_{};
97 std::unique_ptr<fmm::fmm_evaluator<Order>> a_;
98 std::unique_ptr<PolynomialEvaluator> p_;