DGtal
2.2.0
Toggle main menu visibility
Loading...
Searching...
No Matches
dgtalCalculus-single.cpp
Go to the documentation of this file.
1
26
#include <iostream>
27
#include <DGtal/base/Common.h>
28
#include <DGtal/helpers/StdDefs.h>
29
#include <DGtal/helpers/Shortcuts.h>
30
#include <DGtal/helpers/ShortcutsGeometry.h>
31
#include <DGtal/shapes/SurfaceMesh.h>
32
#include <DGtal/geometry/surfaces/DigitalSurfaceRegularization.h>
33
#include <DGtal/dec/PolygonalCalculus.h>
34
35
#include <polyscope/polyscope.h>
36
#include <polyscope/surface_mesh.h>
37
#include <polyscope/point_cloud.h>
38
#include <polyscope/curve_network.h>
39
40
#include <Eigen/Dense>
41
#include <Eigen/Sparse>
42
43
using namespace
DGtal
;
44
using namespace
Z3i
;
45
46
// Using standard 3D digital space.
47
typedef
Shortcuts<Z3i::KSpace>
SH3;
48
typedef
ShortcutsGeometry<Z3i::KSpace>
SHG3
;
49
// The following typedefs are useful
50
typedef
SurfaceMesh< RealPoint, RealVector >
SurfMesh
;
51
typedef
SurfMesh::Vertices
Vertices
;
52
typedef
SurfMesh::RealPoint
RealPoint
;
53
typedef
SurfMesh::Face
Face
;
54
typedef
SurfMesh::Vertex
Vertex
;
55
56
57
//Polyscope global
58
polyscope::SurfaceMesh *
psMesh
;
59
polyscope::PointCloud *
psVertices
;
60
polyscope::CurveNetwork *
psBoundary
;
61
62
SurfMesh
surfmesh
;
63
PolygonalCalculus<SH3::RealPoint,SH3::RealVector>::Vector
phiEigen
;
64
65
void
initPhi
()
66
{
67
phiEigen
.resize(5);
68
phiEigen
<< 1.0, 2.0, 0.0, 5.0 ,1.5;
69
70
psMesh
->addVertexScalarQuantity(
"Phi"
,
phiEigen
);
71
psVertices
->addScalarQuantity(
"Phi"
,
phiEigen
);
72
}
73
74
void
initQuantities
()
75
{
76
PolygonalCalculus<SH3::RealPoint,SH3::RealVector>
calculus
(
surfmesh
);
77
78
std::vector<PolygonalCalculus<SH3::RealPoint,SH3::RealVector>::Vector> gradients;
79
std::vector<PolygonalCalculus<SH3::RealPoint,SH3::RealVector>::Vector> cogradients;
80
std::vector<PolygonalCalculus<SH3::RealPoint,SH3::RealVector>::Real3dPoint> normals;
81
std::vector<PolygonalCalculus<SH3::RealPoint,SH3::RealVector>::Real3dPoint> vectorArea;
82
std::vector<PolygonalCalculus<SH3::RealPoint,SH3::RealVector>::Real3dPoint> centroids;
83
std::vector<double> faceArea;
84
85
PolygonalCalculus<SH3::RealPoint,SH3::RealVector>::Face
f = 0;
//Id of the face
86
87
PolygonalCalculus<SH3::RealPoint,SH3::RealVector>::Vector
grad =
calculus
.
gradient
(f) *
phiEigen
;
88
gradients.push_back( grad );
89
90
PolygonalCalculus<SH3::RealPoint,SH3::RealVector>::Vector
cograd =
calculus
.
coGradient
(f) *
phiEigen
;
91
cogradients.push_back( cograd );
92
93
normals.push_back(
calculus
.
faceNormalAsDGtalVector
(f));
94
95
PolygonalCalculus<SH3::RealPoint,SH3::RealVector>::Vector
vA =
calculus
.
vectorArea
(f);
96
vectorArea.push_back({vA(0) , vA(1), vA(2)});
97
98
faceArea.push_back(
calculus
.
faceArea
(f));
99
centroids.push_back(
calculus
.
centroidAsDGtalPoint
(f) );
100
101
PolygonalCalculus<SH3::RealPoint,SH3::RealVector>::Vector
dPhi =
calculus
.
D
(f)*
phiEigen
;
102
PolygonalCalculus<SH3::RealPoint,SH3::RealVector>::Vector
av =
calculus
.
A
(f)*
phiEigen
;
103
104
psMesh
->addFaceVectorQuantity(
"Gradients"
, gradients);
105
psMesh
->addFaceVectorQuantity(
"co-Gradients"
, cogradients);
106
psMesh
->addFaceVectorQuantity(
"Normals"
, normals);
107
psMesh
->addFaceScalarQuantity(
"Face area"
, faceArea);
108
psMesh
->addFaceVectorQuantity(
"Vector area"
, vectorArea);
109
110
psBoundary
->addEdgeScalarQuantity(
"d0*phi"
, dPhi);
111
psBoundary
->addEdgeScalarQuantity(
"A*phi"
, av);
112
113
//Face centroid
114
polyscope::registerPointCloud(
"Centroids"
, centroids);
115
116
//Flat Sharp
117
PolygonalCalculus<SH3::RealPoint,SH3::RealVector>::Vector
v(3);
118
v << 50,-50,-100;
119
std::vector<PolygonalCalculus<SH3::RealPoint,SH3::RealVector>::Vector> someV={v};
120
psMesh
->addFaceVectorQuantity(
"A vector"
, someV);
121
122
PolygonalCalculus<SH3::RealPoint,SH3::RealVector>::Vector
flat =
calculus
.
flat
(f)*v;
123
psBoundary
->addEdgeScalarQuantity(
"flat (1-form)"
, flat);
124
125
PolygonalCalculus<SH3::RealPoint,SH3::RealVector>::Vector
sharp =
calculus
.
sharp
(f)*flat;
126
std::vector<PolygonalCalculus<SH3::RealPoint,SH3::RealVector>::Vector> sharpRes={sharp};
127
psMesh
->addFaceVectorQuantity(
"Sharp"
, sharpRes);
128
}
129
130
int
main
()
131
{
132
std::vector<RealPoint> positions={ {0,0,0},{20,0,0}, {20,10,0}, {10,8,5}, {0,15,1} };
133
std::vector<std::vector<size_t>> faces={ {0,1,2,3,4} };
134
135
surfmesh
=
SurfMesh
(positions.begin(),
136
positions.end(),
137
faces.begin(),
138
faces.end());
139
140
// Initialize polyscope
141
polyscope::init();
142
143
psVertices
= polyscope::registerPointCloud(
"Vertices"
, positions);
144
145
std::vector<std::array<size_t,2>> edges={{0,1},{1,2},{2,3},{3,4},{4,0} };
146
psBoundary
= polyscope::registerCurveNetwork(
"Edges"
, positions, edges);
147
148
149
psMesh
= polyscope::registerSurfaceMesh(
"Single face"
, positions, faces);
150
151
initPhi
();
152
initQuantities
();
153
154
polyscope::show();
155
return
EXIT_SUCCESS;
156
157
}
DGtal::PolygonalCalculus
Implements differential operators on polygonal surfaces from degoes2020discrete.
Definition
PolygonalCalculus.h:129
DGtal::PolygonalCalculus::D
DenseMatrix D(const Face f) const
Definition
PolygonalCalculus.h:319
DGtal::PolygonalCalculus::faceNormalAsDGtalVector
Real3dVector faceNormalAsDGtalVector(const Face f) const
Definition
PolygonalCalculus.h:416
DGtal::PolygonalCalculus::centroidAsDGtalPoint
Real3dPoint centroidAsDGtalPoint(const Face f) const
Definition
PolygonalCalculus.h:494
DGtal::PolygonalCalculus::vectorArea
Vector vectorArea(const Face f) const
Definition
PolygonalCalculus.h:374
DGtal::PolygonalCalculus::sharp
DenseMatrix sharp(const Face f) const
Definition
PolygonalCalculus.h:503
DGtal::PolygonalCalculus::faceArea
double faceArea(const Face f) const
Definition
PolygonalCalculus.h:398
DGtal::PolygonalCalculus::coGradient
DenseMatrix coGradient(const Face f) const
Definition
PolygonalCalculus.h:425
DGtal::PolygonalCalculus::gradient
DenseMatrix gradient(const Face f) const
Definition
PolygonalCalculus.h:448
DGtal::PolygonalCalculus::Face
MySurfaceMesh::Face Face
Face type.
Definition
PolygonalCalculus.h:145
DGtal::PolygonalCalculus::Vector
LinAlg::DenseVector Vector
Type of Vector.
Definition
PolygonalCalculus.h:154
DGtal::PolygonalCalculus::A
DenseMatrix A(const Face f) const
Definition
PolygonalCalculus.h:353
DGtal::PolygonalCalculus::flat
DenseMatrix flat(const Face f) const
Definition
PolygonalCalculus.h:462
DGtal::ShortcutsGeometry
Aim: This class is used to simplify shape and surface creation. With it, you can create new shapes an...
Definition
ShortcutsGeometry.h:83
DGtal::Shortcuts
Aim: This class is used to simplify shape and surface creation. With it, you can create new shapes an...
Definition
Shortcuts.h:102
SurfMesh
SurfaceMesh< RealPoint, RealVector > SurfMesh
Definition
dgtalCalculus-bunny.cpp:52
phiEigen
PolygonalCalculus< SH3::RealPoint, SH3::RealVector >::Vector phiEigen
Definition
dgtalCalculus-bunny.cpp:60
initPhi
void initPhi()
Definition
dgtalCalculus-bunny.cpp:83
psMesh
polyscope::SurfaceMesh * psMesh
Definition
dgtalCalculus-bunny.cpp:57
surfmesh
SurfMesh surfmesh
Definition
dgtalCalculus-bunny.cpp:58
initQuantities
void initQuantities()
Definition
dgtalCalculus-bunny.cpp:91
calculus
PolyCalculus * calculus
Definition
dgtalCalculus-geodesic.cpp:70
psBoundary
polyscope::CurveNetwork * psBoundary
Definition
dgtalCalculus-single.cpp:60
psVertices
polyscope::PointCloud * psVertices
Definition
dgtalCalculus-single.cpp:59
Vertices
SMesh::Vertices Vertices
Definition
fullConvexitySphereGeodesics.cpp:118
DGtal::Z3i
Z3i this namespace gathers the standard of types for 3D imagery.
DGtal::Z3i::RealPoint
Space::RealPoint RealPoint
Definition
StdDefs.h:170
DGtal
DGtal is the top-level namespace which contains all DGtal functions and types.
Definition
ClosedIntegerHalfPlane.h:49
DGtal::SurfaceMesh< RealPoint, RealVector >
DGtal::SurfaceMesh< RealPoint, RealVector >::Vertices
std::vector< Vertex > Vertices
Definition
SurfaceMesh.h:112
DGtal::SurfaceMesh< RealPoint, RealVector >::RealPoint
RealPoint RealPoint
Definition
SurfaceMesh.h:93
DGtal::SurfaceMesh< RealPoint, RealVector >::Face
Index Face
Definition
SurfaceMesh.h:106
DGtal::SurfaceMesh< RealPoint, RealVector >::Vertex
Index Vertex
Definition
SurfaceMesh.h:108
main
int main(int, char **)
Definition
testIntegerComputer.cpp:331
SHG3
ShortcutsGeometry< Z3i::KSpace > SHG3
Definition
testIntegralInvariantShortcuts.cpp:47
Face
TriMesh::Face Face
Definition
testTriangulatedSurface.cpp:56
Vertex
TriMesh::Vertex Vertex
Definition
testTriangulatedSurface.cpp:57
examples
io
external-viewers
polyscope
dgtalCalculus-single.cpp
Generated on
for DGtal by
1.18.0