10 #include "DECExamplesCommon.h"
14 #include "DGtal/math/linalg/EigenSupport.h"
15 #include "DGtal/dec/DiscreteExteriorCalculus.h"
16 #include "DGtal/dec/DiscreteExteriorCalculusSolver.h"
17 #include "DGtal/dec/DiscreteExteriorCalculusFactory.h"
20 #include "DGtal/io/boards/Board2D.h"
21 #include "DGtal/io/readers/GenericReader.h"
24 using namespace DGtal;
40 Calculus calculus = CalculusFactory::createFromDigitalSet(generateRingSet(domain),
false);
42 calculus.eraseCell(calculus.myKSpace.uSpel(
Z2i::Point(8, 5)));
44 calculus.updateIndexes();
52 board.
saveSVG(
"usage_calculus_without_border.svg");
57 Calculus calculus = CalculusFactory::createFromDigitalSet(generateRingSet(domain),
true);
59 calculus.eraseCell(calculus.myKSpace.uSpel(
Z2i::Point(8, 5)));
60 calculus.eraseCell(calculus.myKSpace.uCell(
Z2i::Point(18, 11)));
62 calculus.updateIndexes();
71 board.
saveSVG(
"usage_calculus_with_border.svg");
82 Calculus::PrimalForm0 primal_zero_form(calculus);
83 for (Calculus::Index index=0; index<primal_zero_form.length(); index++)
85 const Calculus::SCell& cell = primal_zero_form.getSCell(index);
86 const Calculus::Scalar& value = Z2i::l2Metric(calculus.myKSpace.sKCoords(cell), center)/2;
87 primal_zero_form.myContainer(index) = value;
92 const Calculus::PrimalForm0 foo = 2 * primal_zero_form + primal_zero_form;
99 board << primal_zero_form;
100 board.
saveSVG(
"usage_primal_zero_form.svg");
105 const Calculus::PrimalDerivative0 primal_zero_derivative = calculus.derivative<0,
PRIMAL>();
106 const Calculus::PrimalForm1 primal_one_form = primal_zero_derivative * primal_zero_form;
107 const Calculus::PrimalVectorField primal_vector_field = calculus.sharp(primal_one_form);
114 board << primal_one_form;
115 board << primal_vector_field;
116 board.
saveSVG(
"usage_primal_one_form.svg");
121 const Calculus::PrimalForm1 flat_sharp_primal_one_form = calculus.flat(primal_vector_field);
122 const Calculus::PrimalVectorField sharp_flat_primal_vector_field = calculus.sharp(flat_sharp_primal_one_form);
129 board << flat_sharp_primal_one_form;
130 board << sharp_flat_primal_vector_field;
131 board.
saveSVG(
"usage_primal_one_form_sharp_flat.svg");
136 const Calculus::PrimalHodge1 primal_one_hodge = calculus.hodge<1,
PRIMAL>();
137 const Calculus::DualForm1 dual_one_form = primal_one_hodge * primal_zero_derivative * primal_zero_form;
138 const Calculus::DualVectorField dual_vector_field = calculus.sharp(dual_one_form);
145 board << dual_one_form;
146 board << dual_vector_field;
147 board << primal_vector_field;
148 board.
saveSVG(
"usage_primal_one_form_hodge.svg");
157 Calculus::DualForm0 dual_zero_form(calculus);
158 for (Calculus::Index index=0; index<dual_zero_form.length(); index++)
160 const Calculus::SCell& cell = dual_zero_form.getSCell(index);
161 const Calculus::Scalar& value = Z2i::l2Metric(calculus.myKSpace.sKCoords(cell), center)/2;
162 dual_zero_form.myContainer(index) = value;
169 board << dual_zero_form;
170 board.
saveSVG(
"usage_dual_zero_form.svg");
174 const Calculus::DualDerivative0 dual_zero_derivative = calculus.derivative<0,
DUAL>();
175 const Calculus::DualForm1 dual_one_form = dual_zero_derivative * dual_zero_form;
176 const Calculus::DualVectorField dual_vector_field = calculus.sharp(dual_one_form);
182 board << dual_one_form;
183 board << dual_vector_field;
184 board.
saveSVG(
"usage_dual_one_form.svg");
188 const Calculus::DualForm1 flat_sharp_dual_one_form = calculus.flat(dual_vector_field);
189 const Calculus::DualVectorField sharp_flat_dual_vector_field = -calculus.sharp(flat_sharp_dual_one_form);
195 board << flat_sharp_dual_one_form;
196 board << -sharp_flat_dual_vector_field;
197 board.
saveSVG(
"usage_dual_one_form_sharp_flat.svg");
201 const Calculus::DualHodge1 dual_one_hodge = calculus.hodge<1,
DUAL>();
202 const Calculus::PrimalForm1 primal_one_form = dual_one_hodge * dual_zero_derivative * dual_zero_form;
203 const Calculus::PrimalVectorField primal_vector_field = calculus.sharp(primal_one_form);
209 board << primal_one_form;
210 board << primal_vector_field;
211 board << dual_vector_field;
212 board.
saveSVG(
"usage_dual_one_form_hodge.svg");
void beginBlock(const std::string &keyword="")
Aim: DiscreteExteriorCalculus represents a calculus in the dec package. This is the main structure in...
Aim: This class provides static members to create DEC structures from various other DGtal structures...
DGtal is the top-level namespace which contains all DGtal functions and types.
void saveSVG(const char *filename, PageSize size=Board::BoundingBox, double margin=10.0) const
Aim: This class specializes a 'Board' class so as to display DGtal objects more naturally (with <<)...