DGtal
2.2.0
Toggle main menu visibility
Loading...
Searching...
No Matches
NormalCycleComputer.h
1
16
17
#pragma once
18
30
31
#if defined(NormalCycleComputer_RECURSES)
32
#error Recursive header files inclusion detected in NormalCycleComputer.h
33
#else
// defined(NormalCycleComputer_RECURSES)
35
#define NormalCycleComputer_RECURSES
36
37
#if !defined NormalCycleComputer_h
39
#define NormalCycleComputer_h
40
42
// Inclusions
43
#include "DGtal/base/Common.h"
44
#include "DGtal/math/linalg/EigenDecomposition.h"
45
#include "DGtal/geometry/meshes/SurfaceMeshMeasure.h"
46
#include "DGtal/geometry/meshes/NormalCycleFormula.h"
47
#include "DGtal/shapes/SurfaceMesh.h"
48
49
50
namespace
DGtal
51
{
53
// template class NormalCycleComputer
66
template
<
typename
TRealPo
int
,
typename
TRealVector >
67
struct
NormalCycleComputer
68
{
69
typedef
TRealPoint
RealPoint
;
70
typedef
TRealVector
RealVector
;
71
typedef
NormalCycleComputer< RealPoint, RealVector >
Self
;
72
static
const
Dimension
dimension
=
RealPoint::dimension
;
73
BOOST_STATIC_ASSERT
( (
dimension
== 3 ) );
74
typedef
DGtal::SurfaceMesh< RealPoint, RealVector >
SurfaceMesh
;
75
typedef
typename
RealVector::Component
Scalar
;
76
typedef
SimpleMatrix< Scalar, dimension, dimension >
RealTensor
;
77
typedef
NormalCycleFormula< RealPoint, RealVector >
Formula
;
78
typedef
SurfaceMeshMeasure< RealPoint, RealVector, Scalar >
ScalarMeasure
;
79
typedef
SurfaceMeshMeasure< RealPoint, RealVector, RealTensor >
TensorMeasure
;
80
typedef
std::vector< Scalar >
Scalars
;
81
typedef
std::vector< RealPoint >
RealPoints
;
82
typedef
std::vector< RealVector >
RealVectors
;
83
typedef
std::vector< RealTensor >
RealTensors
;
84
typedef
typename
SurfaceMesh::Size
Size
;
85
typedef
typename
SurfaceMesh::Index
Index
;
86
typedef
typename
SurfaceMesh::Vertex
Vertex
;
87
typedef
typename
SurfaceMesh::Face
Face
;
88
89
92
NormalCycleComputer
(
ConstAlias< SurfaceMesh >
aMesh );
93
95
ScalarMeasure
computeMu0
()
const
;
98
ScalarMeasure
computeMu1
()
const
;
101
ScalarMeasure
computeMu2
()
const
;
104
TensorMeasure
computeMuXY
()
const
;
107
TensorMeasure
computeMuXYs
()
const
;
108
109
//-------------------------------------------------------------------------
110
public
:
113
117
static
118
Scalar
meanCurvature
(
Scalar
mu0,
Scalar
mu1 )
119
{
120
return
( mu0 != 0.0 ) ? mu1 / ( 2.0 * mu0 ) : 0.0;
121
}
122
126
static
127
Scalar
GaussianCurvature
(
Scalar
mu0,
Scalar
mu2 )
128
{
129
return
( mu0 != 0.0 ) ? mu2 / mu0 : 0.0;
130
}
131
139
static
140
std::tuple< Scalar, Scalar, RealVector, RealVector >
141
principalCurvatures
(
Scalar
mu0,
RealTensor
muXY,
const
RealVector
& N )
142
{
143
muXY += muXY.
transpose
();
144
muXY *= 0.5;
145
const
double
coef_N = 1000.0 * mu0;
146
// Trick to force orthogonality to normal vector.
147
for
(
int
j = 0; j < 3; j++ )
148
for
(
int
k = 0; k < 3; k++ )
149
muXY( j, k ) += coef_N * N[ j ] * N[ k ];
150
RealTensor
V;
151
RealVector
L
;
152
EigenDecomposition< 3, double>::getEigenDecomposition
( muXY, V,
L
);
153
return
std::make_tuple( ( mu0 != 0.0 ) ? -
L
[ 1 ] / mu0 : 0.0,
154
( mu0 != 0.0 ) ? -
L
[ 0 ] / mu0 : 0.0,
155
V.
column
( 1 ),
156
V.
column
( 0 ) );
157
}
158
159
160
// ------------------------- Protected Data ------------------------------
161
protected
:
162
164
const
SurfaceMesh
&
myMesh
;
165
166
167
168
};
// end of class NormalCycleComputer
169
170
}
// namespace DGtal
171
173
// Includes inline functions.
174
#include "NormalCycleComputer.ih"
175
// //
177
178
#endif
// !defined NormalCycleComputer_h
179
180
#undef NormalCycleComputer_RECURSES
181
#endif
// else defined(NormalCycleComputer_RECURSES)
DGtal::ConstAlias
Aim: This class encapsulates its parameter class so that to indicate to the user that the object/poin...
Definition
ConstAlias.h:187
DGtal::EigenDecomposition::getEigenDecomposition
static void getEigenDecomposition(const Matrix &matrix, Matrix &eigenVectors, Vector &eigenValues)
Compute both eigen vectors and eigen values from an input matrix.
DGtal::PointVector< dim, double >::Component
double Component
Definition
PointVector.h:614
DGtal::PointVector< 3, double >::dimension
static const Dimension dimension
Definition
PointVector.h:626
DGtal::SimpleMatrix< Scalar, dimension, dimension >
DGtal::SimpleMatrix::column
ColumnVector column(const DGtal::Dimension j) const
DGtal::SimpleMatrix::transpose
SimpleMatrix< Component, TN, TM > transpose() const
DGtal
DGtal is the top-level namespace which contains all DGtal functions and types.
Definition
ClosedIntegerHalfPlane.h:49
DGtal::Dimension
DGtal::uint32_t Dimension
Definition
Common.h:119
DGtal::ProbingMode::L
@ L
Definition
PlaneProbingTetrahedronEstimator.h:63
DGtal::NormalCycleComputer< RealPoint, RealVector >
DGtal::NormalCycleComputer::meanCurvature
static Scalar meanCurvature(Scalar mu0, Scalar mu1)
Definition
NormalCycleComputer.h:118
DGtal::NormalCycleComputer::RealPoint
TRealPoint RealPoint
Definition
NormalCycleComputer.h:69
DGtal::NormalCycleComputer< RealPoint, RealVector >::RealPoints
std::vector< RealPoint > RealPoints
Definition
NormalCycleComputer.h:81
DGtal::NormalCycleComputer< RealPoint, RealVector >::dimension
static const Dimension dimension
Definition
NormalCycleComputer.h:72
DGtal::NormalCycleComputer< RealPoint, RealVector >::RealVectors
std::vector< RealVector > RealVectors
Definition
NormalCycleComputer.h:82
DGtal::NormalCycleComputer::NormalCycleComputer
NormalCycleComputer(ConstAlias< SurfaceMesh > aMesh)
DGtal::NormalCycleComputer< RealPoint, RealVector >::Scalar
RealVector::Component Scalar
Definition
NormalCycleComputer.h:75
DGtal::NormalCycleComputer< RealPoint, RealVector >::Scalars
std::vector< Scalar > Scalars
Definition
NormalCycleComputer.h:80
DGtal::NormalCycleComputer< RealPoint, RealVector >::myMesh
const SurfaceMesh & myMesh
Definition
NormalCycleComputer.h:164
DGtal::NormalCycleComputer::computeMu0
ScalarMeasure computeMu0() const
DGtal::NormalCycleComputer< RealPoint, RealVector >::Formula
NormalCycleFormula< RealPoint, RealVector > Formula
Definition
NormalCycleComputer.h:77
DGtal::NormalCycleComputer< RealPoint, RealVector >::Index
SurfaceMesh::Index Index
Definition
NormalCycleComputer.h:85
DGtal::NormalCycleComputer::computeMuXY
TensorMeasure computeMuXY() const
DGtal::NormalCycleComputer::GaussianCurvature
static Scalar GaussianCurvature(Scalar mu0, Scalar mu2)
Definition
NormalCycleComputer.h:127
DGtal::NormalCycleComputer< RealPoint, RealVector >::TensorMeasure
SurfaceMeshMeasure< RealPoint, RealVector, RealTensor > TensorMeasure
Definition
NormalCycleComputer.h:79
DGtal::NormalCycleComputer< RealPoint, RealVector >::RealTensors
std::vector< RealTensor > RealTensors
Definition
NormalCycleComputer.h:83
DGtal::NormalCycleComputer::computeMu2
ScalarMeasure computeMu2() const
DGtal::NormalCycleComputer::computeMu1
ScalarMeasure computeMu1() const
DGtal::NormalCycleComputer< RealPoint, RealVector >::RealTensor
SimpleMatrix< Scalar, dimension, dimension > RealTensor
Definition
NormalCycleComputer.h:76
DGtal::NormalCycleComputer< RealPoint, RealVector >::Face
SurfaceMesh::Face Face
Definition
NormalCycleComputer.h:87
DGtal::NormalCycleComputer::computeMuXYs
TensorMeasure computeMuXYs() const
DGtal::NormalCycleComputer< RealPoint, RealVector >::SurfaceMesh
DGtal::SurfaceMesh< RealPoint, RealVector > SurfaceMesh
Definition
NormalCycleComputer.h:74
DGtal::NormalCycleComputer::BOOST_STATIC_ASSERT
BOOST_STATIC_ASSERT((dimension==3))
DGtal::NormalCycleComputer::principalCurvatures
static std::tuple< Scalar, Scalar, RealVector, RealVector > principalCurvatures(Scalar mu0, RealTensor muXY, const RealVector &N)
Definition
NormalCycleComputer.h:141
DGtal::NormalCycleComputer< RealPoint, RealVector >::Size
SurfaceMesh::Size Size
Definition
NormalCycleComputer.h:84
DGtal::NormalCycleComputer< RealPoint, RealVector >::Vertex
SurfaceMesh::Vertex Vertex
Definition
NormalCycleComputer.h:86
DGtal::NormalCycleComputer::Self
NormalCycleComputer< RealPoint, RealVector > Self
Definition
NormalCycleComputer.h:71
DGtal::NormalCycleComputer::RealVector
TRealVector RealVector
Definition
NormalCycleComputer.h:70
DGtal::NormalCycleComputer< RealPoint, RealVector >::ScalarMeasure
SurfaceMeshMeasure< RealPoint, RealVector, Scalar > ScalarMeasure
Definition
NormalCycleComputer.h:78
DGtal::NormalCycleFormula< RealPoint, RealVector >
DGtal::SurfaceMeshMeasure< RealPoint, RealVector, Scalar >
DGtal::SurfaceMesh< RealPoint, RealVector >
DGtal::SurfaceMesh< RealPoint, RealVector >::Index
std::size_t Index
Definition
SurfaceMesh.h:105
DGtal::SurfaceMesh< RealPoint, RealVector >::Face
Index Face
Definition
SurfaceMesh.h:106
DGtal::SurfaceMesh< RealPoint, RealVector >::Size
std::size_t Size
Definition
SurfaceMesh.h:103
DGtal::SurfaceMesh< RealPoint, RealVector >::Vertex
Index Vertex
Definition
SurfaceMesh.h:108
src
DGtal
geometry
meshes
NormalCycleComputer.h
Generated on
for DGtal by
1.18.0