4 #include "DECExamplesCommon.h"
8 #include "DGtal/math/linalg/EigenSupport.h"
9 #include "DGtal/dec/DiscreteExteriorCalculus.h"
10 #include "DGtal/dec/DiscreteExteriorCalculusSolver.h"
11 #include "DGtal/dec/DiscreteExteriorCalculusFactory.h"
14 #include "DGtal/io/boards/Board2D.h"
15 #include "DGtal/io/readers/GenericReader.h"
18 using namespace DGtal;
34 Calculus calculus = CalculusFactory::createFromDigitalSet(generateRingSet(domain),
false);
36 calculus.eraseCell(calculus.myKSpace.uSpel(
Z2i::Point(8, 5)));
38 calculus.updateIndexes();
46 board.
saveSVG(
"usage_calculus_without_border.svg");
51 Calculus calculus = CalculusFactory::createFromDigitalSet(generateRingSet(domain),
true);
53 calculus.eraseCell(calculus.myKSpace.uSpel(
Z2i::Point(8, 5)));
54 calculus.eraseCell(calculus.myKSpace.uCell(
Z2i::Point(18, 11)));
56 calculus.updateIndexes();
65 board.
saveSVG(
"usage_calculus_with_border.svg");
76 Calculus::PrimalForm0 primal_zero_form(calculus);
77 for (Calculus::Index index=0; index<primal_zero_form.length(); index++)
79 const Calculus::SCell& cell = primal_zero_form.getSCell(index);
80 const Calculus::Scalar& value = Z2i::l2Metric(calculus.myKSpace.sKCoords(cell), center)/2;
81 primal_zero_form.myContainer(index) = value;
86 const Calculus::PrimalForm0 foo = 2 * primal_zero_form + primal_zero_form;
93 board << primal_zero_form;
94 board.
saveSVG(
"usage_primal_zero_form.svg");
99 const Calculus::PrimalDerivative0 primal_zero_derivative = calculus.derivative<0,
PRIMAL>();
100 const Calculus::PrimalForm1 primal_one_form = primal_zero_derivative * primal_zero_form;
101 const Calculus::PrimalVectorField primal_vector_field = calculus.sharp(primal_one_form);
108 board << primal_one_form;
109 board << primal_vector_field;
110 board.
saveSVG(
"usage_primal_one_form.svg");
115 const Calculus::PrimalForm1 flat_sharp_primal_one_form = calculus.flat(primal_vector_field);
116 const Calculus::PrimalVectorField sharp_flat_primal_vector_field = calculus.sharp(flat_sharp_primal_one_form);
123 board << flat_sharp_primal_one_form;
124 board << sharp_flat_primal_vector_field;
125 board.
saveSVG(
"usage_primal_one_form_sharp_flat.svg");
130 const Calculus::PrimalHodge1 primal_one_hodge = calculus.hodge<1,
PRIMAL>();
131 const Calculus::DualForm1 dual_one_form = primal_one_hodge * primal_zero_derivative * primal_zero_form;
132 const Calculus::DualVectorField dual_vector_field = calculus.sharp(dual_one_form);
139 board << dual_one_form;
140 board << dual_vector_field;
141 board << primal_vector_field;
142 board.
saveSVG(
"usage_primal_one_form_hodge.svg");
151 Calculus::DualForm0 dual_zero_form(calculus);
152 for (Calculus::Index index=0; index<dual_zero_form.length(); index++)
154 const Calculus::SCell& cell = dual_zero_form.getSCell(index);
155 const Calculus::Scalar& value = Z2i::l2Metric(calculus.myKSpace.sKCoords(cell), center)/2;
156 dual_zero_form.myContainer(index) = value;
163 board << dual_zero_form;
164 board.
saveSVG(
"usage_dual_zero_form.svg");
168 const Calculus::DualDerivative0 dual_zero_derivative = calculus.derivative<0,
DUAL>();
169 const Calculus::DualForm1 dual_one_form = dual_zero_derivative * dual_zero_form;
170 const Calculus::DualVectorField dual_vector_field = calculus.sharp(dual_one_form);
176 board << dual_one_form;
177 board << dual_vector_field;
178 board.
saveSVG(
"usage_dual_one_form.svg");
182 const Calculus::DualForm1 flat_sharp_dual_one_form = calculus.flat(dual_vector_field);
183 const Calculus::DualVectorField sharp_flat_dual_vector_field = -calculus.sharp(flat_sharp_dual_one_form);
189 board << flat_sharp_dual_one_form;
190 board << -sharp_flat_dual_vector_field;
191 board.
saveSVG(
"usage_dual_one_form_sharp_flat.svg");
195 const Calculus::DualHodge1 dual_one_hodge = calculus.hodge<1,
DUAL>();
196 const Calculus::PrimalForm1 primal_one_form = dual_one_hodge * dual_zero_derivative * dual_zero_form;
197 const Calculus::PrimalVectorField primal_vector_field = calculus.sharp(primal_one_form);
203 board << primal_one_form;
204 board << primal_vector_field;
205 board << dual_vector_field;
206 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 <<)...