DGtalTools 2.0.0
Loading...
Searching...
No Matches
surface_approx.h
1#pragma once
2
3#include <DGtal/helpers/StdDefs.h>
4#include <DGtal/topology/CanonicCellEmbedder.h>
5#include <DGtal/topology/CanonicSCellEmbedder.h>
6#include <DGtal/math/linalg/EigenSupport.h>
7#include <DGtal/dec/DiscreteExteriorCalculus.h>
8#include <tuple>
9
10bool ends_with(const std::string& value, const std::string& ending);
11
12typedef DGtal::DiscreteExteriorCalculus<2, 3, DGtal::EigenLinearAlgebraBackend> Calculus;
13typedef Calculus::LinearAlgebraBackend Backend;
14typedef Calculus::KSpace KSpace;
15typedef DGtal::CanonicCellEmbedder<KSpace> CellEmbedder;
16typedef DGtal::CanonicSCellEmbedder<KSpace> SCellEmbedder;
17typedef KSpace::SCell SCell;
18typedef KSpace::Cell Cell;
19typedef Backend::DenseVector FlatVector;
20typedef Backend::SparseMatrix OperatorMatrix;
21typedef Backend::Triplet Triplet;
22typedef DGtal::Z3i::Point Point;
23typedef DGtal::Z3i::RealPoint RealPoint;
24
25std::tuple<Calculus, FlatVector>
26initCalculusAndNormalsFromSurfelNormalsCSV(const std::string& filename);
27
28bool
29checkOperatorSymmetry(const OperatorMatrix& matrix, const double tol=1e-8);
30
31FlatVector
32vertexNormals(const Calculus& calculus, const FlatVector& face_normals);
33
42
43void
44exportOBJ(const Calculus& calculus, const FlatVector& positions, const std::string& filename);
45
46// (original_positions, regularization_position, original_centers, regularized_centers)
47std::tuple<FlatVector, FlatVector, FlatVector, FlatVector>
48approximateSurface(const Calculus& calculus, const FlatVector& normals, const ApproxParams& params);
49
50// (L_position, L_align)
51std::tuple<double, double>
52approximateSurfaceEnergies(const Calculus& calculus, const FlatVector& normals, const FlatVector& positions);
53
double regularization_position
double regularization_center