Easy3D 2.5.3
surface_mesh_curvature.h
1/********************************************************************
2 * Copyright (C) 2020-2021 by Liangliang Nan <liangliang.nan@gmail.com>
3 * Copyright (C) 2011-2020 the Polygon Mesh Processing Library developers.
4 *
5 * The code in this file is adapted from the PMP (Polygon Mesh Processing
6 * Library) with modifications.
7 * https://github.com/pmp-library/pmp-library
8 * The original code was distributed under a MIT-style license, see
9 * https://github.com/pmp-library/pmp-library/blob/master/LICENSE.txt
10 ********************************************************************/
11
12#ifndef EASY3D_ALGO_SURFACE_MESH_CURVATURE_H
13#define EASY3D_ALGO_SURFACE_MESH_CURVATURE_H
14
15#include <easy3d/core/surface_mesh.h>
16
17namespace easy3d {
18
30 public:
31 explicit SurfaceMeshCurvature(SurfaceMesh *mesh);
32
34
40 void analyze(unsigned int post_smoothing_steps = 0);
41
47 void analyze_tensor(unsigned int post_smoothing_steps = 0, bool two_ring_neighborhood = false);
48
54
60
66
69 return 0.5f * (min_curvature_[v] + max_curvature_[v]);
70 }
71
74 return min_curvature_[v] * max_curvature_[v];
75 }
76
78 float min_curvature(SurfaceMesh::Vertex v) const { return min_curvature_[v]; }
79
81 float max_curvature(SurfaceMesh::Vertex v) const { return max_curvature_[v]; }
82
85 return std::max(fabs(min_curvature_[v]), fabs(max_curvature_[v]));
86 }
87
88 private:
90 void smooth_curvatures(unsigned int iterations);
91
92 private:
93 SurfaceMesh *mesh_;
96 };
97
98} // namespace easy3d
99
100
101#endif // EASY3D_ALGO_SURFACE_MESH_CURVATURE_H
Compute per-vertex curvatures, i.e., principle (min, max), mean, Gaussian.
Definition: surface_mesh_curvature.h:29
void compute_gauss_curvature()
Definition: surface_mesh_curvature.cpp:333
void compute_max_abs_curvature()
Definition: surface_mesh_curvature.cpp:341
float min_curvature(SurfaceMesh::Vertex v) const
return minimum (signed) curvature
Definition: surface_mesh_curvature.h:78
void compute_mean_curvature()
Definition: surface_mesh_curvature.cpp:323
float max_abs_curvature(SurfaceMesh::Vertex v) const
return maximum absolute curvature
Definition: surface_mesh_curvature.h:84
float max_curvature(SurfaceMesh::Vertex v) const
return maximum (signed) curvature
Definition: surface_mesh_curvature.h:81
float gauss_curvature(SurfaceMesh::Vertex v) const
return Gaussian curvature
Definition: surface_mesh_curvature.h:73
void analyze(unsigned int post_smoothing_steps=0)
Definition: surface_mesh_curvature.cpp:30
float mean_curvature(SurfaceMesh::Vertex v) const
return mean curvature
Definition: surface_mesh_curvature.h:68
void analyze_tensor(unsigned int post_smoothing_steps=0, bool two_ring_neighborhood=false)
Definition: surface_mesh_curvature.cpp:122
A halfedge data structure for polygonal meshes of 2-manifold.
Definition: surface_mesh.h:52
Definition: collider.cpp:182
Definition: surface_mesh.h:104