RSMesh 1.0.0
一个曲面重构的系统,输入为点云,输出为obj,stl等主流格式的网格文件,使用的方法为径向基函数插值,采取了并行优化、Intel-MKL等优化措施,支持百万级别的点云
载入中...
搜索中...
未找到
ras_preconditioner.h
1//
2// Created by RainSure on 2024/2/14.
3//
4
5#ifndef RSMESH_RAS_PRECONDITIONER_H
6#define RSMESH_RAS_PRECONDITIONER_H
7
8#include <map>
9#include "krylov/linear_operator.h"
10#include "interpolation/rbf_evaluator.h"
11#include "model.h"
12#include "geometry/point3d.h"
13#include "interpolation/rbf_symmetric_evaluator.h"
14#include "fine_grid.h"
15#include "coarse_grid.h"
16
17namespace rsmesh::preconditioner {
19 static constexpr bool kRecomputeAndClear = true;
20 static constexpr bool kReportResidual = false;
21 static constexpr int Order = 6;
22 static constexpr double coarse_ratio = 0.125;
23 static constexpr index_t n_coarsest_points = 1024;
24
26
27 public:
28 ras_preconditioner(const model& model, const geometry::points3d& points);
29
31 const geometry::points3d& grad_points);
32
33 valuesd operator()(const valuesd& v) const override;
34
35 index_t size() const override;
36
37 private:
38 template <class... Args>
39 void add_evaluator(int from_level, int to_level, Args&&... args) {
40 evaluator_.emplace(std::piecewise_construct, std::forward_as_tuple(from_level, to_level),
41 std::forward_as_tuple(std::forward<Args>(args)...));
42 }
43
44 Evaluator& evaluator(int from_level, int to_level) const {
45 return evaluator_.at({from_level, to_level});
46 }
47
48 const model model_without_poly_;
49 const geometry::points3d points_;
50 const geometry::points3d grad_points_;
51 const index_t n_points_;
52 const index_t n_grad_points_;
53 const index_t n_poly_basis_;
54 const std::unique_ptr<interpolation::rbf_symmetric_evaluator<Order>> finest_evaluator_;
55
56 Eigen::MatrixXd lagrange_pt_;
57 int n_levels_;
58 std::vector<std::vector<index_t>> point_idcs_;
59 std::vector<std::vector<index_t>> grad_point_idcs_;
60 mutable std::vector<std::vector<fine_grid>> fine_grids_;
61 std::unique_ptr<coarse_grid> coarse_;
62 mutable std::map<std::pair<int, int>, Evaluator> evaluator_;
63 Eigen::MatrixXd p_;
64 Eigen::MatrixXd ap_;
65 };
66} // rsmesh::preconditioner
67#endif //RSMESH_RAS_PRECONDITIONER_H
描述了一个插值模型
Definition model.h:21
vectors3d points3d
3维点的集合
Definition point3d.h:48
该命名空间下主要定义了关于krylov子空间方法的预处理相关的类和函数